MCPcopy Create free account
hub / github.com/DeAI-Artist/Linkis / TestOneValidatorChangesSaveLoad

Function TestOneValidatorChangesSaveLoad

state/state_test.go:259–316  ·  view source on GitHub ↗

TestValidatorChangesSaveLoad tests saving and loading a validator set with changes.

(t *testing.T)

Source from the content-addressed store, hash-verified

257
258// TestValidatorChangesSaveLoad tests saving and loading a validator set with changes.
259func TestOneValidatorChangesSaveLoad(t *testing.T) {
260 tearDown, stateDB, state := setupTestCase(t)
261 defer tearDown(t)
262 stateStore := sm.NewStore(stateDB, sm.StoreOptions{
263 DiscardABCIResponses: false,
264 })
265
266 // Change vals at these heights.
267 changeHeights := []int64{1, 2, 4, 5, 10, 15, 16, 17, 20}
268 N := len(changeHeights)
269
270 // Build the validator history by running updateState
271 // with the right validator set for each height.
272 highestHeight := changeHeights[N-1] + 5
273 changeIndex := 0
274 _, val := state.Validators.GetByIndex(0)
275 power := val.VotingPower
276 var err error
277 var validatorUpdates []*types.Validator
278 for i := int64(1); i < highestHeight; i++ {
279 // When we get to a change height, use the next pubkey.
280 if changeIndex < len(changeHeights) && i == changeHeights[changeIndex] {
281 changeIndex++
282 power++
283 }
284 header, blockID, responses := makeHeaderPartsResponsesValPowerChange(state, power)
285 validatorUpdates, err = types.PB2TM.ValidatorUpdates(responses.EndBlock.ValidatorUpdates)
286 require.NoError(t, err)
287 state, err = sm.UpdateState(state, blockID, &header, responses, validatorUpdates)
288 require.NoError(t, err)
289 err := stateStore.Save(state)
290 require.NoError(t, err)
291 }
292
293 // On each height change, increment the power by one.
294 testCases := make([]int64, highestHeight)
295 changeIndex = 0
296 power = val.VotingPower
297 for i := int64(1); i < highestHeight+1; i++ {
298 // We get to the height after a change height use the next pubkey (note
299 // our counter starts at 0 this time).
300 if changeIndex < len(changeHeights) && i == changeHeights[changeIndex]+1 {
301 changeIndex++
302 power++
303 }
304 testCases[i-1] = power
305 }
306
307 for i, power := range testCases {
308 v, err := stateStore.LoadValidators(int64(i + 1 + 1)) // +1 because vset changes delayed by 1 block.
309 assert.Nil(t, err, fmt.Sprintf("expected no err at height %d", i))
310 assert.Equal(t, v.Size(), 1, "validator set size is greater than 1: %d", v.Size())
311 _, val := v.GetByIndex(0)
312
313 assert.Equal(t, val.VotingPower, power, fmt.Sprintf(`unexpected powerat
314 height %d`, i))
315 }
316}

Callers

nothing calls this directly

Calls 8

SaveMethod · 0.95
LoadValidatorsMethod · 0.95
setupTestCaseFunction · 0.85
GetByIndexMethod · 0.65
EqualMethod · 0.65
SizeMethod · 0.65
ValidatorUpdatesMethod · 0.45

Tested by

no test coverage detected