Test partial voting
This commit is contained in:
@@ -13,6 +13,8 @@ func TestOne(t *testing.T) {
|
|||||||
ts := NewTestSystem(t, 1)
|
ts := NewTestSystem(t, 1)
|
||||||
defer ts.Stop()
|
defer ts.Stop()
|
||||||
|
|
||||||
|
require.False(t, ts.Candidate(0).IsLeader())
|
||||||
|
|
||||||
require.Eventually(t, ts.Candidate(0).IsLeader, 20*time.Second, 100*time.Millisecond)
|
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)
|
ts := NewTestSystem(t, 3)
|
||||||
defer ts.Stop()
|
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.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) {
|
func TestFailover(t *testing.T) {
|
||||||
@@ -31,7 +39,13 @@ func TestFailover(t *testing.T) {
|
|||||||
ts := NewTestSystem(t, 3)
|
ts := NewTestSystem(t, 3)
|
||||||
defer ts.Stop()
|
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.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)
|
ts.SetServer(1)
|
||||||
|
|
||||||
@@ -39,6 +53,26 @@ func TestFailover(t *testing.T) {
|
|||||||
|
|
||||||
// New candidate must not get leadership before old candidate loses it
|
// New candidate must not get leadership before old candidate loses it
|
||||||
require.False(t, ts.Candidate(1).IsLeader())
|
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.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())
|
||||||
}
|
}
|
||||||
|
|||||||
5
voter.go
5
voter.go
@@ -61,8 +61,13 @@ func NewVoter(url string, signingKey string, candidate *Candidate) *Voter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (v *Voter) Stop() {
|
func (v *Voter) Stop() {
|
||||||
|
if v.update == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
close(v.update)
|
close(v.update)
|
||||||
<-v.done
|
<-v.done
|
||||||
|
v.update = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Voter) loop() {
|
func (v *Voter) loop() {
|
||||||
|
|||||||
Reference in New Issue
Block a user