// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package testutil import ( "os" "strings" "testing" ) var noCleanup = strings.ToLower(os.Getenv("TEST_NOCLEANUP")) == "true" var saveSnapshot = strings.ToLower(os.Getenv("TEST_SAVE_SNAPSHOT")) == "true" // TempDir creates a temporary directory within tmpdir with the name 'testname-name'. // If the directory cannot be created t.Fatal is called. // The directory will be removed when the test ends. Set TEST_NOCLEANUP env var // to prevent the directory from being removed. func TempDir(t testing.TB, name string) string { if t == nil { panic("argument t must be non-nil") } name = t.Name() + "-" + name name = strings.Replace(name, "/", "_", -1) d, err := os.MkdirTemp("", name) if err != nil { t.Fatalf("err: %s", err) } t.Cleanup(func() { if noCleanup { t.Logf("skipping cleanup because TEST_NOCLEANUP was enabled") return } os.RemoveAll(d) }) return d } // TempFile creates a temporary file within tmpdir with the name 'testname-name'. // If the file cannot be created t.Fatal is called. If a temporary directory // has been created before consider storing the file inside this directory to // avoid double cleanup. // The file will be removed when the test ends. Set TEST_NOCLEANUP env var // to prevent the file from being removed. func TempFile(t testing.TB, name string) *os.File { if t == nil { panic("argument t must be non-nil") } name = t.Name() + "-" + name name = strings.Replace(name, "/", "_", -1) f, err := os.CreateTemp("", name) if err != nil { t.Fatalf("err: %s", err) } t.Cleanup(func() { if noCleanup { t.Logf("skipping cleanup because TEST_NOCLEANUP was enabled") return } os.Remove(f.Name()) }) return f }