@@ -207,8 +207,8 @@ func TestInitPeersAtSameTime(t *testing.T) {
207
207
leaders := waitForLeaderElection (t , peers )
208
208
isP0leader := peers [len (peers )- 1 ].IsLeader ()
209
209
assert .True (t , isP0leader , "p0 isn't a leader. Leaders are: %v" , leaders )
210
- assert .True (t , peers [len (peers )- 1 ].isLeaderFromCallback (), "p0 didn't got leaderhip change callback invoked" )
211
210
assert .Len (t , leaders , 1 , "More than 1 leader elected" )
211
+ waitForBoolFunc (t , peers [len (peers )- 1 ].isLeaderFromCallback , true , "Leadership callback result is wrong for " , peers [len (peers )- 1 ].id )
212
212
}
213
213
214
214
func TestInitPeersStartAtIntervals (t * testing.T ) {
@@ -289,12 +289,12 @@ func TestConvergence(t *testing.T) {
289
289
290
290
for _ , p := range combinedPeers {
291
291
if p .id == finalLeaders [0 ] {
292
- assert . True (t , p .isLeaderFromCallback () , "Leadership callback result is wrong for " , p .id )
293
- assert . True (t , p .isCallbackInvoked () , "Leadership callback wasn't invoked for " , p .id )
292
+ waitForBoolFunc (t , p .isLeaderFromCallback , true , "Leadership callback result is wrong for " , p .id )
293
+ waitForBoolFunc (t , p .isCallbackInvoked , true , "Leadership callback wasn't invoked for " , p .id )
294
294
} else {
295
- assert . False (t , p .isLeaderFromCallback () , "Leadership callback result is wrong for " , p .id )
295
+ waitForBoolFunc (t , p .isLeaderFromCallback , false , "Leadership callback result is wrong for " , p .id )
296
296
if p .id == leaders2 [0 ] {
297
- assert . True (t , p .isCallbackInvoked () , "Leadership callback wasn't invoked for " , p .id )
297
+ waitForBoolFunc (t , p .isCallbackInvoked , true , "Leadership callback wasn't invoked for " , p .id )
298
298
}
299
299
}
300
300
}
@@ -327,7 +327,7 @@ func TestPartition(t *testing.T) {
327
327
leaders := waitForLeaderElection (t , peers )
328
328
assert .Len (t , leaders , 1 , "Only 1 leader should have been elected" )
329
329
assert .Equal (t , "p0" , leaders [0 ])
330
- assert . True (t , peers [len (peers )- 1 ].isLeaderFromCallback () , "Leadership callback result is wrong for %s" , peers [len (peers )- 1 ].id )
330
+ waitForBoolFunc (t , peers [len (peers )- 1 ].isLeaderFromCallback , true , "Leadership callback result is wrong for %s" , peers [len (peers )- 1 ].id )
331
331
332
332
for _ , p := range peers {
333
333
p .On ("Peers" ).Return ([]Peer {})
@@ -337,7 +337,7 @@ func TestPartition(t *testing.T) {
337
337
leaders = waitForMultipleLeadersElection (t , peers , 6 )
338
338
assert .Len (t , leaders , 6 )
339
339
for _ , p := range peers {
340
- assert . True (t , p .isLeaderFromCallback () , "Leadership callback result is wrong for %s" , p .id )
340
+ waitForBoolFunc (t , p .isLeaderFromCallback , true , "Leadership callback result is wrong for %s" , p .id )
341
341
}
342
342
343
343
for _ , p := range peers {
@@ -352,10 +352,10 @@ func TestPartition(t *testing.T) {
352
352
assert .Equal (t , "p0" , leaders [0 ])
353
353
for _ , p := range peers {
354
354
if p .id == leaders [0 ] {
355
- assert . True (t , p .isLeaderFromCallback () , "Leadership callback result is wrong for %s" , p .id )
355
+ waitForBoolFunc (t , p .isLeaderFromCallback , true , "Leadership callback result is wrong for %s" , p .id )
356
356
} else {
357
- assert . False (t , p .isLeaderFromCallback () , "Leadership callback result is wrong for %s" , p .id )
358
- assert . True (t , p .isCallbackInvoked () , "Leadership callback wasn't invoked for %s" , p .id )
357
+ waitForBoolFunc (t , p .isLeaderFromCallback , false , "Leadership callback result is wrong for %s" , p .id )
358
+ waitForBoolFunc (t , p .isCallbackInvoked , true , "Leadership callback wasn't invoked for %s" , p .id )
359
359
}
360
360
}
361
361
@@ -398,3 +398,14 @@ func TestConfigFromFile(t *testing.T) {
398
398
assert .Equal (t , time .Second * 5 , getLeaderElectionDuration ())
399
399
assert .Equal (t , getLeaderAliveThreshold ()/ 2 , getLeadershipDeclarationInterval ())
400
400
}
401
+
402
+ func waitForBoolFunc (t * testing.T , f func () bool , expectedValue bool , msgAndArgs ... interface {}) {
403
+ end := time .Now ().Add (testTimeout )
404
+ for time .Now ().Before (end ) {
405
+ if f () == expectedValue {
406
+ return
407
+ }
408
+ time .Sleep (testPollInterval )
409
+ }
410
+ assert .Fail (t , fmt .Sprintf ("Should be %t" , expectedValue ), msgAndArgs ... )
411
+ }
0 commit comments