diff --git a/api/test/mining.go b/api/test/mining.go index 07070101b..835ab3e79 100644 --- a/api/test/mining.go +++ b/api/test/mining.go @@ -39,7 +39,7 @@ func (ts *testSuite) testMining(t *testing.T) { require.NoError(t, err) require.Equal(t, abi.ChainEpoch(2), h1.Height()) - err = sn[0].MineOne(ctx, MineNext) + MineUntilBlock(ctx, t, sn[0], nil) require.NoError(t, err) <-newHeads @@ -70,7 +70,7 @@ func (ts *testSuite) testMiningReal(t *testing.T) { require.NoError(t, err) require.Equal(t, abi.ChainEpoch(2), h1.Height()) - err = sn[0].MineOne(ctx, MineNext) + MineUntilBlock(ctx, t, sn[0], nil) require.NoError(t, err) <-newHeads @@ -79,7 +79,7 @@ func (ts *testSuite) testMiningReal(t *testing.T) { require.NoError(t, err) require.Equal(t, abi.ChainEpoch(3), h2.Height()) - err = sn[0].MineOne(ctx, MineNext) + MineUntilBlock(ctx, t, sn[0], nil) require.NoError(t, err) <-newHeads diff --git a/api/test/util.go b/api/test/util.go index 7ffd2d312..7d2e9e95b 100644 --- a/api/test/util.go +++ b/api/test/util.go @@ -8,6 +8,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/lotus/miner" ) func SendFunds(ctx context.Context, t *testing.T, sender TestNode, addr address.Address, amount abi.TokenAmount) { @@ -34,3 +35,30 @@ func SendFunds(ctx context.Context, t *testing.T, sender TestNode, addr address. t.Fatal("did not successfully send money") } } + +func MineUntilBlock(ctx context.Context, t *testing.T, sn TestStorageNode, cb func()) { + for i := 0; i < 1000; i++ { + var success bool + var err error + wait := make(chan struct{}) + sn.MineOne(ctx, miner.MineReq{ + Done: func(win bool, e error) { + success = win + err = e + wait <- struct{}{} + }, + }) + <-wait + if err != nil { + t.Fatal(err) + } + if success { + if cb != nil { + cb() + } + return + } + t.Log("did not mine block, trying again", i) + } + t.Fatal("failed to mine 1000 times in a row...") +} diff --git a/node/test/builder.go b/node/test/builder.go index 6fbec16f9..d2d2128d5 100644 --- a/node/test/builder.go +++ b/node/test/builder.go @@ -270,13 +270,13 @@ func Builder(t *testing.T, nFull int, storage []test.StorageMiner) ([]test.TestN var wait sync.Mutex wait.Lock() - _ = storers[0].MineOne(ctx, miner2.MineReq{Done: func(bool, error) { + test.MineUntilBlock(ctx, t, storers[0], func() { wait.Unlock() - }}) + }) wait.Lock() - _ = storers[0].MineOne(ctx, miner2.MineReq{Done: func(bool, error) { + test.MineUntilBlock(ctx, t, storers[0], func() { wait.Unlock() - }}) + }) wait.Lock() } @@ -419,13 +419,13 @@ func MockSbBuilder(t *testing.T, nFull int, storage []test.StorageMiner) ([]test var wait sync.Mutex wait.Lock() - _ = storers[0].MineOne(ctx, miner2.MineReq{Done: func(bool, error) { + test.MineUntilBlock(ctx, t, storers[0], func() { wait.Unlock() - }}) + }) wait.Lock() - _ = storers[0].MineOne(ctx, miner2.MineReq{Done: func(bool, error) { + test.MineUntilBlock(ctx, t, storers[0], func() { wait.Unlock() - }}) + }) wait.Lock() }