Test partial voting

This commit is contained in:
Ian Gulliver
2023-06-04 14:04:15 -07:00
parent ed7ce91819
commit ddea4c91e4
2 changed files with 39 additions and 0 deletions

View File

@@ -13,6 +13,8 @@ func TestOne(t *testing.T) {
ts := NewTestSystem(t, 1)
defer ts.Stop()
require.False(t, ts.Candidate(0).IsLeader())
require.Eventually(t, ts.Candidate(0).IsLeader, 20*time.Second, 100*time.Millisecond)
}
@@ -22,7 +24,13 @@ func TestThree(t *testing.T) {
ts := NewTestSystem(t, 3)
defer ts.Stop()
require.False(t, ts.Candidate(0).IsLeader())
require.False(t, ts.Candidate(1).IsLeader())
require.False(t, ts.Candidate(2).IsLeader())
require.Eventually(t, ts.Candidate(0).IsLeader, 20*time.Second, 100*time.Millisecond)
require.False(t, ts.Candidate(1).IsLeader())
require.False(t, ts.Candidate(2).IsLeader())
}
func TestFailover(t *testing.T) {
@@ -31,7 +39,13 @@ func TestFailover(t *testing.T) {
ts := NewTestSystem(t, 3)
defer ts.Stop()
require.False(t, ts.Candidate(0).IsLeader())
require.False(t, ts.Candidate(1).IsLeader())
require.False(t, ts.Candidate(2).IsLeader())
require.Eventually(t, ts.Candidate(0).IsLeader, 20*time.Second, 100*time.Millisecond)
require.False(t, ts.Candidate(1).IsLeader())
require.False(t, ts.Candidate(2).IsLeader())
ts.SetServer(1)
@@ -39,6 +53,26 @@ func TestFailover(t *testing.T) {
// New candidate must not get leadership before old candidate loses it
require.False(t, ts.Candidate(1).IsLeader())
require.False(t, ts.Candidate(2).IsLeader())
require.Eventually(t, ts.Candidate(1).IsLeader, 20*time.Second, 100*time.Millisecond)
require.False(t, ts.Candidate(0).IsLeader())
require.False(t, ts.Candidate(2).IsLeader())
}
func TestPartialVotes(t *testing.T) {
t.Parallel()
ts := NewTestSystem(t, 3)
defer ts.Stop()
ts.Voter(0).Stop()
require.False(t, ts.Candidate(0).IsLeader())
require.False(t, ts.Candidate(1).IsLeader())
require.False(t, ts.Candidate(2).IsLeader())
require.Eventually(t, ts.Candidate(0).IsLeader, 20*time.Second, 100*time.Millisecond)
require.False(t, ts.Candidate(1).IsLeader())
require.False(t, ts.Candidate(2).IsLeader())
}

View File

@@ -61,8 +61,13 @@ func NewVoter(url string, signingKey string, candidate *Candidate) *Voter {
}
func (v *Voter) Stop() {
if v.update == nil {
return
}
close(v.update)
<-v.done
v.update = nil
}
func (v *Voter) loop() {