Browse code

Merge pull request #25104 from cpuguy83/fix_TestApiSwarmRaftQuorum

fix race in TestApiSwarmRaftQuorum

Sebastiaan van Stijn authored on 2016/07/27 19:50:09
Showing 2 changed files
... ...
@@ -300,3 +300,26 @@ func (d *SwarmDaemon) checkControlAvailable(c *check.C) (interface{}, check.Comm
300 300
 	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive)
301 301
 	return info.ControlAvailable, nil
302 302
 }
303
+
304
+func (d *SwarmDaemon) checkLeader(c *check.C) (interface{}, check.CommentInterface) {
305
+	errList := check.Commentf("could not get node list")
306
+	status, out, err := d.SockRequest("GET", "/nodes", nil)
307
+	if err != nil {
308
+		return err, errList
309
+	}
310
+	if status != http.StatusOK {
311
+		return fmt.Errorf("expected http status OK, got: %d", status), errList
312
+	}
313
+
314
+	var ls []swarm.Node
315
+	if err := json.Unmarshal(out, &ls); err != nil {
316
+		return err, errList
317
+	}
318
+
319
+	for _, node := range ls {
320
+		if node.ManagerStatus != nil && node.ManagerStatus.Leader {
321
+			return nil, nil
322
+		}
323
+	}
324
+	return fmt.Errorf("no leader"), check.Commentf("could not find leader")
325
+}
... ...
@@ -493,12 +493,18 @@ func (s *DockerSwarmSuite) TestApiSwarmRaftQuorum(c *check.C) {
493 493
 
494 494
 	c.Assert(d2.Stop(), checker.IsNil)
495 495
 
496
+	// make sure there is a leader
497
+	waitAndAssert(c, defaultReconciliationTimeout, d1.checkLeader, checker.IsNil)
498
+
496 499
 	d1.createService(c, simpleTestService, func(s *swarm.Service) {
497 500
 		s.Spec.Name = "top1"
498 501
 	})
499 502
 
500 503
 	c.Assert(d3.Stop(), checker.IsNil)
501 504
 
505
+	// make sure there is a leader
506
+	waitAndAssert(c, defaultReconciliationTimeout, d1.checkLeader, checker.IsNil)
507
+
502 508
 	var service swarm.Service
503 509
 	simpleTestService(&service)
504 510
 	service.Spec.Name = "top2"
... ...
@@ -508,6 +514,9 @@ func (s *DockerSwarmSuite) TestApiSwarmRaftQuorum(c *check.C) {
508 508
 
509 509
 	c.Assert(d2.Start(), checker.IsNil)
510 510
 
511
+	// make sure there is a leader
512
+	waitAndAssert(c, defaultReconciliationTimeout, d1.checkLeader, checker.IsNil)
513
+
511 514
 	d1.createService(c, simpleTestService, func(s *swarm.Service) {
512 515
 		s.Spec.Name = "top3"
513 516
 	})