tests

package
v1.6.5 Latest Latest
Warning

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

Go to latest
Published: Jun 1, 2017 License: GPL-3.0 Imports: 28 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",

		"GasLimitHigherThan2p63m1",
		"SuicideIssue",
	}

	/* 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",
		"Vitalik_15",
		"Vitalik_16",
		"Vitalik_17",
	}
	StateSkipTests = []string{}
	VmSkipTests    = []string{}
)
View Source
var (
	ForceJit  bool
	EnableJit bool
)

Functions

func BenchStateTest added in v1.2.3

func BenchStateTest(chainConfig *params.ChainConfig, p string, conf bconf, b *testing.B) error

func BenchVmTest added in v1.2.3

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

func LoadBlockTests

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

func NewEVMEnvironment added in v1.5.8

func NewEVMEnvironment(vmTest bool, chainConfig *params.ChainConfig, statedb *state.StateDB, envValues map[string]string, tx map[string]string) (*vm.EVM, core.Message)

func RunBlockTest added in v0.9.38

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

func RunBlockTestWithReader added in v0.9.38

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

func RunRLPTest added in v1.0.0

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

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

func RunRLPTestWithReader added in v1.0.0

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

func RunState(chainConfig *params.ChainConfig, statedb *state.StateDB, env, tx map[string]string) ([]byte, []*types.Log, *big.Int, error)

func RunStateTest added in v0.9.38

func RunStateTest(chainConfig *params.ChainConfig, p string, skipTests []string) error

func RunStateTestWithReader added in v0.9.38

func RunStateTestWithReader(chainConfig *params.ChainConfig, r io.Reader, skipTests []string) error

func RunTransactionTests

func RunTransactionTests(config *params.ChainConfig, file string, skipTests []string) error

func RunTransactionTestsWithReader added in v0.9.38

func RunTransactionTestsWithReader(config *params.ChainConfig, r io.Reader, skipTests []string) error

func RunVm added in v0.9.38

func RunVm(statedb *state.StateDB, env, exec map[string]string) ([]byte, []*types.Log, *big.Int, error)

func RunVmTest added in v0.9.38

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

func RunVmTestWithReader added in v0.9.38

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

Types

type Account added in v0.9.38

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

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

func (*BlockTest) ValidatePostState

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

type Log added in v0.9.38

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

func (self Log) Address() []byte

func (Log) Data added in v0.9.38

func (self Log) Data() []byte

func (Log) RlpData added in v0.9.38

func (self Log) RlpData() interface{}

func (Log) Topics added in v0.9.38

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

type RLPTest added in v1.0.0

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 v1.0.0

func (t *RLPTest) Run() error

Run executes the test.

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

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

type VmTest added in v0.9.38

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