Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
(cherry picked from commit f02ec39e99bfd36f34a965f78d853e19234e513b)
Signed-off-by: Tibor Vass <tibor@docker.com>
| ... | ... |
@@ -227,3 +227,16 @@ func (d *SwarmDaemon) updateSwarm(c *check.C, f ...specConstructor) {
|
| 227 | 227 |
c.Assert(err, checker.IsNil) |
| 228 | 228 |
c.Assert(status, checker.Equals, http.StatusOK, check.Commentf("output: %q", string(out)))
|
| 229 | 229 |
} |
| 230 |
+ |
|
| 231 |
+func (d *SwarmDaemon) checkLocalNodeState(c *check.C) (interface{}, check.CommentInterface) {
|
|
| 232 |
+ info, err := d.info() |
|
| 233 |
+ c.Assert(err, checker.IsNil) |
|
| 234 |
+ return info.LocalNodeState, nil |
|
| 235 |
+} |
|
| 236 |
+ |
|
| 237 |
+func (d *SwarmDaemon) checkControlAvailable(c *check.C) (interface{}, check.CommentInterface) {
|
|
| 238 |
+ info, err := d.info() |
|
| 239 |
+ c.Assert(err, checker.IsNil) |
|
| 240 |
+ c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive) |
|
| 241 |
+ return info.ControlAvailable, nil |
|
| 242 |
+} |
| ... | ... |
@@ -23,13 +23,13 @@ func (s *DockerSwarmSuite) TestApiSwarmInit(c *check.C) {
|
| 23 | 23 |
d1 := s.AddDaemon(c, true, true) |
| 24 | 24 |
info, err := d1.info() |
| 25 | 25 |
c.Assert(err, checker.IsNil) |
| 26 |
- c.Assert(info.ControlAvailable, checker.Equals, true) |
|
| 26 |
+ c.Assert(info.ControlAvailable, checker.True) |
|
| 27 | 27 |
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive) |
| 28 | 28 |
|
| 29 | 29 |
d2 := s.AddDaemon(c, true, false) |
| 30 | 30 |
info, err = d2.info() |
| 31 | 31 |
c.Assert(err, checker.IsNil) |
| 32 |
- c.Assert(info.ControlAvailable, checker.Equals, false) |
|
| 32 |
+ c.Assert(info.ControlAvailable, checker.False) |
|
| 33 | 33 |
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive) |
| 34 | 34 |
|
| 35 | 35 |
// Leaving cluster |
| ... | ... |
@@ -37,14 +37,14 @@ func (s *DockerSwarmSuite) TestApiSwarmInit(c *check.C) {
|
| 37 | 37 |
|
| 38 | 38 |
info, err = d2.info() |
| 39 | 39 |
c.Assert(err, checker.IsNil) |
| 40 |
- c.Assert(info.ControlAvailable, checker.Equals, false) |
|
| 40 |
+ c.Assert(info.ControlAvailable, checker.False) |
|
| 41 | 41 |
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive) |
| 42 | 42 |
|
| 43 | 43 |
c.Assert(d2.Join(swarm.JoinRequest{RemoteAddrs: []string{d1.listenAddr}}), checker.IsNil)
|
| 44 | 44 |
|
| 45 | 45 |
info, err = d2.info() |
| 46 | 46 |
c.Assert(err, checker.IsNil) |
| 47 |
- c.Assert(info.ControlAvailable, checker.Equals, false) |
|
| 47 |
+ c.Assert(info.ControlAvailable, checker.False) |
|
| 48 | 48 |
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive) |
| 49 | 49 |
|
| 50 | 50 |
// Current state restoring after restarts |
| ... | ... |
@@ -60,12 +60,12 @@ func (s *DockerSwarmSuite) TestApiSwarmInit(c *check.C) {
|
| 60 | 60 |
|
| 61 | 61 |
info, err = d1.info() |
| 62 | 62 |
c.Assert(err, checker.IsNil) |
| 63 |
- c.Assert(info.ControlAvailable, checker.Equals, true) |
|
| 63 |
+ c.Assert(info.ControlAvailable, checker.True) |
|
| 64 | 64 |
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive) |
| 65 | 65 |
|
| 66 | 66 |
info, err = d2.info() |
| 67 | 67 |
c.Assert(err, checker.IsNil) |
| 68 |
- c.Assert(info.ControlAvailable, checker.Equals, false) |
|
| 68 |
+ c.Assert(info.ControlAvailable, checker.False) |
|
| 69 | 69 |
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive) |
| 70 | 70 |
} |
| 71 | 71 |
|
| ... | ... |
@@ -118,17 +118,7 @@ func (s *DockerSwarmSuite) testAPISwarmManualAcceptance(c *check.C, secret strin |
| 118 | 118 |
d1.updateNode(c, info.NodeID, func(n *swarm.Node) {
|
| 119 | 119 |
n.Spec.Membership = swarm.NodeMembershipAccepted |
| 120 | 120 |
}) |
| 121 |
- for i := 0; ; i++ {
|
|
| 122 |
- info, err := d3.info() |
|
| 123 |
- c.Assert(err, checker.IsNil) |
|
| 124 |
- if info.LocalNodeState == swarm.LocalNodeStateActive {
|
|
| 125 |
- break |
|
| 126 |
- } |
|
| 127 |
- if i > 100 {
|
|
| 128 |
- c.Fatalf("node did not become active")
|
|
| 129 |
- } |
|
| 130 |
- time.Sleep(200 * time.Millisecond) |
|
| 131 |
- } |
|
| 121 |
+ waitAndAssert(c, defaultReconciliationTimeout, d3.checkLocalNodeState, checker.Equals, swarm.LocalNodeStateActive) |
|
| 132 | 122 |
} |
| 133 | 123 |
|
| 134 | 124 |
func (s *DockerSwarmSuite) TestApiSwarmSecretAcceptance(c *check.C) {
|
| ... | ... |
@@ -268,42 +258,20 @@ func (s *DockerSwarmSuite) TestApiSwarmPromoteDemote(c *check.C) {
|
| 268 | 268 |
|
| 269 | 269 |
info, err := d2.info() |
| 270 | 270 |
c.Assert(err, checker.IsNil) |
| 271 |
- c.Assert(info.ControlAvailable, checker.Equals, false) |
|
| 271 |
+ c.Assert(info.ControlAvailable, checker.False) |
|
| 272 | 272 |
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive) |
| 273 | 273 |
|
| 274 | 274 |
d1.updateNode(c, d2.NodeID, func(n *swarm.Node) {
|
| 275 | 275 |
n.Spec.Role = swarm.NodeRoleManager |
| 276 | 276 |
}) |
| 277 | 277 |
|
| 278 |
- for i := 0; ; i++ {
|
|
| 279 |
- info, err := d2.info() |
|
| 280 |
- c.Assert(err, checker.IsNil) |
|
| 281 |
- c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive) |
|
| 282 |
- if info.ControlAvailable {
|
|
| 283 |
- break |
|
| 284 |
- } |
|
| 285 |
- if i > 100 {
|
|
| 286 |
- c.Errorf("node did not turn into manager")
|
|
| 287 |
- } |
|
| 288 |
- time.Sleep(100 * time.Millisecond) |
|
| 289 |
- } |
|
| 278 |
+ waitAndAssert(c, defaultReconciliationTimeout, d2.checkControlAvailable, checker.True) |
|
| 290 | 279 |
|
| 291 | 280 |
d1.updateNode(c, d2.NodeID, func(n *swarm.Node) {
|
| 292 | 281 |
n.Spec.Role = swarm.NodeRoleWorker |
| 293 | 282 |
}) |
| 294 | 283 |
|
| 295 |
- for i := 0; ; i++ {
|
|
| 296 |
- info, err := d2.info() |
|
| 297 |
- c.Assert(err, checker.IsNil) |
|
| 298 |
- c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive) |
|
| 299 |
- if !info.ControlAvailable {
|
|
| 300 |
- break |
|
| 301 |
- } |
|
| 302 |
- if i > 100 {
|
|
| 303 |
- c.Errorf("node did not turn into worker")
|
|
| 304 |
- } |
|
| 305 |
- time.Sleep(100 * time.Millisecond) |
|
| 306 |
- } |
|
| 284 |
+ waitAndAssert(c, defaultReconciliationTimeout, d2.checkControlAvailable, checker.False) |
|
| 307 | 285 |
|
| 308 | 286 |
// Demoting last node should fail |
| 309 | 287 |
node := d1.getNode(c, d1.NodeID) |
| ... | ... |
@@ -316,25 +284,14 @@ func (s *DockerSwarmSuite) TestApiSwarmPromoteDemote(c *check.C) {
|
| 316 | 316 |
info, err = d1.info() |
| 317 | 317 |
c.Assert(err, checker.IsNil) |
| 318 | 318 |
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive) |
| 319 |
- c.Assert(info.ControlAvailable, checker.Equals, true) |
|
| 319 |
+ c.Assert(info.ControlAvailable, checker.True) |
|
| 320 | 320 |
|
| 321 | 321 |
// Promote already demoted node |
| 322 | 322 |
d1.updateNode(c, d2.NodeID, func(n *swarm.Node) {
|
| 323 | 323 |
n.Spec.Role = swarm.NodeRoleManager |
| 324 | 324 |
}) |
| 325 | 325 |
|
| 326 |
- for i := 0; ; i++ {
|
|
| 327 |
- info, err := d2.info() |
|
| 328 |
- c.Assert(err, checker.IsNil) |
|
| 329 |
- c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive) |
|
| 330 |
- if info.ControlAvailable {
|
|
| 331 |
- break |
|
| 332 |
- } |
|
| 333 |
- if i > 100 {
|
|
| 334 |
- c.Errorf("node did not turn into manager")
|
|
| 335 |
- } |
|
| 336 |
- time.Sleep(100 * time.Millisecond) |
|
| 337 |
- } |
|
| 326 |
+ waitAndAssert(c, defaultReconciliationTimeout, d2.checkControlAvailable, checker.True) |
|
| 338 | 327 |
} |
| 339 | 328 |
|
| 340 | 329 |
func (s *DockerSwarmSuite) TestApiSwarmServicesCreate(c *check.C) {
|
| ... | ... |
@@ -632,17 +589,7 @@ func (s *DockerSwarmSuite) TestApiSwarmLeaveOnPendingJoin(c *check.C) {
|
| 632 | 632 |
RemoteAddrs: []string{"nosuchhost:1234"},
|
| 633 | 633 |
}) // will block on pending state |
| 634 | 634 |
|
| 635 |
- for i := 0; ; i++ {
|
|
| 636 |
- info, err := d2.info() |
|
| 637 |
- c.Assert(err, checker.IsNil) |
|
| 638 |
- if info.LocalNodeState == swarm.LocalNodeStatePending {
|
|
| 639 |
- break |
|
| 640 |
- } |
|
| 641 |
- if i > 100 {
|
|
| 642 |
- c.Fatalf("node did not go to pending state: %v", info.LocalNodeState)
|
|
| 643 |
- } |
|
| 644 |
- time.Sleep(100 * time.Millisecond) |
|
| 645 |
- } |
|
| 635 |
+ waitAndAssert(c, defaultReconciliationTimeout, d2.checkLocalNodeState, checker.Equals, swarm.LocalNodeStatePending) |
|
| 646 | 636 |
|
| 647 | 637 |
c.Assert(d2.Leave(true), checker.IsNil) |
| 648 | 638 |
|
| ... | ... |
@@ -660,17 +607,7 @@ func (s *DockerSwarmSuite) TestApiSwarmRestoreOnPendingJoin(c *check.C) {
|
| 660 | 660 |
RemoteAddrs: []string{"nosuchhost:1234"},
|
| 661 | 661 |
}) // will block on pending state |
| 662 | 662 |
|
| 663 |
- for i := 0; ; i++ {
|
|
| 664 |
- info, err := d.info() |
|
| 665 |
- c.Assert(err, checker.IsNil) |
|
| 666 |
- if info.LocalNodeState == swarm.LocalNodeStatePending {
|
|
| 667 |
- break |
|
| 668 |
- } |
|
| 669 |
- if i > 100 {
|
|
| 670 |
- c.Fatalf("node did not go to pending state: %v", info.LocalNodeState)
|
|
| 671 |
- } |
|
| 672 |
- time.Sleep(100 * time.Millisecond) |
|
| 673 |
- } |
|
| 663 |
+ waitAndAssert(c, defaultReconciliationTimeout, d.checkLocalNodeState, checker.Equals, swarm.LocalNodeStatePending) |
|
| 674 | 664 |
|
| 675 | 665 |
c.Assert(d.Stop(), checker.IsNil) |
| 676 | 666 |
c.Assert(d.Start(), checker.IsNil) |
| ... | ... |
@@ -777,7 +714,7 @@ func (s *DockerSwarmSuite) TestApiSwarmForceNewCluster(c *check.C) {
|
| 777 | 777 |
d3 := s.AddDaemon(c, true, true) |
| 778 | 778 |
info, err := d3.info() |
| 779 | 779 |
c.Assert(err, checker.IsNil) |
| 780 |
- c.Assert(info.ControlAvailable, checker.Equals, true) |
|
| 780 |
+ c.Assert(info.ControlAvailable, checker.True) |
|
| 781 | 781 |
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive) |
| 782 | 782 |
|
| 783 | 783 |
instances = 4 |