Browse Source

raft: vote test for candidate and leader

Xiang Li 11 years ago
parent
commit
59a720d8be
1 changed files with 28 additions and 24 deletions
  1. 28 24
      raft/raft_test.go

+ 28 - 24
raft/raft_test.go

@@ -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},
-
-		{1, 0, none, -1},
-		{1, 1, none, -1},
-		{1, 2, none, -1},
-		{1, 3, none, 2},
-
-		{2, 0, none, -1},
-		{2, 1, none, -1},
-		{2, 2, none, 2},
-		{2, 3, none, 2},
-
-		{3, 0, none, -1},
-		{3, 1, none, -1},
-		{3, 2, none, 2},
-		{3, 3, none, 2},
-
-		{3, 2, 0, 2},
-		{3, 2, 1, -1},
+		{stateFollower, 0, 0, none, -1},
+		{stateFollower, 0, 1, none, -1},
+		{stateFollower, 0, 2, none, -1},
+		{stateFollower, 0, 3, none, 2},
+
+		{stateFollower, 1, 0, none, -1},
+		{stateFollower, 1, 1, none, -1},
+		{stateFollower, 1, 2, none, -1},
+		{stateFollower, 1, 3, none, 2},
+
+		{stateFollower, 2, 0, none, -1},
+		{stateFollower, 2, 1, none, -1},
+		{stateFollower, 2, 2, none, 2},
+		{stateFollower, 2, 3, none, 2},
+
+		{stateFollower, 3, 0, none, -1},
+		{stateFollower, 3, 1, none, -1},
+		{stateFollower, 3, 2, none, 2},
+		{stateFollower, 3, 3, none, 2},
+
+		{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)
 		}