-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
consensus: add comment as to why use mocks during replay (#4785)
Closes #4766
- Loading branch information
Showing
6 changed files
with
108 additions
and
60 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
package consensus | ||
|
||
import ( | ||
abci "github.com/tendermint/tendermint/abci/types" | ||
"github.com/tendermint/tendermint/libs/clist" | ||
mempl "github.com/tendermint/tendermint/mempool" | ||
"github.com/tendermint/tendermint/proxy" | ||
sm "github.com/tendermint/tendermint/state" | ||
"github.com/tendermint/tendermint/types" | ||
) | ||
|
||
//----------------------------------------------------------------------------- | ||
|
||
type emptyMempool struct{} | ||
|
||
var _ mempl.Mempool = emptyMempool{} | ||
|
||
func (emptyMempool) Lock() {} | ||
func (emptyMempool) Unlock() {} | ||
func (emptyMempool) Size() int { return 0 } | ||
func (emptyMempool) CheckTx(_ types.Tx, _ func(*abci.Response), _ mempl.TxInfo) error { | ||
return nil | ||
} | ||
func (emptyMempool) ReapMaxBytesMaxGas(_, _ int64) types.Txs { return types.Txs{} } | ||
func (emptyMempool) ReapMaxTxs(n int) types.Txs { return types.Txs{} } | ||
func (emptyMempool) Update( | ||
_ int64, | ||
_ types.Txs, | ||
_ []*abci.ResponseDeliverTx, | ||
_ mempl.PreCheckFunc, | ||
_ mempl.PostCheckFunc, | ||
) error { | ||
return nil | ||
} | ||
func (emptyMempool) Flush() {} | ||
func (emptyMempool) FlushAppConn() error { return nil } | ||
func (emptyMempool) TxsAvailable() <-chan struct{} { return make(chan struct{}) } | ||
func (emptyMempool) EnableTxsAvailable() {} | ||
func (emptyMempool) TxsBytes() int64 { return 0 } | ||
|
||
func (emptyMempool) TxsFront() *clist.CElement { return nil } | ||
func (emptyMempool) TxsWaitChan() <-chan struct{} { return nil } | ||
|
||
func (emptyMempool) InitWAL() {} | ||
func (emptyMempool) CloseWAL() {} | ||
|
||
//----------------------------------------------------------------------------- | ||
|
||
type emptyEvidencePool struct{} | ||
|
||
var _ sm.EvidencePool = emptyEvidencePool{} | ||
|
||
func (emptyEvidencePool) PendingEvidence(int64) []types.Evidence { return nil } | ||
func (emptyEvidencePool) AddEvidence(types.Evidence) error { return nil } | ||
func (emptyEvidencePool) Update(*types.Block, sm.State) {} | ||
func (emptyEvidencePool) IsCommitted(types.Evidence) bool { return false } | ||
func (emptyEvidencePool) IsPending(types.Evidence) bool { return false } | ||
|
||
//----------------------------------------------------------------------------- | ||
// mockProxyApp uses ABCIResponses to give the right results. | ||
// | ||
// Useful because we don't want to call Commit() twice for the same block on | ||
// the real app. | ||
|
||
func newMockProxyApp(appHash []byte, abciResponses *sm.ABCIResponses) proxy.AppConnConsensus { | ||
clientCreator := proxy.NewLocalClientCreator(&mockProxyApp{ | ||
appHash: appHash, | ||
abciResponses: abciResponses, | ||
}) | ||
cli, _ := clientCreator.NewABCIClient() | ||
err := cli.Start() | ||
if err != nil { | ||
panic(err) | ||
} | ||
return proxy.NewAppConnConsensus(cli) | ||
} | ||
|
||
type mockProxyApp struct { | ||
abci.BaseApplication | ||
|
||
appHash []byte | ||
txCount int | ||
abciResponses *sm.ABCIResponses | ||
} | ||
|
||
func (mock *mockProxyApp) DeliverTx(req abci.RequestDeliverTx) abci.ResponseDeliverTx { | ||
r := mock.abciResponses.DeliverTxs[mock.txCount] | ||
mock.txCount++ | ||
if r == nil { //it could be nil because of amino unMarshall, it will cause an empty ResponseDeliverTx to become nil | ||
return abci.ResponseDeliverTx{} | ||
} | ||
return *r | ||
} | ||
|
||
func (mock *mockProxyApp) EndBlock(req abci.RequestEndBlock) abci.ResponseEndBlock { | ||
mock.txCount = 0 | ||
return *mock.abciResponses.EndBlock | ||
} | ||
|
||
func (mock *mockProxyApp) Commit() abci.ResponseCommit { | ||
return abci.ResponseCommit{Data: mock.appHash} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters