Skip to content

Commit 331c0d6

Browse files
[FAB-2901] Fixing election test
During latest changes leader election callback invocation was changed from sync to async (go routine). It caused to tests that check if callback was invoked run before it was actually invoked. Test changed to handle this - if result is not as expected, we wait for a while and check again. Change-Id: Ib26dc5c7d48110c36d39a216e83bcc4a99981389 Signed-off-by: Gennady Laventman <[email protected]>
1 parent 09115c0 commit 331c0d6

File tree

1 file changed

+21
-10
lines changed

1 file changed

+21
-10
lines changed

gossip/election/election_test.go

+21-10
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,8 @@ func TestInitPeersAtSameTime(t *testing.T) {
207207
leaders := waitForLeaderElection(t, peers)
208208
isP0leader := peers[len(peers)-1].IsLeader()
209209
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")
211210
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)
212212
}
213213

214214
func TestInitPeersStartAtIntervals(t *testing.T) {
@@ -289,12 +289,12 @@ func TestConvergence(t *testing.T) {
289289

290290
for _, p := range combinedPeers {
291291
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)
294294
} 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)
296296
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)
298298
}
299299
}
300300
}
@@ -327,7 +327,7 @@ func TestPartition(t *testing.T) {
327327
leaders := waitForLeaderElection(t, peers)
328328
assert.Len(t, leaders, 1, "Only 1 leader should have been elected")
329329
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)
331331

332332
for _, p := range peers {
333333
p.On("Peers").Return([]Peer{})
@@ -337,7 +337,7 @@ func TestPartition(t *testing.T) {
337337
leaders = waitForMultipleLeadersElection(t, peers, 6)
338338
assert.Len(t, leaders, 6)
339339
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)
341341
}
342342

343343
for _, p := range peers {
@@ -352,10 +352,10 @@ func TestPartition(t *testing.T) {
352352
assert.Equal(t, "p0", leaders[0])
353353
for _, p := range peers {
354354
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)
356356
} 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)
359359
}
360360
}
361361

@@ -398,3 +398,14 @@ func TestConfigFromFile(t *testing.T) {
398398
assert.Equal(t, time.Second*5, getLeaderElectionDuration())
399399
assert.Equal(t, getLeaderAliveThreshold()/2, getLeadershipDeclarationInterval())
400400
}
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

Comments
 (0)