mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-19 16:11:20 +00:00
test blockExec does not panic if all vals removed (#3241)
Fix for #3224 Also address #2084
This commit is contained in:
committed by
Anton Kaliaev
parent
b089587b42
commit
8a9eecce7f
@ -8,7 +8,6 @@ import (
|
|||||||
|
|
||||||
amino "github.com/tendermint/go-amino"
|
amino "github.com/tendermint/go-amino"
|
||||||
|
|
||||||
cmn "github.com/tendermint/tendermint/libs/common"
|
|
||||||
"github.com/tendermint/tendermint/libs/log"
|
"github.com/tendermint/tendermint/libs/log"
|
||||||
"github.com/tendermint/tendermint/p2p"
|
"github.com/tendermint/tendermint/p2p"
|
||||||
sm "github.com/tendermint/tendermint/state"
|
sm "github.com/tendermint/tendermint/state"
|
||||||
@ -338,8 +337,7 @@ FOR_LOOP:
|
|||||||
state, err = bcR.blockExec.ApplyBlock(state, firstID, first)
|
state, err = bcR.blockExec.ApplyBlock(state, firstID, first)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// TODO This is bad, are we zombie?
|
// TODO This is bad, are we zombie?
|
||||||
cmn.PanicQ(fmt.Sprintf("Failed to process committed block (%d:%X): %v",
|
panic(fmt.Sprintf("Failed to process committed block (%d:%X): %v", first.Height, first.Hash(), err))
|
||||||
first.Height, first.Hash(), err))
|
|
||||||
}
|
}
|
||||||
blocksSynced++
|
blocksSynced++
|
||||||
|
|
||||||
|
@ -354,6 +354,33 @@ func TestEndBlockValidatorUpdates(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestEndBlockValidatorUpdatesResultingInEmptySet checks that processing validator updates that
|
||||||
|
// would result in empty set causes no panic, an error is raised and NextValidators is not updated
|
||||||
|
func TestEndBlockValidatorUpdatesResultingInEmptySet(t *testing.T) {
|
||||||
|
app := &testApp{}
|
||||||
|
cc := proxy.NewLocalClientCreator(app)
|
||||||
|
proxyApp := proxy.NewAppConns(cc)
|
||||||
|
err := proxyApp.Start()
|
||||||
|
require.Nil(t, err)
|
||||||
|
defer proxyApp.Stop()
|
||||||
|
|
||||||
|
state, stateDB := state(1, 1)
|
||||||
|
blockExec := NewBlockExecutor(stateDB, log.TestingLogger(), proxyApp.Consensus(), MockMempool{}, MockEvidencePool{})
|
||||||
|
|
||||||
|
block := makeBlock(state, 1)
|
||||||
|
blockID := types.BlockID{block.Hash(), block.MakePartSet(testPartSize).Header()}
|
||||||
|
|
||||||
|
// Remove the only validator
|
||||||
|
app.ValidatorUpdates = []abci.ValidatorUpdate{
|
||||||
|
{PubKey: types.TM2PB.PubKey(state.Validators.Validators[0].PubKey), Power: 0},
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.NotPanics(t, func() { state, err = blockExec.ApplyBlock(state, blockID, block) })
|
||||||
|
assert.NotNil(t, err)
|
||||||
|
assert.NotEmpty(t, state.NextValidators.Validators)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
// make some bogus txs
|
// make some bogus txs
|
||||||
|
Reference in New Issue
Block a user