浏览代码

Merge pull request #46158 from elezar/refactor-rootless-tempdir

Add testutil.TempDir function
Sebastiaan van Stijn 1 年之前
父节点
当前提交
4f9c865edd
共有 2 个文件被更改,包括 27 次插入11 次删除
  1. 1 11
      integration/container/run_linux_test.go
  2. 26 0
      testutil/temp_files.go

+ 1 - 11
integration/container/run_linux_test.go

@@ -209,18 +209,8 @@ func TestRunWithAlternativeContainerdShim(t *testing.T) {
 	realShimPath, err = filepath.Abs(realShimPath)
 	assert.Assert(t, err)
 
-	// t.TempDir() can't be used here as the temporary directory returned by
-	// that function cannot be accessed by the fake-root user for rootless
-	// Docker. It creates a nested hierarchy of directories where the
-	// outermost has permission 0700.
-	shimDir, err := os.MkdirTemp("", t.Name())
+	shimDir := testutil.TempDir(t)
 	assert.Assert(t, err)
-	t.Cleanup(func() {
-		if err := os.RemoveAll(shimDir); err != nil {
-			t.Errorf("shimDir RemoveAll cleanup: %v", err)
-		}
-	})
-	assert.Assert(t, os.Chmod(shimDir, 0o777))
 	shimDir, err = filepath.Abs(shimDir)
 	assert.Assert(t, err)
 	assert.Assert(t, os.Symlink(realShimPath, filepath.Join(shimDir, "containerd-shim-realfake-v42")))

+ 26 - 0
testutil/temp_files.go

@@ -0,0 +1,26 @@
+package testutil // import "github.com/docker/docker/testutil"
+
+import (
+	"os"
+	"path/filepath"
+	"testing"
+)
+
+// TempDir returns a temporary directory for use in tests.
+// t.TempDir() can't be used as the temporary directory returned by
+// that function cannot be accessed by the fake-root user for rootless
+// Docker. It creates a nested hierarchy of directories where the
+// outermost has permission 0700.
+func TempDir(t *testing.T) string {
+	t.Helper()
+	dir := t.TempDir()
+
+	parent := filepath.Dir(dir)
+	if parent != "" {
+		if err := os.Chmod(parent, 0o777); err != nil {
+			t.Fatalf("Failed to chmod parent of temp directory %q: %v", parent, err)
+		}
+	}
+
+	return dir
+}