diff --git a/Makefile b/Makefile index 680f641e90..6c7fc7baa8 100644 --- a/Makefile +++ b/Makefile @@ -57,7 +57,6 @@ DOCKER_ENVS := \ -e TEST_INTEGRATION_FAIL_FAST \ -e TEST_SKIP_INTEGRATION \ -e TEST_SKIP_INTEGRATION_CLI \ - -e TEST_IGNORE_CGROUP_CHECK \ -e TESTCOVERAGE \ -e TESTDEBUG \ -e TESTDIRS \ diff --git a/hack/make/.integration-daemon-start b/hack/make/.integration-daemon-start index 9d3d04817f..05c057efcb 100644 --- a/hack/make/.integration-daemon-start +++ b/hack/make/.integration-daemon-start @@ -72,12 +72,6 @@ if [ "$DOCKER_EXPERIMENTAL" ]; then fi dockerd="dockerd" -if [ -f "/sys/fs/cgroup/cgroup.controllers" ]; then - if [ -z "$TEST_IGNORE_CGROUP_CHECK" ] && [ -z "$TEST_SKIP_INTEGRATION_CLI" ]; then - echo >&2 '# cgroup v2 requires TEST_SKIP_INTEGRATION_CLI to be set' - exit 1 - fi -fi if [ -n "$DOCKER_ROOTLESS" ]; then if [ -z "$TEST_SKIP_INTEGRATION_CLI" ]; then diff --git a/integration-cli/docker_api_stats_test.go b/integration-cli/docker_api_stats_test.go index 689dec2585..066c871ee3 100644 --- a/integration-cli/docker_api_stats_test.go +++ b/integration-cli/docker_api_stats_test.go @@ -25,6 +25,7 @@ var expectedNetworkInterfaceStats = strings.Split("rx_bytes rx_dropped rx_errors func (s *DockerAPISuite) TestAPIStatsNoStreamGetCpu(c *testing.T) { skip.If(c, RuntimeIsWindowsContainerd(), "FIXME: Broken on Windows + containerd combination") + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") out := cli.DockerCmd(c, "run", "-d", "busybox", "/bin/sh", "-c", "while true;usleep 100; do echo 'Hello'; done").Stdout() id := strings.TrimSpace(out) cli.WaitRun(c, id) diff --git a/integration-cli/docker_cli_build_test.go b/integration-cli/docker_cli_build_test.go index 7aac687867..a0001f2714 100644 --- a/integration-cli/docker_cli_build_test.go +++ b/integration-cli/docker_cli_build_test.go @@ -3949,6 +3949,7 @@ func (s *DockerCLIBuildSuite) TestBuildEmptyStringVolume(c *testing.T) { func (s *DockerCLIBuildSuite) TestBuildContainerWithCgroupParent(c *testing.T) { testRequires(c, testEnv.IsLocalDaemon, DaemonIsLinux) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") cgroupParent := "test" data, err := os.ReadFile("/proc/self/cgroup") diff --git a/integration-cli/docker_cli_daemon_test.go b/integration-cli/docker_cli_daemon_test.go index 54ea6fe1ad..1b86938d18 100644 --- a/integration-cli/docker_cli_daemon_test.go +++ b/integration-cli/docker_cli_daemon_test.go @@ -1619,6 +1619,7 @@ func (s *DockerDaemonSuite) TestDaemonRestartContainerLinksRestart(c *testing.T) func (s *DockerDaemonSuite) TestDaemonCgroupParent(c *testing.T) { testRequires(c, DaemonIsLinux) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") cgroupParent := "test" name := "cgroup-test" diff --git a/integration-cli/docker_cli_run_test.go b/integration-cli/docker_cli_run_test.go index d687128a97..829838887f 100644 --- a/integration-cli/docker_cli_run_test.go +++ b/integration-cli/docker_cli_run_test.go @@ -3209,6 +3209,7 @@ func (s *DockerCLIRunSuite) TestRunWithUlimits(c *testing.T) { func (s *DockerCLIRunSuite) TestRunContainerWithCgroupParent(c *testing.T) { // Not applicable on Windows as uses Unix specific functionality testRequires(c, DaemonIsLinux) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") // cgroup-parent relative path testRunContainerWithCgroupParent(c, "test", "cgroup-test") @@ -3244,6 +3245,7 @@ func testRunContainerWithCgroupParent(c *testing.T, cgroupParent, name string) { func (s *DockerCLIRunSuite) TestRunInvalidCgroupParent(c *testing.T) { // Not applicable on Windows as uses Unix specific functionality testRequires(c, DaemonIsLinux) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") testRunInvalidCgroupParent(c, "../../../../../../../../SHOULD_NOT_EXIST", "SHOULD_NOT_EXIST", "cgroup-invalid-test") @@ -3284,6 +3286,7 @@ func (s *DockerCLIRunSuite) TestRunContainerWithCgroupMountRO(c *testing.T) { // Not applicable on Windows as uses Unix specific functionality // --read-only + userns has remount issues testRequires(c, DaemonIsLinux, NotUserNamespace) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") filename := "/sys/fs/cgroup/devices/test123" out, _, err := dockerCmdWithError("run", "busybox", "touch", filename) @@ -4433,6 +4436,7 @@ func (s *DockerCLIRunSuite) TestRunHostnameInHostMode(c *testing.T) { func (s *DockerCLIRunSuite) TestRunAddDeviceCgroupRule(c *testing.T) { testRequires(c, DaemonIsLinux) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const deviceRule = "c 7:128 rwm" diff --git a/integration-cli/docker_cli_run_unix_test.go b/integration-cli/docker_cli_run_unix_test.go index ebd3c2aa50..be9fa34814 100644 --- a/integration-cli/docker_cli_run_unix_test.go +++ b/integration-cli/docker_cli_run_unix_test.go @@ -26,6 +26,7 @@ import ( "gotest.tools/v3/assert" is "gotest.tools/v3/assert/cmp" "gotest.tools/v3/icmd" + "gotest.tools/v3/skip" ) // #6509 @@ -453,6 +454,7 @@ func (s *DockerCLIRunSuite) TestRunAttachInvalidDetachKeySequencePreserved(c *te // "test" should be printed func (s *DockerCLIRunSuite) TestRunWithCPUQuota(c *testing.T) { testRequires(c, cpuCfsQuota) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const file = "/sys/fs/cgroup/cpu/cpu.cfs_quota_us" out := cli.DockerCmd(c, "run", "--cpu-quota", "8000", "--name", "test", "busybox", "cat", file).Combined() @@ -464,6 +466,7 @@ func (s *DockerCLIRunSuite) TestRunWithCPUQuota(c *testing.T) { func (s *DockerCLIRunSuite) TestRunWithCpuPeriod(c *testing.T) { testRequires(c, cpuCfsPeriod) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const file = "/sys/fs/cgroup/cpu/cpu.cfs_period_us" out := cli.DockerCmd(c, "run", "--cpu-period", "50000", "--name", "test", "busybox", "cat", file).Combined() @@ -494,6 +497,7 @@ func (s *DockerCLIRunSuite) TestRunWithInvalidCpuPeriod(c *testing.T) { func (s *DockerCLIRunSuite) TestRunWithCPUShares(c *testing.T) { testRequires(c, cpuShare) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const file = "/sys/fs/cgroup/cpu/cpu.shares" out := cli.DockerCmd(c, "run", "--cpu-shares", "1000", "--name", "test", "busybox", "cat", file).Combined() @@ -514,6 +518,7 @@ func (s *DockerCLIRunSuite) TestRunEchoStdoutWithCPUSharesAndMemoryLimit(c *test func (s *DockerCLIRunSuite) TestRunWithCpusetCpus(c *testing.T) { testRequires(c, cgroupCpuset) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const file = "/sys/fs/cgroup/cpuset/cpuset.cpus" out := cli.DockerCmd(c, "run", "--cpuset-cpus", "0", "--name", "test", "busybox", "cat", file).Combined() @@ -525,6 +530,7 @@ func (s *DockerCLIRunSuite) TestRunWithCpusetCpus(c *testing.T) { func (s *DockerCLIRunSuite) TestRunWithCpusetMems(c *testing.T) { testRequires(c, cgroupCpuset) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const file = "/sys/fs/cgroup/cpuset/cpuset.mems" out := cli.DockerCmd(c, "run", "--cpuset-mems", "0", "--name", "test", "busybox", "cat", file).Combined() @@ -536,6 +542,7 @@ func (s *DockerCLIRunSuite) TestRunWithCpusetMems(c *testing.T) { func (s *DockerCLIRunSuite) TestRunWithBlkioWeight(c *testing.T) { testRequires(c, blkioWeight) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const file = "/sys/fs/cgroup/blkio/blkio.weight" out := cli.DockerCmd(c, "run", "--blkio-weight", "300", "--name", "test", "busybox", "cat", file).Combined() @@ -547,6 +554,7 @@ func (s *DockerCLIRunSuite) TestRunWithBlkioWeight(c *testing.T) { func (s *DockerCLIRunSuite) TestRunWithInvalidBlkioWeight(c *testing.T) { testRequires(c, blkioWeight) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") out, _, err := dockerCmdWithError("run", "--blkio-weight", "5", "busybox", "true") assert.ErrorContains(c, err, "", out) expected := "Range of blkio weight is from 10 to 1000" @@ -605,6 +613,7 @@ func (s *DockerCLIRunSuite) TestRunOOMExitCode(c *testing.T) { func (s *DockerCLIRunSuite) TestRunWithMemoryLimit(c *testing.T) { testRequires(c, memoryLimitSupport) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const file = "/sys/fs/cgroup/memory/memory.limit_in_bytes" cli.DockerCmd(c, "run", "-m", "32M", "--name", "test", "busybox", "cat", file).Assert(c, icmd.Expected{ @@ -649,6 +658,7 @@ func (s *DockerCLIRunSuite) TestRunWithSwappinessInvalid(c *testing.T) { func (s *DockerCLIRunSuite) TestRunWithMemoryReservation(c *testing.T) { testRequires(c, testEnv.IsLocalDaemon, memoryReservationSupport) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const file = "/sys/fs/cgroup/memory/memory.soft_limit_in_bytes" out := cli.DockerCmd(c, "run", "--memory-reservation", "200M", "--name", "test", "busybox", "cat", file).Combined() @@ -1364,6 +1374,7 @@ func (s *DockerCLIRunSuite) TestRunDeviceSymlink(c *testing.T) { // TestRunPIDsLimit makes sure the pids cgroup is set with --pids-limit func (s *DockerCLIRunSuite) TestRunPIDsLimit(c *testing.T) { testRequires(c, testEnv.IsLocalDaemon, pidsLimit) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const file = "/sys/fs/cgroup/pids/pids.max" out := cli.DockerCmd(c, "run", "--name", "skittles", "--pids-limit", "4", "busybox", "cat", file).Combined() @@ -1375,6 +1386,7 @@ func (s *DockerCLIRunSuite) TestRunPIDsLimit(c *testing.T) { func (s *DockerCLIRunSuite) TestRunPrivilegedAllowedDevices(c *testing.T) { testRequires(c, DaemonIsLinux, NotUserNamespace) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const file = "/sys/fs/cgroup/devices/devices.list" out := cli.DockerCmd(c, "run", "--privileged", "busybox", "cat", file).Combined() @@ -1529,6 +1541,7 @@ func (s *DockerDaemonSuite) TestRunWithDaemonDefaultSeccompProfile(c *testing.T) func (s *DockerCLIRunSuite) TestRunWithNanoCPUs(c *testing.T) { testRequires(c, cpuCfsQuota, cpuCfsPeriod) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const file1 = "/sys/fs/cgroup/cpu/cpu.cfs_quota_us" const file2 = "/sys/fs/cgroup/cpu/cpu.cfs_period_us" diff --git a/integration-cli/docker_cli_update_unix_test.go b/integration-cli/docker_cli_update_unix_test.go index 64c84e9cbc..7bdb1f8b67 100644 --- a/integration-cli/docker_cli_update_unix_test.go +++ b/integration-cli/docker_cli_update_unix_test.go @@ -19,6 +19,7 @@ import ( "github.com/docker/docker/testutil/request" "gotest.tools/v3/assert" is "gotest.tools/v3/assert/cmp" + "gotest.tools/v3/skip" ) func (s *DockerCLIUpdateSuite) TearDownTest(ctx context.Context, c *testing.T) { @@ -32,6 +33,7 @@ func (s *DockerCLIUpdateSuite) OnTimeout(c *testing.T) { func (s *DockerCLIUpdateSuite) TestUpdateRunningContainer(c *testing.T) { testRequires(c, DaemonIsLinux) testRequires(c, memoryLimitSupport) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const name = "test-update-container" cli.DockerCmd(c, "run", "-d", "--name", name, "-m", "300M", "busybox", "top") @@ -47,6 +49,7 @@ func (s *DockerCLIUpdateSuite) TestUpdateRunningContainer(c *testing.T) { func (s *DockerCLIUpdateSuite) TestUpdateRunningContainerWithRestart(c *testing.T) { testRequires(c, DaemonIsLinux) testRequires(c, memoryLimitSupport) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const name = "test-update-container" cli.DockerCmd(c, "run", "-d", "--name", name, "-m", "300M", "busybox", "top") @@ -63,6 +66,7 @@ func (s *DockerCLIUpdateSuite) TestUpdateRunningContainerWithRestart(c *testing. func (s *DockerCLIUpdateSuite) TestUpdateStoppedContainer(c *testing.T) { testRequires(c, DaemonIsLinux) testRequires(c, memoryLimitSupport) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const name = "test-update-container" const file = "/sys/fs/cgroup/memory/memory.limit_in_bytes" @@ -78,6 +82,7 @@ func (s *DockerCLIUpdateSuite) TestUpdateStoppedContainer(c *testing.T) { func (s *DockerCLIUpdateSuite) TestUpdatePausedContainer(c *testing.T) { testRequires(c, DaemonIsLinux) testRequires(c, cpuShare) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const name = "test-update-container" cli.DockerCmd(c, "run", "-d", "--name", name, "--cpu-shares", "1000", "busybox", "top") @@ -96,6 +101,7 @@ func (s *DockerCLIUpdateSuite) TestUpdateWithUntouchedFields(c *testing.T) { testRequires(c, DaemonIsLinux) testRequires(c, memoryLimitSupport) testRequires(c, cpuShare) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const name = "test-update-container" cli.DockerCmd(c, "run", "-d", "--name", name, "-m", "300M", "--cpu-shares", "800", "busybox", "top") @@ -136,6 +142,7 @@ func (s *DockerCLIUpdateSuite) TestUpdateSwapMemoryOnly(c *testing.T) { testRequires(c, DaemonIsLinux) testRequires(c, memoryLimitSupport) testRequires(c, swapMemorySupport) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const name = "test-update-container" cli.DockerCmd(c, "run", "-d", "--name", name, "--memory", "300M", "--memory-swap", "500M", "busybox", "top") @@ -152,6 +159,7 @@ func (s *DockerCLIUpdateSuite) TestUpdateInvalidSwapMemory(c *testing.T) { testRequires(c, DaemonIsLinux) testRequires(c, memoryLimitSupport) testRequires(c, swapMemorySupport) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const name = "test-update-container" cli.DockerCmd(c, "run", "-d", "--name", name, "--memory", "300M", "--memory-swap", "500M", "busybox", "top") @@ -245,6 +253,7 @@ func (s *DockerCLIUpdateSuite) TestUpdateNotAffectMonitorRestartPolicy(c *testin func (s *DockerCLIUpdateSuite) TestUpdateWithNanoCPUs(c *testing.T) { testRequires(c, cpuCfsQuota, cpuCfsPeriod) + skip.If(c, onlyCgroupsv2(), "FIXME: cgroupsV2 not supported yet") const file1 = "/sys/fs/cgroup/cpu/cpu.cfs_quota_us" const file2 = "/sys/fs/cgroup/cpu/cpu.cfs_period_us" diff --git a/integration-cli/requirements_unix_test.go b/integration-cli/requirements_unix_test.go index 27eadaeeb7..7ed86b2a4e 100644 --- a/integration-cli/requirements_unix_test.go +++ b/integration-cli/requirements_unix_test.go @@ -6,6 +6,7 @@ import ( "os" "strings" + "github.com/containerd/cgroups/v3" "github.com/docker/docker/pkg/sysinfo" ) @@ -68,6 +69,11 @@ func bridgeNfIptables() bool { return err == nil && strings.TrimSpace(string(content)) == "1" } +func onlyCgroupsv2() bool { + // Only check for unified, cgroup v1 tests can run under other modes + return cgroups.Mode() == cgroups.Unified +} + func unprivilegedUsernsClone() bool { content, err := os.ReadFile("/proc/sys/kernel/unprivileged_userns_clone") return err != nil || !strings.Contains(string(content), "0") diff --git a/integration-cli/requirements_windows_test.go b/integration-cli/requirements_windows_test.go index d5b883dda9..8a5f9e2bd9 100644 --- a/integration-cli/requirements_windows_test.go +++ b/integration-cli/requirements_windows_test.go @@ -2,3 +2,7 @@ package main func setupLocalInfo() { } + +func onlyCgroupsv2() bool { + return false +}