Browse Source

raft: ignore old messages

Blake Mizerany 11 years ago
parent
commit
b06c0cc3ec
1 changed files with 31 additions and 4 deletions
  1. 31 4
      raft_test.go

+ 31 - 4
raft_test.go

@@ -51,12 +51,39 @@ func TestDualingCandidates(t *testing.T) {
 	t.Log("healing")
 	tt.heal()
 	tt.step(Message{To: 2, Type: msgHup})
-	if c.state != stateLeader {
-		t.Errorf("state = %s, want %s", c.state, stateLeader)
+
+	tests := []struct {
+		sm *stateMachine
+		state stateType
+		term int
+	}{
+		{a, stateFollower, 2},
+		{c, stateLeader, 2},
+	}
+
+	for i, tt := range tests {
+		if g := tt.sm.state; g != tt.state {
+			t.Errorf("#%d: state = %s, want %s", i, g, tt.state)
+		}
+		if g := tt.sm.term; g != tt.term {
+			t.Errorf("#%d: term = %d, want %d", i, g, tt.term)
+		}
 	}
-	if g := c.term; g != 2 {
-		t.Errorf("term = %d, want %d", g, 2)
+	if g := diffLogs(tt.logs(defaultLog)); g != nil {
+		for _, diff := range g {
+			t.Errorf("bag log:\n%s", diff)
+		}
 	}
+}
+
+func TestOldMessages(t *testing.T) {
+	tt := newNetwork(nil, nil, nil)
+	// make 0 leader @ term 3
+	tt.step(Message{To: 0, Type: msgHup})
+	tt.step(Message{To: 0, Type: msgHup})
+	tt.step(Message{To: 0, Type: msgHup})
+	// pretend we're an old leader trying to make progress
+	tt.step(Message{To: 0, Type: msgApp, Term: 1, Entries: []Entry{{Term: 1}}})
 	if g := diffLogs(tt.logs(defaultLog)); g != nil {
 		for _, diff := range g {
 			t.Errorf("bag log:\n%s", diff)