github.com/filecoin-project/specs-actors/v4@v4.0.2/actors/builtin/miner/sectors_test.go (about)

     1  package miner_test
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"testing"
     7  
     8  	"github.com/filecoin-project/go-state-types/abi"
     9  	"github.com/filecoin-project/go-state-types/big"
    10  	"github.com/stretchr/testify/require"
    11  
    12  	"github.com/filecoin-project/specs-actors/v4/actors/builtin/miner"
    13  	"github.com/filecoin-project/specs-actors/v4/actors/util/adt"
    14  	"github.com/filecoin-project/specs-actors/v4/support/ipld"
    15  	tutil "github.com/filecoin-project/specs-actors/v4/support/testing"
    16  )
    17  
    18  func sectorsArr(t *testing.T, store adt.Store, sectors []*miner.SectorOnChainInfo) miner.Sectors {
    19  	emptyArray, err := adt.MakeEmptyArray(store, miner.SectorsAmtBitwidth)
    20  	require.NoError(t, err)
    21  	sectorArr := miner.Sectors{emptyArray}
    22  	require.NoError(t, sectorArr.Store(sectors...))
    23  	return sectorArr
    24  }
    25  
    26  func TestSectors(t *testing.T) {
    27  	makeSector := func(t *testing.T, i uint64) *miner.SectorOnChainInfo {
    28  		return &miner.SectorOnChainInfo{
    29  			SectorNumber:          abi.SectorNumber(i),
    30  			SealProof:             abi.RegisteredSealProof_StackedDrg32GiBV1_1,
    31  			SealedCID:             tutil.MakeCID(fmt.Sprintf("commR-%d", i), &miner.SealedCIDPrefix),
    32  			DealWeight:            big.Zero(),
    33  			VerifiedDealWeight:    big.Zero(),
    34  			InitialPledge:         big.Zero(),
    35  			ExpectedDayReward:     big.Zero(),
    36  			ExpectedStoragePledge: big.Zero(),
    37  			ReplacedDayReward:     big.Zero(),
    38  		}
    39  	}
    40  	setupSectors := func(t *testing.T) miner.Sectors {
    41  		return sectorsArr(t, ipld.NewADTStore(context.Background()), []*miner.SectorOnChainInfo{
    42  			makeSector(t, 0), makeSector(t, 1), makeSector(t, 5),
    43  		})
    44  	}
    45  
    46  	t.Run("loads sectors", func(t *testing.T) {
    47  		arr := setupSectors(t)
    48  		sectors, err := arr.Load(bf(0, 5))
    49  		require.NoError(t, err)
    50  		require.Len(t, sectors, 2)
    51  		require.Equal(t, makeSector(t, 0), sectors[0])
    52  		require.Equal(t, makeSector(t, 5), sectors[1])
    53  
    54  		_, err = arr.Load(bf(0, 3))
    55  		require.Error(t, err)
    56  	})
    57  
    58  	t.Run("stores sectors", func(t *testing.T) {
    59  		arr := setupSectors(t)
    60  		s0 := makeSector(t, 0)
    61  		s1 := makeSector(t, 1)
    62  		s1.Activation = 1
    63  		s3 := makeSector(t, 3)
    64  		s5 := makeSector(t, 5)
    65  
    66  		require.NoError(t, arr.Store(s3, s1))
    67  		sectors, err := arr.Load(bf(0, 1, 3, 5))
    68  		require.NoError(t, err)
    69  		require.Len(t, sectors, 4)
    70  		require.Equal(t, s0, sectors[0])
    71  		require.Equal(t, s1, sectors[1])
    72  		require.Equal(t, s3, sectors[2])
    73  		require.Equal(t, s5, sectors[3])
    74  	})
    75  
    76  	t.Run("loads and stores no sectors", func(t *testing.T) {
    77  		arr := setupSectors(t)
    78  
    79  		sectors, err := arr.Load(bf())
    80  		require.NoError(t, err)
    81  		require.Empty(t, sectors)
    82  
    83  		require.NoError(t, arr.Store())
    84  	})
    85  
    86  	t.Run("gets sectors", func(t *testing.T) {
    87  		arr := setupSectors(t)
    88  		s0, found, err := arr.Get(0)
    89  		require.NoError(t, err)
    90  		require.True(t, found)
    91  		require.Equal(t, makeSector(t, 0), s0)
    92  
    93  		_, found, err = arr.Get(3)
    94  		require.NoError(t, err)
    95  		require.False(t, found)
    96  	})
    97  
    98  	t.Run("must get", func(t *testing.T) {
    99  		arr := setupSectors(t)
   100  		s0, err := arr.MustGet(0)
   101  		require.NoError(t, err)
   102  		require.Equal(t, makeSector(t, 0), s0)
   103  
   104  		_, err = arr.MustGet(3)
   105  		require.Error(t, err)
   106  	})
   107  
   108  	t.Run("loads for proof with replacement", func(t *testing.T) {
   109  		arr := setupSectors(t)
   110  		s1 := makeSector(t, 1)
   111  		infos, err := arr.LoadForProof(bf(0, 1), bf(0))
   112  		require.NoError(t, err)
   113  		require.Equal(t, []*miner.SectorOnChainInfo{s1, s1}, infos)
   114  	})
   115  
   116  	t.Run("loads for proof without replacement", func(t *testing.T) {
   117  		arr := setupSectors(t)
   118  		s0 := makeSector(t, 0)
   119  		s1 := makeSector(t, 1)
   120  		infos, err := arr.LoadForProof(bf(0, 1), bf())
   121  		require.NoError(t, err)
   122  		require.Equal(t, []*miner.SectorOnChainInfo{s0, s1}, infos)
   123  	})
   124  
   125  	t.Run("empty proof", func(t *testing.T) {
   126  		arr := setupSectors(t)
   127  		infos, err := arr.LoadForProof(bf(), bf())
   128  		require.NoError(t, err)
   129  		require.Empty(t, infos)
   130  	})
   131  
   132  	t.Run("no non-faulty sectors", func(t *testing.T) {
   133  		arr := setupSectors(t)
   134  		infos, err := arr.LoadForProof(bf(1), bf(1))
   135  		require.NoError(t, err)
   136  		require.Empty(t, infos)
   137  	})
   138  }