cgroupdriver_systemd_test.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package system
  2. import (
  3. "context"
  4. "os"
  5. "testing"
  6. "github.com/docker/docker/api/types"
  7. "github.com/docker/docker/integration/internal/container"
  8. "github.com/docker/docker/testutil/daemon"
  9. "gotest.tools/v3/assert"
  10. "gotest.tools/v3/skip"
  11. )
  12. // hasSystemd checks whether the host was booted with systemd as its init
  13. // system. Stolen from
  14. // https://github.com/coreos/go-systemd/blob/176f85496f4e/util/util.go#L68
  15. func hasSystemd() bool {
  16. fi, err := os.Lstat("/run/systemd/system")
  17. if err != nil {
  18. return false
  19. }
  20. return fi.IsDir()
  21. }
  22. // TestCgroupDriverSystemdMemoryLimit checks that container
  23. // memory limit can be set when using systemd cgroupdriver.
  24. // https://github.com/moby/moby/issues/35123
  25. func TestCgroupDriverSystemdMemoryLimit(t *testing.T) {
  26. skip.If(t, testEnv.DaemonInfo.OSType == "windows")
  27. skip.If(t, !hasSystemd())
  28. t.Parallel()
  29. d := daemon.New(t)
  30. c := d.NewClientT(t)
  31. d.StartWithBusybox(t, "--exec-opt", "native.cgroupdriver=systemd", "--iptables=false")
  32. defer d.Stop(t)
  33. const mem = int64(64 * 1024 * 1024) // 64 MB
  34. ctx := context.Background()
  35. ctrID := container.Create(ctx, t, c, func(ctr *container.TestContainerConfig) {
  36. ctr.HostConfig.Resources.Memory = mem
  37. })
  38. defer c.ContainerRemove(ctx, ctrID, types.ContainerRemoveOptions{Force: true})
  39. err := c.ContainerStart(ctx, ctrID, types.ContainerStartOptions{})
  40. assert.NilError(t, err)
  41. s, err := c.ContainerInspect(ctx, ctrID)
  42. assert.NilError(t, err)
  43. assert.Equal(t, s.HostConfig.Memory, mem)
  44. }