(t *testing.T)
| 141 | } |
| 142 | |
| 143 | func TestCompactHashCheckDetectCorruption(t *testing.T) { |
| 144 | integration.BeforeTest(t) |
| 145 | |
| 146 | clus := integration.NewCluster(t, &integration.ClusterConfig{Size: 3}) |
| 147 | defer clus.Terminate(t) |
| 148 | |
| 149 | cc, err := clus.ClusterClient(t) |
| 150 | require.NoError(t, err) |
| 151 | |
| 152 | ctx := context.Background() |
| 153 | |
| 154 | for i := 0; i < 10; i++ { |
| 155 | _, err = cc.Put(ctx, testutil.PickKey(int64(i)), fmt.Sprint(i)) |
| 156 | require.NoErrorf(t, err, "error on put") |
| 157 | } |
| 158 | |
| 159 | clus.Members[0].Server.CorruptionChecker().CompactHashCheck() |
| 160 | clus.Members[0].Stop(t) |
| 161 | clus.WaitLeader(t) |
| 162 | |
| 163 | err = testutil.CorruptBBolt(clus.Members[0].BackendPath()) |
| 164 | require.NoError(t, err) |
| 165 | |
| 166 | err = clus.Members[0].Restart(t) |
| 167 | require.NoError(t, err) |
| 168 | _, err = cc.Compact(ctx, 5) |
| 169 | require.NoError(t, err) |
| 170 | time.Sleep(50 * time.Millisecond) |
| 171 | leader := clus.WaitLeader(t) |
| 172 | |
| 173 | clus.Members[leader].Server.CorruptionChecker().CompactHashCheck() |
| 174 | time.Sleep(50 * time.Millisecond) |
| 175 | alarmResponse, err := cc.AlarmList(ctx) |
| 176 | require.NoErrorf(t, err, "error on alarm list") |
| 177 | assert.Equal(t, []*etcdserverpb.AlarmMember{{Alarm: etcdserverpb.AlarmType_CORRUPT, MemberID: uint64(clus.Members[0].ID())}}, alarmResponse.Alarms) |
| 178 | } |
| 179 | |
| 180 | func TestCompactHashCheckDetectMultipleCorruption(t *testing.T) { |
| 181 | integration.BeforeTest(t) |
nothing calls this directly
no test coverage detected
searching dependent graphs…