docker_cli_swarm_test.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. // +build !windows
  2. package main
  3. import (
  4. "encoding/json"
  5. "io/ioutil"
  6. "time"
  7. "github.com/docker/docker/pkg/integration/checker"
  8. "github.com/docker/engine-api/types/swarm"
  9. "github.com/go-check/check"
  10. )
  11. func (s *DockerSwarmSuite) TestSwarmUpdate(c *check.C) {
  12. d := s.AddDaemon(c, true, true)
  13. getSpec := func() swarm.Spec {
  14. out, err := d.Cmd("swarm", "inspect")
  15. c.Assert(err, checker.IsNil)
  16. var sw []swarm.Swarm
  17. c.Assert(json.Unmarshal([]byte(out), &sw), checker.IsNil)
  18. c.Assert(len(sw), checker.Equals, 1)
  19. return sw[0].Spec
  20. }
  21. out, err := d.Cmd("swarm", "update", "--cert-expiry", "30h", "--dispatcher-heartbeat", "11s", "--auto-accept", "manager", "--auto-accept", "worker", "--secret", "foo")
  22. c.Assert(err, checker.IsNil, check.Commentf("out: %v", out))
  23. spec := getSpec()
  24. c.Assert(spec.CAConfig.NodeCertExpiry, checker.Equals, 30*time.Hour)
  25. c.Assert(spec.Dispatcher.HeartbeatPeriod, checker.Equals, uint64(11*time.Second))
  26. c.Assert(spec.AcceptancePolicy.Policies, checker.HasLen, 2)
  27. for _, p := range spec.AcceptancePolicy.Policies {
  28. c.Assert(p.Autoaccept, checker.Equals, true)
  29. c.Assert(p.Secret, checker.NotNil)
  30. c.Assert(*p.Secret, checker.Not(checker.Equals), "")
  31. }
  32. out, err = d.Cmd("swarm", "update", "--auto-accept", "none")
  33. c.Assert(err, checker.IsNil, check.Commentf("out: %v", out))
  34. spec = getSpec()
  35. c.Assert(spec.CAConfig.NodeCertExpiry, checker.Equals, 30*time.Hour)
  36. c.Assert(spec.Dispatcher.HeartbeatPeriod, checker.Equals, uint64(11*time.Second))
  37. c.Assert(spec.AcceptancePolicy.Policies, checker.HasLen, 2)
  38. for _, p := range spec.AcceptancePolicy.Policies {
  39. c.Assert(p.Autoaccept, checker.Equals, false)
  40. // secret is still set
  41. c.Assert(p.Secret, checker.NotNil)
  42. c.Assert(*p.Secret, checker.Not(checker.Equals), "")
  43. }
  44. out, err = d.Cmd("swarm", "update", "--auto-accept", "manager", "--secret", "")
  45. c.Assert(err, checker.IsNil, check.Commentf("out: %v", out))
  46. spec = getSpec()
  47. c.Assert(spec.AcceptancePolicy.Policies, checker.HasLen, 2)
  48. for _, p := range spec.AcceptancePolicy.Policies {
  49. c.Assert(p.Autoaccept, checker.Equals, p.Role == swarm.NodeRoleManager)
  50. // secret has been removed
  51. c.Assert(p.Secret, checker.IsNil)
  52. }
  53. // setting anything under 30m for cert-expiry is not allowed
  54. out, err = d.Cmd("swarm", "update", "--cert-expiry", "15m")
  55. c.Assert(err, checker.NotNil)
  56. c.Assert(out, checker.Contains, "minimum certificate expiry time")
  57. spec = getSpec()
  58. c.Assert(spec.CAConfig.NodeCertExpiry, checker.Equals, 30*time.Hour)
  59. }
  60. func (s *DockerSwarmSuite) TestSwarmInit(c *check.C) {
  61. d := s.AddDaemon(c, false, false)
  62. getSpec := func() swarm.Spec {
  63. out, err := d.Cmd("swarm", "inspect")
  64. c.Assert(err, checker.IsNil)
  65. var sw []swarm.Swarm
  66. c.Assert(json.Unmarshal([]byte(out), &sw), checker.IsNil)
  67. c.Assert(len(sw), checker.Equals, 1)
  68. return sw[0].Spec
  69. }
  70. out, err := d.Cmd("swarm", "init", "--cert-expiry", "30h", "--dispatcher-heartbeat", "11s", "--auto-accept", "manager", "--auto-accept", "worker", "--secret", "foo")
  71. c.Assert(err, checker.IsNil, check.Commentf("out: %v", out))
  72. spec := getSpec()
  73. c.Assert(spec.CAConfig.NodeCertExpiry, checker.Equals, 30*time.Hour)
  74. c.Assert(spec.Dispatcher.HeartbeatPeriod, checker.Equals, uint64(11*time.Second))
  75. c.Assert(spec.AcceptancePolicy.Policies, checker.HasLen, 2)
  76. for _, p := range spec.AcceptancePolicy.Policies {
  77. c.Assert(p.Autoaccept, checker.Equals, true)
  78. c.Assert(p.Secret, checker.NotNil)
  79. c.Assert(*p.Secret, checker.Not(checker.Equals), "")
  80. }
  81. c.Assert(d.Leave(true), checker.IsNil)
  82. out, err = d.Cmd("swarm", "init", "--auto-accept", "none")
  83. c.Assert(err, checker.IsNil, check.Commentf("out: %v", out))
  84. spec = getSpec()
  85. c.Assert(spec.CAConfig.NodeCertExpiry, checker.Equals, 90*24*time.Hour)
  86. c.Assert(spec.Dispatcher.HeartbeatPeriod, checker.Equals, uint64(5*time.Second))
  87. c.Assert(spec.AcceptancePolicy.Policies, checker.HasLen, 2)
  88. for _, p := range spec.AcceptancePolicy.Policies {
  89. c.Assert(p.Autoaccept, checker.Equals, false)
  90. c.Assert(p.Secret, checker.IsNil)
  91. }
  92. }
  93. func (s *DockerSwarmSuite) TestSwarmInitIPv6(c *check.C) {
  94. testRequires(c, IPv6)
  95. d1 := s.AddDaemon(c, false, false)
  96. out, err := d1.Cmd("swarm", "init", "--listen-addr", "::1")
  97. c.Assert(err, checker.IsNil, check.Commentf("out: %v", out))
  98. d2 := s.AddDaemon(c, false, false)
  99. out, err = d2.Cmd("swarm", "join", "::1")
  100. c.Assert(err, checker.IsNil, check.Commentf("out: %v", out))
  101. out, err = d2.Cmd("info")
  102. c.Assert(err, checker.IsNil, check.Commentf("out: %v", out))
  103. c.Assert(out, checker.Contains, "Swarm: active")
  104. }
  105. func (s *DockerSwarmSuite) TestSwarmIncompatibleDaemon(c *check.C) {
  106. // init swarm mode and stop a daemon
  107. d := s.AddDaemon(c, true, true)
  108. info, err := d.info()
  109. c.Assert(err, checker.IsNil)
  110. c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive)
  111. c.Assert(d.Stop(), checker.IsNil)
  112. // start a daemon with --cluster-store and --cluster-advertise
  113. err = d.Start("--cluster-store=consul://consuladdr:consulport/some/path", "--cluster-advertise=1.1.1.1:2375")
  114. c.Assert(err, checker.NotNil)
  115. content, _ := ioutil.ReadFile(d.logFile.Name())
  116. c.Assert(string(content), checker.Contains, "--cluster-store and --cluster-advertise daemon configurations are incompatible with swarm mode")
  117. // start a daemon with --live-restore
  118. err = d.Start("--live-restore")
  119. c.Assert(err, checker.NotNil)
  120. content, _ = ioutil.ReadFile(d.logFile.Name())
  121. c.Assert(string(content), checker.Contains, "--live-restore daemon configuration is incompatible with swarm mode")
  122. // restart for teardown
  123. c.Assert(d.Start(), checker.IsNil)
  124. }