itests: Test Sealing.PreferNewSectorsForDeals
This commit is contained in:
parent
97a73f1c29
commit
ecd1ab4b42
@ -4,6 +4,7 @@ package itests
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/filecoin-project/lotus/node/config"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -189,3 +190,73 @@ func TestAbortUpgradeAvailable(t *testing.T) {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPreferNoUpgrade(t *testing.T) {
|
||||||
|
kit.QuietMiningLogs()
|
||||||
|
|
||||||
|
ctx := context.Background()
|
||||||
|
blockTime := 1 * time.Millisecond
|
||||||
|
|
||||||
|
client, miner, ens := kit.EnsembleMinimal(t, kit.GenesisNetworkVersion(network.Version15), kit.ThroughRPC(), kit.MutateSealingConfig(func(sc *config.SealingConfig) {
|
||||||
|
sc.PreferNewSectorsForDeals = true
|
||||||
|
}))
|
||||||
|
ens.InterconnectAll().BeginMiningMustPost(blockTime)
|
||||||
|
|
||||||
|
maddr, err := miner.ActorAddress(ctx)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
CCUpgrade := abi.SectorNumber(kit.DefaultPresealsPerBootstrapMiner + 1)
|
||||||
|
Sealed := abi.SectorNumber(kit.DefaultPresealsPerBootstrapMiner + 2)
|
||||||
|
|
||||||
|
{
|
||||||
|
miner.PledgeSectors(ctx, 1, 0, nil)
|
||||||
|
sl, err := miner.SectorsList(ctx)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Len(t, sl, 1, "expected 1 sector")
|
||||||
|
require.Equal(t, CCUpgrade, sl[0], "unexpected sector number")
|
||||||
|
{
|
||||||
|
si, err := client.StateSectorGetInfo(ctx, maddr, CCUpgrade, types.EmptyTSK)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Less(t, 50000, int(si.Expiration))
|
||||||
|
}
|
||||||
|
waitForSectorActive(ctx, t, CCUpgrade, client, maddr)
|
||||||
|
|
||||||
|
err = miner.SectorMarkForUpgrade(ctx, sl[0], true)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
sl, err = miner.SectorsList(ctx)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Len(t, sl, 1, "expected 1 sector")
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
dh := kit.NewDealHarness(t, client, miner, miner)
|
||||||
|
deal, res, inPath := dh.MakeOnlineDeal(ctx, kit.MakeFullDealParams{
|
||||||
|
Rseed: 6,
|
||||||
|
SuspendUntilCryptoeconStable: true,
|
||||||
|
})
|
||||||
|
outPath := dh.PerformRetrieval(context.Background(), deal, res.Root, false)
|
||||||
|
kit.AssertFilesEqual(t, inPath, outPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
sl, err := miner.SectorsList(ctx)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Len(t, sl, 2, "expected 2 sectors")
|
||||||
|
|
||||||
|
{
|
||||||
|
status, err := miner.SectorsStatus(ctx, CCUpgrade, true)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, api.SectorState(sealing.Available), status.State)
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
status, err := miner.SectorsStatus(ctx, Sealed, true)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, 1, len(status.Deals))
|
||||||
|
miner.WaitSectorsProving(ctx, map[abi.SectorNumber]struct{}{
|
||||||
|
Sealed: {},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -99,7 +99,7 @@ func (tm *TestMiner) WaitSectorsProving(ctx context.Context, toCheck map[abi.Sec
|
|||||||
st, err := tm.StorageMiner.SectorsStatus(ctx, n, false)
|
st, err := tm.StorageMiner.SectorsStatus(ctx, n, false)
|
||||||
require.NoError(tm.t, err)
|
require.NoError(tm.t, err)
|
||||||
states[st.State]++
|
states[st.State]++
|
||||||
if st.State == api.SectorState(sealing.Proving) {
|
if st.State == api.SectorState(sealing.Proving) || st.State == api.SectorState(sealing.Available) {
|
||||||
delete(toCheck, n)
|
delete(toCheck, n)
|
||||||
}
|
}
|
||||||
if strings.Contains(string(st.State), "Fail") {
|
if strings.Contains(string(st.State), "Fail") {
|
||||||
|
@ -3,6 +3,11 @@ package kit
|
|||||||
import (
|
import (
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/filecoin-project/go-state-types/big"
|
"github.com/filecoin-project/go-state-types/big"
|
||||||
|
"github.com/filecoin-project/lotus/extern/storage-sealing/sealiface"
|
||||||
|
"github.com/filecoin-project/lotus/node/config"
|
||||||
|
"github.com/filecoin-project/lotus/node/modules"
|
||||||
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
|
"github.com/filecoin-project/lotus/node/repo"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/build"
|
"github.com/filecoin-project/lotus/build"
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
@ -144,6 +149,17 @@ func ConstructorOpts(extra ...node.Option) NodeOpt {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MutateSealingConfig(mut func(sc *config.SealingConfig)) NodeOpt {
|
||||||
|
return ConstructorOpts(
|
||||||
|
node.ApplyIf(node.IsType(repo.StorageMiner), node.Override(new(dtypes.GetSealingConfigFunc), func() (dtypes.GetSealingConfigFunc, error) {
|
||||||
|
return func() (sealiface.Config, error) {
|
||||||
|
cf := config.DefaultStorageMiner()
|
||||||
|
mut(&cf.Sealing)
|
||||||
|
return modules.ToSealingConfig(cf.Dealmaking, cf.Sealing), nil
|
||||||
|
}, nil
|
||||||
|
})))
|
||||||
|
}
|
||||||
|
|
||||||
// SectorSize sets the sector size for this miner. Start() will populate the
|
// SectorSize sets the sector size for this miner. Start() will populate the
|
||||||
// corresponding proof type depending on the network version (genesis network
|
// corresponding proof type depending on the network version (genesis network
|
||||||
// version if the Ensemble is unstarted, or the current network version
|
// version if the Ensemble is unstarted, or the current network version
|
||||||
|
@ -9,13 +9,8 @@ import (
|
|||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/extern/storage-sealing/sealiface"
|
|
||||||
"github.com/filecoin-project/lotus/itests/kit"
|
"github.com/filecoin-project/lotus/itests/kit"
|
||||||
"github.com/filecoin-project/lotus/node"
|
|
||||||
"github.com/filecoin-project/lotus/node/config"
|
"github.com/filecoin-project/lotus/node/config"
|
||||||
"github.com/filecoin-project/lotus/node/modules"
|
|
||||||
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
|
||||||
"github.com/filecoin-project/lotus/node/repo"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestDealsWithFinalizeEarly(t *testing.T) {
|
func TestDealsWithFinalizeEarly(t *testing.T) {
|
||||||
@ -34,14 +29,7 @@ func TestDealsWithFinalizeEarly(t *testing.T) {
|
|||||||
|
|
||||||
var blockTime = 50 * time.Millisecond
|
var blockTime = 50 * time.Millisecond
|
||||||
|
|
||||||
client, miner, ens := kit.EnsembleMinimal(t, kit.ThroughRPC(), kit.ConstructorOpts(
|
client, miner, ens := kit.EnsembleMinimal(t, kit.ThroughRPC(), kit.MutateSealingConfig(func(sc *config.SealingConfig) { sc.FinalizeEarly = true })) // no mock proofs.
|
||||||
node.ApplyIf(node.IsType(repo.StorageMiner), node.Override(new(dtypes.GetSealingConfigFunc), func() (dtypes.GetSealingConfigFunc, error) {
|
|
||||||
return func() (sealiface.Config, error) {
|
|
||||||
cf := config.DefaultStorageMiner()
|
|
||||||
cf.Sealing.FinalizeEarly = true
|
|
||||||
return modules.ToSealingConfig(cf.Dealmaking, cf.Sealing), nil
|
|
||||||
}, nil
|
|
||||||
})))) // no mock proofs.
|
|
||||||
ens.InterconnectAll().BeginMining(blockTime)
|
ens.InterconnectAll().BeginMining(blockTime)
|
||||||
dh := kit.NewDealHarness(t, client, miner, miner)
|
dh := kit.NewDealHarness(t, client, miner, miner)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user