Fix logic, improve tests
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
This commit is contained in:
parent
5e775929be
commit
f572cdea47
@ -955,21 +955,13 @@ func (sma StorageMinerActor) SubmitElectionPoSt(act *types.Actor, vmctx types.VM
|
|||||||
err := pss.Get(f, &comms)
|
err := pss.Get(f, &comms)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var notfound *amt.ErrNotFound
|
var notfound *amt.ErrNotFound
|
||||||
if xerrors.As(err, ¬found) {
|
if !xerrors.As(err, ¬found) {
|
||||||
activeFaults++
|
|
||||||
} else {
|
|
||||||
return nil, aerrors.HandleExternalError(err, "failed to find sector in sector set")
|
return nil, aerrors.HandleExternalError(err, "failed to find sector in sector set")
|
||||||
}
|
}
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
activeFaults++
|
||||||
if err := pss.ForEach(func(id uint64, v *cbg.Deferred) error {
|
|
||||||
if faults[id] {
|
|
||||||
activeFaults++
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}); err != nil {
|
|
||||||
return nil, aerrors.Absorb(err, 2, "could not decode sectorset")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := onSuccessfulPoSt(self, vmctx, activeFaults); err != nil { // TODO
|
if err := onSuccessfulPoSt(self, vmctx, activeFaults); err != nil { // TODO
|
||||||
|
@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-sectorbuilder"
|
"github.com/filecoin-project/go-sectorbuilder"
|
||||||
"github.com/filecoin-project/lotus/api"
|
"github.com/filecoin-project/lotus/api"
|
||||||
|
"github.com/filecoin-project/lotus/build"
|
||||||
"github.com/filecoin-project/lotus/chain/actors"
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/aerrors"
|
"github.com/filecoin-project/lotus/chain/actors/aerrors"
|
||||||
"github.com/filecoin-project/lotus/chain/stmgr"
|
"github.com/filecoin-project/lotus/chain/stmgr"
|
||||||
@ -72,20 +73,18 @@ func (br *badRuns) NextRun() (rlepluslazy.Run, error) {
|
|||||||
var _ rlepluslazy.RunIterator = (*badRuns)(nil)
|
var _ rlepluslazy.RunIterator = (*badRuns)(nil)
|
||||||
|
|
||||||
func TestMinerSubmitBadFault(t *testing.T) {
|
func TestMinerSubmitBadFault(t *testing.T) {
|
||||||
|
oldSS, oldMin := build.SectorSizes, build.MinimumMinerPower
|
||||||
|
build.SectorSizes, build.MinimumMinerPower = []uint64{1024}, 1024
|
||||||
|
defer func() {
|
||||||
|
build.SectorSizes, build.MinimumMinerPower = oldSS, oldMin
|
||||||
|
}()
|
||||||
|
|
||||||
var worker, client address.Address
|
var worker, client address.Address
|
||||||
var minerAddr address.Address
|
var minerAddr address.Address
|
||||||
opts := []HarnessOpt{
|
opts := []HarnessOpt{
|
||||||
HarnessAddr(&worker, 1000000),
|
HarnessAddr(&worker, 1000000),
|
||||||
HarnessAddr(&client, 1000000),
|
HarnessAddr(&client, 1000000),
|
||||||
HarnessActor(&minerAddr, &worker, actors.StorageMinerCodeCid,
|
HarnessAddMiner(&minerAddr, &worker),
|
||||||
func() cbg.CBORMarshaler {
|
|
||||||
return &actors.StorageMinerConstructorParams{
|
|
||||||
Owner: worker,
|
|
||||||
Worker: worker,
|
|
||||||
SectorSize: 1024,
|
|
||||||
PeerID: "fakepeerid",
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
h := NewHarness(t, opts...)
|
h := NewHarness(t, opts...)
|
||||||
@ -104,10 +103,6 @@ func TestMinerSubmitBadFault(t *testing.T) {
|
|||||||
|
|
||||||
assertSectorIDs(h, t, minerAddr, []uint64{1})
|
assertSectorIDs(h, t, minerAddr, []uint64{1})
|
||||||
|
|
||||||
st, err := getMinerState(context.TODO(), h.vm.StateTree(), h.bs, minerAddr)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
expectedPower := st.Power
|
|
||||||
|
|
||||||
bf := types.NewBitField()
|
bf := types.NewBitField()
|
||||||
bf.Set(6)
|
bf.Set(6)
|
||||||
ret, _ = h.Invoke(t, worker, minerAddr, actors.MAMethods.DeclareFaults, &actors.DeclareFaultsParams{bf})
|
ret, _ = h.Invoke(t, worker, minerAddr, actors.MAMethods.DeclareFaults, &actors.DeclareFaultsParams{bf})
|
||||||
@ -115,9 +110,15 @@ func TestMinerSubmitBadFault(t *testing.T) {
|
|||||||
|
|
||||||
ret, _ = h.Invoke(t, actors.NetworkAddress, minerAddr, actors.MAMethods.SubmitElectionPoSt, nil)
|
ret, _ = h.Invoke(t, actors.NetworkAddress, minerAddr, actors.MAMethods.SubmitElectionPoSt, nil)
|
||||||
ApplyOK(t, ret)
|
ApplyOK(t, ret)
|
||||||
|
|
||||||
assertSectorIDs(h, t, minerAddr, []uint64{1})
|
assertSectorIDs(h, t, minerAddr, []uint64{1})
|
||||||
|
|
||||||
|
st, err := getMinerState(context.TODO(), h.vm.StateTree(), h.bs, minerAddr)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
expectedPower := st.Power
|
||||||
|
if types.BigCmp(expectedPower, types.NewInt(1024)) != 0 {
|
||||||
|
t.Errorf("Expected power of 1024, got %s", expectedPower)
|
||||||
|
}
|
||||||
|
|
||||||
badnum := uint64(0)
|
badnum := uint64(0)
|
||||||
badnum--
|
badnum--
|
||||||
bf = types.NewBitField()
|
bf = types.NewBitField()
|
||||||
|
@ -67,7 +67,7 @@ type CreateStorageMinerParams struct {
|
|||||||
|
|
||||||
func (spa StoragePowerActor) CreateStorageMiner(act *types.Actor, vmctx types.VMContext, params *CreateStorageMinerParams) ([]byte, ActorError) {
|
func (spa StoragePowerActor) CreateStorageMiner(act *types.Actor, vmctx types.VMContext, params *CreateStorageMinerParams) ([]byte, ActorError) {
|
||||||
if !build.SupportedSectorSize(params.SectorSize) {
|
if !build.SupportedSectorSize(params.SectorSize) {
|
||||||
return nil, aerrors.New(1, "Unsupported sector size")
|
return nil, aerrors.Newf(1, "Unsupported sector size: %d", params.SectorSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
var self StoragePowerState
|
var self StoragePowerState
|
||||||
|
@ -115,6 +115,32 @@ func HarnessActor(actor *address.Address, creator *address.Address, code cid.Cid
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func HarnessAddMiner(addr *address.Address, creator *address.Address) HarnessOpt {
|
||||||
|
return func(t testing.TB, h *Harness) error {
|
||||||
|
if h.Stage != HarnessPostInit {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if !addr.Empty() {
|
||||||
|
return xerrors.New("actor address should be empty")
|
||||||
|
}
|
||||||
|
ret, _ := h.InvokeWithValue(t, *creator, actors.StoragePowerAddress,
|
||||||
|
actors.SPAMethods.CreateStorageMiner, types.NewInt(3000), &actors.StorageMinerConstructorParams{
|
||||||
|
Owner: *creator,
|
||||||
|
Worker: *creator,
|
||||||
|
SectorSize: 1024,
|
||||||
|
PeerID: "fakepeerid",
|
||||||
|
})
|
||||||
|
|
||||||
|
if ret.ExitCode != 0 {
|
||||||
|
return xerrors.Errorf("creating actor: %w", ret.ActorErr)
|
||||||
|
}
|
||||||
|
var err error
|
||||||
|
*addr, err = address.NewFromBytes(ret.Return)
|
||||||
|
return err
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func HarnessCtx(ctx context.Context) HarnessOpt {
|
func HarnessCtx(ctx context.Context) HarnessOpt {
|
||||||
return func(t testing.TB, h *Harness) error {
|
return func(t testing.TB, h *Harness) error {
|
||||||
h.ctx = ctx
|
h.ctx = ctx
|
||||||
@ -177,7 +203,7 @@ func NewHarness(t *testing.T, options ...HarnessOpt) *Harness {
|
|||||||
for _, opt := range options {
|
for _, opt := range options {
|
||||||
err := opt(t, h)
|
err := opt(t, h)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Applying options: %v", err)
|
t.Fatalf("Applying options: %+v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user