github.com/scottcagno/storage@v1.8.0/pkg/lsmtree/util.go (about) 1 package lsmtree 2 3 import ( 4 "errors" 5 "io" 6 "os" 7 "path/filepath" 8 "testing" 9 ) 10 11 func initBasePath(base string) (string, error) { 12 path, err := filepath.Abs(base) 13 if err != nil { 14 return "", err 15 } 16 // sanitize any path separators 17 path = filepath.ToSlash(path) 18 // create any directories if they are not there 19 err = os.MkdirAll(path, os.ModeDir) 20 if err != nil { 21 return "", err 22 } 23 // return "sanitized" path 24 return path, nil 25 } 26 27 func GetTempFileForTesting(t *testing.T, fn func(file *os.File)) { 28 fd, err := os.CreateTemp(t.TempDir(), "tmp-file-*.txt") 29 if err != nil { 30 t.Fatalf("create and open temp dir and file: %v\n", err) 31 } 32 defer func(fd *os.File) { 33 err := fd.Close() 34 if err != nil { 35 t.Fatalf("defferred close of file: %v\n", err) 36 } 37 }(fd) 38 fn(fd) 39 } 40 41 func FileIsOpen(fd *os.File) bool { 42 if fd == nil { 43 return false 44 } 45 _, err := fd.Seek(0, io.SeekCurrent) 46 if err != nil { 47 if errors.Is(err, os.ErrClosed) { 48 return false 49 } 50 return false 51 } 52 return true 53 }