kaspad/domain/consensus/test_consensus.go
Svarog f7fa823f17
[NOD-1551] Requirements for performance tests (#1154)
* [NOD-1551] Add NewTestConsensusWithDataDir to factory

* [NOD-1551] Cache transaction ID

* [NOD-1551] Should return err if err != nil

* [NOD-1551] BuildBlockWithParents returns the blocks pastUTXOData

* [NOD-1551] Set BlockCoinbaseMaturity to 0 in TestDoubleSpends

* [NOD-1551] Fix comments

* --amend

Co-authored-by: Ori Newman <orinewman1@gmail.com>
2020-11-26 12:12:01 +02:00

60 lines
1.9 KiB
Go

package consensus
import (
"github.com/kaspanet/kaspad/domain/consensus/model"
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
"github.com/kaspanet/kaspad/domain/consensus/utils/consensusserialization"
)
type testConsensus struct {
*consensus
testBlockBuilder model.TestBlockBuilder
testReachabilityManager model.TestReachabilityManager
testConsensusStateManager model.TestConsensusStateManager
}
func (tc *testConsensus) BuildBlockWithParents(parentHashes []*externalapi.DomainHash, coinbaseData *externalapi.DomainCoinbaseData, transactions []*externalapi.DomainTransaction) (*externalapi.DomainBlock, *model.UTXODiff, error) {
// Require write lock because BuildBlockWithParents stages temporary data
tc.lock.Lock()
defer tc.lock.Unlock()
return tc.testBlockBuilder.BuildBlockWithParents(parentHashes, coinbaseData, transactions)
}
func (tc *testConsensus) AddBlock(parentHashes []*externalapi.DomainHash, coinbaseData *externalapi.DomainCoinbaseData,
transactions []*externalapi.DomainTransaction) (*externalapi.DomainHash, error) {
// Require write lock because BuildBlockWithParents stages temporary data
tc.lock.Lock()
defer tc.lock.Unlock()
block, _, err := tc.testBlockBuilder.BuildBlockWithParents(parentHashes, coinbaseData, transactions)
if err != nil {
return nil, err
}
err = tc.blockProcessor.ValidateAndInsertBlock(block)
if err != nil {
return nil, err
}
return consensusserialization.BlockHash(block), nil
}
func (tc *testConsensus) DiscardAllStores() {
tc.AcceptanceDataStore().Discard()
tc.BlockHeaderStore().Discard()
tc.BlockRelationStore().Discard()
tc.BlockStatusStore().Discard()
tc.BlockStore().Discard()
tc.ConsensusStateStore().Discard()
tc.GHOSTDAGDataStore().Discard()
tc.HeaderTipsStore().Discard()
tc.MultisetStore().Discard()
tc.PruningStore().Discard()
tc.ReachabilityDataStore().Discard()
tc.UTXODiffStore().Discard()
}