forked from cerc-io/plugeth
Functional test for injections in core/rawdb
This commit is contained in:
parent
6e8c38b994
commit
679d028484
@ -46,6 +46,9 @@ func newFreezerBatch(f *Freezer) *freezerBatch {
|
|||||||
func (batch *freezerBatch) Append(kind string, num uint64, item interface{}) error {
|
func (batch *freezerBatch) Append(kind string, num uint64, item interface{}) error {
|
||||||
// begin PluGeth injection
|
// begin PluGeth injection
|
||||||
PluginTrackUpdate(num, kind, item)
|
PluginTrackUpdate(num, kind, item)
|
||||||
|
if injectionCalled != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
// end PluGeth injection
|
// end PluGeth injection
|
||||||
return batch.tables[kind].Append(num, item)
|
return batch.tables[kind].Append(num, item)
|
||||||
}
|
}
|
||||||
@ -54,6 +57,9 @@ func (batch *freezerBatch) Append(kind string, num uint64, item interface{}) err
|
|||||||
func (batch *freezerBatch) AppendRaw(kind string, num uint64, item []byte) error {
|
func (batch *freezerBatch) AppendRaw(kind string, num uint64, item []byte) error {
|
||||||
// being PluGeth injection
|
// being PluGeth injection
|
||||||
PluginTrackUpdate(num, kind, item)
|
PluginTrackUpdate(num, kind, item)
|
||||||
|
if injectionCalled != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
// end PluGeth injection
|
// end PluGeth injection
|
||||||
return batch.tables[kind].AppendRaw(num, item)
|
return batch.tables[kind].AppendRaw(num, item)
|
||||||
}
|
}
|
||||||
|
50
core/rawdb/plugeth_hook_test.go
Normal file
50
core/rawdb/plugeth_hook_test.go
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
package rawdb
|
||||||
|
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
"github.com/ethereum/go-ethereum/ethdb"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func TestAncientsInjections(t *testing.T) {
|
||||||
|
|
||||||
|
test_dir_path := "./injection_test_dir"
|
||||||
|
f, _ := NewFreezer(test_dir_path, "plugeth hook test", false, uint32(0), map[string]bool{"test": false})
|
||||||
|
|
||||||
|
t.Run(fmt.Sprintf("test ModifyAncients"), func(t *testing.T) {
|
||||||
|
called := false
|
||||||
|
injectionCalled = &called
|
||||||
|
_, _ = f.ModifyAncients(func (ethdb.AncientWriteOp) error {return nil})
|
||||||
|
if *injectionCalled != true {
|
||||||
|
t.Fatalf("pluginCommitUpdate injection in ModifyAncients not called")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
os.RemoveAll(test_dir_path)
|
||||||
|
|
||||||
|
fb := newFreezerBatch(f)
|
||||||
|
|
||||||
|
t.Run(fmt.Sprintf("test Append"), func(t *testing.T) {
|
||||||
|
var item interface{}
|
||||||
|
called := false
|
||||||
|
injectionCalled = &called
|
||||||
|
_ = fb.Append("kind", uint64(0), item)
|
||||||
|
if *injectionCalled != true {
|
||||||
|
t.Fatalf("PluginTrackUpdate injection in Append not called")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run(fmt.Sprintf("test AppendRaw"), func(t *testing.T) {
|
||||||
|
called := false
|
||||||
|
injectionCalled = &called
|
||||||
|
_ = fb.AppendRaw("kind", uint64(100), []byte{})
|
||||||
|
if *injectionCalled != true {
|
||||||
|
t.Fatalf("PluginTrackUpdate injection in AppendRaw not called")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
@ -11,9 +11,16 @@ import (
|
|||||||
var (
|
var (
|
||||||
freezerUpdates map[uint64]map[string]interface{}
|
freezerUpdates map[uint64]map[string]interface{}
|
||||||
lock sync.Mutex
|
lock sync.Mutex
|
||||||
|
injectionCalled *bool
|
||||||
)
|
)
|
||||||
|
|
||||||
func PluginTrackUpdate(num uint64, kind string, value interface{}) {
|
func PluginTrackUpdate(num uint64, kind string, value interface{}) {
|
||||||
|
|
||||||
|
if injectionCalled != nil {
|
||||||
|
called := true
|
||||||
|
injectionCalled = &called
|
||||||
|
}
|
||||||
|
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
defer lock.Unlock()
|
defer lock.Unlock()
|
||||||
if freezerUpdates == nil { freezerUpdates = make(map[uint64]map[string]interface{}) }
|
if freezerUpdates == nil { freezerUpdates = make(map[uint64]map[string]interface{}) }
|
||||||
@ -26,6 +33,12 @@ func PluginTrackUpdate(num uint64, kind string, value interface{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func pluginCommitUpdate(num uint64) {
|
func pluginCommitUpdate(num uint64) {
|
||||||
|
|
||||||
|
if injectionCalled != nil {
|
||||||
|
called := true
|
||||||
|
injectionCalled = &called
|
||||||
|
}
|
||||||
|
|
||||||
if plugins.DefaultPluginLoader == nil {
|
if plugins.DefaultPluginLoader == nil {
|
||||||
log.Warn("Attempting CommitUpdate, but default PluginLoader has not been initialized")
|
log.Warn("Attempting CommitUpdate, but default PluginLoader has not been initialized")
|
||||||
return
|
return
|
||||||
|
Loading…
Reference in New Issue
Block a user