|
@@ -22,31 +22,42 @@ import (
|
|
|
pb "github.com/coreos/etcd/raft/raftpb"
|
|
pb "github.com/coreos/etcd/raft/raftpb"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
-// TODO(xiangli): Test panic cases
|
|
|
|
|
-
|
|
|
|
|
func TestStorageTerm(t *testing.T) {
|
|
func TestStorageTerm(t *testing.T) {
|
|
|
ents := []pb.Entry{{Index: 3, Term: 3}, {Index: 4, Term: 4}, {Index: 5, Term: 5}}
|
|
ents := []pb.Entry{{Index: 3, Term: 3}, {Index: 4, Term: 4}, {Index: 5, Term: 5}}
|
|
|
tests := []struct {
|
|
tests := []struct {
|
|
|
i uint64
|
|
i uint64
|
|
|
|
|
|
|
|
- werr error
|
|
|
|
|
- wterm uint64
|
|
|
|
|
|
|
+ werr error
|
|
|
|
|
+ wterm uint64
|
|
|
|
|
+ wpanic bool
|
|
|
}{
|
|
}{
|
|
|
- {2, ErrCompacted, 0},
|
|
|
|
|
- {3, nil, 3},
|
|
|
|
|
- {4, nil, 4},
|
|
|
|
|
- {5, nil, 5},
|
|
|
|
|
|
|
+ {2, ErrCompacted, 0, false},
|
|
|
|
|
+ {3, nil, 3, false},
|
|
|
|
|
+ {4, nil, 4, false},
|
|
|
|
|
+ {5, nil, 5, false},
|
|
|
|
|
+ {6, nil, 0, true},
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
for i, tt := range tests {
|
|
for i, tt := range tests {
|
|
|
s := &MemoryStorage{ents: ents}
|
|
s := &MemoryStorage{ents: ents}
|
|
|
- term, err := s.Term(tt.i)
|
|
|
|
|
- if err != tt.werr {
|
|
|
|
|
- t.Errorf("#%d: err = %v, want %v", i, err, tt.werr)
|
|
|
|
|
- }
|
|
|
|
|
- if term != tt.wterm {
|
|
|
|
|
- t.Errorf("#%d: term = %d, want %d", i, term, tt.wterm)
|
|
|
|
|
- }
|
|
|
|
|
|
|
+
|
|
|
|
|
+ func() {
|
|
|
|
|
+ defer func() {
|
|
|
|
|
+ if r := recover(); r != nil {
|
|
|
|
|
+ if !tt.wpanic {
|
|
|
|
|
+ t.Errorf("%d: panic = %v, want %v", i, true, tt.wpanic)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }()
|
|
|
|
|
+
|
|
|
|
|
+ term, err := s.Term(tt.i)
|
|
|
|
|
+ if err != tt.werr {
|
|
|
|
|
+ t.Errorf("#%d: err = %v, want %v", i, err, tt.werr)
|
|
|
|
|
+ }
|
|
|
|
|
+ if term != tt.wterm {
|
|
|
|
|
+ t.Errorf("#%d: term = %d, want %d", i, term, tt.wterm)
|
|
|
|
|
+ }
|
|
|
|
|
+ }()
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|