more test cases

This commit is contained in:
Anton Kaliaev 2017-12-26 12:51:51 -06:00
parent 6b89639f90
commit b8215d8ac8
No known key found for this signature in database
GPG Key ID: 7B6881D965918214
1 changed files with 66 additions and 11 deletions

View File

@ -246,20 +246,75 @@ func makeParams(blockBytes, blockTx, blockGas, txBytes,
}
func TestLessThanOneThirdOfVotingPowerPerBlockEnforced(t *testing.T) {
tearDown, _, state := setupTestCase(t)
defer tearDown(t)
testCases := []struct {
initialValSetSize int
shouldErr bool
valUpdatesFn func(vals *types.ValidatorSet) []*abci.Validator
}{
///////////// 1 val (vp: 10) => less than 3 is ok ////////////////////////
// adding 1 validator => 10
0: {1, false, func(vals *types.ValidatorSet) []*abci.Validator {
return []*abci.Validator{
{PubKey: pk(), Power: 2},
}
}},
1: {1, true, func(vals *types.ValidatorSet) []*abci.Validator {
return []*abci.Validator{
{PubKey: pk(), Power: 3},
}
}},
2: {1, true, func(vals *types.ValidatorSet) []*abci.Validator {
return []*abci.Validator{
{PubKey: pk(), Power: 100},
}
}},
height := state.LastBlockHeight + 1
block := makeBlock(state, height)
abciResponses := &ABCIResponses{
Height: height,
// 1 val (vp: 10) => less than 3 is ok
EndBlock: &abci.ResponseEndBlock{ValidatorUpdates: []*abci.Validator{
{PubKey: crypto.GenPrivKeyEd25519().PubKey().Bytes(), Power: 3},
///////////// 3 val (vp: 30) => less than 10 is ok ////////////////////////
// adding and removing validator => 20
3: {3, true, func(vals *types.ValidatorSet) []*abci.Validator {
_, firstVal := vals.GetByIndex(0)
return []*abci.Validator{
{PubKey: firstVal.PubKey.Bytes(), Power: 0},
{PubKey: pk(), Power: 10},
}
}},
// adding 1 validator => 10
4: {3, true, func(vals *types.ValidatorSet) []*abci.Validator {
return []*abci.Validator{
{PubKey: pk(), Power: 10},
}
}},
// adding 2 validators => 8
5: {3, false, func(vals *types.ValidatorSet) []*abci.Validator {
return []*abci.Validator{
{PubKey: pk(), Power: 4},
{PubKey: pk(), Power: 4},
}
}},
}
err := state.SetBlockAndValidators(block.Header, types.PartSetHeader{}, abciResponses)
assert.Error(t, err)
for i, tc := range testCases {
tearDown, _, state := setupTestCase(t)
state.Validators = genValSet(tc.initialValSetSize)
state.Save()
height := state.LastBlockHeight + 1
block := makeBlock(state, height)
abciResponses := &ABCIResponses{
Height: height,
EndBlock: &abci.ResponseEndBlock{ValidatorUpdates: tc.valUpdatesFn(state.Validators)},
}
err := state.SetBlockAndValidators(block.Header, types.PartSetHeader{}, abciResponses)
if tc.shouldErr {
assert.Error(t, err, "#%d", i)
} else {
assert.NoError(t, err, "#%d", i)
}
tearDown(t)
}
}
func pk() []byte {
return crypto.GenPrivKeyEd25519().PubKey().Bytes()
}
func TestApplyUpdates(t *testing.T) {