fix race in TestApiSwarmRaftQuorum
| ... | ... |
@@ -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 |
}) |