mirror of
https://github.com/kaspanet/kaspad.git
synced 2026-02-21 03:03:08 +00:00
* Revert "[NOD-1500] Delete integration tests"
This reverts commit fcb57a2066.
* [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)
|
|
}
|