raft: vote test for candidate and leader
parent
828a8cf326
commit
59a720d8be
|
@ -345,37 +345,41 @@ func TestCommit(t *testing.T) {
|
|||
|
||||
func TestVote(t *testing.T) {
|
||||
tests := []struct {
|
||||
state stateType
|
||||
i, term int
|
||||
voteFor int
|
||||
w int
|
||||
}{
|
||||
{0, 0, none, -1},
|
||||
{0, 1, none, -1},
|
||||
{0, 2, none, -1},
|
||||
{0, 3, none, 2},
|
||||
{stateFollower, 0, 0, none, -1},
|
||||
{stateFollower, 0, 1, none, -1},
|
||||
{stateFollower, 0, 2, none, -1},
|
||||
{stateFollower, 0, 3, none, 2},
|
||||
|
||||
{1, 0, none, -1},
|
||||
{1, 1, none, -1},
|
||||
{1, 2, none, -1},
|
||||
{1, 3, none, 2},
|
||||
{stateFollower, 1, 0, none, -1},
|
||||
{stateFollower, 1, 1, none, -1},
|
||||
{stateFollower, 1, 2, none, -1},
|
||||
{stateFollower, 1, 3, none, 2},
|
||||
|
||||
{2, 0, none, -1},
|
||||
{2, 1, none, -1},
|
||||
{2, 2, none, 2},
|
||||
{2, 3, none, 2},
|
||||
{stateFollower, 2, 0, none, -1},
|
||||
{stateFollower, 2, 1, none, -1},
|
||||
{stateFollower, 2, 2, none, 2},
|
||||
{stateFollower, 2, 3, none, 2},
|
||||
|
||||
{3, 0, none, -1},
|
||||
{3, 1, none, -1},
|
||||
{3, 2, none, 2},
|
||||
{3, 3, none, 2},
|
||||
{stateFollower, 3, 0, none, -1},
|
||||
{stateFollower, 3, 1, none, -1},
|
||||
{stateFollower, 3, 2, none, 2},
|
||||
{stateFollower, 3, 3, none, 2},
|
||||
|
||||
{3, 2, 0, 2},
|
||||
{3, 2, 1, -1},
|
||||
{stateFollower, 3, 2, 1, 2},
|
||||
{stateFollower, 3, 2, 0, -1},
|
||||
|
||||
{stateLeader, 3, 3, 0, -1},
|
||||
{stateCandidate, 3, 3, 0, -1},
|
||||
}
|
||||
|
||||
for i, tt := range tests {
|
||||
called := false
|
||||
sm := &nsm{stateMachine{vote: tt.voteFor, log: &log{ents: []Entry{{}, {Term: 2}, {Term: 2}}}}, nil}
|
||||
sm := &nsm{stateMachine{state: tt.state, vote: tt.voteFor, log: &log{ents: []Entry{{}, {Term: 2}, {Term: 2}}}}, nil}
|
||||
|
||||
sm.next = stepperFunc(func(m Message) {
|
||||
called = true
|
||||
|
@ -383,7 +387,7 @@ func TestVote(t *testing.T) {
|
|||
t.Errorf("#%d, m.Index = %d, want %d", i, m.Index, tt.w)
|
||||
}
|
||||
})
|
||||
sm.Step(Message{Type: msgVote, Index: tt.i, LogTerm: tt.term})
|
||||
sm.Step(Message{Type: msgVote, From: 1, Index: tt.i, LogTerm: tt.term})
|
||||
if !called {
|
||||
t.Fatal("#%d: not called", i)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue