lotus/itests/tape_test.go

73 lines
2.1 KiB
Go
Raw Normal View History

2021-05-17 12:28:09 +00:00
package itests
2020-10-12 06:31:23 +00:00
import (
"context"
"testing"
"time"
"github.com/filecoin-project/go-state-types/network"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/stmgr"
sealing "github.com/filecoin-project/lotus/extern/storage-sealing"
2021-06-14 13:51:10 +00:00
"github.com/filecoin-project/lotus/itests/kit2"
2020-10-12 06:31:23 +00:00
"github.com/filecoin-project/lotus/node"
"github.com/stretchr/testify/require"
)
func TestTapeFix(t *testing.T) {
2021-06-14 13:51:10 +00:00
kit2.QuietMiningLogs()
var blocktime = 2 * time.Millisecond
// The "before" case is disabled, because we need the builder to mock 32 GiB sectors to accurately repro this case
// TODO: Make the mock sector size configurable and reenable this
// t.Run("before", func(t *testing.T) { testTapeFix(t, b, blocktime, false) })
2021-06-14 13:51:10 +00:00
t.Run("after", func(t *testing.T) { testTapeFix(t, blocktime, true) })
2020-10-12 06:31:23 +00:00
}
2021-06-14 13:51:10 +00:00
func testTapeFix(t *testing.T, blocktime time.Duration, after bool) {
2020-10-12 06:31:23 +00:00
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
upgradeSchedule := stmgr.UpgradeSchedule{{
Network: build.ActorUpgradeNetworkVersion,
Height: 1,
Migration: stmgr.UpgradeActorsV2,
}}
if after {
upgradeSchedule = append(upgradeSchedule, stmgr.Upgrade{
Network: network.Version5,
Height: 2,
})
}
2021-06-14 13:51:10 +00:00
nopts := kit2.ConstructorOpts(node.Override(new(stmgr.UpgradeSchedule), upgradeSchedule))
_, miner, ens := kit2.EnsembleMinimal(t, kit2.MockProofs(), nopts)
ens.InterconnectAll().BeginMining(blocktime)
2020-10-12 06:31:23 +00:00
2021-02-16 18:19:16 +00:00
sid, err := miner.PledgeSector(ctx)
2020-10-12 06:31:23 +00:00
require.NoError(t, err)
2021-06-14 13:51:10 +00:00
t.Log("All sectors is fsm")
2020-10-12 06:31:23 +00:00
// If before, we expect the precommit to fail
successState := api.SectorState(sealing.CommitFailed)
failureState := api.SectorState(sealing.Proving)
if after {
// otherwise, it should succeed.
successState, failureState = failureState, successState
}
for {
2021-02-16 18:19:16 +00:00
st, err := miner.SectorsStatus(ctx, sid.Number, false)
2020-10-12 06:31:23 +00:00
require.NoError(t, err)
if st.State == successState {
break
}
require.NotEqual(t, failureState, st.State)
build.Clock.Sleep(100 * time.Millisecond)
2021-06-14 13:51:10 +00:00
t.Log("WaitSeal")
2020-10-12 06:31:23 +00:00
}
}