mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-06-07 14:46:44 +00:00

* Revert "[NOD-1500] Delete integration tests" This reverts commit fcb57a206690a884fa6afb69d5d493282954a8bf. * [NOD-1518] hashserialization -> consenusserialization * [NOD-1518] Fix add genesis to virtual * [NOD-1518] Fix a bug in SerializeCoinbasePayload. * [NOD-1518] Fix a loop error and make pastMedianTime behave correctly everywhere on genesis. * [NOD-1518] Fix another bug and an infinite loop. * [NOD-1518] Fix uninitialized slice. * [NOD-1518] Fix bad should-commit checks and another infinite loop. * [NOD-1518] Fix nil serialization. * [NOD-1518] Rename blockHash to currentBlockHash. * [NOD-1518] Move the check whether stagedVirtualUTXOSet != nil to the top of commitVirtualUTXODiff. * [NOD-1518] Simplify utxoDiffStore.Commit. * [NOD-1518] Unextract resolveBlockStatusAndCheckFinality. * [NOD-1518] Move no-transactions logic into CalculateIDMerkleRoot. * [NOD-1518] Remove redundant is-staged check. * [NOD-1518] Fix merge errors. * [NOD-1518] Don't write anything if utxoDiffChild is nil. * [NOD-1518] Stage virtualAcceptanceData and virtualMultiset. * [NOD-1518] Fix bugs in getBlockTemplate and submitBlock. * [NOD-1518] Fix bad validation order in validateHeaderInContext. * [NOD-1518] Fix bug in Next(). * [NOD-1518] Fix nil dereference of subnetworks in AddressCache. * [NOD-1518] Fix multisetStore.Get returning a pointer to a multiset that is changed in place. * [NOD-1518] Break on genesis in countSubtrees. * [NOD-1518] Fix createBlockLocator. * [NOD-1518] Fix MsgTxToDomainTransaction. * [NOD-1518] Set MaxTxVersion to 1. * [NOD-1518] Fix missing error handling, bug in MsgTxToDomainTransaction, and bad subnetwork equality check. * [NOD-1518] Fix bug in hasUTXOByOutpointFromStagedVirtualUTXODiff. * [NOD-1518] Remove irrelevant comments. * [NOD-1518] Generate transactions with sufficient fee in tx_relay_test. * [NOD-1518] Fix broken RPC handlers. * [NOD-1518] Fix merge errors. * [NOD-1518] Fix bad exists check in restorePastUTXO and missing genesis check in CalculatePastUTXOAndAcceptanceData. * [NOD-1518] Add a comment. * [NOD-1518] Use a regular mutex instead of a read-write mutex in consensus to avoid dealing with sneaky not-actually-read functions. * [NOD-1518] Fix a deadlock in GetVirtualSelectedParent. * [NOD-1518] Fix missing handler registration for CmdHeader. * [NOD-1518] Fix processHeader calling OnNewBlock and LogBlock. Also fix conversion errors in IBDRootUTXOSetAndBlock. * [NOD-1518] Fix bad Command() in MsgIBDRootUTXOSetAndBlock. * [NOD-1518] Fix bad SyncStateMissingUTXOSet logic in resolveSyncState. * [NOD-1518] Rename mode to syncState. * [NOD-1518] Fix headers-only blocks coming in after the consensus thinks it's synced. * [NOD-1518] Fix selectedChildIterator.Next not ignoring virtual, infinite loop in HashSet.Length(). * [NOD-1518] Fix not-properly wrapped IBD blocks. * [NOD-1518] Fix bad conversion in RequestIBDBlocks. * [NOD-1518] Fix bad string for CmdRequestHeaders. * [NOD-1518] Fix bad string for CmdDoneHeaders. * [NOD-1518] Fix bad Command() for MsgIBDRootNotFound. * [NOD-1518] Fix bad areHeaderTipsSyncedMaxTimeDifference value. * [NOD-1518] Add missing string for CmdRequestIBDBlocks. * [NOD-1518] Fix bad check for SyncStateMissingBlockBodies. * [NOD-1518] Fix bad timeout durations in tests. * [NOD-1518] Fix IBD blocks not calling OnNewBlock. * [NOD-1518] Change when IBD finishes. * [NOD-1518] Properly clone utxoDiffChild. * [NOD-1518] Fix merge errors. * [NOD-1518] Move call to LogBlock to into OnNewBlock. * [NOD-1518] Return "not implemented" in unimplemented RPC handlers. * [NOD-1518] Extract cloning of hashes to a method over DomainHash. * [NOD-1518] Use isHeaderOnlyBlock. * [NOD-1518] Use constants.TransactionVersion. * [NOD-1518] Break immediately if we reached the virtual in SelectedChildIterator. * [NOD-1518] Don't stage nil utxoDiffChild. * [NOD-1518] Properly check the genesis hash in CalculatePastUTXOAndAcceptanceData. * [NOD-1518] Explain why we break on current == nil in countSubtrees. * [NOD-1518] Add a comment explaining why we check against StatusValid in resolveSyncState. Co-authored-by: Mike Zak <feanorr@gmail.com> Co-authored-by: Ori Newman <orinewman1@gmail.com>
132 lines
3.6 KiB
Go
132 lines
3.6 KiB
Go
package integration
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/kaspanet/kaspad/infrastructure/db/database/ldb"
|
|
|
|
"github.com/kaspanet/kaspad/infrastructure/db/database"
|
|
|
|
"github.com/kaspanet/kaspad/app"
|
|
"github.com/kaspanet/kaspad/infrastructure/config"
|
|
)
|
|
|
|
type appHarness struct {
|
|
app *app.ComponentManager
|
|
rpcClient *testRPCClient
|
|
p2pAddress string
|
|
rpcAddress string
|
|
miningAddress string
|
|
miningAddressPrivateKey string
|
|
config *config.Config
|
|
database database.Database
|
|
}
|
|
|
|
type harnessParams struct {
|
|
p2pAddress string
|
|
rpcAddress string
|
|
miningAddress string
|
|
miningAddressPrivateKey string
|
|
}
|
|
|
|
// setupHarness creates a single appHarness with given parameters
|
|
func setupHarness(t *testing.T, params *harnessParams) (harness *appHarness, teardownFunc func()) {
|
|
harness = &appHarness{
|
|
p2pAddress: params.p2pAddress,
|
|
rpcAddress: params.rpcAddress,
|
|
miningAddress: params.miningAddress,
|
|
miningAddressPrivateKey: params.miningAddressPrivateKey,
|
|
}
|
|
|
|
setConfig(t, harness)
|
|
setDatabaseContext(t, harness)
|
|
setApp(t, harness)
|
|
harness.app.Start()
|
|
setRPCClient(t, harness)
|
|
|
|
return harness, func() {
|
|
teardownHarness(t, harness)
|
|
}
|
|
}
|
|
|
|
// setupHarnesses creates multiple appHarnesses, according to number of parameters passed
|
|
func setupHarnesses(t *testing.T, harnessesParams []*harnessParams) (harnesses []*appHarness, teardownFunc func()) {
|
|
var teardowns []func()
|
|
for _, params := range harnessesParams {
|
|
harness, teardownFunc := setupHarness(t, params)
|
|
harnesses = append(harnesses, harness)
|
|
teardowns = append(teardowns, teardownFunc)
|
|
}
|
|
|
|
return harnesses, func() {
|
|
for _, teardownFunc := range teardowns {
|
|
teardownFunc()
|
|
}
|
|
}
|
|
}
|
|
|
|
// standardSetup creates a standard setup of 3 appHarnesses that should work for most tests
|
|
func standardSetup(t *testing.T) (appHarness1, appHarness2, appHarness3 *appHarness, teardownFunc func()) {
|
|
harnesses, teardown := setupHarnesses(t, []*harnessParams{
|
|
{
|
|
p2pAddress: p2pAddress1,
|
|
rpcAddress: rpcAddress1,
|
|
miningAddress: miningAddress1,
|
|
miningAddressPrivateKey: miningAddress1PrivateKey,
|
|
},
|
|
{
|
|
p2pAddress: p2pAddress2,
|
|
rpcAddress: rpcAddress2,
|
|
miningAddress: miningAddress2,
|
|
miningAddressPrivateKey: miningAddress2PrivateKey,
|
|
}, {
|
|
p2pAddress: p2pAddress3,
|
|
rpcAddress: rpcAddress3,
|
|
miningAddress: miningAddress3,
|
|
miningAddressPrivateKey: miningAddress3PrivateKey,
|
|
},
|
|
})
|
|
|
|
return harnesses[0], harnesses[1], harnesses[2], teardown
|
|
}
|
|
|
|
func setRPCClient(t *testing.T, harness *appHarness) {
|
|
var err error
|
|
harness.rpcClient, err = newTestRPCClient(harness.rpcAddress)
|
|
if err != nil {
|
|
t.Fatalf("Error getting RPC client %+v", err)
|
|
}
|
|
}
|
|
|
|
func teardownHarness(t *testing.T, harness *appHarness) {
|
|
harness.rpcClient.Close()
|
|
harness.app.Stop()
|
|
|
|
err := harness.database.Close()
|
|
if err != nil {
|
|
t.Errorf("Error closing database context: %+v", err)
|
|
}
|
|
}
|
|
|
|
func setApp(t *testing.T, harness *appHarness) {
|
|
var err error
|
|
harness.app, err = app.NewComponentManager(harness.config, harness.database, make(chan struct{}))
|
|
if err != nil {
|
|
t.Fatalf("Error creating app: %+v", err)
|
|
}
|
|
}
|
|
|
|
func setDatabaseContext(t *testing.T, harness *appHarness) {
|
|
var err error
|
|
harness.database, err = openDB(harness.config)
|
|
if err != nil {
|
|
t.Fatalf("Error openning database: %+v", err)
|
|
}
|
|
}
|
|
|
|
func openDB(cfg *config.Config) (database.Database, error) {
|
|
dbPath := filepath.Join(cfg.DataDir, "db")
|
|
return ldb.NewLevelDB(dbPath)
|
|
}
|