raft: vote test for candidate and leader

release-2.0
Xiang Li 2014-05-24 21:43:12 -07:00 committed by Yicheng Qin
parent 828a8cf326
commit 59a720d8be
1 changed files with 24 additions and 20 deletions

View File

@ -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)
}