Make consensus.databaseContext a DBManager and allow keeping data dir in TestConsensus

* Make consensus.databaseContext a DBManager

* Allow keeping data dir in TestConsensus
This commit is contained in:
Svarog 2020-12-15 10:11:14 +02:00 committed by GitHub
parent 48e1a2c396
commit 77adb6c99f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 50 additions and 34 deletions

View File

@ -11,7 +11,7 @@ import (
type consensus struct {
lock *sync.Mutex
databaseContext model.DBReader
databaseContext model.DBManager
blockProcessor model.BlockProcessor
blockBuilder model.BlockBuilder

View File

@ -19,7 +19,7 @@ func TestConsensus_GetBlockInfo(t *testing.T) {
if err != nil {
t.Fatalf("Error setting up consensus: %+v", err)
}
defer teardown()
defer teardown(false)
invalidBlock, _, err := consensus.BuildBlockWithParents([]*externalapi.DomainHash{params.GenesisHash}, nil, nil)
if err != nil {

View File

@ -47,9 +47,10 @@ import (
// Factory instantiates new Consensuses
type Factory interface {
NewConsensus(dagParams *dagconfig.Params, db infrastructuredatabase.Database) (externalapi.Consensus, error)
NewTestConsensus(dagParams *dagconfig.Params, testName string) (tc testapi.TestConsensus, teardown func(), err error)
NewTestConsensus(dagParams *dagconfig.Params, testName string) (
tc testapi.TestConsensus, teardown func(keepDataDir bool), err error)
NewTestConsensusWithDataDir(dagParams *dagconfig.Params, dataDir string) (
tc testapi.TestConsensus, teardown func(), err error)
tc testapi.TestConsensus, teardown func(keepDataDir bool), err error)
}
type factory struct{}
@ -344,7 +345,7 @@ func (f *factory) NewConsensus(dagParams *dagconfig.Params, db infrastructuredat
}
func (f *factory) NewTestConsensus(dagParams *dagconfig.Params, testName string) (
tc testapi.TestConsensus, teardown func(), err error) {
tc testapi.TestConsensus, teardown func(keepDataDir bool), err error) {
dataDir, err := ioutil.TempDir("", testName)
if err != nil {
@ -355,7 +356,7 @@ func (f *factory) NewTestConsensus(dagParams *dagconfig.Params, testName string)
}
func (f *factory) NewTestConsensusWithDataDir(dagParams *dagconfig.Params, dataDir string) (
tc testapi.TestConsensus, teardown func(), err error) {
tc testapi.TestConsensus, teardown func(keepDataDir bool), err error) {
db, err := ldb.NewLevelDB(dataDir)
if err != nil {
@ -380,9 +381,14 @@ func (f *factory) NewTestConsensusWithDataDir(dagParams *dagconfig.Params, dataD
testTransactionValidator: testTransactionValidator,
}
tstConsensus.testBlockBuilder = blockbuilder.NewTestBlockBuilder(consensusAsImplementation.blockBuilder, tstConsensus)
teardown = func() {
teardown = func(keepDataDir bool) {
db.Close()
os.RemoveAll(dataDir)
if !keepDataDir {
err := os.RemoveAll(dataDir)
if err != nil {
log.Errorf("Error removing data directory for test consensus: %s", err)
}
}
}
return tstConsensus, teardown, nil

View File

@ -24,7 +24,7 @@ func TestFinality(t *testing.T) {
if err != nil {
t.Fatalf("Error setting up consensus: %+v", err)
}
defer teardown()
defer teardown(false)
buildAndInsertBlock := func(parentHashes []*externalapi.DomainHash) (*externalapi.DomainBlock, error) {
block, _, err := consensus.BuildBlockWithParents(parentHashes, nil, nil)
@ -241,7 +241,7 @@ func TestBoundedMergeDepth(t *testing.T) {
if err != nil {
t.Fatalf("TestBoundedMergeDepth: Error setting up consensus: %+v", err)
}
defer teardownFunc2()
defer teardownFunc2(false)
// Create a block on top on genesis
block1 := buildAndInsertBlock(consensusBuild, []*externalapi.DomainHash{params.GenesisHash})
@ -266,7 +266,7 @@ func TestBoundedMergeDepth(t *testing.T) {
}
// Teardown and assign nil to make sure we use the right DAG from here on.
teardownFunc1()
teardownFunc1(false)
consensusBuild = nil
// Now test against the real DAG

7
domain/consensus/log.go Normal file
View File

@ -0,0 +1,7 @@
package consensus
import (
"github.com/kaspanet/kaspad/infrastructure/logger"
)
var log, _ = logger.Get(logger.SubsystemTags.BDAG)

View File

@ -11,7 +11,7 @@ type TestConsensus interface {
externalapi.Consensus
DAGParams() *dagconfig.Params
DatabaseContext() model.DBReader
DatabaseContext() model.DBManager
BuildBlockWithParents(parentHashes []*externalapi.DomainHash, coinbaseData *externalapi.DomainCoinbaseData,
transactions []*externalapi.DomainTransaction) (*externalapi.DomainBlock, model.UTXODiff, error)

View File

@ -24,7 +24,7 @@ func TestChainedTransactions(t *testing.T) {
if err != nil {
t.Fatalf("Error setting up consensus: %+v", err)
}
defer teardown()
defer teardown(false)
block1Hash, err := tc.AddBlock([]*externalapi.DomainHash{params.GenesisHash}, nil, nil)
if err != nil {
@ -86,7 +86,7 @@ func TestCheckBlockSanity(t *testing.T) {
if err != nil {
t.Fatalf("Error setting up consensus: %+v", err)
}
defer teardown()
defer teardown(false)
blockHash := consensushashing.BlockHash(&exampleValidBlock)
if len(exampleValidBlock.Transactions) < 3 {
t.Fatalf("Too few transactions in block, expect at least 3, got %v", len(exampleValidBlock.Transactions))

View File

@ -20,7 +20,7 @@ func TestValidateMedianTime(t *testing.T) {
if err != nil {
t.Fatalf("Error setting up consensus: %+v", err)
}
defer teardown()
defer teardown(false)
addBlock := func(blockTime int64, parents []*externalapi.DomainHash, expectedErr error) (*externalapi.DomainBlock, *externalapi.DomainHash) {
block, _, err := tc.BuildBlockWithParents(parents, nil, nil)
@ -87,7 +87,7 @@ func TestCheckParentsIncest(t *testing.T) {
if err != nil {
t.Fatalf("Error setting up consensus: %+v", err)
}
defer teardown()
defer teardown(false)
a, err := tc.AddBlock([]*externalapi.DomainHash{params.GenesisHash}, nil, nil)
if err != nil {

View File

@ -23,7 +23,7 @@ func TestUTXOCommitment(t *testing.T) {
if err != nil {
t.Fatalf("Error setting up consensus: %+v", err)
}
defer teardown()
defer teardown(false)
// Build the following DAG:
// G <- A <- B <- C <- E
@ -119,7 +119,7 @@ func TestPastUTXOMultiset(t *testing.T) {
if err != nil {
t.Fatalf("Error setting up consensus: %+v", err)
}
defer teardown()
defer teardown(false)
// Build a short chain
currentHash := params.GenesisHash

View File

@ -25,7 +25,7 @@ func TestDoubleSpends(t *testing.T) {
if err != nil {
t.Fatalf("Error setting up consensus: %+v", err)
}
defer teardown()
defer teardown(false)
// Mine chain of two blocks to fund our double spend
firstBlockHash, err := consensus.AddBlock([]*externalapi.DomainHash{params.GenesisHash}, nil, nil)
@ -157,7 +157,7 @@ func TestResolveBlockStatusSanity(t *testing.T) {
if err != nil {
t.Fatalf("Error setting up consensus: %+v", err)
}
defer teardown()
defer teardown(false)
genesisHash := params.GenesisHash
allHashes := []*externalapi.DomainHash{genesisHash}

View File

@ -16,7 +16,7 @@ func TestIsAncestorOf(t *testing.T) {
if err != nil {
t.Fatalf("NewTestConsensus: %s", err)
}
defer tearDown()
defer tearDown(false)
// Add a chain of two blocks above the genesis. This will be the
// selected parent chain.

View File

@ -1,14 +1,15 @@
package dagtraversalmanager_test
import (
"reflect"
"testing"
"github.com/kaspanet/kaspad/domain/consensus"
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
"github.com/kaspanet/kaspad/domain/consensus/utils/hashset"
"github.com/kaspanet/kaspad/domain/consensus/utils/testutils"
"github.com/kaspanet/kaspad/domain/dagconfig"
"github.com/pkg/errors"
"reflect"
"testing"
)
func TestBlueBlockWindow(t *testing.T) {
@ -313,7 +314,7 @@ func TestBlueBlockWindow(t *testing.T) {
if err != nil {
t.Fatalf("NewTestConsensus: %s", err)
}
defer tearDown()
defer tearDown(false)
windowSize := 10
blockByIDMap := make(map[string]*externalapi.DomainHash)

View File

@ -26,7 +26,7 @@ func TestDifficulty(t *testing.T) {
if err != nil {
t.Fatalf("Error setting up consensus: %+v", err)
}
defer teardown()
defer teardown(false)
addBlock := func(blockTime int64, parents ...*externalapi.DomainHash) (*externalapi.DomainBlock, *externalapi.DomainHash) {
bluestParent, err := tc.GHOSTDAGManager().ChooseSelectedParent(parents...)

View File

@ -17,7 +17,7 @@ func TestPastMedianTime(t *testing.T) {
if err != nil {
t.Fatalf("NewTestConsensus: %s", err)
}
defer tearDown()
defer tearDown(false)
numBlocks := uint32(300)
blockHashes := make([]*externalapi.DomainHash, numBlocks)

View File

@ -1,11 +1,12 @@
package reachabilitymanager_test
import (
"testing"
"github.com/kaspanet/kaspad/domain/consensus"
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
"github.com/kaspanet/kaspad/domain/consensus/utils/testutils"
"github.com/kaspanet/kaspad/domain/dagconfig"
"testing"
)
func TestAddChildThatPointsDirectlyToTheSelectedParentChainBelowReindexRoot(t *testing.T) {
@ -16,7 +17,7 @@ func TestAddChildThatPointsDirectlyToTheSelectedParentChainBelowReindexRoot(t *t
if err != nil {
t.Fatalf("NewTestConsensus: %+v", err)
}
defer tearDown()
defer tearDown(false)
tc.ReachabilityManager().SetReachabilityReindexWindow(reachabilityReindexWindow)
@ -71,7 +72,7 @@ func TestUpdateReindexRoot(t *testing.T) {
if err != nil {
t.Fatalf("NewTestConsensus: %s", err)
}
defer tearDown()
defer tearDown(false)
tc.ReachabilityManager().SetReachabilityReindexWindow(reachabilityReindexWindow)
@ -161,7 +162,7 @@ func TestReindexIntervalsEarlierThanReindexRoot(t *testing.T) {
if err != nil {
t.Fatalf("NewTestConsensus: %+v", err)
}
defer tearDown()
defer tearDown(false)
tc.ReachabilityManager().SetReachabilityReindexWindow(reachabilityReindexWindow)
@ -295,7 +296,7 @@ func TestTipsAfterReindexIntervalsEarlierThanReindexRoot(t *testing.T) {
if err != nil {
t.Fatalf("NewTestConsensus: %s", err)
}
defer tearDown()
defer tearDown(false)
tc.ReachabilityManager().SetReachabilityReindexWindow(reachabilityReindexWindow)

View File

@ -1,6 +1,8 @@
package transactionvalidator_test
import (
"testing"
"github.com/kaspanet/kaspad/domain/consensus"
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
"github.com/kaspanet/kaspad/domain/consensus/ruleerrors"
@ -12,7 +14,6 @@ import (
"github.com/kaspanet/kaspad/domain/dagconfig"
"github.com/kaspanet/kaspad/util"
"github.com/pkg/errors"
"testing"
)
type txSubnetworkData struct {
@ -28,7 +29,7 @@ func TestValidateTransactionInIsolation(t *testing.T) {
if err != nil {
t.Fatalf("Error setting up consensus: %+v", err)
}
defer teardown()
defer teardown(false)
tests := []struct {
name string

View File

@ -5,7 +5,7 @@ import (
"github.com/kaspanet/kaspad/domain/consensus/model/testapi"
)
func (tc *testConsensus) DatabaseContext() model.DBReader {
func (tc *testConsensus) DatabaseContext() model.DBManager {
return tc.databaseContext
}