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

import (
Ethan Buchman's avatar
Ethan Buchman committed
	ep "github.com/eris-ltd/eris-db/erisdb/pipe"
	td "github.com/eris-ltd/eris-db/test/testdata/testdata"

	"github.com/eris-ltd/eris-db/account"
	ctypes "github.com/tendermint/tendermint/rpc/core/types"
	"github.com/tendermint/tendermint/types"
Androlo's avatar
Androlo committed
)

// Base struct.
type MockPipe struct {
androlo's avatar
androlo committed
	testData   *td.TestData
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
	namereg    ep.NameReg
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 {
androlo's avatar
androlo committed
	accounts := &accounts{td}
	blockchain := &blockchain{td}
	consensus := &consensus{td}
	events := &events{td}
androlo's avatar
androlo committed
	namereg := &namereg{td}
androlo's avatar
androlo committed
	net := &net{td}
	transactor := &transactor{td}
Androlo's avatar
Androlo committed
	return &MockPipe{
androlo's avatar
androlo committed
		td,
Androlo's avatar
Androlo committed
		accounts,
		blockchain,
		consensus,
		events,
androlo's avatar
androlo committed
		namereg,
Androlo's avatar
Androlo committed
		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
}

androlo's avatar
androlo committed
func (this *MockPipe) NameReg() ep.NameReg {
	return this.namereg
}

Androlo's avatar
Androlo committed
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 {
androlo's avatar
androlo committed
	testData *td.TestData
Androlo's avatar
Androlo committed
}

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

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

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

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

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

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

// Blockchain
type blockchain struct {
androlo's avatar
androlo committed
	testData *td.TestData
Androlo's avatar
Androlo committed
}

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

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

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

func (this *blockchain) LatestBlockHeight() (int, error) {
androlo's avatar
androlo committed
	return this.testData.GetLatestBlockHeight.Output.Height, nil
Androlo's avatar
Androlo committed
}

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

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

func (this *blockchain) Block(height int) (*types.Block, error) {
androlo's avatar
androlo committed
	return this.testData.GetBlock.Output, nil
Androlo's avatar
Androlo committed
}

// Consensus
type consensus struct {
androlo's avatar
androlo committed
	testData *td.TestData
Androlo's avatar
Androlo committed
}

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

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

// Events
type events struct {
androlo's avatar
androlo committed
	testData *td.TestData
Androlo's avatar
Androlo committed
}

Ethan Buchman's avatar
Ethan Buchman committed
func (this *events) Subscribe(subId, event string, callback func(types.EventData)) (bool, error) {
Androlo's avatar
Androlo committed
	return true, nil
}

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

androlo's avatar
androlo committed
// NameReg
type namereg struct {
	testData *td.TestData
}

func (this *namereg) Entry(key string) (*types.NameRegEntry, error) {
	return this.testData.GetNameRegEntry.Output, nil
}

Ethan Buchman's avatar
Ethan Buchman committed
func (this *namereg) Entries(filters []*ep.FilterData) (*ctypes.ResultListNames, error) {
androlo's avatar
androlo committed
	return this.testData.GetNameRegEntries.Output, nil
}

Androlo's avatar
Androlo committed
// Net
type net struct {
androlo's avatar
androlo committed
	testData *td.TestData
Androlo's avatar
Androlo committed
}

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

Androlo's avatar
Androlo committed
func (this *net) ClientVersion() (string, error) {
androlo's avatar
androlo committed
	return this.testData.GetClientVersion.Output.ClientVersion, nil
Androlo's avatar
Androlo committed
}

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

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

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

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

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

// Txs
Androlo's avatar
Androlo committed
type transactor struct {
androlo's avatar
androlo committed
	testData *td.TestData
Androlo's avatar
Androlo committed
}

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

androlo's avatar
androlo committed
func (this *transactor) CallCode(from, code, data []byte) (*ep.Call, error) {
androlo's avatar
androlo committed
	return this.testData.CallCode.Output, 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) {
androlo's avatar
androlo committed
	return this.testData.GetUnconfirmedTxs.Output, nil
Androlo's avatar
Androlo committed
}

func (this *transactor) Transact(privKey, address, data []byte, gasLimit, fee int64) (*ep.Receipt, error) {
	if address == nil || len(address) == 0 {
androlo's avatar
androlo committed
		return this.testData.TransactCreate.Output, nil
androlo's avatar
androlo committed
	return this.testData.Transact.Output, nil
Androlo's avatar
Androlo committed
}

Ethan Buchman's avatar
Ethan Buchman committed
func (this *transactor) TransactAndHold(privKey, address, data []byte, gasLimit, fee int64) (*types.EventDataCall, error) {
androlo's avatar
androlo committed
	return nil, nil
}

androlo's avatar
androlo committed
func (this *transactor) TransactNameReg(privKey []byte, name, data string, amount, fee int64) (*ep.Receipt, error) {
	return this.testData.TransactNameReg.Output, nil
}

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
}