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  }