github.com/arieschain/arieschain@v0.0.0-20191023063405-37c074544356/core/vm/logger_test.go (about) 1 package vm 2 3 import ( 4 "math/big" 5 "testing" 6 7 "github.com/quickchainproject/quickchain/common" 8 "github.com/quickchainproject/quickchain/params" 9 ) 10 11 type dummyContractRef struct { 12 calledForEach bool 13 } 14 15 func (dummyContractRef) ReturnGas(*big.Int) {} 16 func (dummyContractRef) Address() common.Address { return common.Address{} } 17 func (dummyContractRef) Value() *big.Int { return new(big.Int) } 18 func (dummyContractRef) SetCode(common.Hash, []byte) {} 19 func (d *dummyContractRef) ForEachStorage(callback func(key, value common.Hash) bool) { 20 d.calledForEach = true 21 } 22 func (d *dummyContractRef) SubBalance(amount *big.Int) {} 23 func (d *dummyContractRef) AddBalance(amount *big.Int) {} 24 func (d *dummyContractRef) SetBalance(*big.Int) {} 25 func (d *dummyContractRef) SetNonce(uint64) {} 26 func (d *dummyContractRef) Balance() *big.Int { return new(big.Int) } 27 28 type dummyStateDB struct { 29 NoopStateDB 30 ref *dummyContractRef 31 } 32 33 func TestStoreCapture(t *testing.T) { 34 var ( 35 env = NewEVM(Context{}, nil, params.TestChainConfig, Config{}) 36 logger = NewStructLogger(nil) 37 mem = NewMemory() 38 stack = newstack() 39 contract = NewContract(&dummyContractRef{}, &dummyContractRef{}, new(big.Int), 0) 40 ) 41 stack.push(big.NewInt(1)) 42 stack.push(big.NewInt(0)) 43 44 var index common.Hash 45 46 logger.CaptureState(env, 0, SSTORE, 0, 0, mem, stack, contract, 0, nil) 47 if len(logger.changedValues[contract.Address()]) == 0 { 48 t.Fatalf("expected exactly 1 changed value on address %x, got %d", contract.Address(), len(logger.changedValues[contract.Address()])) 49 } 50 exp := common.BigToHash(big.NewInt(1)) 51 if logger.changedValues[contract.Address()][index] != exp { 52 t.Errorf("expected %x, got %x", exp, logger.changedValues[contract.Address()][index]) 53 } 54 }