cgroupdriver_systemd_test.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package system
  2. import (
  3. "context"
  4. "os"
  5. "testing"
  6. "github.com/docker/docker/api/types"
  7. "github.com/docker/docker/api/types/container"
  8. "github.com/docker/docker/internal/test/daemon"
  9. "github.com/gotestyourself/gotestyourself/assert"
  10. )
  11. // hasSystemd checks whether the host was booted with systemd as its init
  12. // system. Stolen from
  13. // https://github.com/coreos/go-systemd/blob/176f85496f4e/util/util.go#L68
  14. func hasSystemd() bool {
  15. fi, err := os.Lstat("/run/systemd/system")
  16. if err != nil {
  17. return false
  18. }
  19. return fi.IsDir()
  20. }
  21. // TestCgroupDriverSystemdMemoryLimit checks that container
  22. // memory limit can be set when using systemd cgroupdriver.
  23. // https://github.com/moby/moby/issues/35123
  24. func TestCgroupDriverSystemdMemoryLimit(t *testing.T) {
  25. t.Parallel()
  26. if !hasSystemd() {
  27. t.Skip("systemd not available")
  28. }
  29. d := daemon.New(t)
  30. client, err := d.NewClient()
  31. assert.NilError(t, err)
  32. d.StartWithBusybox(t, "--exec-opt", "native.cgroupdriver=systemd", "--iptables=false")
  33. defer d.Stop(t)
  34. const mem = 64 * 1024 * 1024 // 64 MB
  35. cfg := container.Config{
  36. Image: "busybox",
  37. Cmd: []string{"top"},
  38. }
  39. hostcfg := container.HostConfig{
  40. Resources: container.Resources{
  41. Memory: mem,
  42. },
  43. }
  44. ctx := context.Background()
  45. ctr, err := client.ContainerCreate(ctx, &cfg, &hostcfg, nil, "")
  46. assert.NilError(t, err)
  47. defer client.ContainerRemove(ctx, ctr.ID, types.ContainerRemoveOptions{Force: true})
  48. err = client.ContainerStart(ctx, ctr.ID, types.ContainerStartOptions{})
  49. assert.NilError(t, err)
  50. s, err := client.ContainerInspect(ctx, ctr.ID)
  51. assert.NilError(t, err)
  52. assert.Equal(t, s.HostConfig.Memory, mem)
  53. }