package testutil import ( "io/ioutil" "math/rand" "os" "path/filepath" "strings" "testing" "github.com/pkg/errors" ) var interestingLengths = []int{10, 50, 100, 240, 250, 260, 270} // GetInterestingTempDirectoryName returns interesting directory name used for testing. func GetInterestingTempDirectoryName() (string, error) { td, err := ioutil.TempDir("", "kopia-test") if err != nil { return "", errors.Wrap(err, "unable to create temp directory") } // nolint:gosec targetLen := interestingLengths[rand.Intn(len(interestingLengths))] // make sure the base directory is quite long to trigger very long filenames on Windows. if n := len(td); n < targetLen { td = filepath.Join(td, strings.Repeat("f", targetLen-n)) if err := os.MkdirAll(td, 0700); err != nil { return "", errors.Wrap(err, "unable to create temp directory") } } return td, nil } // TempDirectory returns an interesting temporary directory and cleans it up before test // completes. func TempDirectory(t *testing.T) string { t.Helper() d, err := GetInterestingTempDirectoryName() if err != nil { t.Fatal(err) } t.Cleanup(func() { if !t.Failed() { os.RemoveAll(d) // nolint:errcheck } else { t.Logf("temporary files left in %v", d) } }) return d }