2022-08-29 14:25:30 +00:00
|
|
|
// stm: #integration
|
2021-06-23 17:13:29 +00:00
|
|
|
package itests
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/filecoin-project/lotus/itests/kit"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestFirstDealEnablesMining(t *testing.T) {
|
2021-12-13 12:41:04 +00:00
|
|
|
//stm: @CHAIN_SYNCER_LOAD_GENESIS_001, @CHAIN_SYNCER_FETCH_TIPSET_001,
|
|
|
|
//stm: @CHAIN_SYNCER_START_001, @CHAIN_SYNCER_SYNC_001, @BLOCKCHAIN_BEACON_VALIDATE_BLOCK_VALUES_01
|
|
|
|
//stm: @CHAIN_SYNCER_COLLECT_CHAIN_001, @CHAIN_SYNCER_COLLECT_HEADERS_001, @CHAIN_SYNCER_VALIDATE_TIPSET_001
|
|
|
|
//stm: @CHAIN_SYNCER_NEW_PEER_HEAD_001, @CHAIN_SYNCER_VALIDATE_MESSAGE_META_001, @CHAIN_SYNCER_STOP_001
|
2021-12-14 10:33:33 +00:00
|
|
|
|
|
|
|
//stm: @CHAIN_INCOMING_HANDLE_INCOMING_BLOCKS_001, @CHAIN_INCOMING_VALIDATE_BLOCK_PUBSUB_001, @CHAIN_INCOMING_VALIDATE_MESSAGE_PUBSUB_001
|
2021-06-23 17:13:29 +00:00
|
|
|
// test making a deal with a fresh miner, and see if it starts to mine.
|
|
|
|
if testing.Short() {
|
|
|
|
t.Skip("skipping test in short mode")
|
|
|
|
}
|
|
|
|
|
|
|
|
kit.QuietMiningLogs()
|
|
|
|
|
|
|
|
var (
|
|
|
|
client kit.TestFullNode
|
|
|
|
genMiner kit.TestMiner // bootstrap
|
|
|
|
provider kit.TestMiner // no sectors, will need to create one
|
|
|
|
)
|
|
|
|
|
|
|
|
ens := kit.NewEnsemble(t, kit.MockProofs())
|
|
|
|
ens.FullNode(&client)
|
2021-07-02 10:24:07 +00:00
|
|
|
ens.Miner(&genMiner, &client, kit.WithAllSubsystems())
|
|
|
|
ens.Miner(&provider, &client, kit.WithAllSubsystems(), kit.PresealSectors(0))
|
2021-06-23 17:13:29 +00:00
|
|
|
ens.Start().InterconnectAll().BeginMining(50 * time.Millisecond)
|
|
|
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
2021-06-30 11:52:19 +00:00
|
|
|
dh := kit.NewDealHarness(t, &client, &provider, &provider)
|
2021-06-23 17:13:29 +00:00
|
|
|
|
|
|
|
ref, _ := client.CreateImportFile(ctx, 5, 0)
|
|
|
|
|
|
|
|
t.Log("FILE CID:", ref.Root)
|
|
|
|
|
|
|
|
ctx, cancel := context.WithCancel(ctx)
|
|
|
|
defer cancel()
|
|
|
|
|
|
|
|
// start a goroutine to monitor head changes from the client
|
|
|
|
// once the provider has mined a block, thanks to the power acquired from the deal,
|
|
|
|
// we pass the test.
|
|
|
|
providerMined := make(chan struct{})
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
_ = client.WaitTillChain(ctx, kit.BlockMinedBy(provider.ActorAddr))
|
|
|
|
close(providerMined)
|
|
|
|
}()
|
|
|
|
|
|
|
|
// now perform the deal.
|
2021-07-24 01:02:00 +00:00
|
|
|
dp := dh.DefaultStartDealParams()
|
|
|
|
dp.Data.Root = ref.Root
|
|
|
|
deal := dh.StartDeal(ctx, dp)
|
2021-06-23 17:13:29 +00:00
|
|
|
|
|
|
|
// TODO: this sleep is only necessary because deals don't immediately get logged in the dealstore, we should fix this
|
|
|
|
time.Sleep(time.Second)
|
|
|
|
|
|
|
|
dh.WaitDealSealed(ctx, deal, false, false, nil)
|
|
|
|
|
|
|
|
<-providerMined
|
|
|
|
}
|