info_linux_test.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. // +build !windows
  2. package system // import "github.com/docker/docker/integration/system"
  3. import (
  4. "context"
  5. "fmt"
  6. "net"
  7. "net/http"
  8. "testing"
  9. "github.com/docker/docker/testutil/daemon"
  10. req "github.com/docker/docker/testutil/request"
  11. "gotest.tools/v3/assert"
  12. is "gotest.tools/v3/assert/cmp"
  13. "gotest.tools/v3/skip"
  14. )
  15. func TestInfoBinaryCommits(t *testing.T) {
  16. defer setupTest(t)()
  17. client := testEnv.APIClient()
  18. info, err := client.Info(context.Background())
  19. assert.NilError(t, err)
  20. assert.Check(t, "N/A" != info.ContainerdCommit.ID)
  21. assert.Check(t, is.Equal(info.ContainerdCommit.Expected, info.ContainerdCommit.ID))
  22. assert.Check(t, "N/A" != info.InitCommit.ID)
  23. assert.Check(t, is.Equal(info.InitCommit.Expected, info.InitCommit.ID))
  24. assert.Check(t, "N/A" != info.RuncCommit.ID)
  25. assert.Check(t, is.Equal(info.RuncCommit.Expected, info.RuncCommit.ID))
  26. }
  27. func TestInfoAPIVersioned(t *testing.T) {
  28. // Windows only supports 1.25 or later
  29. res, body, err := req.Get("/v1.20/info")
  30. assert.NilError(t, err)
  31. assert.Check(t, is.DeepEqual(res.StatusCode, http.StatusOK))
  32. b, err := req.ReadBody(body)
  33. assert.NilError(t, err)
  34. out := string(b)
  35. assert.Check(t, is.Contains(out, "ExecutionDriver"))
  36. assert.Check(t, is.Contains(out, "not supported"))
  37. }
  38. // TestInfoDiscoveryBackend verifies that a daemon run with `--cluster-advertise` and
  39. // `--cluster-store` properly returns the backend's endpoint in info output.
  40. func TestInfoDiscoveryBackend(t *testing.T) {
  41. skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon")
  42. const (
  43. discoveryBackend = "consul://consuladdr:consulport/some/path"
  44. discoveryAdvertise = "1.1.1.1:2375"
  45. )
  46. d := daemon.New(t)
  47. d.Start(t, "--cluster-store="+discoveryBackend, "--cluster-advertise="+discoveryAdvertise)
  48. defer d.Stop(t)
  49. info := d.Info(t)
  50. assert.Equal(t, info.ClusterStore, discoveryBackend)
  51. assert.Equal(t, info.ClusterAdvertise, discoveryAdvertise)
  52. }
  53. // TestInfoDiscoveryInvalidAdvertise verifies that a daemon run with
  54. // an invalid `--cluster-advertise` configuration
  55. func TestInfoDiscoveryInvalidAdvertise(t *testing.T) {
  56. skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon")
  57. d := daemon.New(t)
  58. // --cluster-advertise with an invalid string is an error
  59. err := d.StartWithError("--cluster-store=consul://consuladdr:consulport/some/path", "--cluster-advertise=invalid")
  60. if err == nil {
  61. d.Stop(t)
  62. }
  63. assert.ErrorContains(t, err, "", "expected error when starting daemon")
  64. // --cluster-advertise without --cluster-store is also an error
  65. err = d.StartWithError("--cluster-advertise=1.1.1.1:2375")
  66. if err == nil {
  67. d.Stop(t)
  68. }
  69. assert.ErrorContains(t, err, "", "expected error when starting daemon")
  70. }
  71. // TestInfoDiscoveryAdvertiseInterfaceName verifies that a daemon run with `--cluster-advertise`
  72. // configured with interface name properly show the advertise ip-address in info output.
  73. func TestInfoDiscoveryAdvertiseInterfaceName(t *testing.T) {
  74. skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon")
  75. skip.If(t, testEnv.IsRootless, "rootless mode has different view of network")
  76. // TODO should we check for networking availability (integration-cli suite checks for networking through `Network()`)
  77. d := daemon.New(t)
  78. const (
  79. discoveryStore = "consul://consuladdr:consulport/some/path"
  80. discoveryInterface = "eth0"
  81. )
  82. d.Start(t, "--cluster-store="+discoveryStore, fmt.Sprintf("--cluster-advertise=%s:2375", discoveryInterface))
  83. defer d.Stop(t)
  84. iface, err := net.InterfaceByName(discoveryInterface)
  85. assert.NilError(t, err)
  86. addrs, err := iface.Addrs()
  87. assert.NilError(t, err)
  88. assert.Assert(t, len(addrs) > 0)
  89. ip, _, err := net.ParseCIDR(addrs[0].String())
  90. assert.NilError(t, err)
  91. info := d.Info(t)
  92. assert.Equal(t, info.ClusterStore, discoveryStore)
  93. assert.Equal(t, info.ClusterAdvertise, ip.String()+":2375")
  94. }