tests

package
v4.1.2+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 3, 2017 License: GPL-3.0 Imports: 25 Imported by: 12

Documentation

Overview

Package tests implements execution of Ethereum JSON tests.

Index

Constants

This section is empty.

Variables

View Source
var (
	BlockSkipTests = []string{

		"BLOCK__RandomByteAtTheEnd",
		"TRANSCT__RandomByteAtTheEnd",
		"BLOCK__ZeroByteAtTheEnd",
		"TRANSCT__ZeroByteAtTheEnd",

		"ChainAtoChainB_blockorder2",
		"ChainAtoChainB_blockorder1",
	}

	/* Go client does not support transaction (account) nonces above 2^64. This
	technically breaks consensus but is regarded as "reasonable
	engineering constraint" as accounts cannot easily reach such high
	nonce values in practice
	*/
	TransSkipTests = []string{"TransactionWithHihghNonce256"}
	StateSkipTests = []string{}
	VmSkipTests    = []string{}
)

Functions

func BenchStateTest added in v1.1.0

func BenchStateTest(ruleSet RuleSet, p string, conf bconf, b *testing.B) error

func BenchVmTest added in v1.1.0

func BenchVmTest(p string, conf bconf, b *testing.B) error

func LoadBlockTests

func LoadBlockTests(file string) (map[string]*BlockTest, error)

func RunBlockTest added in v0.9.32

func RunBlockTest(homesteadBlock, gasPriceFork *big.Int, file string, skipTests []string) error

func RunBlockTestWithReader added in v0.9.32

func RunBlockTestWithReader(homesteadBlock, gasPriceFork *big.Int, r io.Reader, skipTests []string) error

func RunRLPTest added in v0.9.39

func RunRLPTest(file string, skip []string) error

RunRLPTest runs the tests in the given file, skipping tests by name.

func RunRLPTestWithReader added in v0.9.39

func RunRLPTestWithReader(r io.Reader, skip []string) error

RunRLPTest runs the tests encoded in r, skipping tests by name.

func RunState added in v0.9.32

func RunState(ruleSet RuleSet, statedb *state.StateDB, env, tx map[string]string) ([]byte, vm.Logs, *big.Int, error)

func RunStateTest added in v0.9.32

func RunStateTest(ruleSet RuleSet, p string, skipTests []string) error

func RunStateTestWithReader added in v0.9.32

func RunStateTestWithReader(ruleSet RuleSet, r io.Reader, skipTests []string) error

func RunTransactionTests

func RunTransactionTests(file string, skipTests []string) error

func RunTransactionTestsWithReader added in v0.9.32

func RunTransactionTestsWithReader(r io.Reader, skipTests []string) error

func RunVm added in v0.9.32

func RunVm(state *state.StateDB, env, exec map[string]string) ([]byte, vm.Logs, *big.Int, error)

func RunVmTest added in v0.9.32

func RunVmTest(p string, skipTests []string) error

func RunVmTestWithReader added in v0.9.32

func RunVmTestWithReader(r io.Reader, skipTests []string) error

Types

type Account added in v0.9.32

type Account struct {
	Balance string
	Code    string
	Nonce   string
	Storage map[string]string
}

type BlockTest

type BlockTest struct {
	Genesis *types.Block

	Json *btJSON
	// contains filtered or unexported fields
}

Block Test JSON Format

func (*BlockTest) InsertPreState

func (t *BlockTest) InsertPreState(db ethdb.Database) (*state.StateDB, error)

InsertPreState populates the given database with the genesis accounts defined by the test.

func (*BlockTest) TryBlocksInsert

func (t *BlockTest) TryBlocksInsert(blockchain *core.BlockChain) ([]btBlock, error)

See https://github.com/ethereum/tests/wiki/Blockchain-Tests-II

Whether a block is valid or not is a bit subtle, it's defined by presence of
blockHeader, transactions and uncleHeaders fields. If they are missing, the block is
invalid and we must verify that we do not accept it.

Since some tests mix valid and invalid blocks we need to check this for every block.

If a block is invalid it does not necessarily fail the test, if it's invalidness is
expected we are expected to ignore it and continue processing and then validate the
post state.

func (*BlockTest) ValidateImportedHeaders added in v1.2.2

func (test *BlockTest) ValidateImportedHeaders(cm *core.BlockChain, validBlocks []btBlock) error

func (*BlockTest) ValidatePostState

func (t *BlockTest) ValidatePostState(statedb *state.StateDB) error

type Env added in v0.9.32

type Env struct {
	Gas *big.Int
	// contains filtered or unexported fields
}

func NewEnv added in v0.9.32

func NewEnv(ruleSet RuleSet, state *state.StateDB) *Env

func NewEnvFromMap added in v0.9.32

func NewEnvFromMap(ruleSet RuleSet, state *state.StateDB, envValues map[string]string, exeValues map[string]string) *Env

func (*Env) AddLog added in v0.9.32

func (self *Env) AddLog(log *vm.Log)

func (*Env) BlockNumber added in v0.9.32

func (self *Env) BlockNumber() *big.Int

func (*Env) Call added in v0.9.32

func (self *Env) Call(caller vm.ContractRef, addr common.Address, data []byte, gas, price, value *big.Int) ([]byte, error)

func (*Env) CallCode added in v0.9.32

func (self *Env) CallCode(caller vm.ContractRef, addr common.Address, data []byte, gas, price, value *big.Int) ([]byte, error)

func (*Env) CanTransfer added in v1.1.0

func (self *Env) CanTransfer(from common.Address, balance *big.Int) bool

func (*Env) Coinbase added in v0.9.32

func (self *Env) Coinbase() common.Address

func (*Env) Create added in v0.9.32

func (self *Env) Create(caller vm.ContractRef, data []byte, gas, price, value *big.Int) ([]byte, common.Address, error)

func (*Env) Db added in v1.3.1

func (self *Env) Db() vm.Database

func (*Env) DelegateCall added in v1.3.4

func (self *Env) DelegateCall(caller vm.ContractRef, addr common.Address, data []byte, gas, price *big.Int) ([]byte, error)

func (*Env) Depth added in v0.9.32

func (self *Env) Depth() int

func (*Env) Difficulty added in v0.9.32

func (self *Env) Difficulty() *big.Int

func (*Env) GasLimit added in v0.9.32

func (self *Env) GasLimit() *big.Int

func (*Env) GetHash added in v0.9.32

func (self *Env) GetHash(n uint64) common.Hash

func (*Env) Origin added in v0.9.32

func (self *Env) Origin() common.Address

func (*Env) RevertToSnapshot added in v1.4.16

func (self *Env) RevertToSnapshot(snapshot int)

func (*Env) RuleSet added in v1.4.0

func (self *Env) RuleSet() vm.RuleSet

func (*Env) SetDepth added in v0.9.32

func (self *Env) SetDepth(i int)

func (*Env) SnapshotDatabase added in v1.4.16

func (self *Env) SnapshotDatabase() int

func (*Env) Time added in v0.9.32

func (self *Env) Time() *big.Int

func (*Env) Transfer added in v0.9.32

func (self *Env) Transfer(from, to vm.Account, amount *big.Int)

func (*Env) Vm added in v1.4.0

func (self *Env) Vm() vm.Vm

func (*Env) VmType added in v0.9.32

func (self *Env) VmType() vm.Type

type Log added in v0.9.32

type Log struct {
	AddressF string   `json:"address"`
	DataF    string   `json:"data"`
	TopicsF  []string `json:"topics"`
	BloomF   string   `json:"bloom"`
}

func (Log) Address added in v0.9.32

func (self Log) Address() []byte

func (Log) Data added in v0.9.32

func (self Log) Data() []byte

func (Log) RlpData added in v0.9.32

func (self Log) RlpData() interface{}

func (Log) Topics added in v0.9.32

func (self Log) Topics() [][]byte

type Message added in v0.9.32

type Message struct {
	// contains filtered or unexported fields
}

func NewMessage added in v0.9.32

func NewMessage(from common.Address, to *common.Address, data []byte, value, gas, price *big.Int, nonce uint64) Message

func (Message) Data added in v0.9.32

func (self Message) Data() []byte

func (Message) From added in v0.9.32

func (self Message) From() (common.Address, error)

func (Message) FromFrontier added in v1.3.4

func (self Message) FromFrontier() (common.Address, error)

func (Message) Gas added in v0.9.32

func (self Message) Gas() *big.Int

func (Message) GasPrice added in v0.9.32

func (self Message) GasPrice() *big.Int

func (Message) Hash added in v0.9.32

func (self Message) Hash() []byte

func (Message) Nonce added in v0.9.32

func (self Message) Nonce() uint64

func (Message) To added in v0.9.32

func (self Message) To() *common.Address

func (Message) Value added in v0.9.32

func (self Message) Value() *big.Int

type RLPTest added in v0.9.39

type RLPTest struct {
	// If the value of In is "INVALID" or "VALID", the test
	// checks whether Out can be decoded into a value of
	// type interface{}.
	//
	// For other JSON values, In is treated as a driver for
	// calls to rlp.Stream. The test also verifies that encoding
	// In produces the bytes in Out.
	In interface{}

	// Out is a hex-encoded RLP value.
	Out string
}

RLPTest is the JSON structure of a single RLP test.

func (*RLPTest) Run added in v0.9.39

func (t *RLPTest) Run() error

Run executes the test.

type RuleSet added in v1.4.0

type RuleSet struct {
	HomesteadBlock           *big.Int
	HomesteadGasRepriceBlock *big.Int
	DiehardBlock             *big.Int
	ExplosionBlock           *big.Int
}

func (RuleSet) GasTable

func (r RuleSet) GasTable(num *big.Int) *vm.GasTable

func (RuleSet) IsHomestead added in v1.4.0

func (r RuleSet) IsHomestead(n *big.Int) bool

type TransactionTest

type TransactionTest struct {
	Blocknumber string
	Rlp         string
	Sender      string
	Transaction TtTransaction
}

type TtTransaction

type TtTransaction struct {
	Data     string
	GasLimit string
	GasPrice string
	Nonce    string
	R        string
	S        string
	To       string
	V        string
	Value    string
}

Transaction Test JSON Format

type VmEnv added in v0.9.32

type VmEnv struct {
	CurrentCoinbase   string
	CurrentDifficulty string
	CurrentGasLimit   string
	CurrentNumber     string
	CurrentTimestamp  interface{}
	PreviousHash      string
}

type VmTest added in v0.9.32

type VmTest struct {
	Callcreates interface{}
	//Env         map[string]string
	Env           VmEnv
	Exec          map[string]string
	Transaction   map[string]string
	Logs          []Log
	Gas           string
	Out           string
	Post          map[string]Account
	Pre           map[string]Account
	PostStateRoot string
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL