100 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package test
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"fmt"
 | 
						|
	"os"
 | 
						|
	"sync/atomic"
 | 
						|
	"testing"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"github.com/stretchr/testify/require"
 | 
						|
 | 
						|
	"github.com/filecoin-project/specs-actors/actors/abi"
 | 
						|
 | 
						|
	"github.com/filecoin-project/lotus/chain/types"
 | 
						|
	"github.com/filecoin-project/lotus/node/impl"
 | 
						|
)
 | 
						|
 | 
						|
func TestCCUpgrade(t *testing.T, b APIBuilder, blocktime time.Duration) {
 | 
						|
	_ = os.Setenv("BELLMAN_NO_GPU", "1")
 | 
						|
 | 
						|
	ctx := context.Background()
 | 
						|
	n, sn := b(t, 1, oneMiner)
 | 
						|
	client := n[0].FullNode.(*impl.FullNodeAPI)
 | 
						|
	miner := sn[0]
 | 
						|
 | 
						|
	addrinfo, err := client.NetAddrsListen(ctx)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
 | 
						|
	if err := miner.NetConnect(ctx, addrinfo); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	time.Sleep(time.Second)
 | 
						|
 | 
						|
	mine := int64(1)
 | 
						|
	done := make(chan struct{})
 | 
						|
	go func() {
 | 
						|
		defer close(done)
 | 
						|
		for atomic.LoadInt64(&mine) == 1 {
 | 
						|
			time.Sleep(blocktime)
 | 
						|
			if err := sn[0].MineOne(ctx, func(bool, error) {}); err != nil {
 | 
						|
				t.Error(err)
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}()
 | 
						|
 | 
						|
	maddr, err := miner.ActorAddress(ctx)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
 | 
						|
	CC := abi.SectorNumber(GenesisPreseals + 1)
 | 
						|
	Upgraded := CC + 1
 | 
						|
 | 
						|
	pledgeSectors(t, ctx, miner, 1)
 | 
						|
 | 
						|
	sl, err := miner.SectorsList(ctx)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	if len(sl) != 1 {
 | 
						|
		t.Fatal("expected 1 sector")
 | 
						|
	}
 | 
						|
 | 
						|
	if sl[0] != CC {
 | 
						|
		t.Fatal("bad")
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		si, err := client.StateSectorGetInfo(ctx, maddr, CC, types.EmptyTSK)
 | 
						|
		require.NoError(t, err)
 | 
						|
		require.Less(t, 50000, int(si.Expiration))
 | 
						|
	}
 | 
						|
 | 
						|
	if err := miner.SectorMarkForUpgrade(ctx, sl[0]); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
 | 
						|
	makeDeal(t, ctx, 6, client, miner, false, false)
 | 
						|
 | 
						|
	// Validate upgrade
 | 
						|
 | 
						|
	{
 | 
						|
		si, err := client.StateSectorGetInfo(ctx, maddr, CC, types.EmptyTSK)
 | 
						|
		require.NoError(t, err)
 | 
						|
		require.Greater(t, 50000, int(si.Expiration))
 | 
						|
	}
 | 
						|
	{
 | 
						|
		si, err := client.StateSectorGetInfo(ctx, maddr, Upgraded, types.EmptyTSK)
 | 
						|
		require.NoError(t, err)
 | 
						|
		require.Less(t, 50000, int(si.Expiration))
 | 
						|
	}
 | 
						|
 | 
						|
	fmt.Println("shutting down mining")
 | 
						|
	atomic.AddInt64(&mine, -1)
 | 
						|
	<-done
 | 
						|
}
 |