Skip to content
Snippets Groups Projects
pipe.go 4.98 KiB
Newer Older
Androlo's avatar
Androlo committed
package mock

import (
	ep "github.com/eris-ltd/erisdb/erisdb/pipe"
	td "github.com/eris-ltd/erisdb/test/testdata/testdata"
Androlo's avatar
Androlo committed
	"github.com/tendermint/tendermint/account"
	"github.com/tendermint/tendermint/types"
)

// Base struct.
type MockPipe struct {
	testOutput *td.Output
Androlo's avatar
Androlo committed
	accounts   ep.Accounts
	blockchain ep.Blockchain
	consensus  ep.Consensus
Androlo's avatar
Androlo committed
	events     ep.EventEmitter
Androlo's avatar
Androlo committed
	net        ep.Net
Androlo's avatar
Androlo committed
	transactor ep.Transactor
Androlo's avatar
Androlo committed
}

// Create a new mock tendermint pipe.
func NewMockPipe(td *td.TestData) ep.Pipe {
	testOutput := td.Output
	accounts := &accounts{testOutput}
	blockchain := &blockchain{testOutput}
	consensus := &consensus{testOutput}
	events := &events{testOutput}
	net := &net{testOutput}
	transactor := &transactor{testOutput}
Androlo's avatar
Androlo committed
	return &MockPipe{
		testOutput,
Androlo's avatar
Androlo committed
		accounts,
		blockchain,
		consensus,
		events,
		net,
Androlo's avatar
Androlo committed
		transactor,
Androlo's avatar
Androlo committed
	}
}

// Create a mock pipe with default mock data.
func NewDefaultMockPipe() ep.Pipe {
	return NewMockPipe(td.LoadTestData())
Androlo's avatar
Androlo committed
}

func (this *MockPipe) Accounts() ep.Accounts {
	return this.accounts
}

func (this *MockPipe) Blockchain() ep.Blockchain {
	return this.blockchain
}

func (this *MockPipe) Consensus() ep.Consensus {
	return this.consensus
}

Androlo's avatar
Androlo committed
func (this *MockPipe) Events() ep.EventEmitter {
Androlo's avatar
Androlo committed
	return this.events
}

func (this *MockPipe) Net() ep.Net {
	return this.net
}

Androlo's avatar
Androlo committed
func (this *MockPipe) Transactor() ep.Transactor {
	return this.transactor
Androlo's avatar
Androlo committed
}

// Components

// Accounts
type accounts struct {
	testOutput *td.Output
Androlo's avatar
Androlo committed
}

func (this *accounts) GenPrivAccount() (*account.PrivAccount, error) {
	return this.testOutput.GenPrivAccount, nil
Androlo's avatar
Androlo committed
}

func (this *accounts) GenPrivAccountFromKey(key []byte) (*account.PrivAccount, error) {
	return this.testOutput.GenPrivAccount, nil
Androlo's avatar
Androlo committed
}

func (this *accounts) Accounts([]*ep.FilterData) (*ep.AccountList, error) {
	return this.testOutput.Accounts, nil
Androlo's avatar
Androlo committed
}

func (this *accounts) Account(address []byte) (*account.Account, error) {
	return this.testOutput.Account, nil
Androlo's avatar
Androlo committed
}

func (this *accounts) Storage(address []byte) (*ep.Storage, error) {
	return this.testOutput.Storage, nil
Androlo's avatar
Androlo committed
}

func (this *accounts) StorageAt(address, key []byte) (*ep.StorageItem, error) {
	return this.testOutput.StorageAt, nil
Androlo's avatar
Androlo committed
}

// Blockchain
type blockchain struct {
	testOutput *td.Output
Androlo's avatar
Androlo committed
}

func (this *blockchain) Info() (*ep.BlockchainInfo, error) {
	return this.testOutput.BlockchainInfo, nil
Androlo's avatar
Androlo committed
}

func (this *blockchain) ChainId() (string, error) {
	return this.testOutput.ChainId.ChainId, nil
Androlo's avatar
Androlo committed
}

func (this *blockchain) GenesisHash() ([]byte, error) {
	return this.testOutput.GenesisHash.Hash, nil
Androlo's avatar
Androlo committed
}

func (this *blockchain) LatestBlockHeight() (uint, error) {
	return this.testOutput.LatestBlockHeight.Height, nil
Androlo's avatar
Androlo committed
}

func (this *blockchain) LatestBlock() (*types.Block, error) {
	return nil, nil
Androlo's avatar
Androlo committed
}

func (this *blockchain) Blocks([]*ep.FilterData) (*ep.Blocks, error) {
	return this.testOutput.Blocks, nil
Androlo's avatar
Androlo committed
}

func (this *blockchain) Block(height uint) (*types.Block, error) {
	return this.testOutput.Block, nil
Androlo's avatar
Androlo committed
}

// Consensus
type consensus struct {
	testOutput *td.Output
Androlo's avatar
Androlo committed
}

func (this *consensus) State() (*ep.ConsensusState, error) {
	return this.testOutput.ConsensusState, nil
Androlo's avatar
Androlo committed
}

func (this *consensus) Validators() (*ep.ValidatorList, error) {
	return this.testOutput.Validators, nil
Androlo's avatar
Androlo committed
}

// Events
type events struct {
	testOutput *td.Output
Androlo's avatar
Androlo committed
}

func (this *events) Subscribe(subId, event string, callback func(interface{})) (bool, error) {
	return true, nil
}

func (this *events) Unsubscribe(subId string) (bool, error) {
	return true, nil
Androlo's avatar
Androlo committed
}

// Net
type net struct {
	testOutput *td.Output
Androlo's avatar
Androlo committed
}

func (this *net) Info() (*ep.NetworkInfo, error) {
	return this.testOutput.NetworkInfo, nil
Androlo's avatar
Androlo committed
}

func (this *net) Moniker() (string, error) {
	return this.testOutput.Moniker.Moniker, nil
Androlo's avatar
Androlo committed
}

func (this *net) Listening() (bool, error) {
	return this.testOutput.Listening.Listening, nil
Androlo's avatar
Androlo committed
}

func (this *net) Listeners() ([]string, error) {
	return this.testOutput.Listeners.Listeners, nil
Androlo's avatar
Androlo committed
}

func (this *net) Peers() ([]*ep.Peer, error) {
	return this.testOutput.Peers, nil
Androlo's avatar
Androlo committed
}

func (this *net) Peer(address string) (*ep.Peer, error) {
	return nil, nil
Androlo's avatar
Androlo committed
}

// Txs
Androlo's avatar
Androlo committed
type transactor struct {
	testOutput *td.Output
Androlo's avatar
Androlo committed
}

Androlo's avatar
Androlo committed
func (this *transactor) Call(address, data []byte) (*ep.Call, error) {
	return nil, nil
Androlo's avatar
Androlo committed
}

Androlo's avatar
Androlo committed
func (this *transactor) CallCode(code, data []byte) (*ep.Call, error) {
	return this.testOutput.CallCode, nil
Androlo's avatar
Androlo committed
}

Androlo's avatar
Androlo committed
func (this *transactor) BroadcastTx(tx types.Tx) (*ep.Receipt, error) {
	return nil, nil
Androlo's avatar
Androlo committed
}

Androlo's avatar
Androlo committed
func (this *transactor) UnconfirmedTxs() (*ep.UnconfirmedTxs, error) {
	return this.testOutput.UnconfirmedTxs, nil
Androlo's avatar
Androlo committed
}

Androlo's avatar
Androlo committed
func (this *transactor) TransactAsync(privKey, address, data []byte, gasLimit, fee uint64) (*ep.TransactionResult, error) {
	return nil, nil
}

func (this *transactor) Transact(privKey, address, data []byte, gasLimit, fee uint64) (*ep.Receipt, error) {
	if address == nil || len(address) == 0 {
		return this.testOutput.TxCreateReceipt, nil
	}
	return this.testOutput.TxReceipt, nil
Androlo's avatar
Androlo committed
}

Androlo's avatar
Androlo committed
func (this *transactor) SignTx(tx types.Tx, privAccounts []*account.PrivAccount) (types.Tx, error) {
	return nil, nil
Androlo's avatar
Androlo committed
}