test: use T.TempDir to create temporary test directory (#12853)

* test: use `T.TempDir` to create temporary test directory

This commit replaces `ioutil.TempDir` with `t.TempDir` in tests. The
directory created by `t.TempDir` is automatically removed when the test
and all its subtests complete.

Prior to this commit, temporary directory created using `ioutil.TempDir`
needs to be removed manually by calling `os.RemoveAll`, which is omitted
in some tests. The error handling boilerplate e.g.
	defer func() {
		if err := os.RemoveAll(dir); err != nil {
			t.Fatal(err)
		}
	}
is also tedious, but `t.TempDir` handles this for us nicely.

Reference: https://pkg.go.dev/testing#T.TempDir
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>

* test: fix TestLogmon_Start_restart on Windows

Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>

* test: fix failing TestConsul_Integration

t.TempDir fails to perform the cleanup properly because the folder is
still in use

testing.go:967: TempDir RemoveAll cleanup: unlinkat /tmp/TestConsul_Integration2837567823/002/191a6f1a-5371-cf7c-da38-220fe85d10e5/web/secrets: device or resource busy

Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
This commit is contained in:
Eng Zer Jun
2022-05-12 23:42:40 +08:00
committed by GitHub
parent 9347613d9a
commit fca4ee8e05
53 changed files with 221 additions and 769 deletions

View File

@@ -7,7 +7,6 @@ import (
"io"
"io/fs"
"io/ioutil"
"log"
"os"
"path/filepath"
"runtime"
@@ -51,11 +50,7 @@ var (
func TestAllocDir_BuildAlloc(t *testing.T) {
ci.Parallel(t)
tmp, err := ioutil.TempDir("", "AllocDir")
if err != nil {
t.Fatalf("Couldn't create temp dir: %v", err)
}
defer os.RemoveAll(tmp)
tmp := t.TempDir()
d := NewAllocDir(testlog.HCLogger(t), tmp, "test")
defer d.Destroy()
@@ -103,11 +98,7 @@ func TestAllocDir_MountSharedAlloc(t *testing.T) {
ci.Parallel(t)
MountCompatible(t)
tmp, err := ioutil.TempDir("", "AllocDir")
if err != nil {
t.Fatalf("Couldn't create temp dir: %v", err)
}
defer os.RemoveAll(tmp)
tmp := t.TempDir()
d := NewAllocDir(testlog.HCLogger(t), tmp, "test")
defer d.Destroy()
@@ -150,11 +141,7 @@ func TestAllocDir_MountSharedAlloc(t *testing.T) {
func TestAllocDir_Snapshot(t *testing.T) {
ci.Parallel(t)
tmp, err := ioutil.TempDir("", "AllocDir")
if err != nil {
t.Fatalf("Couldn't create temp dir: %v", err)
}
defer os.RemoveAll(tmp)
tmp := t.TempDir()
d := NewAllocDir(testlog.HCLogger(t), tmp, "test")
defer d.Destroy()
@@ -232,17 +219,8 @@ func TestAllocDir_Snapshot(t *testing.T) {
func TestAllocDir_Move(t *testing.T) {
ci.Parallel(t)
tmp1, err := ioutil.TempDir("", "AllocDir")
if err != nil {
t.Fatalf("Couldn't create temp dir: %v", err)
}
defer os.RemoveAll(tmp1)
tmp2, err := ioutil.TempDir("", "AllocDir")
if err != nil {
t.Fatalf("Couldn't create temp dir: %v", err)
}
defer os.RemoveAll(tmp2)
tmp1 := t.TempDir()
tmp2 := t.TempDir()
// Create two alloc dirs
d1 := NewAllocDir(testlog.HCLogger(t), tmp1, "test")
@@ -302,11 +280,7 @@ func TestAllocDir_Move(t *testing.T) {
func TestAllocDir_EscapeChecking(t *testing.T) {
ci.Parallel(t)
tmp, err := ioutil.TempDir("", "AllocDir")
if err != nil {
t.Fatalf("Couldn't create temp dir: %v", err)
}
defer os.RemoveAll(tmp)
tmp := t.TempDir()
d := NewAllocDir(testlog.HCLogger(t), tmp, "test")
if err := d.Build(); err != nil {
@@ -373,11 +347,7 @@ func TestAllocDir_ReadAt_SecretDir(t *testing.T) {
func TestAllocDir_SplitPath(t *testing.T) {
ci.Parallel(t)
dir, err := ioutil.TempDir("", "tmpdirtest")
if err != nil {
log.Fatal(err)
}
defer os.RemoveAll(dir)
dir := t.TempDir()
dest := filepath.Join(dir, "/foo/bar/baz")
if err := os.MkdirAll(dest, os.ModePerm); err != nil {
@@ -401,11 +371,7 @@ func TestAllocDir_CreateDir(t *testing.T) {
t.Skip("Must be root to run test")
}
dir, err := ioutil.TempDir("", "tmpdirtest")
if err != nil {
t.Fatalf("err: %v", err)
}
defer os.RemoveAll(dir)
dir := t.TempDir()
// create a subdir and a file
subdir := filepath.Join(dir, "subdir")
@@ -418,10 +384,7 @@ func TestAllocDir_CreateDir(t *testing.T) {
}
// Create the above hierarchy under another destination
dir1, err := ioutil.TempDir("/tmp", "tempdirdest")
if err != nil {
t.Fatalf("err: %v", err)
}
dir1 := t.TempDir()
if err := createDir(dir1, subdir); err != nil {
t.Fatalf("err: %v", err)
@@ -440,11 +403,7 @@ func TestAllocDir_CreateDir(t *testing.T) {
func TestPathFuncs(t *testing.T) {
ci.Parallel(t)
dir, err := ioutil.TempDir("", "nomadtest-pathfuncs")
if err != nil {
t.Fatalf("error creating temp dir: %v", err)
}
defer os.RemoveAll(dir)
dir := t.TempDir()
missingDir := filepath.Join(dir, "does-not-exist")

View File

@@ -4,7 +4,6 @@ import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
"path/filepath"
"strings"
@@ -55,13 +54,7 @@ func TestLinuxRootSecretDir(t *testing.T) {
t.Skip("Must be run as root")
}
tmpdir, err := ioutil.TempDir("", "nomadtest-rootsecretdir")
if err != nil {
t.Fatalf("unable to create tempdir for test: %v", err)
}
defer os.RemoveAll(tmpdir)
secretsDir := filepath.Join(tmpdir, TaskSecrets)
secretsDir := filepath.Join(t.TempDir(), TaskSecrets)
// removing a nonexistent secrets dir should NOT error
if err := removeSecretDir(secretsDir); err != nil {
@@ -117,13 +110,7 @@ func TestLinuxUnprivilegedSecretDir(t *testing.T) {
t.Skip("Must not be run as root")
}
tmpdir, err := ioutil.TempDir("", "nomadtest-secretdir")
if err != nil {
t.Fatalf("unable to create tempdir for test: %s", err)
}
defer os.RemoveAll(tmpdir)
secretsDir := filepath.Join(tmpdir, TaskSecrets)
secretsDir := filepath.Join(t.TempDir(), TaskSecrets)
// removing a nonexistent secrets dir should NOT error
if err := removeSecretDir(secretsDir); err != nil {

View File

@@ -14,11 +14,7 @@ import (
func TestTaskDir_EmbedNonexistent(t *testing.T) {
ci.Parallel(t)
tmp, err := ioutil.TempDir("", "AllocDir")
if err != nil {
t.Fatalf("Couldn't create temp dir: %v", err)
}
defer os.RemoveAll(tmp)
tmp := t.TempDir()
d := NewAllocDir(testlog.HCLogger(t), tmp, "test")
defer d.Destroy()
@@ -38,11 +34,7 @@ func TestTaskDir_EmbedNonexistent(t *testing.T) {
func TestTaskDir_EmbedDirs(t *testing.T) {
ci.Parallel(t)
tmp, err := ioutil.TempDir("", "AllocDir")
if err != nil {
t.Fatalf("Couldn't create temp dir: %v", err)
}
defer os.RemoveAll(tmp)
tmp := t.TempDir()
d := NewAllocDir(testlog.HCLogger(t), tmp, "test")
defer d.Destroy()
@@ -53,11 +45,7 @@ func TestTaskDir_EmbedDirs(t *testing.T) {
// Create a fake host directory, with a file, and a subfolder that contains
// a file.
host, err := ioutil.TempDir("", "AllocDirHost")
if err != nil {
t.Fatalf("Couldn't create temp dir: %v", err)
}
defer os.RemoveAll(host)
host := t.TempDir()
subDirName := "subdir"
subDir := filepath.Join(host, subDirName)
@@ -96,11 +84,7 @@ func TestTaskDir_NonRoot_Image(t *testing.T) {
if os.Geteuid() == 0 {
t.Skip("test should be run as non-root user")
}
tmp, err := ioutil.TempDir("", "AllocDir")
if err != nil {
t.Fatalf("Couldn't create temp dir: %v", err)
}
defer os.RemoveAll(tmp)
tmp := t.TempDir()
d := NewAllocDir(testlog.HCLogger(t), tmp, "test")
defer d.Destroy()
@@ -121,11 +105,7 @@ func TestTaskDir_NonRoot(t *testing.T) {
t.Skip("test should be run as non-root user")
}
tmp, err := ioutil.TempDir("", "AllocDir")
if err != nil {
t.Fatalf("Couldn't create temp dir: %v", err)
}
defer os.RemoveAll(tmp)
tmp := t.TempDir()
d := NewAllocDir(testlog.HCLogger(t), tmp, "test")
defer d.Destroy()
@@ -139,7 +119,7 @@ func TestTaskDir_NonRoot(t *testing.T) {
}
// ${TASK_DIR}/alloc should not exist!
if _, err = os.Stat(td.SharedTaskDir); !os.IsNotExist(err) {
if _, err := os.Stat(td.SharedTaskDir); !os.IsNotExist(err) {
t.Fatalf("Expected a NotExist error for shared alloc dir in task dir: %q", td.SharedTaskDir)
}
}

View File

@@ -4,9 +4,7 @@ import (
"bytes"
"context"
"fmt"
"io/ioutil"
"net"
"os"
"path/filepath"
"sync"
"testing"
@@ -156,11 +154,7 @@ func TestConsulGRPCSocketHook_Prerun_Error(t *testing.T) {
func TestConsulGRPCSocketHook_proxy_Unix(t *testing.T) {
ci.Parallel(t)
dir, err := ioutil.TempDir("", "nomadtest_proxy_Unix")
require.NoError(t, err)
defer func() {
require.NoError(t, os.RemoveAll(dir))
}()
dir := t.TempDir()
// Setup fake listener that would be inside the netns (normally a unix
// socket, but it doesn't matter for this test).

View File

@@ -85,11 +85,7 @@ func TestTaskRunner_ArtifactHook_PartialDone(t *testing.T) {
defer ts.Close()
// Create the target directory.
destdir, err := ioutil.TempDir("", "nomadtest-dest")
require.NoError(t, err)
defer func() {
require.NoError(t, os.RemoveAll(destdir))
}()
destdir := t.TempDir()
req := &interfaces.TaskPrestartRequest{
TaskEnv: taskenv.NewTaskEnv(nil, nil, nil, nil, destdir, ""),
@@ -112,7 +108,7 @@ func TestTaskRunner_ArtifactHook_PartialDone(t *testing.T) {
// On first run file1 (foo) should download but file2 (bar) should
// fail.
err = artifactHook.Prestart(context.Background(), req, &resp)
err := artifactHook.Prestart(context.Background(), req, &resp)
require.NotNil(t, err)
require.True(t, structs.IsRecoverable(err))
@@ -179,11 +175,7 @@ func TestTaskRunner_ArtifactHook_ConcurrentDownloadSuccess(t *testing.T) {
defer ts.Close()
// Create the target directory.
destdir, err := ioutil.TempDir("", "nomadtest-dest")
require.NoError(t, err)
defer func() {
require.NoError(t, os.RemoveAll(destdir))
}()
destdir := t.TempDir()
req := &interfaces.TaskPrestartRequest{
TaskEnv: taskenv.NewTaskEnv(nil, nil, nil, nil, destdir, ""),
@@ -225,7 +217,7 @@ func TestTaskRunner_ArtifactHook_ConcurrentDownloadSuccess(t *testing.T) {
resp := interfaces.TaskPrestartResponse{}
// start the hook
err = artifactHook.Prestart(context.Background(), req, &resp)
err := artifactHook.Prestart(context.Background(), req, &resp)
require.NoError(t, err)
require.True(t, resp.Done)
@@ -273,11 +265,7 @@ func TestTaskRunner_ArtifactHook_ConcurrentDownloadFailure(t *testing.T) {
defer ts.Close()
// Create the target directory.
destdir, err := ioutil.TempDir("", "nomadtest-dest")
require.NoError(t, err)
defer func() {
require.NoError(t, os.RemoveAll(destdir))
}()
destdir := t.TempDir()
req := &interfaces.TaskPrestartRequest{
TaskEnv: taskenv.NewTaskEnv(nil, nil, nil, nil, destdir, ""),
@@ -307,7 +295,7 @@ func TestTaskRunner_ArtifactHook_ConcurrentDownloadFailure(t *testing.T) {
resp := interfaces.TaskPrestartResponse{}
// On first run all files will be downloaded except file0.txt
err = artifactHook.Prestart(context.Background(), req, &resp)
err := artifactHook.Prestart(context.Background(), req, &resp)
require.Error(t, err)
require.True(t, structs.IsRecoverable(err))

View File

@@ -3,7 +3,6 @@ package taskrunner
import (
"context"
"io/ioutil"
"os"
"path/filepath"
"testing"
@@ -42,30 +41,20 @@ func TestConnectNativeHook_Name(t *testing.T) {
}
func setupCertDirs(t *testing.T) (string, string) {
fd, err := ioutil.TempFile("", "connect_native_testcert")
fd, err := ioutil.TempFile(t.TempDir(), "connect_native_testcert")
require.NoError(t, err)
_, err = fd.WriteString("ABCDEF")
require.NoError(t, err)
err = fd.Close()
require.NoError(t, err)
d, err := ioutil.TempDir("", "connect_native_testsecrets")
require.NoError(t, err)
return fd.Name(), d
}
func cleanupCertDirs(t *testing.T, original, secrets string) {
err := os.Remove(original)
require.NoError(t, err)
err = os.RemoveAll(secrets)
require.NoError(t, err)
return fd.Name(), t.TempDir()
}
func TestConnectNativeHook_copyCertificate(t *testing.T) {
ci.Parallel(t)
f, d := setupCertDirs(t)
defer cleanupCertDirs(t, f, d)
t.Run("no source", func(t *testing.T) {
err := new(connectNativeHook).copyCertificate("", d, "out.pem")
@@ -85,7 +74,6 @@ func TestConnectNativeHook_copyCertificates(t *testing.T) {
ci.Parallel(t)
f, d := setupCertDirs(t)
defer cleanupCertDirs(t, f, d)
t.Run("normal", func(t *testing.T) {
err := new(connectNativeHook).copyCertificates(consulTransportConfig{
@@ -450,8 +438,7 @@ func TestTaskRunner_ConnectNativeHook_shareTLS(t *testing.T) {
testutil.RequireConsul(t)
try := func(t *testing.T, shareSSL *bool) {
fakeCert, fakeCertDir := setupCertDirs(t)
defer cleanupCertDirs(t, fakeCert, fakeCertDir)
fakeCert, _ := setupCertDirs(t)
testConsul := getTestConsul(t)
defer testConsul.Stop()
@@ -570,8 +557,7 @@ func TestTaskRunner_ConnectNativeHook_shareTLS_override(t *testing.T) {
ci.Parallel(t)
testutil.RequireConsul(t)
fakeCert, fakeCertDir := setupCertDirs(t)
defer cleanupCertDirs(t, fakeCert, fakeCertDir)
fakeCert, _ := setupCertDirs(t)
testConsul := getTestConsul(t)
defer testConsul.Stop()

View File

@@ -43,11 +43,10 @@ const (
)
func writeTmp(t *testing.T, s string, fm os.FileMode) string {
dir, err := ioutil.TempDir("", "envoy-")
require.NoError(t, err)
dir := t.TempDir()
fPath := filepath.Join(dir, sidsTokenFile)
err = ioutil.WriteFile(fPath, []byte(s), fm)
err := ioutil.WriteFile(fPath, []byte(s), fm)
require.NoError(t, err)
return dir
@@ -73,7 +72,6 @@ func TestEnvoyBootstrapHook_maybeLoadSIToken(t *testing.T) {
t.Run("load token from file", func(t *testing.T) {
token := uuid.Generate()
f := writeTmp(t, token, 0440)
defer cleanupDir(t, f)
h := newEnvoyBootstrapHook(&envoyBootstrapHookConfig{logger: testlog.HCLogger(t)})
cfg, err := h.maybeLoadSIToken("task1", f)
@@ -84,7 +82,6 @@ func TestEnvoyBootstrapHook_maybeLoadSIToken(t *testing.T) {
t.Run("file is unreadable", func(t *testing.T) {
token := uuid.Generate()
f := writeTmp(t, token, 0200)
defer cleanupDir(t, f)
h := newEnvoyBootstrapHook(&envoyBootstrapHookConfig{logger: testlog.HCLogger(t)})
cfg, err := h.maybeLoadSIToken("task1", f)

View File

@@ -67,10 +67,6 @@ func (u upperReplacer) ClientPath(p string, join bool) (string, bool) {
return path, escapes
}
func removeAllT(t *testing.T, path string) {
require.NoError(t, os.RemoveAll(path))
}
func TestGetArtifact_getHeaders(t *testing.T) {
t.Run("nil", func(t *testing.T) {
require.Nil(t, getHeaders(noopTaskEnv(""), nil))
@@ -109,9 +105,7 @@ func TestGetArtifact_Headers(t *testing.T) {
defer ts.Close()
// Create a temp directory to download into.
taskDir, err := ioutil.TempDir("", "nomad-test")
require.NoError(t, err)
defer removeAllT(t, taskDir)
taskDir := t.TempDir()
// Create the artifact.
artifact := &structs.TaskArtifact{
@@ -127,7 +121,7 @@ func TestGetArtifact_Headers(t *testing.T) {
taskEnv := upperReplacer{
taskDir: taskDir,
}
err = GetArtifact(taskEnv, artifact)
err := GetArtifact(taskEnv, artifact)
require.NoError(t, err)
// Verify artifact exists.
@@ -145,11 +139,7 @@ func TestGetArtifact_FileAndChecksum(t *testing.T) {
defer ts.Close()
// Create a temp directory to download into
taskDir, err := ioutil.TempDir("", "nomad-test")
if err != nil {
t.Fatalf("failed to make temp directory: %v", err)
}
defer removeAllT(t, taskDir)
taskDir := t.TempDir()
// Create the artifact
file := "test.sh"
@@ -177,11 +167,7 @@ func TestGetArtifact_File_RelativeDest(t *testing.T) {
defer ts.Close()
// Create a temp directory to download into
taskDir, err := ioutil.TempDir("", "nomad-test")
if err != nil {
t.Fatalf("failed to make temp directory: %v", err)
}
defer removeAllT(t, taskDir)
taskDir := t.TempDir()
// Create the artifact
file := "test.sh"
@@ -211,11 +197,7 @@ func TestGetArtifact_File_EscapeDest(t *testing.T) {
defer ts.Close()
// Create a temp directory to download into
taskDir, err := ioutil.TempDir("", "nomad-test")
if err != nil {
t.Fatalf("failed to make temp directory: %v", err)
}
defer removeAllT(t, taskDir)
taskDir := t.TempDir()
// Create the artifact
file := "test.sh"
@@ -229,7 +211,7 @@ func TestGetArtifact_File_EscapeDest(t *testing.T) {
}
// attempt to download the artifact
err = GetArtifact(noopTaskEnv(taskDir), artifact)
err := GetArtifact(noopTaskEnv(taskDir), artifact)
if err == nil || !strings.Contains(err.Error(), "escapes") {
t.Fatalf("expected GetArtifact to disallow sandbox escape: %v", err)
}
@@ -263,11 +245,7 @@ func TestGetArtifact_InvalidChecksum(t *testing.T) {
defer ts.Close()
// Create a temp directory to download into
taskDir, err := ioutil.TempDir("", "nomad-test")
if err != nil {
t.Fatalf("failed to make temp directory: %v", err)
}
defer removeAllT(t, taskDir)
taskDir := t.TempDir()
// Create the artifact with an incorrect checksum
file := "test.sh"
@@ -324,11 +302,7 @@ func TestGetArtifact_Archive(t *testing.T) {
// Create a temp directory to download into and create some of the same
// files that exist in the artifact to ensure they are overridden
taskDir, err := ioutil.TempDir("", "nomad-test")
if err != nil {
t.Fatalf("failed to make temp directory: %v", err)
}
defer removeAllT(t, taskDir)
taskDir := t.TempDir()
create := map[string]string{
"exist/my.config": "to be replaced",
@@ -365,9 +339,7 @@ func TestGetArtifact_Setuid(t *testing.T) {
// Create a temp directory to download into and create some of the same
// files that exist in the artifact to ensure they are overridden
taskDir, err := ioutil.TempDir("", "nomad-test")
require.NoError(t, err)
defer removeAllT(t, taskDir)
taskDir := t.TempDir()
file := "setuid.tgz"
artifact := &structs.TaskArtifact{

View File

@@ -3,9 +3,7 @@ package taskrunner
import (
"context"
"encoding/json"
"io/ioutil"
"net"
"os"
"testing"
plugin "github.com/hashicorp/go-plugin"
@@ -66,11 +64,7 @@ func TestTaskRunner_LogmonHook_StartStop(t *testing.T) {
alloc := mock.BatchAlloc()
task := alloc.Job.TaskGroups[0].Tasks[0]
dir, err := ioutil.TempDir("", "nomadtest")
require.NoError(t, err)
defer func() {
require.NoError(t, os.RemoveAll(dir))
}()
dir := t.TempDir()
hookConf := newLogMonHookConfig(task.Name, dir)
runner := &TaskRunner{logmonHookConfig: hookConf}

View File

@@ -7,7 +7,6 @@ import (
"context"
"encoding/json"
"fmt"
"io/ioutil"
"os"
"syscall"
"testing"
@@ -31,11 +30,7 @@ func TestTaskRunner_LogmonHook_StartCrashStop(t *testing.T) {
alloc := mock.BatchAlloc()
task := alloc.Job.TaskGroups[0].Tasks[0]
dir, err := ioutil.TempDir("", "nomadtest")
require.NoError(t, err)
defer func() {
require.NoError(t, os.RemoveAll(dir))
}()
dir := t.TempDir()
hookConf := newLogMonHookConfig(task.Name, dir)
runner := &TaskRunner{logmonHookConfig: hookConf}
@@ -84,7 +79,7 @@ func TestTaskRunner_LogmonHook_StartCrashStop(t *testing.T) {
logmonReattachKey: origHookData,
}
resp = interfaces.TaskPrestartResponse{}
err = hook.Prestart(context.Background(), &req, &resp)
err := hook.Prestart(context.Background(), &req, &resp)
require.NoError(t, err)
require.NotEqual(t, origState, resp.State)
@@ -100,11 +95,7 @@ func TestTaskRunner_LogmonHook_ShutdownMidStart(t *testing.T) {
alloc := mock.BatchAlloc()
task := alloc.Job.TaskGroups[0].Tasks[0]
dir, err := ioutil.TempDir("", "nomadtest")
require.NoError(t, err)
defer func() {
require.NoError(t, os.RemoveAll(dir))
}()
dir := t.TempDir()
hookConf := newLogMonHookConfig(task.Name, dir)
runner := &TaskRunner{logmonHookConfig: hookConf}

View File

@@ -29,17 +29,6 @@ import (
var _ interfaces.TaskPrestartHook = (*sidsHook)(nil)
func tmpDir(t *testing.T) string {
dir, err := ioutil.TempDir("", "sids-")
require.NoError(t, err)
return dir
}
func cleanupDir(t *testing.T, dir string) {
err := os.RemoveAll(dir)
require.NoError(t, err)
}
func sidecar(task string) (string, structs.TaskKind) {
name := structs.ConnectProxyPrefix + "-" + task
kind := structs.TaskKind(structs.ConnectProxyPrefix + ":" + task)
@@ -50,8 +39,7 @@ func TestSIDSHook_recoverToken(t *testing.T) {
ci.Parallel(t)
r := require.New(t)
secrets := tmpDir(t)
defer cleanupDir(t, secrets)
secrets := t.TempDir()
taskName, taskKind := sidecar("foo")
h := newSIDSHook(sidsHookConfig{
@@ -75,8 +63,7 @@ func TestSIDSHook_recoverToken_empty(t *testing.T) {
ci.Parallel(t)
r := require.New(t)
secrets := tmpDir(t)
defer cleanupDir(t, secrets)
secrets := t.TempDir()
taskName, taskKind := sidecar("foo")
h := newSIDSHook(sidsHookConfig{
@@ -103,8 +90,7 @@ func TestSIDSHook_recoverToken_unReadable(t *testing.T) {
r := require.New(t)
secrets := tmpDir(t)
defer cleanupDir(t, secrets)
secrets := t.TempDir()
err := os.Chmod(secrets, 0000)
r.NoError(err)
@@ -126,8 +112,7 @@ func TestSIDSHook_writeToken(t *testing.T) {
ci.Parallel(t)
r := require.New(t)
secrets := tmpDir(t)
defer cleanupDir(t, secrets)
secrets := t.TempDir()
id := uuid.Generate()
h := new(sidsHook)
@@ -150,8 +135,7 @@ func TestSIDSHook_writeToken_unWritable(t *testing.T) {
r := require.New(t)
secrets := tmpDir(t)
defer cleanupDir(t, secrets)
secrets := t.TempDir()
err := os.Chmod(secrets, 0000)
r.NoError(err)
@@ -166,8 +150,7 @@ func Test_SIDSHook_writeToken_nonExistent(t *testing.T) {
ci.Parallel(t)
r := require.New(t)
base := tmpDir(t)
defer cleanupDir(t, base)
base := t.TempDir()
secrets := filepath.Join(base, "does/not/exist")
id := uuid.Generate()
@@ -289,8 +272,7 @@ func TestTaskRunner_DeriveSIToken_UnWritableTokenFile(t *testing.T) {
// make the si_token file un-writable, triggering a failure after a
// successful token derivation
secrets := tmpDir(t)
defer cleanupDir(t, secrets)
secrets := t.TempDir()
trConfig.TaskDir.SecretsDir = secrets
err := ioutil.WriteFile(filepath.Join(secrets, sidsTokenFile), nil, 0400)
r.NoError(err)

View File

@@ -167,14 +167,11 @@ func newTestHarness(t *testing.T, templates []*structs.Template, consul, vault b
harness.nomadNamespace = a.Namespace
// Make a tempdir
d, err := ioutil.TempDir("", "ct_test")
if err != nil {
t.Fatalf("Failed to make tmpdir: %v", err)
}
harness.taskDir = d
harness.taskDir = t.TempDir()
harness.envBuilder.SetClientTaskRoot(harness.taskDir)
if consul {
var err error
harness.consul, err = ctestutil.NewTestServerConfigT(t, func(c *ctestutil.TestServerConfig) {
// defaults
})
@@ -1286,14 +1283,10 @@ ANYTHING_goes=Spaces are=ok!
// template processing function returns errors when files don't exist
func TestTaskTemplateManager_Env_Missing(t *testing.T) {
ci.Parallel(t)
d, err := ioutil.TempDir("", "ct_env_missing")
if err != nil {
t.Fatalf("err: %v", err)
}
defer os.RemoveAll(d)
d := t.TempDir()
// Fake writing the file so we don't have to run the whole template manager
err = ioutil.WriteFile(filepath.Join(d, "exists.env"), []byte("FOO=bar\n"), 0644)
err := ioutil.WriteFile(filepath.Join(d, "exists.env"), []byte("FOO=bar\n"), 0644)
if err != nil {
t.Fatalf("error writing template file: %v", err)
}
@@ -1323,14 +1316,10 @@ func TestTaskTemplateManager_Env_InterpolatedDest(t *testing.T) {
ci.Parallel(t)
require := require.New(t)
d, err := ioutil.TempDir("", "ct_env_interpolated")
if err != nil {
t.Fatalf("err: %v", err)
}
defer os.RemoveAll(d)
d := t.TempDir()
// Fake writing the file so we don't have to run the whole template manager
err = ioutil.WriteFile(filepath.Join(d, "exists.env"), []byte("FOO=bar\n"), 0644)
err := ioutil.WriteFile(filepath.Join(d, "exists.env"), []byte("FOO=bar\n"), 0644)
if err != nil {
t.Fatalf("error writing template file: %v", err)
}
@@ -1362,14 +1351,10 @@ func TestTaskTemplateManager_Env_InterpolatedDest(t *testing.T) {
// templates correctly.
func TestTaskTemplateManager_Env_Multi(t *testing.T) {
ci.Parallel(t)
d, err := ioutil.TempDir("", "ct_env_missing")
if err != nil {
t.Fatalf("err: %v", err)
}
defer os.RemoveAll(d)
d := t.TempDir()
// Fake writing the files so we don't have to run the whole template manager
err = ioutil.WriteFile(filepath.Join(d, "zzz.env"), []byte("FOO=bar\nSHARED=nope\n"), 0644)
err := ioutil.WriteFile(filepath.Join(d, "zzz.env"), []byte("FOO=bar\nSHARED=nope\n"), 0644)
if err != nil {
t.Fatalf("error writing template file 1: %v", err)
}

View File

@@ -208,11 +208,7 @@ func TestPrevAlloc_LocalPrevAlloc_Terminated(t *testing.T) {
func TestPrevAlloc_StreamAllocDir_Error(t *testing.T) {
ci.Parallel(t)
dest, err := ioutil.TempDir("", "nomadtest-")
if err != nil {
t.Fatalf("err: %v", err)
}
defer os.RemoveAll(dest)
dest := t.TempDir()
// This test only unit tests streamAllocDir so we only need a partially
// complete remotePrevAlloc
@@ -232,7 +228,7 @@ func TestPrevAlloc_StreamAllocDir_Error(t *testing.T) {
ModTime: time.Now(),
Typeflag: tar.TypeReg,
}
err = tw.WriteHeader(&fooHdr)
err := tw.WriteHeader(&fooHdr)
if err != nil {
t.Fatalf("error writing file header: %v", err)
}

View File

@@ -26,11 +26,7 @@ func TestPrevAlloc_StreamAllocDir_Ok(t *testing.T) {
ci.Parallel(t)
ctestutil.RequireRoot(t)
dir, err := ioutil.TempDir("", "")
if err != nil {
t.Fatalf("err: %v", err)
}
defer os.RemoveAll(dir)
dir := t.TempDir()
// Create foo/
fooDir := filepath.Join(dir, "foo")
@@ -124,11 +120,7 @@ func TestPrevAlloc_StreamAllocDir_Ok(t *testing.T) {
}
tw.Close()
dir1, err := ioutil.TempDir("", "nomadtest-")
if err != nil {
t.Fatalf("err: %v", err)
}
defer os.RemoveAll(dir1)
dir1 := t.TempDir()
rc := ioutil.NopCloser(buf)
prevAlloc := &remotePrevAlloc{logger: testlog.HCLogger(t)}

View File

@@ -2,7 +2,6 @@ package client
import (
"fmt"
"io/ioutil"
"net"
"os"
"path/filepath"
@@ -734,11 +733,7 @@ func TestClient_AddAllocError(t *testing.T) {
func TestClient_Init(t *testing.T) {
ci.Parallel(t)
dir, err := ioutil.TempDir("", "nomad")
if err != nil {
t.Fatalf("err: %s", err)
}
defer os.RemoveAll(dir)
dir := t.TempDir()
allocDir := filepath.Join(dir, "alloc")
config := config.DefaultConfig()

View File

@@ -3,8 +3,6 @@ package fifo
import (
"bytes"
"io"
"io/ioutil"
"os"
"path/filepath"
"runtime"
"sync"
@@ -24,11 +22,7 @@ func TestFIFO(t *testing.T) {
if runtime.GOOS == "windows" {
path = "//./pipe/fifo"
} else {
dir, err := ioutil.TempDir("", "")
require.NoError(err)
defer os.RemoveAll(dir)
path = filepath.Join(dir, "fifo")
path = filepath.Join(t.TempDir(), "fifo")
}
readerOpenFn, err := CreateAndRead(path)
@@ -88,11 +82,7 @@ func TestWriteClose(t *testing.T) {
if runtime.GOOS == "windows" {
path = "//./pipe/" + uuid.Generate()[:4]
} else {
dir, err := ioutil.TempDir("", "")
require.NoError(err)
defer os.RemoveAll(dir)
path = filepath.Join(dir, "fifo")
path = filepath.Join(t.TempDir(), "fifo")
}
readerOpenFn, err := CreateAndRead(path)

View File

@@ -15,7 +15,6 @@ import (
)
var (
pathPrefix = "logrotator"
baseFileName = "redis.stdout"
)
@@ -30,9 +29,7 @@ func TestFileRotator_IncorrectPath(t *testing.T) {
func TestFileRotator_CreateNewFile(t *testing.T) {
defer goleak.VerifyNone(t)
path, err := ioutil.TempDir("", pathPrefix)
require.NoError(t, err)
defer os.RemoveAll(path)
path := t.TempDir()
fr, err := NewFileRotator(path, baseFileName, 10, 10, testlog.HCLogger(t))
require.NoError(t, err)
@@ -45,9 +42,7 @@ func TestFileRotator_CreateNewFile(t *testing.T) {
func TestFileRotator_OpenLastFile(t *testing.T) {
defer goleak.VerifyNone(t)
path, err := ioutil.TempDir("", pathPrefix)
require.NoError(t, err)
defer os.RemoveAll(path)
path := t.TempDir()
fname1 := filepath.Join(path, "redis.stdout.0")
fname2 := filepath.Join(path, "redis.stdout.2")
@@ -70,9 +65,7 @@ func TestFileRotator_OpenLastFile(t *testing.T) {
func TestFileRotator_WriteToCurrentFile(t *testing.T) {
defer goleak.VerifyNone(t)
path, err := ioutil.TempDir("", pathPrefix)
require.NoError(t, err)
defer os.RemoveAll(path)
path := t.TempDir()
fname1 := filepath.Join(path, "redis.stdout.0")
f1, err := os.Create(fname1)
@@ -104,9 +97,7 @@ func TestFileRotator_WriteToCurrentFile(t *testing.T) {
func TestFileRotator_RotateFiles(t *testing.T) {
defer goleak.VerifyNone(t)
path, err := ioutil.TempDir("", pathPrefix)
require.NoError(t, err)
defer os.RemoveAll(path)
path := t.TempDir()
fr, err := NewFileRotator(path, baseFileName, 10, 5, testlog.HCLogger(t))
require.NoError(t, err)
@@ -149,9 +140,7 @@ func TestFileRotator_RotateFiles(t *testing.T) {
func TestFileRotator_RotateFiles_Boundary(t *testing.T) {
defer goleak.VerifyNone(t)
path, err := ioutil.TempDir("", pathPrefix)
require.NoError(t, err)
defer os.RemoveAll(path)
path := t.TempDir()
fr, err := NewFileRotator(path, baseFileName, 10, 5, testlog.HCLogger(t))
require.NoError(t, err)
@@ -197,12 +186,10 @@ func TestFileRotator_RotateFiles_Boundary(t *testing.T) {
func TestFileRotator_WriteRemaining(t *testing.T) {
defer goleak.VerifyNone(t)
path, err := ioutil.TempDir("", pathPrefix)
require.NoError(t, err)
defer os.RemoveAll(path)
path := t.TempDir()
fname1 := filepath.Join(path, "redis.stdout.0")
err = ioutil.WriteFile(fname1, []byte("abcd"), 0600)
err := ioutil.WriteFile(fname1, []byte("abcd"), 0600)
require.NoError(t, err)
fr, err := NewFileRotator(path, baseFileName, 10, 5, testlog.HCLogger(t))
@@ -259,9 +246,7 @@ func TestFileRotator_WriteRemaining(t *testing.T) {
func TestFileRotator_PurgeOldFiles(t *testing.T) {
defer goleak.VerifyNone(t)
path, err := ioutil.TempDir("", pathPrefix)
require.NoError(t, err)
defer os.RemoveAll(path)
path := t.TempDir()
fr, err := NewFileRotator(path, baseFileName, 2, 2, testlog.HCLogger(t))
require.NoError(t, err)
@@ -298,9 +283,7 @@ func BenchmarkRotator(b *testing.B) {
}
func benchmarkRotatorWithInputSize(size int, b *testing.B) {
path, err := ioutil.TempDir("", pathPrefix)
require.NoError(b, err)
defer os.RemoveAll(path)
path := b.TempDir()
fr, err := NewFileRotator(path, baseFileName, 5, 1024*1024, testlog.HCLogger(b))
require.NoError(b, err)

View File

@@ -23,9 +23,7 @@ func TestLogmon_Start_rotate(t *testing.T) {
require := require.New(t)
var stdoutFifoPath, stderrFifoPath string
dir, err := ioutil.TempDir("", "nomadtest")
require.NoError(err)
defer os.RemoveAll(dir)
dir := t.TempDir()
if runtime.GOOS == "windows" {
stdoutFifoPath = "//./pipe/test-rotate.stdout"
@@ -89,9 +87,7 @@ func TestLogmon_Start_restart_flusheslogs(t *testing.T) {
require := require.New(t)
var stdoutFifoPath, stderrFifoPath string
dir, err := ioutil.TempDir("", "nomadtest")
require.NoError(err)
defer os.RemoveAll(dir)
dir := t.TempDir()
if runtime.GOOS == "windows" {
stdoutFifoPath = "//./pipe/test-restart.stdout"
@@ -194,9 +190,7 @@ func TestLogmon_Start_restart(t *testing.T) {
require := require.New(t)
var stdoutFifoPath, stderrFifoPath string
dir, err := ioutil.TempDir("", "nomadtest")
require.NoError(err)
defer os.RemoveAll(dir)
dir := t.TempDir()
if runtime.GOOS == "windows" {
stdoutFifoPath = "//./pipe/test-restart.stdout"
@@ -220,6 +214,9 @@ func TestLogmon_Start_restart(t *testing.T) {
impl, ok := lm.(*logmonImpl)
require.True(ok)
require.NoError(lm.Start(cfg))
t.Cleanup(func() {
require.NoError(lm.Stop())
})
stdout, err := fifo.OpenWriter(stdoutFifoPath)
require.NoError(err)
@@ -256,8 +253,15 @@ func TestLogmon_Start_restart(t *testing.T) {
stdout, err = fifo.OpenWriter(stdoutFifoPath)
require.NoError(err)
t.Cleanup(func() {
require.NoError(stdout.Close())
})
stderr, err = fifo.OpenWriter(stderrFifoPath)
require.NoError(err)
t.Cleanup(func() {
require.NoError(stderr.Close())
})
_, err = stdout.Write([]byte("test\n"))
require.NoError(err)

View File

@@ -3,7 +3,6 @@ package csimanager
import (
"context"
"errors"
"io/ioutil"
"os"
"runtime"
"testing"
@@ -18,13 +17,6 @@ import (
"github.com/stretchr/testify/require"
)
func tmpDir(t testing.TB) string {
t.Helper()
dir, err := ioutil.TempDir("", "nomad")
require.NoError(t, err)
return dir
}
func checkMountSupport() bool {
path, err := os.Getwd()
if err != nil {
@@ -93,8 +85,7 @@ func TestVolumeManager_ensureStagingDir(t *testing.T) {
}
// Step 2: Test Setup
tmpPath := tmpDir(t)
defer os.RemoveAll(tmpPath)
tmpPath := t.TempDir()
csiFake := &csifake.Client{}
eventer := func(e *structs.NodeEvent) {}
@@ -193,8 +184,7 @@ func TestVolumeManager_stageVolume(t *testing.T) {
for _, tc := range cases {
t.Run(tc.Name, func(t *testing.T) {
tmpPath := tmpDir(t)
defer os.RemoveAll(tmpPath)
tmpPath := t.TempDir()
csiFake := &csifake.Client{}
csiFake.NextNodeStageVolumeErr = tc.PluginErr
@@ -252,8 +242,7 @@ func TestVolumeManager_unstageVolume(t *testing.T) {
for _, tc := range cases {
t.Run(tc.Name, func(t *testing.T) {
tmpPath := tmpDir(t)
defer os.RemoveAll(tmpPath)
tmpPath := t.TempDir()
csiFake := &csifake.Client{}
csiFake.NextNodeUnstageVolumeErr = tc.PluginErr
@@ -376,8 +365,7 @@ func TestVolumeManager_publishVolume(t *testing.T) {
for _, tc := range cases {
t.Run(tc.Name, func(t *testing.T) {
tmpPath := tmpDir(t)
defer os.RemoveAll(tmpPath)
tmpPath := t.TempDir()
csiFake := &csifake.Client{}
csiFake.NextNodePublishVolumeErr = tc.PluginErr
@@ -444,8 +432,7 @@ func TestVolumeManager_unpublishVolume(t *testing.T) {
for _, tc := range cases {
t.Run(tc.Name, func(t *testing.T) {
tmpPath := tmpDir(t)
defer os.RemoveAll(tmpPath)
tmpPath := t.TempDir()
csiFake := &csifake.Client{}
csiFake.NextNodeUnpublishVolumeErr = tc.PluginErr
@@ -474,8 +461,7 @@ func TestVolumeManager_MountVolumeEvents(t *testing.T) {
}
ci.Parallel(t)
tmpPath := tmpDir(t)
defer os.RemoveAll(tmpPath)
tmpPath := t.TempDir()
csiFake := &csifake.Client{}

View File

@@ -1,7 +1,6 @@
package state
import (
"io/ioutil"
"os"
"reflect"
"sync"
@@ -20,9 +19,8 @@ import (
"github.com/stretchr/testify/require"
)
func setupBoltStateDB(t *testing.T) (*BoltStateDB, func()) {
dir, err := ioutil.TempDir("", "nomadtest")
require.NoError(t, err)
func setupBoltStateDB(t *testing.T) *BoltStateDB {
dir := t.TempDir()
db, err := NewBoltStateDB(testlog.HCLogger(t), dir)
if err != nil {
@@ -32,21 +30,17 @@ func setupBoltStateDB(t *testing.T) (*BoltStateDB, func()) {
t.Fatalf("error creating boltdb: %v", err)
}
cleanup := func() {
t.Cleanup(func() {
if err := db.Close(); err != nil {
t.Errorf("error closing boltdb: %v", err)
}
if err := os.RemoveAll(dir); err != nil {
t.Logf("error removing boltdb dir: %v", err)
}
}
})
return db.(*BoltStateDB), cleanup
return db.(*BoltStateDB)
}
func testDB(t *testing.T, f func(*testing.T, StateDB)) {
boltdb, cleanup := setupBoltStateDB(t)
defer cleanup()
boltdb := setupBoltStateDB(t)
memdb := NewMemDB(testlog.HCLogger(t))

View File

@@ -5,7 +5,6 @@ import (
"compress/gzip"
"fmt"
"io"
"io/ioutil"
"os"
"path/filepath"
"strings"
@@ -72,9 +71,7 @@ func TestBoltStateDB_UpgradeOld_Ok(t *testing.T) {
for _, fn := range pre09files {
t.Run(fn, func(t *testing.T) {
dir, err := ioutil.TempDir("", "nomadtest")
require.NoError(t, err)
defer os.RemoveAll(dir)
dir := t.TempDir()
db := dbFromTestFile(t, dir, fn)
defer db.Close()
@@ -133,9 +130,7 @@ func TestBoltStateDB_UpgradeOld_Ok(t *testing.T) {
t.Run("testdata/state-1.2.6.db.gz", func(t *testing.T) {
fn := "testdata/state-1.2.6.db.gz"
dir, err := ioutil.TempDir("", "nomadtest")
require.NoError(t, err)
defer os.RemoveAll(dir)
dir := t.TempDir()
db := dbFromTestFile(t, dir, fn)
defer db.Close()

View File

@@ -2,8 +2,6 @@ package state
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"testing"
@@ -15,20 +13,17 @@ import (
"go.etcd.io/bbolt"
)
func setupBoltDB(t *testing.T) (*bbolt.DB, func()) {
dir, err := ioutil.TempDir("", "nomadtest")
require.NoError(t, err)
func setupBoltDB(t *testing.T) *bbolt.DB {
dir := t.TempDir()
db, err := bbolt.Open(filepath.Join(dir, "state.db"), 0666, nil)
if err != nil {
os.RemoveAll(dir)
require.NoError(t, err)
}
require.NoError(t, err)
return db, func() {
t.Cleanup(func() {
require.NoError(t, db.Close())
require.NoError(t, os.RemoveAll(dir))
}
})
return db
}
// TestUpgrade_NeedsUpgrade_New asserts new state dbs do not need upgrading.
@@ -36,8 +31,7 @@ func TestUpgrade_NeedsUpgrade_New(t *testing.T) {
ci.Parallel(t)
// Setting up a new StateDB should initialize it at the latest version.
db, cleanup := setupBoltStateDB(t)
defer cleanup()
db := setupBoltStateDB(t)
to09, to12, err := NeedsUpgrade(db.DB().BoltDB())
require.NoError(t, err)
@@ -50,8 +44,7 @@ func TestUpgrade_NeedsUpgrade_New(t *testing.T) {
func TestUpgrade_NeedsUpgrade_Old(t *testing.T) {
ci.Parallel(t)
db, cleanup := setupBoltDB(t)
defer cleanup()
db := setupBoltDB(t)
// Create the allocations bucket which exists in both the old and 0.9
// schemas
@@ -89,8 +82,7 @@ func TestUpgrade_NeedsUpgrade_Error(t *testing.T) {
for _, tc := range cases {
tc := tc
t.Run(fmt.Sprintf("%v", tc), func(t *testing.T) {
db, cleanup := setupBoltDB(t)
defer cleanup()
db := setupBoltDB(t)
require.NoError(t, db.Update(func(tx *bbolt.Tx) error {
bkt, err := tx.CreateBucketIfNotExists(metaBucketName)
@@ -110,8 +102,7 @@ func TestUpgrade_NeedsUpgrade_Error(t *testing.T) {
func TestUpgrade_DeleteInvalidAllocs_NoAlloc(t *testing.T) {
ci.Parallel(t)
bdb, cleanup := setupBoltDB(t)
defer cleanup()
bdb := setupBoltDB(t)
db := boltdd.New(bdb)
@@ -155,8 +146,7 @@ func TestUpgrade_DeleteInvalidAllocs_NoAlloc(t *testing.T) {
func TestUpgrade_upgradeTaskBucket_InvalidEntries(t *testing.T) {
ci.Parallel(t)
db, cleanup := setupBoltDB(t)
defer cleanup()
db := setupBoltDB(t)
taskName := []byte("fake-task")