mirror of
https://github.com/moby/moby.git
synced 2025-04-18 20:44:11 +03:00
Run CLI tests with cgroups v2
Signed-off-by: Derek McGowan <derek@mcg.dev>
This commit is contained in:
parent
45f9d679f8
commit
cd89a35ea0
1
Makefile
1
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 \
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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")
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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")
|
||||
|
@ -2,3 +2,7 @@ package main
|
||||
|
||||
func setupLocalInfo() {
|
||||
}
|
||||
|
||||
func onlyCgroupsv2() bool {
|
||||
return false
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user