diff --git a/daemon/oci_linux_test.go b/daemon/oci_linux_test.go index 42084c900d..37e0b7526c 100644 --- a/daemon/oci_linux_test.go +++ b/daemon/oci_linux_test.go @@ -11,17 +11,18 @@ import ( "github.com/docker/docker/daemon/network" "github.com/docker/docker/libnetwork" "github.com/docker/docker/pkg/containerfs" + "golang.org/x/sys/unix" "gotest.tools/v3/assert" is "gotest.tools/v3/assert/cmp" "gotest.tools/v3/skip" ) func setupFakeDaemon(t *testing.T, c *container.Container) *Daemon { - root, err := os.MkdirTemp("", "oci_linux_test-root") - assert.NilError(t, err) + t.Helper() + root := t.TempDir() rootfs := filepath.Join(root, "rootfs") - err = os.MkdirAll(rootfs, 0755) + err := os.MkdirAll(rootfs, 0755) assert.NilError(t, err) netController, err := libnetwork.New() @@ -48,11 +49,19 @@ func setupFakeDaemon(t *testing.T, c *container.Container) *Daemon { c.NetworkSettings = &network.Settings{Networks: make(map[string]*network.EndpointSettings)} } - return d -} + // HORRIBLE HACK: clean up shm mounts leaked by some tests. Otherwise the + // offending tests would fail due to the mounts blocking the temporary + // directory from being cleaned up. + t.Cleanup(func() { + if c.ShmPath != "" { + var err error + for err == nil { // Some tests over-mount over the same path multiple times. + err = unix.Unmount(c.ShmPath, unix.MNT_DETACH) + } + } + }) -func cleanupFakeContainer(c *container.Container) { - _ = os.RemoveAll(c.Root) + return d } // TestTmpfsDevShmNoDupMount checks that a user-specified /dev/shm tmpfs @@ -72,7 +81,6 @@ func TestTmpfsDevShmNoDupMount(t *testing.T) { }, } d := setupFakeDaemon(t, c) - defer cleanupFakeContainer(c) _, err := d.createSpec(c) assert.Check(t, err) @@ -91,7 +99,6 @@ func TestIpcPrivateVsReadonly(t *testing.T) { }, } d := setupFakeDaemon(t, c) - defer cleanupFakeContainer(c) s, err := d.createSpec(c) assert.Check(t, err) @@ -120,7 +127,6 @@ func TestSysctlOverride(t *testing.T) { }, } d := setupFakeDaemon(t, c) - defer cleanupFakeContainer(c) // Ensure that the implicit sysctl is set correctly. s, err := d.createSpec(c) @@ -172,7 +178,6 @@ func TestSysctlOverrideHost(t *testing.T) { }, } d := setupFakeDaemon(t, c) - defer cleanupFakeContainer(c) // Ensure that the implicit sysctl is not set s, err := d.createSpec(c)