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  }