diff --git a/testutil/daemon/daemon_freebsd.go b/testutil/daemon/daemon_freebsd.go new file mode 100644 index 0000000000..0d182d4fb9 --- /dev/null +++ b/testutil/daemon/daemon_freebsd.go @@ -0,0 +1,18 @@ +//go:build freebsd +// +build freebsd + +package daemon // import "github.com/docker/docker/testutil/daemon" + +import ( + "testing" + + "gotest.tools/v3/assert" +) + +func cleanupNetworkNamespace(_ testing.TB, _ *Daemon) {} + +// CgroupNamespace returns the cgroup namespace the daemon is running in +func (d *Daemon) CgroupNamespace(t testing.TB) string { + assert.Assert(t, false, "cgroup namespaces are not supported on FreeBSD") + return "" +} diff --git a/testutil/daemon/daemon_linux.go b/testutil/daemon/daemon_linux.go new file mode 100644 index 0000000000..720c52a436 --- /dev/null +++ b/testutil/daemon/daemon_linux.go @@ -0,0 +1,37 @@ +package daemon // import "github.com/docker/docker/testutil/daemon" + +import ( + "fmt" + "os" + "path/filepath" + "strings" + "testing" + + "golang.org/x/sys/unix" + "gotest.tools/v3/assert" +) + +func cleanupNetworkNamespace(t testing.TB, d *Daemon) { + t.Helper() + // Cleanup network namespaces in the exec root of this + // daemon because this exec root is specific to this + // daemon instance and has no chance of getting + // cleaned up when a new daemon is instantiated with a + // new exec root. + netnsPath := filepath.Join(d.execRoot, "netns") + filepath.Walk(netnsPath, func(path string, info os.FileInfo, err error) error { + if err := unix.Unmount(path, unix.MNT_DETACH); err != nil && err != unix.EINVAL && err != unix.ENOENT { + t.Logf("[%s] unmount of %s failed: %v", d.id, path, err) + } + os.Remove(path) + return nil + }) +} + +// CgroupNamespace returns the cgroup namespace the daemon is running in +func (d *Daemon) CgroupNamespace(t testing.TB) string { + link, err := os.Readlink(fmt.Sprintf("/proc/%d/ns/cgroup", d.Pid())) + assert.NilError(t, err) + + return strings.TrimSpace(link) +} diff --git a/testutil/daemon/daemon_unix.go b/testutil/daemon/daemon_unix.go index fefae55f6d..5ad7812b04 100644 --- a/testutil/daemon/daemon_unix.go +++ b/testutil/daemon/daemon_unix.go @@ -4,17 +4,12 @@ package daemon // import "github.com/docker/docker/testutil/daemon" import ( - "fmt" - "os" "os/exec" - "path/filepath" - "strings" "syscall" "testing" "github.com/moby/sys/mount" "golang.org/x/sys/unix" - "gotest.tools/v3/assert" ) // cleanupMount unmounts the daemon root directory, or logs a message if @@ -26,31 +21,6 @@ func cleanupMount(t testing.TB, d *Daemon) { } } -func cleanupNetworkNamespace(t testing.TB, d *Daemon) { - t.Helper() - // Cleanup network namespaces in the exec root of this - // daemon because this exec root is specific to this - // daemon instance and has no chance of getting - // cleaned up when a new daemon is instantiated with a - // new exec root. - netnsPath := filepath.Join(d.execRoot, "netns") - filepath.Walk(netnsPath, func(path string, info os.FileInfo, err error) error { - if err := unix.Unmount(path, unix.MNT_DETACH); err != nil && err != unix.EINVAL && err != unix.ENOENT { - t.Logf("[%s] unmount of %s failed: %v", d.id, path, err) - } - os.Remove(path) - return nil - }) -} - -// CgroupNamespace returns the cgroup namespace the daemon is running in -func (d *Daemon) CgroupNamespace(t testing.TB) string { - link, err := os.Readlink(fmt.Sprintf("/proc/%d/ns/cgroup", d.Pid())) - assert.NilError(t, err) - - return strings.TrimSpace(link) -} - // SignalDaemonDump sends a signal to the daemon to write a dump file func SignalDaemonDump(pid int) { unix.Kill(pid, unix.SIGQUIT)