From a6e70b332b5b8fb93718f8657b904dca04d861a4 Mon Sep 17 00:00:00 2001 From: zl Date: Wed, 9 Nov 2022 13:50:02 +0800 Subject: [PATCH] feat: tests and stm annotations for view module --- pkg/state/power_table_view_test.go | 1 - pkg/state/view_test.go | 84 ++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 pkg/state/view_test.go diff --git a/pkg/state/power_table_view_test.go b/pkg/state/power_table_view_test.go index 5edac887da..737b2d77c7 100644 --- a/pkg/state/power_table_view_test.go +++ b/pkg/state/power_table_view_test.go @@ -109,7 +109,6 @@ func TestTotalPowerUnaffectedBySlash(t *testing.T) { // nolint func requireMinerWithNumCommittedSectors(ctx context.Context, t *testing.T, numCommittedSectors uint64, ownerKeys []crypto.KeyInfo) (cbor.IpldStore, []address.Address, cid.Cid) { // todo think a way to mock power directly - t.Skipf("skip it due to cant mock power directly ") r := repo.NewInMemoryRepo() bs := r.Datastore() cst := cbor.NewCborStore(bs) diff --git a/pkg/state/view_test.go b/pkg/state/view_test.go new file mode 100644 index 0000000000..2b14a3fe29 --- /dev/null +++ b/pkg/state/view_test.go @@ -0,0 +1,84 @@ +// stm: #unit +package state_test + +import ( + "context" + "testing" + + "github.com/filecoin-project/go-address" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/venus/pkg/state" + "github.com/filecoin-project/venus/pkg/testhelpers" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/types" + + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/stretchr/testify/assert" +) + +func setupTestMinerView(t *testing.T, numMiners int) (*state.View, map[address.Address]*crypto.KeyInfo) { + tf.UnitTest(t) + ctx := context.Background() + numCommittedSectors := uint64(19) + kis := testhelpers.MustGenerateBLSKeyInfo(numMiners, 0) + + kiMap := make(map[address.Address]*crypto.KeyInfo) + for _, k := range kis { + addr, err := k.Address() + assert.NoError(t, err) + kiMap[addr] = &k + } + + store, _, root := requireMinerWithNumCommittedSectors(ctx, t, numCommittedSectors, kis) + return state.NewView(store, root), kiMap +} + +func TestView(t *testing.T) { + numMiners := 2 + view, keyMap := setupTestMinerView(t, numMiners) + ctx := context.Background() + + miners, err := view.StateListMiners(ctx, types.EmptyTSK) + assert.NoError(t, err) + assert.Equal(t, len(miners), numMiners) + + for _, m := range miners { + // stm: @STATE_VIEW_MINER_EXISTS_001 + exist, err := view.MinerExists(ctx, m) + assert.NoError(t, err) + assert.True(t, exist) + + // stm: @STATE_VIEW_GET_MINER_INFO_001 + minerInfo, err := view.MinerInfo(ctx, m, network.Version17) + assert.NoError(t, err) + + ownerPkAddress, err := view.ResolveToKeyAddr(ctx, minerInfo.Owner) + assert.NoError(t, err) + _, find := keyMap[ownerPkAddress] + assert.True(t, find) + + // stm: @STATE_VIEW_GET_MINER_SECTOR_INFO_001 + sectorInfo, err := view.MinerSectorInfo(ctx, m, 0) + assert.NoError(t, err) + assert.Equal(t, sectorInfo.SectorNumber, abi.SectorNumber(0)) + + // stm: @STATE_VIEW_SECTOR_PRE_COMMIT_INFO_001 + _, err = view.SectorPreCommitInfo(ctx, m, 0) + assert.NoError(t, err) + + // stm: @STATE_VIEW_MINER_GET_PRECOMMITED_SECTOR + _, find, err = view.MinerGetPrecommittedSector(ctx, m, abi.SectorNumber(0)) + assert.NoError(t, err) + assert.True(t, find) + + // stm: @STATE_VIEW_STATE_SECTOR_PARTITION_001 + _, err = view.StateSectorPartition(ctx, m, 0) + assert.NoError(t, err) + + // stm: @STATE_VIEW_DEADLINE_INFO_001 + _, _, _, _, err = view.MinerDeadlineInfo(ctx, m, abi.ChainEpoch(1)) + assert.NoError(t, err) + } +}