Merge pull request #6511 from filecoin-project/refactor/itest-deadling-toggling
This commit is contained in:
commit
7c329d43f2
@ -3,7 +3,6 @@ package itests
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
@ -22,12 +21,11 @@ import (
|
|||||||
"github.com/filecoin-project/lotus/chain/actors/builtin/miner"
|
"github.com/filecoin-project/lotus/chain/actors/builtin/miner"
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
"github.com/filecoin-project/lotus/extern/sector-storage/mock"
|
"github.com/filecoin-project/lotus/extern/sector-storage/mock"
|
||||||
"github.com/filecoin-project/lotus/itests/kit"
|
"github.com/filecoin-project/lotus/itests/kit2"
|
||||||
"github.com/filecoin-project/lotus/node/impl"
|
"github.com/filecoin-project/lotus/node/impl"
|
||||||
miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner"
|
miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbor "github.com/ipfs/go-ipld-cbor"
|
cbor "github.com/ipfs/go-ipld-cbor"
|
||||||
logging "github.com/ipfs/go-log/v2"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -58,11 +56,8 @@ func TestDeadlineToggling(t *testing.T) {
|
|||||||
if os.Getenv("LOTUS_TEST_DEADLINE_TOGGLING") != "1" {
|
if os.Getenv("LOTUS_TEST_DEADLINE_TOGGLING") != "1" {
|
||||||
t.Skip("this takes a few minutes, set LOTUS_TEST_DEADLINE_TOGGLING=1 to run")
|
t.Skip("this takes a few minutes, set LOTUS_TEST_DEADLINE_TOGGLING=1 to run")
|
||||||
}
|
}
|
||||||
_ = logging.SetLogLevel("miner", "ERROR")
|
|
||||||
_ = logging.SetLogLevel("chainstore", "ERROR")
|
kit2.QuietMiningLogs()
|
||||||
_ = logging.SetLogLevel("chain", "ERROR")
|
|
||||||
_ = logging.SetLogLevel("sub", "ERROR")
|
|
||||||
_ = logging.SetLogLevel("storageminer", "FATAL")
|
|
||||||
|
|
||||||
const sectorsC, sectorsD, sectorsB = 10, 9, 8
|
const sectorsC, sectorsD, sectorsB = 10, 9, 8
|
||||||
|
|
||||||
@ -75,21 +70,26 @@ func TestDeadlineToggling(t *testing.T) {
|
|||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
n, sn := kit.MockMinerBuilder(t, []kit.FullNodeOpts{kit.FullNodeWithNetworkUpgradeAt(network.Version12, upgradeH)}, kit.OneMiner)
|
var (
|
||||||
|
client kit2.TestFullNode
|
||||||
|
minerA kit2.TestMiner
|
||||||
|
minerB kit2.TestMiner
|
||||||
|
minerC kit2.TestMiner
|
||||||
|
minerD kit2.TestMiner
|
||||||
|
minerE kit2.TestMiner
|
||||||
|
)
|
||||||
|
opts := []kit2.NodeOpt{kit2.ConstructorOpts(kit2.NetworkUpgradeAt(network.Version12, upgradeH))}
|
||||||
|
ens := kit2.NewEnsemble(t, kit2.MockProofs()).
|
||||||
|
FullNode(&client, opts...).
|
||||||
|
Miner(&minerA, &client, opts...).
|
||||||
|
Start().
|
||||||
|
InterconnectAll()
|
||||||
|
ens.BeginMining(blocktime)
|
||||||
|
|
||||||
client := n[0].FullNode.(*impl.FullNodeAPI)
|
opts = append(opts, kit2.OwnerAddr(client.DefaultKey))
|
||||||
minerA := sn[0]
|
ens.Miner(&minerB, &client, opts...).
|
||||||
|
Miner(&minerC, &client, opts...).
|
||||||
{
|
Start()
|
||||||
addrinfo, err := client.NetAddrsListen(ctx)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := minerA.NetConnect(ctx, addrinfo); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultFrom, err := client.WalletDefaultAddress(ctx)
|
defaultFrom, err := client.WalletDefaultAddress(ctx)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@ -99,28 +99,6 @@ func TestDeadlineToggling(t *testing.T) {
|
|||||||
|
|
||||||
build.Clock.Sleep(time.Second)
|
build.Clock.Sleep(time.Second)
|
||||||
|
|
||||||
done := make(chan struct{})
|
|
||||||
go func() {
|
|
||||||
defer close(done)
|
|
||||||
for ctx.Err() == nil {
|
|
||||||
build.Clock.Sleep(blocktime)
|
|
||||||
if err := minerA.MineOne(ctx, kit.MineNext); err != nil {
|
|
||||||
if ctx.Err() != nil {
|
|
||||||
// context was canceled, ignore the error.
|
|
||||||
return
|
|
||||||
}
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
defer func() {
|
|
||||||
cancel()
|
|
||||||
<-done
|
|
||||||
}()
|
|
||||||
|
|
||||||
minerB := n[0].Stb(ctx, t, kit.TestSpt, defaultFrom)
|
|
||||||
minerC := n[0].Stb(ctx, t, kit.TestSpt, defaultFrom)
|
|
||||||
|
|
||||||
maddrB, err := minerB.ActorAddress(ctx)
|
maddrB, err := minerB.ActorAddress(ctx)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
maddrC, err := minerC.ActorAddress(ctx)
|
maddrC, err := minerC.ActorAddress(ctx)
|
||||||
@ -131,20 +109,20 @@ func TestDeadlineToggling(t *testing.T) {
|
|||||||
|
|
||||||
// pledge sectors on C, go through a PP, check for power
|
// pledge sectors on C, go through a PP, check for power
|
||||||
{
|
{
|
||||||
kit.PledgeSectors(t, ctx, minerC, sectorsC, 0, nil)
|
minerC.PledgeSectors(ctx, sectorsC, 0, nil)
|
||||||
|
|
||||||
di, err := client.StateMinerProvingDeadline(ctx, maddrC, types.EmptyTSK)
|
di, err := client.StateMinerProvingDeadline(ctx, maddrC, types.EmptyTSK)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
fmt.Printf("Running one proving period (miner C)\n")
|
t.Log("Running one proving period (miner C)")
|
||||||
fmt.Printf("End for head.Height > %d\n", di.PeriodStart+di.WPoStProvingPeriod*2)
|
t.Logf("End for head.Height > %d", di.PeriodStart+di.WPoStProvingPeriod*2)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
head, err := client.ChainHead(ctx)
|
head, err := client.ChainHead(ctx)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
if head.Height() > di.PeriodStart+provingPeriod*2 {
|
if head.Height() > di.PeriodStart+provingPeriod*2 {
|
||||||
fmt.Printf("Now head.Height = %d\n", head.Height())
|
t.Logf("Now head.Height = %d", head.Height())
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
build.Clock.Sleep(blocktime)
|
build.Clock.Sleep(blocktime)
|
||||||
@ -165,7 +143,7 @@ func TestDeadlineToggling(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
if head.Height() > upgradeH+provingPeriod {
|
if head.Height() > upgradeH+provingPeriod {
|
||||||
fmt.Printf("Now head.Height = %d\n", head.Height())
|
t.Logf("Now head.Height = %d", head.Height())
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
build.Clock.Sleep(blocktime)
|
build.Clock.Sleep(blocktime)
|
||||||
@ -216,8 +194,9 @@ func TestDeadlineToggling(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.GreaterOrEqual(t, nv, network.Version12)
|
require.GreaterOrEqual(t, nv, network.Version12)
|
||||||
|
|
||||||
minerD := n[0].Stb(ctx, t, kit.TestSpt, defaultFrom)
|
ens.Miner(&minerD, &client, opts...).
|
||||||
minerE := n[0].Stb(ctx, t, kit.TestSpt, defaultFrom)
|
Miner(&minerE, &client, opts...).
|
||||||
|
Start()
|
||||||
|
|
||||||
maddrD, err := minerD.ActorAddress(ctx)
|
maddrD, err := minerD.ActorAddress(ctx)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@ -225,7 +204,7 @@ func TestDeadlineToggling(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// first round of miner checks
|
// first round of miner checks
|
||||||
checkMiner(maddrA, types.NewInt(uint64(ssz)*kit.GenesisPreseals), true, true, types.EmptyTSK)
|
checkMiner(maddrA, types.NewInt(uint64(ssz)*kit2.DefaultPresealsPerBootstrapMiner), true, true, types.EmptyTSK)
|
||||||
checkMiner(maddrC, types.NewInt(uint64(ssz)*sectorsC), true, true, types.EmptyTSK)
|
checkMiner(maddrC, types.NewInt(uint64(ssz)*sectorsC), true, true, types.EmptyTSK)
|
||||||
|
|
||||||
checkMiner(maddrB, types.NewInt(0), false, false, types.EmptyTSK)
|
checkMiner(maddrB, types.NewInt(0), false, false, types.EmptyTSK)
|
||||||
@ -233,10 +212,10 @@ func TestDeadlineToggling(t *testing.T) {
|
|||||||
checkMiner(maddrE, types.NewInt(0), false, false, types.EmptyTSK)
|
checkMiner(maddrE, types.NewInt(0), false, false, types.EmptyTSK)
|
||||||
|
|
||||||
// pledge sectors on minerB/minerD, stop post on minerC
|
// pledge sectors on minerB/minerD, stop post on minerC
|
||||||
kit.PledgeSectors(t, ctx, minerB, sectorsB, 0, nil)
|
minerB.PledgeSectors(ctx, sectorsB, 0, nil)
|
||||||
checkMiner(maddrB, types.NewInt(0), true, true, types.EmptyTSK)
|
checkMiner(maddrB, types.NewInt(0), true, true, types.EmptyTSK)
|
||||||
|
|
||||||
kit.PledgeSectors(t, ctx, minerD, sectorsD, 0, nil)
|
minerD.PledgeSectors(ctx, sectorsD, 0, nil)
|
||||||
checkMiner(maddrD, types.NewInt(0), true, true, types.EmptyTSK)
|
checkMiner(maddrD, types.NewInt(0), true, true, types.EmptyTSK)
|
||||||
|
|
||||||
minerC.StorageMiner.(*impl.StorageMinerAPI).IStorageMgr.(*mock.SectorMgr).Fail()
|
minerC.StorageMiner.(*impl.StorageMinerAPI).IStorageMgr.(*mock.SectorMgr).Fail()
|
||||||
@ -252,7 +231,7 @@ func TestDeadlineToggling(t *testing.T) {
|
|||||||
params := &miner.SectorPreCommitInfo{
|
params := &miner.SectorPreCommitInfo{
|
||||||
Expiration: 2880 * 300,
|
Expiration: 2880 * 300,
|
||||||
SectorNumber: 22,
|
SectorNumber: 22,
|
||||||
SealProof: kit.TestSpt,
|
SealProof: kit2.TestSpt,
|
||||||
|
|
||||||
SealedCID: cr,
|
SealedCID: cr,
|
||||||
SealRandEpoch: head.Height() - 200,
|
SealRandEpoch: head.Height() - 200,
|
||||||
@ -281,7 +260,7 @@ func TestDeadlineToggling(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
if head.Height() > upgradeH+provingPeriod+(provingPeriod/2) {
|
if head.Height() > upgradeH+provingPeriod+(provingPeriod/2) {
|
||||||
fmt.Printf("Now head.Height = %d\n", head.Height())
|
t.Logf("Now head.Height = %d", head.Height())
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
build.Clock.Sleep(blocktime)
|
build.Clock.Sleep(blocktime)
|
||||||
@ -295,14 +274,14 @@ func TestDeadlineToggling(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
if head.Height() > upgradeH+(provingPeriod*3) {
|
if head.Height() > upgradeH+(provingPeriod*3) {
|
||||||
fmt.Printf("Now head.Height = %d\n", head.Height())
|
t.Logf("Now head.Height = %d", head.Height())
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
build.Clock.Sleep(blocktime)
|
build.Clock.Sleep(blocktime)
|
||||||
}
|
}
|
||||||
|
|
||||||
// second round of miner checks
|
// second round of miner checks
|
||||||
checkMiner(maddrA, types.NewInt(uint64(ssz)*kit.GenesisPreseals), true, true, types.EmptyTSK)
|
checkMiner(maddrA, types.NewInt(uint64(ssz)*kit2.DefaultPresealsPerBootstrapMiner), true, true, types.EmptyTSK)
|
||||||
checkMiner(maddrC, types.NewInt(0), true, true, types.EmptyTSK)
|
checkMiner(maddrC, types.NewInt(0), true, true, types.EmptyTSK)
|
||||||
checkMiner(maddrB, types.NewInt(uint64(ssz)*sectorsB), true, true, types.EmptyTSK)
|
checkMiner(maddrB, types.NewInt(uint64(ssz)*sectorsB), true, true, types.EmptyTSK)
|
||||||
checkMiner(maddrD, types.NewInt(uint64(ssz)*sectorsD), true, true, types.EmptyTSK)
|
checkMiner(maddrD, types.NewInt(uint64(ssz)*sectorsD), true, true, types.EmptyTSK)
|
||||||
@ -351,7 +330,7 @@ func TestDeadlineToggling(t *testing.T) {
|
|||||||
}, nil)
|
}, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
fmt.Println("sent termination message:", smsg.Cid())
|
t.Log("sent termination message:", smsg.Cid())
|
||||||
|
|
||||||
r, err := client.StateWaitMsg(ctx, smsg.Cid(), 2, api.LookbackNoLimit, true)
|
r, err := client.StateWaitMsg(ctx, smsg.Cid(), 2, api.LookbackNoLimit, true)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@ -367,13 +346,13 @@ func TestDeadlineToggling(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
if head.Height() > upgradeH+(provingPeriod*5) {
|
if head.Height() > upgradeH+(provingPeriod*5) {
|
||||||
fmt.Printf("Now head.Height = %d\n", head.Height())
|
t.Logf("Now head.Height = %d", head.Height())
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
build.Clock.Sleep(blocktime)
|
build.Clock.Sleep(blocktime)
|
||||||
}
|
}
|
||||||
|
|
||||||
checkMiner(maddrA, types.NewInt(uint64(ssz)*kit.GenesisPreseals), true, true, types.EmptyTSK)
|
checkMiner(maddrA, types.NewInt(uint64(ssz)*kit2.DefaultPresealsPerBootstrapMiner), true, true, types.EmptyTSK)
|
||||||
checkMiner(maddrC, types.NewInt(0), true, true, types.EmptyTSK)
|
checkMiner(maddrC, types.NewInt(0), true, true, types.EmptyTSK)
|
||||||
checkMiner(maddrB, types.NewInt(0), true, true, types.EmptyTSK)
|
checkMiner(maddrB, types.NewInt(0), true, true, types.EmptyTSK)
|
||||||
checkMiner(maddrD, types.NewInt(0), false, false, types.EmptyTSK)
|
checkMiner(maddrD, types.NewInt(0), false, false, types.EmptyTSK)
|
||||||
|
@ -24,7 +24,7 @@ type ensembleOpts struct {
|
|||||||
|
|
||||||
var DefaultEnsembleOpts = ensembleOpts{
|
var DefaultEnsembleOpts = ensembleOpts{
|
||||||
pastOffset: 10000000 * time.Second, // time sufficiently in the past to trigger catch-up mining.
|
pastOffset: 10000000 * time.Second, // time sufficiently in the past to trigger catch-up mining.
|
||||||
proofType: abi.RegisteredSealProof_StackedDrg2KiBV1,
|
proofType: abi.RegisteredSealProof_StackedDrg2KiBV1_1, // default _concrete_ proof type for non-genesis miners (notice the _1).
|
||||||
}
|
}
|
||||||
|
|
||||||
func ProofType(proofType abi.RegisteredSealProof) EnsembleOpt {
|
func ProofType(proofType abi.RegisteredSealProof) EnsembleOpt {
|
||||||
|
@ -14,6 +14,8 @@ import (
|
|||||||
// PresealSectors option.
|
// PresealSectors option.
|
||||||
const DefaultPresealsPerBootstrapMiner = 2
|
const DefaultPresealsPerBootstrapMiner = 2
|
||||||
|
|
||||||
|
const TestSpt = abi.RegisteredSealProof_StackedDrg2KiBV1_1
|
||||||
|
|
||||||
// nodeOpts is an options accumulating struct, where functional options are
|
// nodeOpts is an options accumulating struct, where functional options are
|
||||||
// merged into.
|
// merged into.
|
||||||
type nodeOpts struct {
|
type nodeOpts struct {
|
||||||
|
@ -87,5 +87,4 @@ func SDRUpgradeAt(calico, persian abi.ChainEpoch) node.Option {
|
|||||||
Network: network.Version8,
|
Network: network.Version8,
|
||||||
Height: persian,
|
Height: persian,
|
||||||
}})
|
}})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user