tests

package
v1.4.2 Latest Latest
Warning

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

Go to latest
Published: May 9, 2016 License: GPL-3.0 Imports: 27 Imported by: 0

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{}
)
View Source
var (
	ForceJit  bool
	EnableJit bool
)

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 added in v0.9.39

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

func RunBlockTest added in v0.9.39

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

func RunBlockTestWithReader added in v0.9.39

func RunBlockTestWithReader(homesteadBlock *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.39

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

func RunStateTest added in v0.9.39

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

func RunStateTestWithReader added in v0.9.39

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

func RunTransactionTests added in v0.9.39

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

func RunTransactionTestsWithReader added in v0.9.39

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

func RunVm added in v0.9.39

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

func RunVmTest added in v0.9.39

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

func RunVmTestWithReader added in v0.9.39

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

func StateObjectFromAccount added in v0.9.39

func StateObjectFromAccount(db ethdb.Database, addr string, account Account) *state.StateObject

Types

type Account added in v0.9.39

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 added in v0.9.39

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 added in v0.9.39

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 added in v0.9.39

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

type Env added in v0.9.39

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

func NewEnv added in v0.9.39

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

func NewEnvFromMap added in v0.9.39

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

func (*Env) AddLog added in v0.9.39

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

func (*Env) AddStructLog added in v0.9.39

func (self *Env) AddStructLog(log vm.StructLog)

func (*Env) BlockNumber added in v0.9.39

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

func (*Env) Call added in v0.9.39

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.39

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.39

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

func (*Env) Create added in v0.9.39

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.39

func (self *Env) Depth() int

func (*Env) Difficulty added in v0.9.39

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

func (*Env) GasLimit added in v0.9.39

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

func (*Env) GetHash added in v0.9.39

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

func (*Env) MakeSnapshot added in v1.3.1

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

func (*Env) Origin added in v0.9.39

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

func (*Env) RuleSet added in v1.4.0

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

func (*Env) SetDepth added in v0.9.39

func (self *Env) SetDepth(i int)

func (*Env) SetSnapshot added in v1.3.1

func (self *Env) SetSnapshot(copy vm.Database)

func (*Env) StructLogs added in v0.9.39

func (self *Env) StructLogs() []vm.StructLog

func (*Env) Time added in v0.9.39

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

func (*Env) Transfer added in v0.9.39

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.39

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

type Log added in v0.9.39

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.39

func (self Log) Address() []byte

func (Log) Data added in v0.9.39

func (self Log) Data() []byte

func (Log) RlpData added in v0.9.39

func (self Log) RlpData() interface{}

func (Log) Topics added in v0.9.39

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

type Message added in v0.9.39

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

func NewMessage added in v0.9.39

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.39

func (self Message) Data() []byte

func (Message) From added in v0.9.39

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.39

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

func (Message) GasPrice added in v0.9.39

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

func (Message) Hash added in v0.9.39

func (self Message) Hash() []byte

func (Message) Nonce added in v0.9.39

func (self Message) Nonce() uint64

func (Message) To added in v0.9.39

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

func (Message) Value added in v0.9.39

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

type RLPTest

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

func (t *RLPTest) Run() error

Run executes the test.

type RuleSet added in v1.4.0

type RuleSet struct {
	HomesteadBlock *big.Int
}

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 added in v0.9.39

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.39

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

type VmTest added in v0.9.39

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