80 lines
1.6 KiB
Go
80 lines
1.6 KiB
Go
package test
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
|
|
blocks "github.com/ipfs/go-block-format"
|
|
|
|
"github.com/filecoin-project/go-address"
|
|
"github.com/filecoin-project/lotus/blockstore"
|
|
"github.com/filecoin-project/lotus/chain/types"
|
|
"github.com/ipfs/go-cid"
|
|
"golang.org/x/xerrors"
|
|
)
|
|
|
|
type MockAPI struct {
|
|
bs blockstore.Blockstore
|
|
|
|
lk sync.Mutex
|
|
ts map[types.TipSetKey]*types.Actor
|
|
stateGetActorCalled int
|
|
}
|
|
|
|
func NewMockAPI(bs blockstore.Blockstore) *MockAPI {
|
|
return &MockAPI{
|
|
bs: bs,
|
|
ts: make(map[types.TipSetKey]*types.Actor),
|
|
}
|
|
}
|
|
|
|
func (m *MockAPI) ChainHasObj(ctx context.Context, c cid.Cid) (bool, error) {
|
|
return m.bs.Has(ctx, c)
|
|
}
|
|
|
|
func (m *MockAPI) ChainReadObj(ctx context.Context, c cid.Cid) ([]byte, error) {
|
|
blk, err := m.bs.Get(ctx, c)
|
|
if err != nil {
|
|
return nil, xerrors.Errorf("blockstore get: %w", err)
|
|
}
|
|
|
|
return blk.RawData(), nil
|
|
}
|
|
|
|
func (m *MockAPI) ChainPutObj(ctx context.Context, block blocks.Block) error {
|
|
return m.bs.Put(ctx, block)
|
|
}
|
|
|
|
func (m *MockAPI) ChainPutMany(ctx context.Context, blocks []blocks.Block) error {
|
|
return m.bs.PutMany(ctx, blocks)
|
|
}
|
|
|
|
func (m *MockAPI) StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error) {
|
|
m.lk.Lock()
|
|
defer m.lk.Unlock()
|
|
|
|
m.stateGetActorCalled++
|
|
return m.ts[tsk], nil
|
|
}
|
|
|
|
func (m *MockAPI) StateGetActorCallCount() int {
|
|
m.lk.Lock()
|
|
defer m.lk.Unlock()
|
|
|
|
return m.stateGetActorCalled
|
|
}
|
|
|
|
func (m *MockAPI) ResetCallCounts() {
|
|
m.lk.Lock()
|
|
defer m.lk.Unlock()
|
|
|
|
m.stateGetActorCalled = 0
|
|
}
|
|
|
|
func (m *MockAPI) SetActor(tsk types.TipSetKey, act *types.Actor) {
|
|
m.lk.Lock()
|
|
defer m.lk.Unlock()
|
|
|
|
m.ts[tsk] = act
|
|
}
|