mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-24 05:36:46 +00:00
add journal test
This commit is contained in:
parent
eb777ad4db
commit
b125d0bcb9
1 changed files with 29 additions and 1 deletions
|
|
@ -23,6 +23,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
)
|
)
|
||||||
|
|
||||||
type testTracer struct {
|
type testTracer struct {
|
||||||
|
|
@ -56,6 +57,11 @@ func (t *testTracer) OnCodeChange(addr common.Address, prevCodeHash common.Hash,
|
||||||
t.code = code
|
t.code = code
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *testTracer) OnCodeChangeV2(addr common.Address, prevCodeHash common.Hash, prevCode []byte, codeHash common.Hash, code []byte, reason CodeChangeReason) {
|
||||||
|
t.t.Logf("OnCodeChangeV2(%v, %v -> %v, %v)", addr, prevCodeHash, codeHash, reason)
|
||||||
|
t.code = code
|
||||||
|
}
|
||||||
|
|
||||||
func (t *testTracer) OnStorageChange(addr common.Address, slot common.Hash, prev common.Hash, new common.Hash) {
|
func (t *testTracer) OnStorageChange(addr common.Address, slot common.Hash, prev common.Hash, new common.Hash) {
|
||||||
t.t.Logf("OnStorageCodeChange(%v, %v, %v -> %v)", addr, slot, prev, new)
|
t.t.Logf("OnStorageCodeChange(%v, %v, %v -> %v)", addr, slot, prev, new)
|
||||||
if t.storage == nil {
|
if t.storage == nil {
|
||||||
|
|
@ -232,6 +238,27 @@ func TestOnNonceChangeV2(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestOnCodeChangeV2(t *testing.T) {
|
||||||
|
tr := &testTracer{t: t}
|
||||||
|
wr, err := WrapWithJournal(&Hooks{OnCodeChangeV2: tr.OnCodeChangeV2})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to wrap test tracer: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
addr := common.HexToAddress("0x1234")
|
||||||
|
code := []byte{1, 2, 3}
|
||||||
|
{
|
||||||
|
wr.OnEnter(2, 0, addr, addr, nil, 1000, big.NewInt(0))
|
||||||
|
wr.OnCodeChangeV2(addr, common.Hash{}, nil, crypto.Keccak256Hash(code), code, CodeChangeContractCreation)
|
||||||
|
wr.OnExit(2, nil, 100, nil, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// After revert, code should be nil
|
||||||
|
if tr.code != nil {
|
||||||
|
t.Fatalf("unexpected code after revert: %v", tr.code)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestAllHooksCalled(t *testing.T) {
|
func TestAllHooksCalled(t *testing.T) {
|
||||||
tracer := newTracerAllHooks()
|
tracer := newTracerAllHooks()
|
||||||
hooks := tracer.hooks()
|
hooks := tracer.hooks()
|
||||||
|
|
@ -298,6 +325,7 @@ func newTracerAllHooks() *tracerAllHooks {
|
||||||
t.hooksCalled[hooksType.Field(i).Name] = false
|
t.hooksCalled[hooksType.Field(i).Name] = false
|
||||||
}
|
}
|
||||||
delete(t.hooksCalled, "OnNonceChange")
|
delete(t.hooksCalled, "OnNonceChange")
|
||||||
|
delete(t.hooksCalled, "OnCodeChange")
|
||||||
return t
|
return t
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -322,7 +350,7 @@ func (t *tracerAllHooks) hooks() *Hooks {
|
||||||
hooksValue := reflect.ValueOf(h).Elem()
|
hooksValue := reflect.ValueOf(h).Elem()
|
||||||
for i := 0; i < hooksValue.NumField(); i++ {
|
for i := 0; i < hooksValue.NumField(); i++ {
|
||||||
field := hooksValue.Type().Field(i)
|
field := hooksValue.Type().Field(i)
|
||||||
if field.Name == "OnNonceChange" {
|
if field.Name == "OnNonceChange" || field.Name == "OnCodeChange" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
hookMethod := reflect.MakeFunc(field.Type, func(args []reflect.Value) []reflect.Value {
|
hookMethod := reflect.MakeFunc(field.Type, func(args []reflect.Value) []reflect.Value {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue