Browse Source

Merge pull request #1945 from xiang90/raft_test

raft: use newRaft
Xiang Li 11 years ago
parent
commit
5369fb1c4f
2 changed files with 32 additions and 51 deletions
  1. 0 1
      raft/raft.go
  2. 32 50
      raft/raft_test.go

+ 0 - 1
raft/raft.go

@@ -279,7 +279,6 @@ func (r *raft) maybeCommit() bool {
 	}
 	}
 	sort.Sort(sort.Reverse(mis))
 	sort.Sort(sort.Reverse(mis))
 	mci := mis[r.q()-1]
 	mci := mis[r.q()-1]
-
 	return r.raftLog.maybeCommit(mci, r.Term)
 	return r.raftLog.maybeCommit(mci, r.Term)
 }
 }
 
 

+ 32 - 50
raft/raft_test.go

@@ -559,35 +559,34 @@ func TestCommit(t *testing.T) {
 		w       uint64
 		w       uint64
 	}{
 	}{
 		// single
 		// single
-		{[]uint64{1}, []pb.Entry{{}, {Term: 1}}, 1, 1},
-		{[]uint64{1}, []pb.Entry{{}, {Term: 1}}, 2, 0},
-		{[]uint64{2}, []pb.Entry{{}, {Term: 1}, {Term: 2}}, 2, 2},
-		{[]uint64{1}, []pb.Entry{{}, {Term: 2}}, 2, 1},
+		{[]uint64{1}, []pb.Entry{{Index: 1, Term: 1}}, 1, 1},
+		{[]uint64{1}, []pb.Entry{{Index: 1, Term: 1}}, 2, 0},
+		{[]uint64{2}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}}, 2, 2},
+		{[]uint64{1}, []pb.Entry{{Index: 1, Term: 2}}, 2, 1},
 
 
 		// odd
 		// odd
-		{[]uint64{2, 1, 1}, []pb.Entry{{}, {Term: 1}, {Term: 2}}, 1, 1},
-		{[]uint64{2, 1, 1}, []pb.Entry{{}, {Term: 1}, {Term: 1}}, 2, 0},
-		{[]uint64{2, 1, 2}, []pb.Entry{{}, {Term: 1}, {Term: 2}}, 2, 2},
-		{[]uint64{2, 1, 2}, []pb.Entry{{}, {Term: 1}, {Term: 1}}, 2, 0},
+		{[]uint64{2, 1, 1}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}}, 1, 1},
+		{[]uint64{2, 1, 1}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 1}}, 2, 0},
+		{[]uint64{2, 1, 2}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}}, 2, 2},
+		{[]uint64{2, 1, 2}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 1}}, 2, 0},
 
 
 		// even
 		// even
-		{[]uint64{2, 1, 1, 1}, []pb.Entry{{}, {Term: 1}, {Term: 2}}, 1, 1},
-		{[]uint64{2, 1, 1, 1}, []pb.Entry{{}, {Term: 1}, {Term: 1}}, 2, 0},
-		{[]uint64{2, 1, 1, 2}, []pb.Entry{{}, {Term: 1}, {Term: 2}}, 1, 1},
-		{[]uint64{2, 1, 1, 2}, []pb.Entry{{}, {Term: 1}, {Term: 1}}, 2, 0},
-		{[]uint64{2, 1, 2, 2}, []pb.Entry{{}, {Term: 1}, {Term: 2}}, 2, 2},
-		{[]uint64{2, 1, 2, 2}, []pb.Entry{{}, {Term: 1}, {Term: 1}}, 2, 0},
+		{[]uint64{2, 1, 1, 1}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}}, 1, 1},
+		{[]uint64{2, 1, 1, 1}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 1}}, 2, 0},
+		{[]uint64{2, 1, 1, 2}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}}, 1, 1},
+		{[]uint64{2, 1, 1, 2}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 1}}, 2, 0},
+		{[]uint64{2, 1, 2, 2}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}}, 2, 2},
+		{[]uint64{2, 1, 2, 2}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 1}}, 2, 0},
 	}
 	}
 
 
 	for i, tt := range tests {
 	for i, tt := range tests {
-		prs := make(map[uint64]*progress)
+		storage := NewMemoryStorage()
+		storage.Append(tt.logs)
+		storage.hardState = pb.HardState{Term: tt.smTerm}
+
+		sm := newRaft(1, []uint64{1}, 5, 1, storage)
 		for j := 0; j < len(tt.matches); j++ {
 		for j := 0; j < len(tt.matches); j++ {
-			prs[uint64(j)] = &progress{tt.matches[j], tt.matches[j] + 1}
-		}
-		sm := &raft{
-			raftLog:   &raftLog{storage: &MemoryStorage{ents: tt.logs}, unstable: unstable{offset: uint64(len(tt.logs))}},
-			prs:       prs,
-			HardState: pb.HardState{Term: tt.smTerm},
+			sm.setProgress(uint64(j)+1, tt.matches[j], tt.matches[j]+1)
 		}
 		}
 		sm.maybeCommit()
 		sm.maybeCommit()
 		if g := sm.raftLog.committed; g != tt.w {
 		if g := sm.raftLog.committed; g != tt.w {
@@ -675,15 +674,10 @@ func TestHandleMsgApp(t *testing.T) {
 	}
 	}
 
 
 	for i, tt := range tests {
 	for i, tt := range tests {
-		sm := &raft{
-			state:     StateFollower,
-			HardState: pb.HardState{Term: 2},
-			raftLog: &raftLog{
-				committed: 0,
-				storage:   &MemoryStorage{ents: []pb.Entry{{}, {Term: 1}, {Term: 2}}},
-				unstable:  unstable{offset: 3},
-			},
-		}
+		storage := NewMemoryStorage()
+		storage.Append([]pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}})
+		sm := newRaft(1, []uint64{1}, 10, 1, storage)
+		sm.becomeFollower(2, None)
 
 
 		sm.handleAppendEntries(tt.m)
 		sm.handleAppendEntries(tt.m)
 		if sm.raftLog.lastIndex() != tt.wIndex {
 		if sm.raftLog.lastIndex() != tt.wIndex {
@@ -709,18 +703,15 @@ func TestHandleHeartbeat(t *testing.T) {
 		m       pb.Message
 		m       pb.Message
 		wCommit uint64
 		wCommit uint64
 	}{
 	}{
-		{pb.Message{Type: pb.MsgApp, Term: 2, Commit: commit + 1}, commit + 1},
-		{pb.Message{Type: pb.MsgApp, Term: 2, Commit: commit - 1}, commit}, // do not decrease commit
+		{pb.Message{From: 2, To: 1, Type: pb.MsgApp, Term: 2, Commit: commit + 1}, commit + 1},
+		{pb.Message{From: 2, To: 1, Type: pb.MsgApp, Term: 2, Commit: commit - 1}, commit}, // do not decrease commit
 	}
 	}
 
 
 	for i, tt := range tests {
 	for i, tt := range tests {
 		storage := NewMemoryStorage()
 		storage := NewMemoryStorage()
 		storage.Append([]pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}, {Index: 3, Term: 3}})
 		storage.Append([]pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}, {Index: 3, Term: 3}})
-		sm := &raft{
-			state:     StateFollower,
-			HardState: pb.HardState{Term: 2},
-			raftLog:   newLog(storage),
-		}
+		sm := newRaft(1, []uint64{1, 2}, 5, 1, storage)
+		sm.becomeFollower(2, 2)
 		sm.raftLog.commitTo(commit)
 		sm.raftLog.commitTo(commit)
 		sm.handleHeartbeat(tt.m)
 		sm.handleHeartbeat(tt.m)
 		if sm.raftLog.committed != tt.wCommit {
 		if sm.raftLog.committed != tt.wCommit {
@@ -1345,10 +1336,7 @@ func TestPromotable(t *testing.T) {
 		{[]uint64{2, 3}, false},
 		{[]uint64{2, 3}, false},
 	}
 	}
 	for i, tt := range tests {
 	for i, tt := range tests {
-		r := &raft{id: id, prs: make(map[uint64]*progress)}
-		for _, id := range tt.peers {
-			r.prs[id] = &progress{}
-		}
+		r := newRaft(id, tt.peers, 5, 1, NewMemoryStorage())
 		if g := r.promotable(); g != tt.wp {
 		if g := r.promotable(); g != tt.wp {
 			t.Errorf("#%d: promotable = %v, want %v", i, g, tt.wp)
 			t.Errorf("#%d: promotable = %v, want %v", i, g, tt.wp)
 		}
 		}
@@ -1378,17 +1366,11 @@ func TestRaftNodes(t *testing.T) {
 }
 }
 
 
 func ents(terms ...uint64) *raft {
 func ents(terms ...uint64) *raft {
-	ents := []pb.Entry{{}}
+	storage := NewMemoryStorage()
 	for i, term := range terms {
 	for i, term := range terms {
-		ents = append(ents, pb.Entry{Index: uint64(i + 1), Term: term})
-	}
-
-	sm := &raft{
-		raftLog: &raftLog{
-			storage:  &MemoryStorage{ents: ents},
-			unstable: unstable{offset: uint64(len(ents))},
-		},
+		storage.Append([]pb.Entry{{Index: uint64(i + 1), Term: term}})
 	}
 	}
+	sm := newRaft(1, []uint64{}, 5, 1, storage)
 	sm.reset(0)
 	sm.reset(0)
 	return sm
 	return sm
 }
 }