mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-11-27 15:53:57 +00:00
Just some name changes, put in a stand in emission amount, and started copying the algo from Karlsen. Not release worthy yet. Therefore Dev branch exists now. Also, for now this is for research purposes only. I got no clue what to build on top of Kaspa yet. Help would be appreciated for ideas and implementations.
141 lines
4.0 KiB
Go
141 lines
4.0 KiB
Go
package integration
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/zoomy-network/zoomyd/domain/dagconfig"
|
|
|
|
"github.com/zoomy-network/zoomyd/infrastructure/db/database/ldb"
|
|
|
|
"github.com/zoomy-network/zoomyd/infrastructure/db/database"
|
|
|
|
"github.com/zoomy-network/zoomyd/app"
|
|
"github.com/zoomy-network/zoomyd/infrastructure/config"
|
|
)
|
|
|
|
type appHarness struct {
|
|
app *app.ComponentManager
|
|
rpcClient *testRPCClient
|
|
p2pAddress string
|
|
rpcAddress string
|
|
miningAddress string
|
|
miningAddressPrivateKey string
|
|
config *config.Config
|
|
database database.Database
|
|
utxoIndex bool
|
|
overrideDAGParams *dagconfig.Params
|
|
}
|
|
|
|
type harnessParams struct {
|
|
p2pAddress string
|
|
rpcAddress string
|
|
miningAddress string
|
|
miningAddressPrivateKey string
|
|
utxoIndex bool
|
|
overrideDAGParams *dagconfig.Params
|
|
protocolVersion uint32
|
|
}
|
|
|
|
// 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,
|
|
utxoIndex: params.utxoIndex,
|
|
overrideDAGParams: params.overrideDAGParams,
|
|
}
|
|
|
|
setConfig(t, harness, params.protocolVersion)
|
|
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.AppDir, "db")
|
|
return ldb.NewLevelDB(dbPath, 8)
|
|
}
|