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 }