github.com/markusbkk/elvish@v0.0.0-20231204143114-91dc52438621/pkg/store/temp_store.go (about) 1 package store 2 3 import ( 4 "fmt" 5 "os" 6 "time" 7 8 bolt "go.etcd.io/bbolt" 9 "github.com/markusbkk/elvish/pkg/testutil" 10 ) 11 12 // MustTempStore returns a Store backed by a temporary file for testing. The 13 // Store and its underlying file will be cleaned up properly after the test is 14 // finished. 15 func MustTempStore(c testutil.Cleanuper) DBStore { 16 f, err := os.CreateTemp("", "elvish.test") 17 if err != nil { 18 panic(fmt.Sprintf("open temp file: %v", err)) 19 } 20 db, err := bolt.Open(f.Name(), 0644, &bolt.Options{ 21 Timeout: time.Second, NoSync: true, NoFreelistSync: true}) 22 if err != nil { 23 panic(fmt.Sprintf("open boltdb: %v", err)) 24 } 25 26 st, err := NewStoreFromDB(db) 27 if err != nil { 28 panic(fmt.Sprintf("create Store instance: %v", err)) 29 } 30 c.Cleanup(func() { 31 st.Close() 32 f.Close() 33 err = os.Remove(f.Name()) 34 if err != nil { 35 fmt.Fprintln(os.Stderr, "failed to remove temp file:", err) 36 } 37 }) 38 return st 39 }