Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 635cadc

Browse files
committed
test: Add testutil.CreateTemp, remove testutil.TempDir
1 parent c54c89e commit 635cadc

File tree

2 files changed

+28
-81
lines changed

2 files changed

+28
-81
lines changed

cli/server_test.go

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1134,7 +1134,7 @@ func TestServer(t *testing.T) {
11341134

11351135
random, err := cryptorand.String(5)
11361136
require.NoError(t, err)
1137-
tmpdir := testutil.TempDir(t)
1137+
tmpdir := t.TempDir()
11381138
fiName := fmt.Sprint(tmpdir, "/coder-logging-test-", random)
11391139

11401140
root, _ := clitest.New(t,
@@ -1163,9 +1163,7 @@ func TestServer(t *testing.T) {
11631163
ctx, cancelFunc := context.WithCancel(context.Background())
11641164
defer cancelFunc()
11651165

1166-
tmpdir := testutil.TempDir(t)
1167-
fi, err := os.CreateTemp(tmpdir, "coder-logging-test-*")
1168-
require.NoError(t, err)
1166+
fi := testutil.CreateTemp(t, "", "coder-logging-test-*")
11691167

11701168
root, _ := clitest.New(t,
11711169
"server",
@@ -1193,9 +1191,7 @@ func TestServer(t *testing.T) {
11931191
ctx, cancelFunc := context.WithCancel(context.Background())
11941192
defer cancelFunc()
11951193

1196-
tmpdir := testutil.TempDir(t)
1197-
fi, err := os.CreateTemp(tmpdir, "coder-logging-test-*")
1198-
require.NoError(t, err)
1194+
fi := testutil.CreateTemp(t, "", "coder-logging-test-*")
11991195

12001196
root, _ := clitest.New(t,
12011197
"server",
@@ -1223,9 +1219,7 @@ func TestServer(t *testing.T) {
12231219
ctx, cancelFunc := context.WithCancel(context.Background())
12241220
defer cancelFunc()
12251221

1226-
tmpdir := testutil.TempDir(t)
1227-
fi, err := os.CreateTemp(tmpdir, "coder-logging-test-*")
1228-
require.NoError(t, err)
1222+
fi := testutil.CreateTemp(t, "", "coder-logging-test-*")
12291223

12301224
root, _ := clitest.New(t,
12311225
"server",
@@ -1266,13 +1260,9 @@ func TestServer(t *testing.T) {
12661260
ctx, cancelFunc := context.WithCancel(context.Background())
12671261
defer cancelFunc()
12681262

1269-
tmpdir := testutil.TempDir(t)
1270-
fi1, err := os.CreateTemp(tmpdir, "coder-logging-test-*")
1271-
require.NoError(t, err)
1272-
fi2, err := os.CreateTemp(tmpdir, "coder-logging-test-*")
1273-
require.NoError(t, err)
1274-
fi3, err := os.CreateTemp(tmpdir, "coder-logging-test-*")
1275-
require.NoError(t, err)
1263+
fi1 := testutil.CreateTemp(t, "", "coder-logging-test-*")
1264+
fi2 := testutil.CreateTemp(t, "", "coder-logging-test-*")
1265+
fi3 := testutil.CreateTemp(t, "", "coder-logging-test-*")
12761266

12771267
// NOTE(mafredri): This test might end up downloading Terraform
12781268
// which can take a long time and end up failing the test.

testutil/temp.go

Lines changed: 21 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,32 @@
11
package testutil
22

33
import (
4-
"io/fs"
54
"os"
6-
"path/filepath"
7-
"runtime"
85
"testing"
9-
"time"
6+
7+
"github.com/stretchr/testify/require"
108
)
119

12-
func TempDir(t *testing.T) string {
10+
// CreateTemp is a convenience function for creating a temporary file, like
11+
// os.CreateTemp, but it also registers a cleanup function to close and remove
12+
// the file.
13+
func CreateTemp(t *testing.T, dir, pattern string) *os.File {
1314
t.Helper()
14-
dir := t.TempDir()
15-
16-
// On Windows, os.RemoveAll can fail with (among other):
17-
//
18-
// The process cannot access the file because it is being used by another process.
19-
//
20-
// We try to work around this issue by removing files and directories in
21-
// a loop until os.RemoveAll succeeds or we give up.
22-
if runtime.GOOS == "windows" {
23-
t.Cleanup(func() {
24-
var dirs, files []string
25-
_ = filepath.WalkDir(dir, func(path string, d fs.DirEntry, err error) error {
26-
if err != nil {
27-
return err
28-
}
29-
if d.IsDir() && path != dir {
30-
dirs = append(dirs, path)
31-
return nil
32-
}
33-
files = append(files, path)
34-
return nil
35-
})
36-
removeFilesAndDirs := func() {
37-
// Try to remove all files so that the directories are empty.
38-
var newFiles []string
39-
for _, path := range files {
40-
if err := os.Remove(path); err != nil {
41-
newFiles = append(newFiles, path)
42-
}
43-
}
44-
files = newFiles
45-
46-
// Remove directories in reverse order (~depth first).
47-
var newDirs []string
48-
for i := len(dirs) - 1; i >= 0; i-- {
49-
if err := os.Remove(dirs[i]); err != nil {
50-
newDirs = append([]string{dirs[i]}, newDirs...)
51-
}
52-
}
53-
dirs = newDirs
54-
}
5515

56-
var (
57-
start = time.Now()
58-
timeout = 5 * time.Second
59-
err error
60-
)
61-
for time.Since(start) < timeout {
62-
removeFilesAndDirs()
63-
err = os.RemoveAll(dir)
64-
if err == nil {
65-
return
66-
}
67-
time.Sleep(100 * time.Millisecond)
68-
}
69-
// Note that even though we're giving up here, t.TempDir
70-
// cleanup _could_ still succeed (or fail the test).
71-
t.Logf("TempDir: delete %q: giving up after %s: %v", dir, timeout, err)
72-
})
16+
if dir == "" {
17+
dir = t.TempDir()
7318
}
74-
return dir
19+
f, err := os.CreateTemp(dir, pattern)
20+
require.NoError(t, err, "create temp file")
21+
t.Cleanup(func() {
22+
err = f.Close()
23+
if err != nil {
24+
t.Logf("CreateTemp: Cleanup: close failed for %q: %v", f.Name(), err)
25+
}
26+
err = os.Remove(f.Name())
27+
if err != nil {
28+
t.Logf("CreateTemp: Cleanup: remove failed for %q: %v", f.Name(), err)
29+
}
30+
})
31+
return f
7532
}

0 commit comments

Comments
 (0)