mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
test: add integration test to cover the multiple member corruption case
Signed-off-by: Benjamin Wang <wachao@vmware.com>
This commit is contained in:
parent
a3197102e9
commit
7b19ee6396
@ -175,3 +175,58 @@ func TestCompactHashCheckDetectCorruption(t *testing.T) {
|
||||
assert.NoError(t, err, "error on alarm list")
|
||||
assert.Equal(t, []*etcdserverpb.AlarmMember{{Alarm: etcdserverpb.AlarmType_CORRUPT, MemberID: uint64(clus.Members[0].ID())}}, alarmResponse.Alarms)
|
||||
}
|
||||
|
||||
func TestCompactHashCheckDetectMultipleCorruption(t *testing.T) {
|
||||
integration.BeforeTest(t)
|
||||
|
||||
clus := integration.NewCluster(t, &integration.ClusterConfig{Size: 5})
|
||||
defer clus.Terminate(t)
|
||||
|
||||
cc, err := clus.ClusterClient(t)
|
||||
require.NoError(t, err)
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
_, err := cc.Put(ctx, testutil.PickKey(int64(i)), fmt.Sprint(i))
|
||||
assert.NoError(t, err, "error on put")
|
||||
}
|
||||
|
||||
clus.Members[0].Server.CorruptionChecker().CompactHashCheck()
|
||||
clus.Members[0].Stop(t)
|
||||
clus.Members[1].Server.CorruptionChecker().CompactHashCheck()
|
||||
clus.Members[1].Stop(t)
|
||||
clus.WaitLeader(t)
|
||||
|
||||
err = testutil.CorruptBBolt(clus.Members[0].BackendPath())
|
||||
require.NoError(t, err)
|
||||
err = testutil.CorruptBBolt(clus.Members[1].BackendPath())
|
||||
require.NoError(t, err)
|
||||
|
||||
err = clus.Members[0].Restart(t)
|
||||
require.NoError(t, err)
|
||||
err = clus.Members[1].Restart(t)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = cc.Compact(ctx, 5)
|
||||
require.NoError(t, err)
|
||||
time.Sleep(50 * time.Millisecond)
|
||||
leader := clus.WaitLeader(t)
|
||||
|
||||
clus.Members[leader].Server.CorruptionChecker().CompactHashCheck()
|
||||
time.Sleep(50 * time.Millisecond)
|
||||
alarmResponse, err := cc.AlarmList(ctx)
|
||||
assert.NoError(t, err, "error on alarm list")
|
||||
|
||||
expectedAlarmMap := map[uint64]etcdserverpb.AlarmType{
|
||||
uint64(clus.Members[0].ID()): etcdserverpb.AlarmType_CORRUPT,
|
||||
uint64(clus.Members[1].ID()): etcdserverpb.AlarmType_CORRUPT,
|
||||
}
|
||||
|
||||
actualAlarmMap := make(map[uint64]etcdserverpb.AlarmType)
|
||||
for _, alarm := range alarmResponse.Alarms {
|
||||
actualAlarmMap[alarm.MemberID] = alarm.Alarm
|
||||
}
|
||||
|
||||
require.Equal(t, expectedAlarmMap, actualAlarmMap)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user