mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #1522 from jonboulle/raft_tests
raft: add tests for progress.maybeDecr
This commit is contained in:
commit
4f6206bf65
@ -66,9 +66,8 @@ func (pr *progress) update(n uint64) {
|
|||||||
// maybeDecrTo returns false if the given to index comes from an out of order message.
|
// maybeDecrTo returns false if the given to index comes from an out of order message.
|
||||||
// Otherwise it decreases the progress next index and returns true.
|
// Otherwise it decreases the progress next index and returns true.
|
||||||
func (pr *progress) maybeDecrTo(to uint64) bool {
|
func (pr *progress) maybeDecrTo(to uint64) bool {
|
||||||
// the rejection must be stale if the
|
// the rejection must be stale if the progress has matched with
|
||||||
// progress has matched with follower
|
// follower or "to" does not match next - 1
|
||||||
// or "to" does not match next - 1
|
|
||||||
if pr.match != 0 || pr.next-1 != to {
|
if pr.match != 0 || pr.next-1 != to {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,61 @@ func (r *raft) readMessages() []pb.Message {
|
|||||||
return msgs
|
return msgs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestProgressMaybeDecr(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
m uint64
|
||||||
|
n uint64
|
||||||
|
to uint64
|
||||||
|
|
||||||
|
w bool
|
||||||
|
wn uint64
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
// match != 0 is always false
|
||||||
|
1, 0, 0, false, 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// match != 0 is always false
|
||||||
|
5, 10, 9, false, 10,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// next-1 != to is always false
|
||||||
|
0, 0, 0, false, 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// next-1 != to is always false
|
||||||
|
0, 10, 5, false, 10,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// next>1 = decremented by 1
|
||||||
|
0, 10, 9, true, 9,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// next>1 = decremented by 1
|
||||||
|
0, 2, 1, true, 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// next<=1 = reset to 1
|
||||||
|
0, 1, 0, true, 1,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for i, tt := range tests {
|
||||||
|
p := &progress{
|
||||||
|
match: tt.m,
|
||||||
|
next: tt.n,
|
||||||
|
}
|
||||||
|
if g := p.maybeDecrTo(tt.to); g != tt.w {
|
||||||
|
t.Errorf("#%d: maybeDecrTo=%t, want %t", i, g, tt.w)
|
||||||
|
}
|
||||||
|
if gm := p.match; gm != tt.m {
|
||||||
|
t.Errorf("#%d: match=%d, want %d", i, gm, tt.m)
|
||||||
|
}
|
||||||
|
if gn := p.next; gn != tt.wn {
|
||||||
|
t.Errorf("#%d: next=%d, want %d", i, gn, tt.wn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestLeaderElection(t *testing.T) {
|
func TestLeaderElection(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
*network
|
*network
|
||||||
|
Loading…
x
Reference in New Issue
Block a user