pluginReorg() test functional

This commit is contained in:
philip-morlier 2023-06-05 11:04:07 -07:00
parent 5dc7541135
commit 02d22a5aad
2 changed files with 29 additions and 3 deletions

View File

@ -1,6 +1,7 @@
package core package core
import ( import (
// "reflect"
"fmt" "fmt"
"testing" "testing"
"math/big" "math/big"
@ -61,7 +62,7 @@ var (
) )
func TestBlockProcessingInjections(t *testing.T) { func TestPlugethInjections(t *testing.T) {
blockchain, _ := NewBlockChain(db, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) blockchain, _ := NewBlockChain(db, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil)
@ -89,5 +90,23 @@ func TestBlockProcessingInjections(t *testing.T) {
} }
}) })
t.Run(fmt.Sprintf("test Reorg"), func(t *testing.T) {
called := false
injectionCalled = &called
// the transaction has to be initialized with a different gas price than the previous tx in order to trigger a reorg
txns2 := []*types.Transaction{
makeTx(key1, 0, common.Address{}, big.NewInt(1000), params.TxGas-1000, big.NewInt(875000001), nil),
}
block2 := GenerateBadBlock(gspec.ToBlock(), engine, txns2, gspec.Config)
_, _ = blockchain.writeBlockAndSetHead(block, []*types.Receipt{}, []*types.Log{}, statedb, false)
_ = blockchain.reorg(block.Header(), block2)
if *injectionCalled != true {
t.Fatalf("pluginReorg injection in blockChain.Reorg() not called")
}
})
} }

View File

@ -169,6 +169,7 @@ func pluginNewSideBlock(block *types.Block, hash common.Hash, logs []*types.Log)
} }
func PluginReorg(pl *plugins.PluginLoader, commonBlock *types.Block, oldChain, newChain types.Blocks) { func PluginReorg(pl *plugins.PluginLoader, commonBlock *types.Block, oldChain, newChain types.Blocks) {
fnList := pl.Lookup("Reorg", func(item interface{}) bool { fnList := pl.Lookup("Reorg", func(item interface{}) bool {
_, ok := item.(func(core.Hash, []core.Hash, []core.Hash)) _, ok := item.(func(core.Hash, []core.Hash, []core.Hash))
return ok return ok
@ -188,6 +189,12 @@ func PluginReorg(pl *plugins.PluginLoader, commonBlock *types.Block, oldChain, n
} }
} }
func pluginReorg(commonBlock *types.Block, oldChain, newChain types.Blocks) { func pluginReorg(commonBlock *types.Block, oldChain, newChain types.Blocks) {
if injectionCalled != nil {
called := true
injectionCalled = &called
}
if plugins.DefaultPluginLoader == nil { if plugins.DefaultPluginLoader == nil {
log.Warn("Attempting Reorg, but default PluginLoader has not been initialized") log.Warn("Attempting Reorg, but default PluginLoader has not been initialized")
return return