Browse code

Use waitAndAssert to test node state changes

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
(cherry picked from commit f02ec39e99bfd36f34a965f78d853e19234e513b)
Signed-off-by: Tibor Vass <tibor@docker.com>

Tonis Tiigi authored on 2016/07/09 06:17:32
Showing 2 changed files
... ...
@@ -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