run_linux_test.go 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package container // import "github.com/docker/docker/integration/container"
  2. import (
  3. "context"
  4. "strconv"
  5. "strings"
  6. "testing"
  7. "time"
  8. containertypes "github.com/docker/docker/api/types/container"
  9. "github.com/docker/docker/api/types/versions"
  10. "github.com/docker/docker/integration/internal/container"
  11. "gotest.tools/assert"
  12. is "gotest.tools/assert/cmp"
  13. "gotest.tools/poll"
  14. "gotest.tools/skip"
  15. )
  16. func TestKernelTCPMemory(t *testing.T) {
  17. skip.If(t, testEnv.DaemonInfo.OSType != "linux")
  18. skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.40"), "skip test from new feature")
  19. skip.If(t, !testEnv.DaemonInfo.KernelMemoryTCP)
  20. defer setupTest(t)()
  21. client := testEnv.APIClient()
  22. ctx := context.Background()
  23. const (
  24. kernelMemoryTCP int64 = 200 * 1024 * 1024
  25. )
  26. cID := container.Run(t, ctx, client, func(c *container.TestContainerConfig) {
  27. c.HostConfig.Resources = containertypes.Resources{
  28. KernelMemoryTCP: kernelMemoryTCP,
  29. }
  30. })
  31. poll.WaitOn(t, container.IsInState(ctx, client, cID, "running"), poll.WithDelay(100*time.Millisecond))
  32. inspect, err := client.ContainerInspect(ctx, cID)
  33. assert.NilError(t, err)
  34. assert.Check(t, is.Equal(kernelMemoryTCP, inspect.HostConfig.KernelMemoryTCP))
  35. res, err := container.Exec(ctx, client, cID,
  36. []string{"cat", "/sys/fs/cgroup/memory/memory.kmem.tcp.limit_in_bytes"})
  37. assert.NilError(t, err)
  38. assert.Assert(t, is.Len(res.Stderr(), 0))
  39. assert.Equal(t, 0, res.ExitCode)
  40. assert.Check(t, is.Equal(strconv.FormatInt(kernelMemoryTCP, 10), strings.TrimSpace(res.Stdout())))
  41. }
  42. func TestNISDomainname(t *testing.T) {
  43. // Older versions of the daemon would concatenate hostname and domainname,
  44. // so hostname "foobar" and domainname "baz.cyphar.com" would produce
  45. // `foobar.baz.cyphar.com` as hostname.
  46. skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.40"), "skip test from new feature")
  47. skip.If(t, testEnv.DaemonInfo.OSType != "linux")
  48. defer setupTest(t)()
  49. client := testEnv.APIClient()
  50. ctx := context.Background()
  51. const (
  52. hostname = "foobar"
  53. domainname = "baz.cyphar.com"
  54. )
  55. cID := container.Run(t, ctx, client, func(c *container.TestContainerConfig) {
  56. c.Config.Hostname = hostname
  57. c.Config.Domainname = domainname
  58. })
  59. poll.WaitOn(t, container.IsInState(ctx, client, cID, "running"), poll.WithDelay(100*time.Millisecond))
  60. inspect, err := client.ContainerInspect(ctx, cID)
  61. assert.NilError(t, err)
  62. assert.Check(t, is.Equal(hostname, inspect.Config.Hostname))
  63. assert.Check(t, is.Equal(domainname, inspect.Config.Domainname))
  64. // Check hostname.
  65. res, err := container.Exec(ctx, client, cID,
  66. []string{"cat", "/proc/sys/kernel/hostname"})
  67. assert.NilError(t, err)
  68. assert.Assert(t, is.Len(res.Stderr(), 0))
  69. assert.Equal(t, 0, res.ExitCode)
  70. assert.Check(t, is.Equal(hostname, strings.TrimSpace(res.Stdout())))
  71. // Check domainname.
  72. res, err = container.Exec(ctx, client, cID,
  73. []string{"cat", "/proc/sys/kernel/domainname"})
  74. assert.NilError(t, err)
  75. assert.Assert(t, is.Len(res.Stderr(), 0))
  76. assert.Equal(t, 0, res.ExitCode)
  77. assert.Check(t, is.Equal(domainname, strings.TrimSpace(res.Stdout())))
  78. }