From cafaf16a7915b6534a0422c0db1fc5d2f5d4e49d Mon Sep 17 00:00:00 2001 From: Brian Goff Date: Mon, 19 Dec 2016 10:59:54 -0500 Subject: [PATCH] Ensure test graphdriver plugin runs on test host Sets a kernel requirement for for `TestGraphdriverPlugin` since the graphdriver being used is overlay2.. and also makes sure to skip the kernel check in the actual graphdriver since we may be able to detect kernels with backported support for overlay2 style mounts a bit more freely in the test code. Signed-off-by: Brian Goff Upstream-commit: e4ebc92edc85d2f46cf41c4ad9514ba0fbafed06 Component: engine --- .../docker_cli_daemon_plugins_test.go | 4 ++-- .../integration-cli/docker_test_vars.go | 4 ++++ .../integration-cli/requirements_unix.go | 21 +++++++++++++++++-- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/components/engine/integration-cli/docker_cli_daemon_plugins_test.go b/components/engine/integration-cli/docker_cli_daemon_plugins_test.go index 1e6ab7fa66..cb4ce547e1 100644 --- a/components/engine/integration-cli/docker_cli_daemon_plugins_test.go +++ b/components/engine/integration-cli/docker_cli_daemon_plugins_test.go @@ -236,7 +236,7 @@ func (s *DockerDaemonSuite) TestVolumePlugin(c *check.C) { } func (s *DockerDaemonSuite) TestGraphdriverPlugin(c *check.C) { - testRequires(c, Network, IsAmd64, DaemonIsLinux, overlaySupported) + testRequires(c, Network, IsAmd64, DaemonIsLinux, overlay2Supported) s.d.Start(c) @@ -246,7 +246,7 @@ func (s *DockerDaemonSuite) TestGraphdriverPlugin(c *check.C) { c.Assert(err, checker.IsNil, check.Commentf(out)) // restart the daemon with the plugin set as the storage driver - s.d.Restart(c, "-s", plugin) + s.d.Restart(c, "-s", plugin, "--storage-opt", "overlay2.override_kernel_check=1") // run a container out, err = s.d.Cmd("run", "--rm", "busybox", "true") // this will pull busybox using the plugin diff --git a/components/engine/integration-cli/docker_test_vars.go b/components/engine/integration-cli/docker_test_vars.go index fa80b53c9d..a3cdf54ae4 100644 --- a/components/engine/integration-cli/docker_test_vars.go +++ b/components/engine/integration-cli/docker_test_vars.go @@ -66,6 +66,8 @@ var ( // daemonPid is the pid of the main test daemon daemonPid int + + daemonKernelVersion string ) func init() { @@ -111,6 +113,7 @@ func init() { type Info struct { DockerRootDir string ExperimentalBuild bool + KernelVersion string } var i Info status, b, err := sockRequest("GET", "/info", nil) @@ -118,6 +121,7 @@ func init() { if err = json.Unmarshal(b, &i); err == nil { dockerBasePath = i.DockerRootDir experimentalDaemon = i.ExperimentalBuild + daemonKernelVersion = i.KernelVersion } } volumesConfigPath = dockerBasePath + "/volumes" diff --git a/components/engine/integration-cli/requirements_unix.go b/components/engine/integration-cli/requirements_unix.go index 53f0a6d36e..ef017d8a76 100644 --- a/components/engine/integration-cli/requirements_unix.go +++ b/components/engine/integration-cli/requirements_unix.go @@ -8,6 +8,7 @@ import ( "os/exec" "strings" + "github.com/docker/docker/pkg/parsers/kernel" "github.com/docker/docker/pkg/sysinfo" ) @@ -124,7 +125,7 @@ var ( }, "Test cannot be run without a kernel (4.3+) supporting ambient capabilities", } - overlaySupported = testRequirement{ + overlayFSSupported = testRequirement{ func() bool { cmd := exec.Command(dockerBinary, "run", "--rm", "busybox", "/bin/sh", "-c", "cat /proc/filesystems") out, err := cmd.CombinedOutput() @@ -133,7 +134,23 @@ var ( } return bytes.Contains(out, []byte("overlay\n")) }, - "Test cannot be run wihtout suppport for ovelayfs", + "Test cannot be run without suppport for overlayfs", + } + overlay2Supported = testRequirement{ + func() bool { + if !overlayFSSupported.Condition() { + return false + } + + daemonV, err := kernel.ParseRelease(daemonKernelVersion) + if err != nil { + return false + } + requiredV := kernel.VersionInfo{Kernel: 4} + return kernel.CompareKernelVersion(*daemonV, requiredV) > -1 + + }, + "Test cannot be run without overlay2 support (kernel 4.0+)", } )