| package system |
| |
| import ( |
| "context" |
| "os" |
| "testing" |
| |
| "github.com/docker/docker/api/types" |
| "github.com/docker/docker/integration/internal/container" |
| "github.com/docker/docker/internal/test/daemon" |
| |
| "gotest.tools/assert" |
| "gotest.tools/skip" |
| ) |
| |
| // hasSystemd checks whether the host was booted with systemd as its init |
| // system. Stolen from |
| // https://github.com/coreos/go-systemd/blob/176f85496f4e/util/util.go#L68 |
| func hasSystemd() bool { |
| fi, err := os.Lstat("/run/systemd/system") |
| if err != nil { |
| return false |
| } |
| return fi.IsDir() |
| } |
| |
| // TestCgroupDriverSystemdMemoryLimit checks that container |
| // memory limit can be set when using systemd cgroupdriver. |
| // https://github.com/moby/moby/issues/35123 |
| func TestCgroupDriverSystemdMemoryLimit(t *testing.T) { |
| skip.If(t, testEnv.DaemonInfo.OSType == "windows") |
| skip.If(t, !hasSystemd()) |
| t.Parallel() |
| |
| d := daemon.New(t) |
| c := d.NewClientT(t) |
| |
| d.StartWithBusybox(t, "--exec-opt", "native.cgroupdriver=systemd", "--iptables=false") |
| defer d.Stop(t) |
| |
| const mem = 64 * 1024 * 1024 // 64 MB |
| |
| ctx := context.Background() |
| ctrID := container.Create(ctx, t, c, func(ctr *container.TestContainerConfig) { |
| ctr.HostConfig.Resources.Memory = mem |
| }) |
| defer c.ContainerRemove(ctx, ctrID, types.ContainerRemoveOptions{Force: true}) |
| |
| err := c.ContainerStart(ctx, ctrID, types.ContainerStartOptions{}) |
| assert.NilError(t, err) |
| |
| s, err := c.ContainerInspect(ctx, ctrID) |
| assert.NilError(t, err) |
| assert.Equal(t, s.HostConfig.Memory, mem) |
| } |