test: use T.TempDir to create temporary test directory

The directory created by `T.TempDir` is automatically removed when the
test and all its subtests complete.

Reference: https://pkg.go.dev/testing#T.TempDir
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
This commit is contained in:
Eng Zer Jun 2022-03-15 11:41:08 +08:00
parent ed4cc4b482
commit 18ec2761c0
No known key found for this signature in database
GPG Key ID: DAEBBD2E34C111E6
40 changed files with 137 additions and 428 deletions

View File

@ -122,10 +122,7 @@ func TestCompressDecompressUncompressed(t *testing.T) {
func TestDetectPigz(t *testing.T) {
// Create fake PATH with unpigz executable, make sure detectPigz can find it
tempPath, err := os.MkdirTemp("", "containerd_temp_")
if err != nil {
t.Fatal(err)
}
tempPath := t.TempDir()
filename := "unpigz"
if runtime.GOOS == "windows" {
@ -138,8 +135,6 @@ func TestDetectPigz(t *testing.T) {
t.Fatal(err)
}
defer os.RemoveAll(tempPath)
oldPath := os.Getenv("PATH")
os.Setenv("PATH", tempPath)
defer os.Setenv("PATH", oldPath)

View File

@ -36,11 +36,7 @@ func TestPrefixHeaderReadable(t *testing.T) {
// https://gist.github.com/stevvooe/e2a790ad4e97425896206c0816e1a882#file-out-go
var testFile = []byte("\x1f\x8b\x08\x08\x44\x21\x68\x59\x00\x03\x74\x2e\x74\x61\x72\x00\x4b\xcb\xcf\x67\xa0\x35\x30\x80\x00\x86\x06\x10\x47\x01\xc1\x37\x40\x00\x54\xb6\xb1\xa1\xa9\x99\x09\x48\x25\x1d\x40\x69\x71\x49\x62\x91\x02\xe5\x76\xa1\x79\x84\x21\x91\xd6\x80\x72\xaf\x8f\x82\x51\x30\x0a\x46\x36\x00\x00\xf0\x1c\x1e\x95\x00\x06\x00\x00")
tmpDir, err := os.MkdirTemp("", "prefix-test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpDir)
tmpDir := t.TempDir()
r, err := compression.DecompressStream(bytes.NewReader(testFile))
if err != nil {

View File

@ -36,11 +36,7 @@ import (
func TestOverlayApply(t *testing.T) {
testutil.RequiresRoot(t)
base, err := os.MkdirTemp("", "test-ovl-diff-apply-")
if err != nil {
t.Fatalf("unable to create temp dir: %+v", err)
}
defer os.RemoveAll(base)
base := t.TempDir()
if err := overlayutils.Supported(base); err != nil {
t.Skipf("skipping because overlay is not supported %v", err)
@ -55,11 +51,7 @@ func TestOverlayApply(t *testing.T) {
func TestOverlayApplyNoParents(t *testing.T) {
testutil.RequiresRoot(t)
base, err := os.MkdirTemp("", "test-ovl-diff-apply-")
if err != nil {
t.Fatalf("unable to create temp dir: %+v", err)
}
defer os.RemoveAll(base)
base := t.TempDir()
if err := overlayutils.Supported(base); err != nil {
t.Skipf("skipping because overlay is not supported %v", err)

View File

@ -23,6 +23,7 @@ import (
"archive/tar"
"bytes"
"context"
_ "crypto/sha256"
"errors"
"fmt"
"io"
@ -31,8 +32,6 @@ import (
"testing"
"time"
_ "crypto/sha256"
"github.com/containerd/containerd/archive/tartest"
"github.com/containerd/containerd/pkg/testutil"
"github.com/containerd/continuity/fs"
@ -58,7 +57,7 @@ var baseApplier = fstest.Apply(
func TestUnpack(t *testing.T) {
requireTar(t)
if err := testApply(baseApplier); err != nil {
if err := testApply(t, baseApplier); err != nil {
t.Fatalf("Test apply failed: %+v", err)
}
}
@ -66,7 +65,7 @@ func TestUnpack(t *testing.T) {
func TestBaseDiff(t *testing.T) {
requireTar(t)
if err := testBaseDiff(baseApplier); err != nil {
if err := testBaseDiff(t, baseApplier); err != nil {
t.Fatalf("Test base diff failed: %+v", err)
}
}
@ -102,7 +101,7 @@ func TestRelativeSymlinks(t *testing.T) {
}
for _, bo := range breakoutLinks {
if err := testDiffApply(bo); err != nil {
if err := testDiffApply(t, bo); err != nil {
t.Fatalf("Test apply failed: %+v", err)
}
}
@ -179,7 +178,7 @@ func TestSymlinks(t *testing.T) {
}
for i, l := range links {
if err := testDiffApply(l[0], l[1]); err != nil {
if err := testDiffApply(t, l[0], l[1]); err != nil {
t.Fatalf("Test[%d] apply failed: %+v", i+1, err)
}
}
@ -243,11 +242,7 @@ func TestBreakouts(t *testing.T) {
return nil
}
errFileDiff := errors.New("files differ")
td, err := os.MkdirTemp("", "test-breakouts-")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(td)
td := t.TempDir()
isSymlinkFile := func(f string) func(string) error {
return func(root string) error {
@ -841,17 +836,9 @@ func TestApplyTar(t *testing.T) {
}
}
func testApply(a fstest.Applier) error {
td, err := os.MkdirTemp("", "test-apply-")
if err != nil {
return fmt.Errorf("failed to create temp dir: %w", err)
}
defer os.RemoveAll(td)
dest, err := os.MkdirTemp("", "test-apply-dest-")
if err != nil {
return fmt.Errorf("failed to create temp dir: %w", err)
}
defer os.RemoveAll(dest)
func testApply(t *testing.T, a fstest.Applier) error {
td := t.TempDir()
dest := t.TempDir()
if err := a.Apply(td); err != nil {
return fmt.Errorf("failed to apply filesystem changes: %w", err)
@ -882,17 +869,9 @@ func testApply(a fstest.Applier) error {
return fstest.CheckDirectoryEqual(td, dest)
}
func testBaseDiff(a fstest.Applier) error {
td, err := os.MkdirTemp("", "test-base-diff-")
if err != nil {
return fmt.Errorf("failed to create temp dir: %w", err)
}
defer os.RemoveAll(td)
dest, err := os.MkdirTemp("", "test-base-diff-dest-")
if err != nil {
return fmt.Errorf("failed to create temp dir: %w", err)
}
defer os.RemoveAll(dest)
func testBaseDiff(t *testing.T, a fstest.Applier) error {
td := t.TempDir()
dest := t.TempDir()
if err := a.Apply(td); err != nil {
return fmt.Errorf("failed to apply filesystem changes: %w", err)
@ -909,17 +888,9 @@ func testBaseDiff(a fstest.Applier) error {
return fstest.CheckDirectoryEqual(td, dest)
}
func testDiffApply(appliers ...fstest.Applier) error {
td, err := os.MkdirTemp("", "test-diff-apply-")
if err != nil {
return fmt.Errorf("failed to create temp dir: %w", err)
}
defer os.RemoveAll(td)
dest, err := os.MkdirTemp("", "test-diff-apply-dest-")
if err != nil {
return fmt.Errorf("failed to create temp dir: %w", err)
}
defer os.RemoveAll(dest)
func testDiffApply(t *testing.T, appliers ...fstest.Applier) error {
td := t.TempDir()
dest := t.TempDir()
for _, a := range appliers {
if err := a.Apply(td); err != nil {
@ -950,11 +921,7 @@ func testDiffApply(appliers ...fstest.Applier) error {
func makeWriterToTarTest(wt tartest.WriterToTar, a fstest.Applier, validate func(string) error, applyErr error) func(*testing.T) {
return func(t *testing.T) {
td, err := os.MkdirTemp("", "test-writer-to-tar-")
if err != nil {
t.Fatalf("Failed to create temp dir: %v", err)
}
defer os.RemoveAll(td)
td := t.TempDir()
if a != nil {
if err := a.Apply(td); err != nil {
@ -1254,20 +1221,12 @@ func whiteoutEntry(name string) tarEntryValidator {
func makeDiffTarTest(validators []tarEntryValidator, a, b fstest.Applier) func(*testing.T) {
return func(t *testing.T) {
ad, err := os.MkdirTemp("", "test-make-diff-tar-")
if err != nil {
t.Fatalf("failed to create temp dir: %v", err)
}
defer os.RemoveAll(ad)
ad := t.TempDir()
if err := a.Apply(ad); err != nil {
t.Fatalf("failed to apply a: %v", err)
}
bd, err := os.MkdirTemp("", "test-make-diff-tar-")
if err != nil {
t.Fatalf("failed to create temp dir: %v", err)
}
defer os.RemoveAll(bd)
bd := t.TempDir()
if err := fs.CopyDir(bd, ad); err != nil {
t.Fatalf("failed to copy dir: %v", err)
}

View File

@ -49,9 +49,7 @@ func TestNewFIFOSetInDir(t *testing.T) {
t.Skip("NewFIFOSetInDir has different behaviour on windows")
}
root, err := os.MkdirTemp("", "test-new-fifo-set")
assert.NilError(t, err)
defer os.RemoveAll(root)
root := t.TempDir()
fifos, err := NewFIFOSetInDir(root, "theid", true)
assert.NilError(t, err)

View File

@ -21,8 +21,6 @@ package cio
import (
"context"
"fmt"
"os"
"path/filepath"
"testing"
@ -65,11 +63,7 @@ func TestOpenFifosWithTerminal(t *testing.T) {
var ctx, cancel = context.WithCancel(context.Background())
defer cancel()
ioFifoDir, err := os.MkdirTemp("", fmt.Sprintf("cio-%s", t.Name()))
if err != nil {
t.Fatalf("unexpected error during creating temp dir: %v", err)
}
defer os.RemoveAll(ioFifoDir)
ioFifoDir := t.TempDir()
cfg := Config{
Stdout: filepath.Join(ioFifoDir, "test-stdout"),

View File

@ -291,28 +291,17 @@ func populateBlobStore(ctx context.Context, t checker, cs content.Store, nblobs,
return blobs
}
func contentStoreEnv(t checker) (context.Context, string, content.Store, func()) {
pc, _, _, ok := runtime.Caller(1)
if !ok {
t.Fatal("failed to resolve caller")
}
fn := runtime.FuncForPC(pc)
tmpdir, err := os.MkdirTemp("", filepath.Base(fn.Name())+"-")
if err != nil {
t.Fatal(err)
}
func contentStoreEnv(t testing.TB) (context.Context, string, content.Store, func()) {
tmpdir := t.TempDir()
cs, err := NewStore(tmpdir)
if err != nil {
os.RemoveAll(tmpdir)
t.Fatal(err)
}
ctx, cancel := context.WithCancel(context.Background())
return ctx, tmpdir, cs, func() {
cancel()
os.RemoveAll(tmpdir)
}
}
@ -361,11 +350,7 @@ func checkWrite(ctx context.Context, t checker, cs content.Store, dgst digest.Di
}
func TestWriterTruncateRecoversFromIncompleteWrite(t *testing.T) {
tmpdir, err := os.MkdirTemp("", "test-local-content-store-recover")
assert.NilError(t, err)
defer os.RemoveAll(tmpdir)
cs, err := NewStore(tmpdir)
cs, err := NewStore(t.TempDir())
assert.NilError(t, err)
ctx, cancel := context.WithCancel(context.Background())
@ -400,11 +385,7 @@ func setupIncompleteWrite(ctx context.Context, t *testing.T, cs content.Store, r
}
func TestWriteReadEmptyFileTimestamp(t *testing.T) {
root, err := os.MkdirTemp("", "test-write-read-file-timestamp")
if err != nil {
t.Errorf("failed to create a tmp dir: %v", err)
}
defer os.RemoveAll(root)
root := t.TempDir()
emptyFile := filepath.Join(root, "updatedat")
if err := writeTimestampFile(emptyFile, time.Time{}); err != nil {

View File

@ -31,9 +31,7 @@ import (
)
func TestAdditionalGids(t *testing.T) {
testPodLogDir, err := os.MkdirTemp("", "additional-gids")
require.NoError(t, err)
defer os.RemoveAll(testPodLogDir)
testPodLogDir := t.TempDir()
t.Log("Create a sandbox with log directory")
sb, sbConfig := PodSandboxConfigWithCleanup(t, "sandbox", "additional-gids",

View File

@ -455,11 +455,7 @@ func TestCheckpointRestoreWithImagePath(t *testing.T) {
}
// create image path store criu image files
crDir, err := os.MkdirTemp("", "test-cr")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(crDir)
crDir := t.TempDir()
imagePath := filepath.Join(crDir, "cr")
// checkpoint task
if _, err := task.Checkpoint(ctx, WithCheckpointImagePath(imagePath)); err != nil {

View File

@ -35,15 +35,7 @@ import (
// TestDaemonRuntimeRoot ensures plugin.linux.runtime_root is not ignored
func TestDaemonRuntimeRoot(t *testing.T) {
runtimeRoot, err := os.MkdirTemp("", "containerd-test-runtime-root")
if err != nil {
t.Fatal(err)
}
defer func() {
if err != nil {
os.RemoveAll(runtimeRoot)
}
}()
runtimeRoot := t.TempDir()
configTOML := `
version = 2
[plugins]

View File

@ -49,22 +49,14 @@ func newDaemonWithConfig(t *testing.T, configTOML string) (*Client, *daemon, fun
buf = bytes.NewBuffer(nil)
)
tempDir, err := os.MkdirTemp("", "containerd-test-new-daemon-with-config")
if err != nil {
t.Fatal(err)
}
defer func() {
if err != nil {
os.RemoveAll(tempDir)
}
}()
tempDir := t.TempDir()
configTOMLFile := filepath.Join(tempDir, "config.toml")
if err = os.WriteFile(configTOMLFile, []byte(configTOML), 0600); err != nil {
if err := os.WriteFile(configTOMLFile, []byte(configTOML), 0600); err != nil {
t.Fatal(err)
}
if err = srvconfig.LoadConfig(configTOMLFile, &configTOMLDecoded); err != nil {
if err := srvconfig.LoadConfig(configTOMLFile, &configTOMLDecoded); err != nil {
t.Fatal(err)
}
@ -83,7 +75,7 @@ func newDaemonWithConfig(t *testing.T, configTOML string) (*Client, *daemon, fun
if configTOMLDecoded.State == "" {
args = append(args, "--state", filepath.Join(tempDir, "state"))
}
if err = ctrd.start("containerd", address, args, buf, buf); err != nil {
if err := ctrd.start("containerd", address, args, buf, buf); err != nil {
t.Fatalf("%v: %s", err, buf.String())
}

View File

@ -30,9 +30,7 @@ import (
)
func TestContainerLogWithoutTailingNewLine(t *testing.T) {
testPodLogDir, err := os.MkdirTemp("", "container-log-without-tailing-newline")
require.NoError(t, err)
defer os.RemoveAll(testPodLogDir)
testPodLogDir := t.TempDir()
t.Log("Create a sandbox with log directory")
sb, sbConfig := PodSandboxConfigWithCleanup(t, "sandbox", "container-log-without-tailing-newline",
@ -80,9 +78,7 @@ func TestContainerLogWithoutTailingNewLine(t *testing.T) {
}
func TestLongContainerLog(t *testing.T) {
testPodLogDir, err := os.MkdirTemp("", "long-container-log")
require.NoError(t, err)
defer os.RemoveAll(testPodLogDir)
testPodLogDir := t.TempDir()
t.Log("Create a sandbox with log directory")
sb, sbConfig := PodSandboxConfigWithCleanup(t, "sandbox", "long-container-log",

View File

@ -83,13 +83,8 @@ func TestContainerSymlinkVolumes(t *testing.T) {
} {
testCase := testCase // capture range variable
t.Run(name, func(t *testing.T) {
testPodLogDir, err := os.MkdirTemp("", "symlink-test")
require.NoError(t, err)
defer os.RemoveAll(testPodLogDir)
testVolDir, err := os.MkdirTemp("", "symlink-test-vol")
require.NoError(t, err)
defer os.RemoveAll(testVolDir)
testPodLogDir := t.TempDir()
testVolDir := t.TempDir()
content := "hello there\n"
regularFile, err := createRegularFile(testVolDir, content)

View File

@ -17,12 +17,10 @@
package integration
import (
"os"
"path/filepath"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
exec "golang.org/x/sys/execabs"
runtime "k8s.io/cri-api/pkg/apis/runtime/v1"
@ -40,12 +38,9 @@ func TestImageLoad(t *testing.T) {
output, err := exec.Command("docker", "pull", testImage).CombinedOutput()
require.NoError(t, err, "output: %q", output)
// os.CreateTemp also opens a file, which might prevent us from overwriting that file with docker save.
tarDir, err := os.MkdirTemp("", "image-load")
tarDir := t.TempDir()
tar := filepath.Join(tarDir, "image.tar")
require.NoError(t, err)
defer func() {
assert.NoError(t, os.RemoveAll(tarDir))
}()
output, err = exec.Command("docker", "save", testImage, "-o", tar).CombinedOutput()
require.NoError(t, err, "output: %q", output)

View File

@ -31,9 +31,7 @@ import (
)
func TestPodDualStack(t *testing.T) {
testPodLogDir, err := os.MkdirTemp("", "dualstack")
require.NoError(t, err)
defer os.RemoveAll(testPodLogDir)
testPodLogDir := t.TempDir()
t.Log("Create a sandbox")
sb, sbConfig := PodSandboxConfigWithCleanup(t, "sandbox", "dualstack", WithPodLogDirectory(testPodLogDir))

View File

@ -64,9 +64,7 @@ func TestPodHostname(t *testing.T) {
if test.needsHostNetwork && goruntime.GOOS == "windows" {
t.Skip("Skipped on Windows.")
}
testPodLogDir, err := os.MkdirTemp("", "hostname")
require.NoError(t, err)
defer os.RemoveAll(testPodLogDir)
testPodLogDir := t.TempDir()
opts := append(test.opts, WithPodLogDirectory(testPodLogDir))
t.Log("Create a sandbox with hostname")

View File

@ -150,10 +150,7 @@ func testFailFastWhenConnectShim(abstract bool, dialFn dialFunc) func(*testing.T
}
func newTestListener(t testing.TB, abstract bool) (string, net.Listener, func()) {
tmpDir, err := os.MkdirTemp("", "shim-ut-XX")
if err != nil {
t.Fatalf("failed to create tmp directory: %v", err)
}
tmpDir := t.TempDir()
// NOTE(fuweid):
//

View File

@ -20,10 +20,8 @@ import (
"context"
"errors"
"fmt"
"os"
"path/filepath"
"reflect"
"strings"
"testing"
"time"
@ -715,10 +713,7 @@ func testEnv(t *testing.T) (context.Context, *bolt.DB, func()) {
ctx = namespaces.WithNamespace(ctx, "testing")
ctx = logtest.WithT(ctx, t)
dirname, err := os.MkdirTemp("", strings.Replace(t.Name(), "/", "_", -1)+"-")
if err != nil {
t.Fatal(err)
}
dirname := t.TempDir()
db, err := bolt.Open(filepath.Join(dirname, "meta.db"), 0644, nil)
if err != nil {
@ -727,9 +722,6 @@ func testEnv(t *testing.T) (context.Context, *bolt.DB, func()) {
return ctx, db, func() {
db.Close()
if err := os.RemoveAll(dirname); err != nil {
t.Log("failed removing temp dir", err)
}
cancel()
}
}

View File

@ -23,7 +23,6 @@ import (
"fmt"
"io"
"math/rand"
"os"
"path/filepath"
"runtime/pprof"
"strings"
@ -73,10 +72,7 @@ func testDB(t *testing.T, opt ...testOpt) (context.Context, *DB, func()) {
o(&topts)
}
dirname, err := os.MkdirTemp("", strings.Replace(t.Name(), "/", "_", -1)+"-")
if err != nil {
t.Fatal(err)
}
dirname := t.TempDir()
snapshotter, err := native.NewSnapshotter(filepath.Join(dirname, "native"))
if err != nil {
@ -112,9 +108,6 @@ func testDB(t *testing.T, opt ...testOpt) (context.Context, *DB, func()) {
return ctx, db, func() {
bdb.Close()
if err := os.RemoveAll(dirname); err != nil {
t.Log("failed removing temp dir", err)
}
cancel()
}
}
@ -764,10 +757,7 @@ type testLease struct {
}
func newStores(t testing.TB) (*DB, content.Store, snapshots.Snapshotter, func()) {
td, err := os.MkdirTemp("", "gc-test-")
if err != nil {
t.Fatal(err)
}
td := t.TempDir()
db, err := bolt.Open(filepath.Join(td, "meta.db"), 0644, nil)
if err != nil {
t.Fatal(err)
@ -786,6 +776,7 @@ func newStores(t testing.TB) (*DB, content.Store, snapshots.Snapshotter, func())
mdb := NewDB(db, lcs, map[string]snapshots.Snapshotter{"native": nsn})
return mdb, mdb.ContentStore(), mdb.Snapshotter("native"), func() {
os.RemoveAll(td)
nsn.Close()
db.Close()
}
}

View File

@ -20,7 +20,6 @@ import (
"context"
"io"
"math/rand"
"os"
"path/filepath"
"sort"
"testing"
@ -42,7 +41,7 @@ func TestResourceMax(t *testing.T) {
}
func TestGCRoots(t *testing.T) {
db, cleanup, err := newDatabase()
db, cleanup, err := newDatabase(t)
if err != nil {
t.Fatal(err)
}
@ -163,7 +162,7 @@ func TestGCRoots(t *testing.T) {
}
func TestGCRemove(t *testing.T) {
db, cleanup, err := newDatabase()
db, cleanup, err := newDatabase(t)
if err != nil {
t.Fatal(err)
}
@ -256,7 +255,7 @@ func TestGCRemove(t *testing.T) {
}
func TestGCRefs(t *testing.T) {
db, cleanup, err := newDatabase()
db, cleanup, err := newDatabase(t)
if err != nil {
t.Fatal(err)
}
@ -387,21 +386,16 @@ func TestGCRefs(t *testing.T) {
}
}
func newDatabase() (*bolt.DB, func(), error) {
td, err := os.MkdirTemp("", "gc-roots-")
if err != nil {
return nil, nil, err
}
func newDatabase(t testing.TB) (*bolt.DB, func(), error) {
td := t.TempDir()
db, err := bolt.Open(filepath.Join(td, "test.db"), 0777, nil)
if err != nil {
os.RemoveAll(td)
return nil, nil, err
}
return db, func() {
db.Close()
os.RemoveAll(td)
}, nil
}

View File

@ -45,11 +45,7 @@ func makeTestForFMountat(fn fMountatCaseFunc) func(t *testing.T) {
return func(t *testing.T) {
t.Parallel()
suiteDir, err := os.MkdirTemp("", "fmountat-test-")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(suiteDir)
suiteDir := t.TempDir()
fn(t, suiteDir)
}

View File

@ -41,11 +41,7 @@ func checkLookup(t *testing.T, fsType, mntPoint, dir string) {
func testLookup(t *testing.T, fsType string) {
testutil.RequiresRoot(t)
mnt, err := os.MkdirTemp("", "containerd-mountinfo-test-lookup")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(mnt)
mnt := t.TempDir()
loop, err := loopback.New(100 << 20) // 100 MB
if err != nil {
@ -68,11 +64,7 @@ func testLookup(t *testing.T, fsType string) {
assert.Check(t, strings.HasPrefix(loop.Device, "/dev/loop"))
checkLookup(t, fsType, mnt, mnt)
newMnt, err := os.MkdirTemp("", "containerd-mountinfo-test-newMnt")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(newMnt)
newMnt := t.TempDir()
if out, err := exec.Command("mount", "--bind", mnt, newMnt).CombinedOutput(); err != nil {
t.Fatalf("could not mount %s to %s: %v (out: %q)", mnt, newMnt, err, string(out))
@ -99,21 +91,10 @@ func TestLookupWithXFS(t *testing.T) {
}
func TestLookupWithOverlay(t *testing.T) {
lower, err := os.MkdirTemp("", "containerd-mountinfo-test-lower")
assert.NilError(t, err)
defer os.RemoveAll(lower)
upper, err := os.MkdirTemp("", "containerd-mountinfo-test-upper")
assert.NilError(t, err)
defer os.RemoveAll(upper)
work, err := os.MkdirTemp("", "containerd-mountinfo-test-work")
assert.NilError(t, err)
defer os.RemoveAll(work)
overlay, err := os.MkdirTemp("", "containerd-mountinfo-test-overlay")
assert.NilError(t, err)
defer os.RemoveAll(overlay)
lower := t.TempDir()
upper := t.TempDir()
work := t.TempDir()
overlay := t.TempDir()
if out, err := exec.Command("mount", "-t", "overlay", "overlay", "-o", fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s",
lower, upper, work), overlay).CombinedOutput(); err != nil {
@ -123,7 +104,7 @@ func TestLookupWithOverlay(t *testing.T) {
defer testutil.Unmount(t, overlay)
testdir := filepath.Join(overlay, "testdir")
err = os.Mkdir(testdir, 0777)
err := os.Mkdir(testdir, 0777)
assert.NilError(t, err)
testfile := filepath.Join(overlay, "testfile")

View File

@ -104,15 +104,7 @@ func TestFUSEHelper(t *testing.T) {
if err != nil {
t.Skip("fuse-overlayfs not installed")
}
td, err := os.MkdirTemp("", "fuse")
if err != nil {
t.Fatal(err)
}
defer func() {
if err := os.RemoveAll(td); err != nil {
t.Fatal(err)
}
}()
td := t.TempDir()
for _, dir := range []string{"lower1", "lower2", "upper", "work", "merged"} {
if err := os.Mkdir(filepath.Join(td, dir), 0755); err != nil {

View File

@ -65,15 +65,9 @@ func TestEnsureRemoveAllWithMount(t *testing.T) {
t.Skip("skipping test that requires root")
}
dir1, err := os.MkdirTemp("", "test-ensure-removeall-with-dir1")
if err != nil {
t.Fatal(err)
}
dir2, err := os.MkdirTemp("", "test-ensure-removeall-with-dir2")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(dir2)
var err error
dir1 := t.TempDir()
dir2 := t.TempDir()
bindDir := filepath.Join(dir1, "bind")
if err := os.MkdirAll(bindDir, 0755); err != nil {

View File

@ -492,10 +492,7 @@ func TestEnsureRemoveAllNotExist(t *testing.T) {
}
func TestEnsureRemoveAllWithDir(t *testing.T) {
dir, err := os.MkdirTemp("", "test-ensure-removeall-with-dir")
if err != nil {
t.Fatal(err)
}
dir := t.TempDir()
if err := ensureRemoveAll(context.Background(), dir); err != nil {
t.Fatal(err)
}

View File

@ -93,11 +93,9 @@ func TestUpdateRuntimeConfig(t *testing.T) {
},
} {
t.Run(name, func(t *testing.T) {
testDir, err := os.MkdirTemp(os.TempDir(), "test-runtime-config")
require.NoError(t, err)
defer os.RemoveAll(testDir)
testDir := t.TempDir()
templateName := filepath.Join(testDir, "template")
err = os.WriteFile(templateName, []byte(testTemplate), 0666)
err := os.WriteFile(templateName, []byte(testTemplate), 0666)
require.NoError(t, err)
confDir := filepath.Join(testDir, "net.d")
confName := filepath.Join(confDir, cniConfigFileName)

View File

@ -114,9 +114,7 @@ func TestStatus(t *testing.T) {
assert := assertlib.New(t)
require := requirelib.New(t)
tempDir, err := os.MkdirTemp(os.TempDir(), "status-test")
require.NoError(err)
defer os.RemoveAll(tempDir)
tempDir := t.TempDir()
statusFile := filepath.Join(tempDir, "status")
t.Logf("simple store and get")

View File

@ -208,11 +208,7 @@ ca = "/etc/path/default"
}
func TestLoadCertFiles(t *testing.T) {
dir, err := os.MkdirTemp("", t.Name())
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(dir)
dir := t.TempDir()
type testCase struct {
input hostConfig

View File

@ -48,9 +48,7 @@ func TestNewBundle(t *testing.T) {
for i, tc := range tests {
t.Run(strconv.Itoa(i), func(t *testing.T) {
dir, err := os.MkdirTemp("", "test-new-bundle")
require.NoError(t, err, "failed to create test directory")
defer os.RemoveAll(dir)
dir := t.TempDir()
work := filepath.Join(dir, "work")
state := filepath.Join(dir, "state")
id := fmt.Sprintf("new-bundle-%d", i)

View File

@ -47,9 +47,7 @@ func TestNewBundle(t *testing.T) {
for i, tc := range tests {
t.Run(strconv.Itoa(i), func(t *testing.T) {
dir, err := os.MkdirTemp("", "test-new-bundle")
require.NoError(t, err, "failed to create test directory")
defer os.RemoveAll(dir)
dir := t.TempDir()
work := filepath.Join(dir, "work")
state := filepath.Join(dir, "state")
id := fmt.Sprintf("new-bundle-%d", i)

View File

@ -61,12 +61,10 @@ func TestMergeConfigs(t *testing.T) {
}
func TestResolveImports(t *testing.T) {
tempDir, err := os.MkdirTemp("", "containerd_")
assert.NilError(t, err)
defer os.RemoveAll(tempDir)
tempDir := t.TempDir()
for _, filename := range []string{"config_1.toml", "config_2.toml", "test.toml"} {
err = os.WriteFile(filepath.Join(tempDir, filename), []byte(""), 0600)
err := os.WriteFile(filepath.Join(tempDir, filename), []byte(""), 0600)
assert.NilError(t, err)
}
@ -95,12 +93,10 @@ root = "/var/lib/containerd"
accepts = ["application/vnd.docker.image.rootfs.diff.tar.gzip"]
path = "unpigz"
`
tempDir, err := os.MkdirTemp("", "containerd_")
assert.NilError(t, err)
defer os.RemoveAll(tempDir)
tempDir := t.TempDir()
path := filepath.Join(tempDir, "config.toml")
err = os.WriteFile(path, []byte(data), 0600)
err := os.WriteFile(path, []byte(data), 0600)
assert.NilError(t, err)
var out Config
@ -127,11 +123,9 @@ imports = ["data2.toml"]
disabled_plugins = ["io.containerd.v1.xyz"]
`
tempDir, err := os.MkdirTemp("", "containerd_")
assert.NilError(t, err)
defer os.RemoveAll(tempDir)
tempDir := t.TempDir()
err = os.WriteFile(filepath.Join(tempDir, "data1.toml"), []byte(data1), 0600)
err := os.WriteFile(filepath.Join(tempDir, "data1.toml"), []byte(data1), 0600)
assert.NilError(t, err)
err = os.WriteFile(filepath.Join(tempDir, "data2.toml"), []byte(data2), 0600)
@ -157,11 +151,9 @@ imports = ["data2.toml", "data1.toml"]
disabled_plugins = ["io.containerd.v1.xyz"]
imports = ["data1.toml", "data2.toml"]
`
tempDir, err := os.MkdirTemp("", "containerd_")
assert.NilError(t, err)
defer os.RemoveAll(tempDir)
tempDir := t.TempDir()
err = os.WriteFile(filepath.Join(tempDir, "data1.toml"), []byte(data1), 0600)
err := os.WriteFile(filepath.Join(tempDir, "data1.toml"), []byte(data1), 0600)
assert.NilError(t, err)
err = os.WriteFile(filepath.Join(tempDir, "data2.toml"), []byte(data2), 0600)
@ -189,12 +181,10 @@ version = 2
shim_debug = true
`
tempDir, err := os.MkdirTemp("", "containerd_")
assert.NilError(t, err)
defer os.RemoveAll(tempDir)
tempDir := t.TempDir()
path := filepath.Join(tempDir, "config.toml")
err = os.WriteFile(path, []byte(data), 0600)
err := os.WriteFile(path, []byte(data), 0600)
assert.NilError(t, err)
var out Config
@ -215,12 +205,8 @@ func TestDecodePluginInV1Config(t *testing.T) {
shim_debug = true
`
tempDir, err := os.MkdirTemp("", "containerd_")
assert.NilError(t, err)
defer os.RemoveAll(tempDir)
path := filepath.Join(tempDir, "config.toml")
err = os.WriteFile(path, []byte(data), 0600)
path := filepath.Join(t.TempDir(), "config.toml")
err := os.WriteFile(path, []byte(data), 0600)
assert.NilError(t, err)
var out Config

View File

@ -122,18 +122,10 @@ func TestBtrfsMounts(t *testing.T) {
ctx := context.Background()
// create temporary directory for mount point
mountPoint, err := os.MkdirTemp("", "containerd-btrfs-test")
if err != nil {
t.Fatal("could not create mount point for btrfs test", err)
}
defer os.RemoveAll(mountPoint)
mountPoint := t.TempDir()
t.Log("temporary mount point created", mountPoint)
root, err := os.MkdirTemp(mountPoint, "TestBtrfsPrepare-")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(root)
root := t.TempDir()
b, c, err := boltSnapshotter(t)(ctx, root)
if err != nil {

View File

@ -43,19 +43,13 @@ const (
func TestDMSetup(t *testing.T) {
testutil.RequiresRoot(t)
tempDir, err := os.MkdirTemp("", "dmsetup-tests-")
assert.NilError(t, err, "failed to make temp dir for tests")
defer func() {
err := os.RemoveAll(tempDir)
assert.NilError(t, err)
}()
tempDir := t.TempDir()
dataImage, loopDataDevice := createLoopbackDevice(t, tempDir)
metaImage, loopMetaDevice := createLoopbackDevice(t, tempDir)
defer func() {
err = mount.DetachLoopDevice(loopDataDevice, loopMetaDevice)
err := mount.DetachLoopDevice(loopDataDevice, loopMetaDevice)
assert.NilError(t, err, "failed to detach loop devices for data image: %s and meta image: %s", dataImage, metaImage)
}()
@ -87,7 +81,7 @@ func TestDMSetup(t *testing.T) {
t.Run("RemoveDevice", testRemoveDevice)
t.Run("RemovePool", func(t *testing.T) {
err = RemoveDevice(testPoolName, RemoveWithForce, RemoveWithRetries)
err := RemoveDevice(testPoolName, RemoveWithForce, RemoveWithRetries)
assert.NilError(t, err, "failed to remove thin-pool")
})

View File

@ -22,7 +22,6 @@ package devmapper
import (
"context"
"errors"
"os"
"path/filepath"
"strconv"
"testing"
@ -37,8 +36,8 @@ var (
)
func TestPoolMetadata_AddDevice(t *testing.T) {
tempDir, store := createStore(t)
defer cleanupStore(t, tempDir, store)
store := createStore(t)
defer cleanupStore(t, store)
expected := &DeviceInfo{
Name: "test2",
@ -62,8 +61,8 @@ func TestPoolMetadata_AddDevice(t *testing.T) {
}
func TestPoolMetadata_AddDeviceRollback(t *testing.T) {
tempDir, store := createStore(t)
defer cleanupStore(t, tempDir, store)
store := createStore(t)
defer cleanupStore(t, store)
err := store.AddDevice(testCtx, &DeviceInfo{Name: ""})
assert.Assert(t, err != nil)
@ -73,8 +72,8 @@ func TestPoolMetadata_AddDeviceRollback(t *testing.T) {
}
func TestPoolMetadata_AddDeviceDuplicate(t *testing.T) {
tempDir, store := createStore(t)
defer cleanupStore(t, tempDir, store)
store := createStore(t)
defer cleanupStore(t, store)
err := store.AddDevice(testCtx, &DeviceInfo{Name: "test"})
assert.NilError(t, err)
@ -84,8 +83,8 @@ func TestPoolMetadata_AddDeviceDuplicate(t *testing.T) {
}
func TestPoolMetadata_ReuseDeviceID(t *testing.T) {
tempDir, store := createStore(t)
defer cleanupStore(t, tempDir, store)
store := createStore(t)
defer cleanupStore(t, store)
info1 := &DeviceInfo{Name: "test1"}
err := store.AddDevice(testCtx, info1)
@ -109,8 +108,8 @@ func TestPoolMetadata_ReuseDeviceID(t *testing.T) {
}
func TestPoolMetadata_RemoveDevice(t *testing.T) {
tempDir, store := createStore(t)
defer cleanupStore(t, tempDir, store)
store := createStore(t)
defer cleanupStore(t, store)
err := store.AddDevice(testCtx, &DeviceInfo{Name: "test"})
assert.NilError(t, err)
@ -123,8 +122,8 @@ func TestPoolMetadata_RemoveDevice(t *testing.T) {
}
func TestPoolMetadata_UpdateDevice(t *testing.T) {
tempDir, store := createStore(t)
defer cleanupStore(t, tempDir, store)
store := createStore(t)
defer cleanupStore(t, store)
oldInfo := &DeviceInfo{
Name: "test1",
@ -155,8 +154,8 @@ func TestPoolMetadata_UpdateDevice(t *testing.T) {
}
func TestPoolMetadata_MarkFaulty(t *testing.T) {
tempDir, store := createStore(t)
defer cleanupStore(t, tempDir, store)
store := createStore(t)
defer cleanupStore(t, store)
info := &DeviceInfo{Name: "test"}
err := store.AddDevice(testCtx, info)
@ -182,8 +181,8 @@ func TestPoolMetadata_MarkFaulty(t *testing.T) {
}
func TestPoolMetadata_WalkDevices(t *testing.T) {
tempDir, store := createStore(t)
defer cleanupStore(t, tempDir, store)
store := createStore(t)
defer cleanupStore(t, store)
err := store.AddDevice(testCtx, &DeviceInfo{Name: "device1", DeviceID: 1, State: Created})
assert.NilError(t, err)
@ -214,8 +213,8 @@ func TestPoolMetadata_WalkDevices(t *testing.T) {
}
func TestPoolMetadata_GetDeviceNames(t *testing.T) {
tempDir, store := createStore(t)
defer cleanupStore(t, tempDir, store)
store := createStore(t)
defer cleanupStore(t, store)
err := store.AddDevice(testCtx, &DeviceInfo{Name: "test1"})
assert.NilError(t, err)
@ -231,21 +230,15 @@ func TestPoolMetadata_GetDeviceNames(t *testing.T) {
assert.Equal(t, "test2", names[1])
}
func createStore(t *testing.T) (tempDir string, store *PoolMetadata) {
tempDir, err := os.MkdirTemp("", "pool-metadata-")
assert.NilError(t, err, "couldn't create temp directory for metadata tests")
path := filepath.Join(tempDir, "test.db")
func createStore(t *testing.T) (store *PoolMetadata) {
path := filepath.Join(t.TempDir(), "test.db")
metadata, err := NewPoolMetadata(path)
assert.NilError(t, err)
return tempDir, metadata
return metadata
}
func cleanupStore(t *testing.T, tempDir string, store *PoolMetadata) {
func cleanupStore(t *testing.T, store *PoolMetadata) {
err := store.Close()
assert.NilError(t, err, "failed to close metadata store")
err = os.RemoveAll(tempDir)
assert.NilError(t, err, "failed to cleanup temp directory")
}

View File

@ -61,23 +61,19 @@ func TestPoolDevice(t *testing.T) {
logrus.SetLevel(logrus.DebugLevel)
ctx := context.Background()
tempDir, err := os.MkdirTemp("", "pool-device-test-")
assert.NilError(t, err, "couldn't get temp directory for testing")
tempDir := t.TempDir()
_, loopDataDevice := createLoopbackDevice(t, tempDir)
_, loopMetaDevice := createLoopbackDevice(t, tempDir)
poolName := fmt.Sprintf("test-pool-device-%d", time.Now().Nanosecond())
err = dmsetup.CreatePool(poolName, loopDataDevice, loopMetaDevice, 64*1024/dmsetup.SectorSize)
err := dmsetup.CreatePool(poolName, loopDataDevice, loopMetaDevice, 64*1024/dmsetup.SectorSize)
assert.NilError(t, err, "failed to create pool %q", poolName)
defer func() {
// Detach loop devices and remove images
err := mount.DetachLoopDevice(loopDataDevice, loopMetaDevice)
assert.NilError(t, err)
err = os.RemoveAll(tempDir)
assert.NilError(t, err, "couldn't cleanup temp directory")
}()
config := &Config{
@ -176,8 +172,8 @@ func TestPoolDevice(t *testing.T) {
}
func TestPoolDeviceMarkFaulty(t *testing.T) {
tempDir, store := createStore(t)
defer cleanupStore(t, tempDir, store)
store := createStore(t)
defer cleanupStore(t, store)
err := store.AddDevice(testCtx, &DeviceInfo{Name: "1", State: Unknown})
assert.NilError(t, err)

View File

@ -23,7 +23,6 @@ import (
"context"
_ "crypto/sha256"
"fmt"
"os"
"testing"
"time"
@ -61,11 +60,7 @@ func TestSnapshotterSuite(t *testing.T) {
ctx = namespaces.WithNamespace(ctx, "testsuite")
t.Run("DevMapperUsage", func(t *testing.T) {
tempDir, err := os.MkdirTemp("", "snapshot-suite-usage")
assert.NilError(t, err)
defer os.RemoveAll(tempDir)
snapshotter, closer, err := snapshotterFn(ctx, tempDir)
snapshotter, closer, err := snapshotterFn(ctx, t.TempDir())
assert.NilError(t, err)
defer closer()
@ -148,13 +143,10 @@ func TestMultipleXfsMounts(t *testing.T) {
ctx := context.Background()
ctx = namespaces.WithNamespace(ctx, "testsuite")
tempDir, err := os.MkdirTemp("", "snapshot-suite-usage")
assert.NilError(t, err)
defer os.RemoveAll(tempDir)
poolName := fmt.Sprintf("containerd-snapshotter-suite-pool-%d", time.Now().Nanosecond())
config := &Config{
RootPath: tempDir,
RootPath: t.TempDir(),
PoolName: poolName,
BaseImageSize: "16Mb",
FileSystemType: "xfs",
@ -172,10 +164,9 @@ func TestMultipleXfsMounts(t *testing.T) {
mounts, err := snapshotter.Prepare(ctx, "prepare-1", "")
assert.NilError(t, err)
root1, _ := os.MkdirTemp(os.TempDir(), "containerd-mount")
root1 := t.TempDir()
defer func() {
mount.UnmountAll(root1, 0)
os.Remove(root1)
}()
err = mount.All(mounts, root1)
assert.NilError(t, err)
@ -186,10 +177,9 @@ func TestMultipleXfsMounts(t *testing.T) {
mounts, err = snapshotter.Prepare(ctx, "prepare-2", "layer-1")
assert.NilError(t, err)
root2, _ := os.MkdirTemp(os.TempDir(), "containerd-mount")
root2 := t.TempDir()
defer func() {
mount.UnmountAll(root2, 0)
os.Remove(root2)
}()
err = mount.All(mounts, root2)
assert.NilError(t, err)

View File

@ -79,11 +79,7 @@ func TestOverlay(t *testing.T) {
func testOverlayMounts(t *testing.T, newSnapshotter testsuite.SnapshotterFunc) {
ctx := context.TODO()
root, err := os.MkdirTemp("", "overlay")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(root)
root := t.TempDir()
o, _, err := newSnapshotter(ctx, root)
if err != nil {
t.Fatal(err)
@ -113,11 +109,7 @@ func testOverlayMounts(t *testing.T, newSnapshotter testsuite.SnapshotterFunc) {
func testOverlayCommit(t *testing.T, newSnapshotter testsuite.SnapshotterFunc) {
ctx := context.TODO()
root, err := os.MkdirTemp("", "overlay")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(root)
root := t.TempDir()
o, _, err := newSnapshotter(ctx, root)
if err != nil {
t.Fatal(err)
@ -138,11 +130,7 @@ func testOverlayCommit(t *testing.T, newSnapshotter testsuite.SnapshotterFunc) {
func testOverlayOverlayMount(t *testing.T, newSnapshotter testsuite.SnapshotterFunc) {
ctx := context.TODO()
root, err := os.MkdirTemp("", "overlay")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(root)
root := t.TempDir()
o, _, err := newSnapshotter(ctx, root)
if err != nil {
t.Fatal(err)
@ -235,11 +223,7 @@ func getParents(ctx context.Context, sn snapshots.Snapshotter, root, key string)
func testOverlayOverlayRead(t *testing.T, newSnapshotter testsuite.SnapshotterFunc) {
testutil.RequiresRoot(t)
ctx := context.TODO()
root, err := os.MkdirTemp("", "overlay")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(root)
root := t.TempDir()
o, _, err := newSnapshotter(ctx, root)
if err != nil {
t.Fatal(err)
@ -278,11 +262,7 @@ func testOverlayOverlayRead(t *testing.T, newSnapshotter testsuite.SnapshotterFu
func testOverlayView(t *testing.T, newSnapshotter testsuite.SnapshotterFunc) {
ctx := context.TODO()
root, err := os.MkdirTemp("", "overlay")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(root)
root := t.TempDir()
o, _, err := newSnapshotter(ctx, root)
if err != nil {
t.Fatal(err)

View File

@ -20,7 +20,6 @@
package overlayutils
import (
"os"
"testing"
"github.com/containerd/containerd/pkg/testutil"
@ -30,11 +29,7 @@ import (
func testOverlaySupported(t testing.TB, expected bool, mkfs ...string) {
testutil.RequiresRoot(t)
mnt, err := os.MkdirTemp("", "containerd-fs-test-supports-overlay")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(mnt)
mnt := t.TempDir()
loop, err := loopback.New(100 << 20) // 100 MB
if err != nil {

View File

@ -19,7 +19,6 @@ package storage
import (
"context"
"fmt"
"os"
"testing"
"github.com/containerd/containerd/snapshots"
@ -42,17 +41,16 @@ func Benchmarks(b *testing.B, name string, metaFn metaFactory) {
func makeBench(b *testing.B, name string, metaFn metaFactory, fn func(context.Context, *testing.B, *MetaStore)) func(b *testing.B) {
return func(b *testing.B) {
ctx := context.Background()
tmpDir, err := os.MkdirTemp("", "metastore-bench-"+name+"-")
if err != nil {
b.Fatal(err)
}
defer os.RemoveAll(tmpDir)
ms, err := metaFn(tmpDir)
ms, err := metaFn(b.TempDir())
if err != nil {
b.Fatal(err)
}
b.Cleanup(func() {
ms.Close()
})
ctx, t, err := ms.TransactionContext(ctx, true)
if err != nil {
b.Fatal(err)
@ -67,13 +65,8 @@ func makeBench(b *testing.B, name string, metaFn metaFactory, fn func(context.Co
func openCloseWritable(b *testing.B, name string, metaFn metaFactory) func(b *testing.B) {
return func(b *testing.B) {
ctx := context.Background()
tmpDir, err := os.MkdirTemp("", "metastore-bench-"+name+"-")
if err != nil {
b.Fatal(err)
}
defer os.RemoveAll(tmpDir)
ms, err := metaFn(tmpDir)
ms, err := metaFn(b.TempDir())
if err != nil {
b.Fatal(err)
}
@ -95,13 +88,8 @@ func openCloseWritable(b *testing.B, name string, metaFn metaFactory) func(b *te
func openCloseReadonly(b *testing.B, name string, metaFn metaFactory) func(b *testing.B) {
return func(b *testing.B) {
ctx := context.Background()
tmpDir, err := os.MkdirTemp("", "metastore-bench-"+name+"-")
if err != nil {
b.Fatal(err)
}
defer os.RemoveAll(tmpDir)
ms, err := metaFn(tmpDir)
ms, err := metaFn(b.TempDir())
if err != nil {
b.Fatal(err)
}

View File

@ -20,7 +20,6 @@ import (
"context"
"errors"
"fmt"
"os"
"testing"
"time"
@ -66,17 +65,16 @@ func MetaStoreSuite(t *testing.T, name string, meta func(root string) (*MetaStor
func makeTest(t *testing.T, name string, metaFn metaFactory, fn testFunc) func(t *testing.T) {
return func(t *testing.T) {
ctx := context.Background()
tmpDir, err := os.MkdirTemp("", "metastore-test-"+name+"-")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpDir)
ms, err := metaFn(tmpDir)
ms, err := metaFn(t.TempDir())
if err != nil {
t.Fatal(err)
}
t.Cleanup(func() {
ms.Close()
})
fn(ctx, t, ms)
}
}