2021-05-18 21:01:10 +00:00
|
|
|
package kit
|
2020-10-20 15:08:25 +00:00
|
|
|
|
2021-06-11 17:26:25 +00:00
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/filecoin-project/go-state-types/abi"
|
|
|
|
"github.com/filecoin-project/lotus/chain/types"
|
|
|
|
|
|
|
|
"github.com/filecoin-project/go-address"
|
|
|
|
)
|
|
|
|
|
|
|
|
func StartOneNodeOneMiner(ctx context.Context, t *testing.T, blocktime time.Duration) (TestFullNode, address.Address) {
|
|
|
|
n, sn := RPCMockMinerBuilder(t, OneFull, OneMiner)
|
|
|
|
|
|
|
|
full := n[0]
|
|
|
|
miner := sn[0]
|
|
|
|
|
|
|
|
// Get everyone connected
|
|
|
|
addrs, err := full.NetAddrsListen(ctx)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := miner.NetConnect(ctx, addrs); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Start mining blocks
|
|
|
|
bm := NewBlockMiner(t, miner)
|
|
|
|
bm.MineBlocks(ctx, blocktime)
|
|
|
|
t.Cleanup(bm.Stop)
|
|
|
|
|
|
|
|
// Get the full node's wallet address
|
|
|
|
fullAddr, err := full.WalletDefaultAddress(ctx)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Create mock CLI
|
|
|
|
return full, fullAddr
|
|
|
|
}
|
|
|
|
|
|
|
|
func StartTwoNodesOneMiner(ctx context.Context, t *testing.T, blocktime time.Duration) ([]TestFullNode, []address.Address) {
|
|
|
|
n, sn := RPCMockMinerBuilder(t, TwoFull, OneMiner)
|
|
|
|
|
|
|
|
fullNode1 := n[0]
|
|
|
|
fullNode2 := n[1]
|
|
|
|
miner := sn[0]
|
|
|
|
|
|
|
|
// Get everyone connected
|
|
|
|
addrs, err := fullNode1.NetAddrsListen(ctx)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := fullNode2.NetConnect(ctx, addrs); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := miner.NetConnect(ctx, addrs); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Start mining blocks
|
|
|
|
bm := NewBlockMiner(t, miner)
|
|
|
|
bm.MineBlocks(ctx, blocktime)
|
|
|
|
t.Cleanup(bm.Stop)
|
|
|
|
|
|
|
|
// Send some funds to register the second node
|
|
|
|
fullNodeAddr2, err := fullNode2.WalletNew(ctx, types.KTSecp256k1)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
SendFunds(ctx, t, fullNode1, fullNodeAddr2, abi.NewTokenAmount(1e18))
|
|
|
|
|
|
|
|
// Get the first node's address
|
|
|
|
fullNodeAddr1, err := fullNode1.WalletDefaultAddress(ctx)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Create mock CLI
|
|
|
|
return n, []address.Address{fullNodeAddr1, fullNodeAddr2}
|
|
|
|
}
|