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

import (
	account       "github.com/eris-ltd/eris-db/account"
	core_types    "github.com/eris-ltd/eris-db/core/types"
	definitions   "github.com/eris-ltd/eris-db/definitions"
	event         "github.com/eris-ltd/eris-db/event"
	manager_types "github.com/eris-ltd/eris-db/manager/types"
Silas Davis's avatar
Silas Davis committed
	td "github.com/eris-ltd/eris-db/test/testdata/testdata"
	types "github.com/eris-ltd/eris-db/txs"
Silas Davis's avatar
Silas Davis committed
	evts "github.com/tendermint/go-events"
Ethan Buchman's avatar
Ethan Buchman committed
	mintTypes "github.com/tendermint/tendermint/types"
Androlo's avatar
Androlo committed
)

// Base struct.
type MockPipe struct {
androlo's avatar
androlo committed
	testData   *td.TestData
	accounts   definitions.Accounts
	blockchain definitions.Blockchain
	consensus  definitions.Consensus
	events     event.EventEmitter
	namereg    definitions.NameReg
	net        definitions.Net
	transactor definitions.Transactor
Androlo's avatar
Androlo committed
}

// Create a new mock tendermint pipe.
func NewMockPipe(td *td.TestData) definitions.Pipe {
androlo's avatar
androlo committed
	accounts := &accounts{td}
	blockchain := &blockchain{td}
	consensus := &consensus{td}
Ethan Buchman's avatar
Ethan Buchman committed
	eventer := &eventer{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,
Ethan Buchman's avatar
Ethan Buchman committed
		eventer,
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() definitions.Pipe {
	return NewMockPipe(td.LoadTestData())
Androlo's avatar
Androlo committed
}

func (this *MockPipe) Accounts() definitions.Accounts {
Androlo's avatar
Androlo committed
	return this.accounts
}

func (this *MockPipe) Blockchain() definitions.Blockchain {
Androlo's avatar
Androlo committed
	return this.blockchain
}

func (this *MockPipe) Consensus() definitions.Consensus {
Androlo's avatar
Androlo committed
	return this.consensus
}

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

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

func (this *MockPipe) Net() definitions.Net {
Androlo's avatar
Androlo committed
	return this.net
}

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

func (this *MockPipe) GetApplication() manager_types.Application {
	// TODO: [ben] mock application
	return nil
}

func (this *MockPipe) SetConsensusEngine(_ definitions.ConsensusEngine) error {
	// TODO: [ben] mock consensus engine
	return nil
}
func (this *MockPipe) GetConsensusEngine() definitions.ConsensusEngine {
	return nil
}

func (this *MockPipe) GetTendermintPipe() (definitions.TendermintPipe, error) {
	return nil, fmt.Errorf("Tendermint pipe is not supported by mocked pipe.")
}

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([]*event.FilterData) (*core_types.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
}

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

Silas Davis's avatar
Silas Davis committed
func (this *accounts) StorageAt(address, key []byte) (*core_types.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
}

Silas Davis's avatar
Silas Davis committed
func (this *blockchain) Info() (*core_types.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
}

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

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

Ethan Buchman's avatar
Ethan Buchman committed
func (this *blockchain) Block(height int) (*mintTypes.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
}

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

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

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

func (this *eventer) Subscribe(subId, event string, callback func(evts.EventData)) error {
	return nil
Androlo's avatar
Androlo committed
}

func (this *eventer) Unsubscribe(subId string) error {
	return nil
Androlo's avatar
Androlo committed
}

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

func (this *namereg) Entry(key string) (*core_types.NameRegEntry, error) {
androlo's avatar
androlo committed
	return this.testData.GetNameRegEntry.Output, nil
}

func (this *namereg) Entries(filters []*event.FilterData) (*core_types.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
}

Silas Davis's avatar
Silas Davis committed
func (this *net) Info() (*core_types.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
}

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

Silas Davis's avatar
Silas Davis committed
func (this *net) Peer(address string) (*core_types.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
}

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

Silas Davis's avatar
Silas Davis committed
func (this *transactor) CallCode(from, code, data []byte) (*core_types.Call, error) {
androlo's avatar
androlo committed
	return this.testData.CallCode.Output, nil
Androlo's avatar
Androlo committed
}

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

func (this *transactor) UnconfirmedTxs() (*types.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) (*types.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
}

func (this *transactor) Send(privKey, toAddress []byte, amount int64) (*types.Receipt, error) {
Androlo's avatar
.  
Androlo committed
	return nil, nil
}

func (this *transactor) SendAndHold(privKey, toAddress []byte, amount int64) (*types.Receipt, error) {
Androlo's avatar
.  
Androlo committed
	return nil, nil
}

func (this *transactor) TransactNameReg(privKey []byte, name, data string, amount, fee int64) (*types.Receipt, error) {
androlo's avatar
androlo committed
	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
}