info_test.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package system // import "github.com/docker/docker/integration/system"
  2. import (
  3. "fmt"
  4. "sort"
  5. "testing"
  6. "github.com/docker/docker/api/types/registry"
  7. "github.com/docker/docker/testutil"
  8. "github.com/docker/docker/testutil/daemon"
  9. "gotest.tools/v3/assert"
  10. is "gotest.tools/v3/assert/cmp"
  11. "gotest.tools/v3/skip"
  12. )
  13. func TestInfoAPI(t *testing.T) {
  14. ctx := setupTest(t)
  15. client := testEnv.APIClient()
  16. info, err := client.Info(ctx)
  17. assert.NilError(t, err)
  18. // TODO(thaJeztah): make sure we have other tests that run a local daemon and check other fields based on known state.
  19. assert.Check(t, info.ID != "")
  20. assert.Check(t, is.Equal(info.Containers, info.ContainersRunning+info.ContainersPaused+info.ContainersStopped))
  21. assert.Check(t, info.LoggingDriver != "")
  22. assert.Check(t, info.OperatingSystem != "")
  23. assert.Check(t, info.NCPU != 0)
  24. assert.Check(t, info.OSType != "")
  25. assert.Check(t, info.Architecture != "")
  26. assert.Check(t, info.MemTotal != 0)
  27. assert.Check(t, info.KernelVersion != "")
  28. assert.Check(t, info.Driver != "")
  29. assert.Check(t, info.ServerVersion != "")
  30. assert.Check(t, info.SystemTime != "")
  31. if testEnv.DaemonInfo.OSType != "windows" {
  32. // Windows currently doesn't have security-options in the info response.
  33. assert.Check(t, len(info.SecurityOptions) != 0)
  34. }
  35. }
  36. func TestInfoAPIWarnings(t *testing.T) {
  37. skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon")
  38. skip.If(t, testEnv.DaemonInfo.OSType == "windows", "FIXME")
  39. ctx := testutil.StartSpan(baseContext, t)
  40. d := daemon.New(t)
  41. c := d.NewClientT(t)
  42. d.Start(t, "-H=0.0.0.0:23756", "-H="+d.Sock())
  43. defer d.Stop(t)
  44. info, err := c.Info(ctx)
  45. assert.NilError(t, err)
  46. stringsToCheck := []string{
  47. "Access to the remote API is equivalent to root access",
  48. "http://0.0.0.0:23756",
  49. }
  50. out := fmt.Sprintf("%+v", info)
  51. for _, linePrefix := range stringsToCheck {
  52. assert.Check(t, is.Contains(out, linePrefix))
  53. }
  54. }
  55. func TestInfoDebug(t *testing.T) {
  56. skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon")
  57. skip.If(t, testEnv.DaemonInfo.OSType == "windows", "FIXME: test starts daemon with -H unix://.....")
  58. _ = testutil.StartSpan(baseContext, t)
  59. d := daemon.New(t)
  60. d.Start(t, "--debug")
  61. defer d.Stop(t)
  62. info := d.Info(t)
  63. assert.Equal(t, info.Debug, true)
  64. // Note that the information below is not tied to debug-mode being enabled.
  65. assert.Check(t, info.NFd != 0)
  66. // TODO need a stable way to generate event listeners
  67. // assert.Check(t, info.NEventsListener != 0)
  68. assert.Check(t, info.NGoroutines != 0)
  69. assert.Equal(t, info.DockerRootDir, d.Root)
  70. }
  71. func TestInfoInsecureRegistries(t *testing.T) {
  72. skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon")
  73. skip.If(t, testEnv.DaemonInfo.OSType == "windows", "FIXME: test starts daemon with -H unix://.....")
  74. const (
  75. registryCIDR = "192.168.1.0/24"
  76. registryHost = "insecurehost.com:5000"
  77. )
  78. d := daemon.New(t)
  79. d.Start(t, "--insecure-registry="+registryCIDR, "--insecure-registry="+registryHost)
  80. defer d.Stop(t)
  81. info := d.Info(t)
  82. assert.Assert(t, is.Len(info.RegistryConfig.InsecureRegistryCIDRs, 2))
  83. cidrs := []string{
  84. info.RegistryConfig.InsecureRegistryCIDRs[0].String(),
  85. info.RegistryConfig.InsecureRegistryCIDRs[1].String(),
  86. }
  87. assert.Assert(t, is.Contains(cidrs, registryCIDR))
  88. assert.Assert(t, is.Contains(cidrs, "127.0.0.0/8"))
  89. assert.DeepEqual(t, *info.RegistryConfig.IndexConfigs["docker.io"], registry.IndexInfo{Name: "docker.io", Mirrors: []string{}, Secure: true, Official: true})
  90. assert.DeepEqual(t, *info.RegistryConfig.IndexConfigs[registryHost], registry.IndexInfo{Name: registryHost, Mirrors: []string{}, Secure: false, Official: false})
  91. }
  92. func TestInfoRegistryMirrors(t *testing.T) {
  93. skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon")
  94. skip.If(t, testEnv.DaemonInfo.OSType == "windows", "FIXME: test starts daemon with -H unix://.....")
  95. const (
  96. registryMirror1 = "https://192.168.1.2"
  97. registryMirror2 = "http://registry-mirror.example.com:5000"
  98. )
  99. d := daemon.New(t)
  100. d.Start(t, "--registry-mirror="+registryMirror1, "--registry-mirror="+registryMirror2)
  101. defer d.Stop(t)
  102. info := d.Info(t)
  103. sort.Strings(info.RegistryConfig.Mirrors)
  104. assert.DeepEqual(t, info.RegistryConfig.Mirrors, []string{registryMirror2 + "/", registryMirror1 + "/"})
  105. }