vm_test

package
v2.3.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 29, 2021 License: Apache-2.0, MIT Imports: 41 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var EmptyObjectCid cid.Cid
View Source
var ExpectOK = &okExitCode
View Source
var FIL = big.NewInt(1e18)
View Source
var VerifregRoot address.Address

Functions

func ApplyOk

func ApplyOk(t *testing.T, v *VM, from, to address.Address, value abi.TokenAmount, method abi.MethodNum, params interface{}) cbor.Marshaler

func CreateAccounts

func CreateAccounts(ctx context.Context, t testing.TB, vm *VM, n int, balance abi.TokenAmount, seed int64) []address.Address

Creates n account actors in the VM with the given balance

func ExpectAttoFil

func ExpectAttoFil(amount big.Int) *big.Int

helpers to simplify pointer creation

func ExpectBytes

func ExpectBytes(b []byte) *objectExpectation

func ExpectExitCode

func ExpectExitCode(code exitcode.ExitCode) *exitcode.ExitCode

func ExpectObject

func ExpectObject(v cbor.Marshaler) *objectExpectation

func GetDealState

func GetDealState(t *testing.T, vm *VM, dealID abi.DealID) (*market.DealState, bool)

func MinerDLInfo

func MinerDLInfo(t *testing.T, v *VM, minerIDAddr address.Address) *dline.Info

func MinerPower

func MinerPower(t *testing.T, vm *VM, minerIdAddr address.Address) miner.PowerPair

func ParamsForInvocation

func ParamsForInvocation(t *testing.T, vm *VM, idxs ...int) interface{}

func PowerForMinerSector

func PowerForMinerSector(t *testing.T, vm *VM, minerIdAddr address.Address, sectorNumber abi.SectorNumber) miner.PowerPair

func SectorDeadline

func SectorDeadline(t *testing.T, v *VM, minerIDAddress address.Address, sectorNumber abi.SectorNumber) (uint64, uint64)

find the proving deadline and partition index of a miner's sector

func ValueForInvocation

func ValueForInvocation(t *testing.T, vm *VM, idxs ...int) abi.TokenAmount

Types

type ActorImplLookup

type ActorImplLookup map[cid.Cid]runtime.VMActor

type CallStats

type CallStats struct {
	Reads  uint64
	Writes uint64
	Calls  uint64

	SubStats StatsByCall
	// contains filtered or unexported fields
}

func NewCallStats

func NewCallStats(statsSource StatsSource) *CallStats

func (*CallStats) Capture

func (s *CallStats) Capture()

func (*CallStats) MergeStats

func (s *CallStats) MergeStats(other *CallStats)

assume stats have same method type and that other will be discarded after this call

func (*CallStats) MergeSubStat

func (s *CallStats) MergeSubStat(code cid.Cid, methodNum abi.MethodNum, newStats *CallStats)

type ExpectInvocation

type ExpectInvocation struct {
	To     address.Address
	Method abi.MethodNum

	// optional
	Exitcode       exitcode.ExitCode
	From           address.Address
	Value          *abi.TokenAmount
	Params         *objectExpectation
	Ret            *objectExpectation
	SubInvocations []ExpectInvocation
}

ExpectInvocation is a pattern for a message invocation within the VM. The To and Method fields must be supplied. Exitcode defaults to exitcode.Ok. All other field are optional, where a nil or Undef value indicates that any value will match. SubInvocations will be matched recursively.

func (ExpectInvocation) Matches

func (ei ExpectInvocation) Matches(t *testing.T, invocations *Invocation)

type InternalMessage

type InternalMessage struct {
	// contains filtered or unexported fields
}

func (InternalMessage) Caller

func (msg InternalMessage) Caller() address.Address

Caller implements runtime.MessageInfo.

func (InternalMessage) Receiver

func (msg InternalMessage) Receiver() address.Address

Receiver implements runtime.MessageInfo.

func (InternalMessage) ValueReceived

func (msg InternalMessage) ValueReceived() abi.TokenAmount

ValueReceived implements runtime.MessageInfo.

type Invocation

type Invocation struct {
	Msg            *InternalMessage
	Exitcode       exitcode.ExitCode
	Ret            cbor.Marshaler
	SubInvocations []*Invocation
}

type MethodKey

type MethodKey struct {
	Code   cid.Cid
	Method abi.MethodNum
}

type MinerBalances

type MinerBalances struct {
	AvailableBalance abi.TokenAmount
	VestingBalance   abi.TokenAmount
	InitialPledge    abi.TokenAmount
	PreCommitDeposit abi.TokenAmount
}

func GetMinerBalances

func GetMinerBalances(t *testing.T, vm *VM, minerIdAddr address.Address) MinerBalances

type NetworkStats

type NetworkStats struct {
	power.State
	TotalRawBytePower             abi.StoragePower
	TotalBytesCommitted           abi.StoragePower
	TotalQualityAdjPower          abi.StoragePower
	TotalQABytesCommitted         abi.StoragePower
	TotalPledgeCollateral         abi.TokenAmount
	ThisEpochRawBytePower         abi.StoragePower
	ThisEpochQualityAdjPower      abi.StoragePower
	ThisEpochPledgeCollateral     abi.TokenAmount
	MinerCount                    int64
	MinerAboveMinPowerCount       int64
	ThisEpochReward               abi.TokenAmount
	ThisEpochRewardSmoothed       smoothing.FilterEstimate
	ThisEpochBaselinePower        abi.StoragePower
	TotalStoragePowerReward       abi.TokenAmount
	TotalClientLockedCollateral   abi.TokenAmount
	TotalProviderLockedCollateral abi.TokenAmount
	TotalClientStorageFee         abi.TokenAmount
}

func GetNetworkStats

func GetNetworkStats(t *testing.T, vm *VM) NetworkStats

type StatsByCall

type StatsByCall map[MethodKey]*CallStats

func (StatsByCall) MergeAllStats

func (sbc StatsByCall) MergeAllStats(other StatsByCall)

func (StatsByCall) MergeStats

func (sbc StatsByCall) MergeStats(code cid.Cid, methodNum abi.MethodNum, newStats *CallStats)

type StatsSource

type StatsSource interface {
	WriteCount() uint64
	ReadCount() uint64
}

type VM

type VM struct {
	// contains filtered or unexported fields
}

VM is a simplified message execution framework for the purposes of testing inter-actor communication. The VM maintains actor state and can be used to simulate message validation for a single block or tipset. The VM does not track gas charges, provide working syscalls, validate message nonces and many other things that a compliant VM needs to do.

func AdvanceByDeadline

func AdvanceByDeadline(t *testing.T, v *VM, minerIDAddr address.Address, predicate advanceDeadlinePredicate) (*VM, *dline.Info)

AdvanceByDeadline creates a new VM advanced to an epoch specified by the predicate while keeping the miner state upu-to-date by running a cron at the end of each deadline period.

func AdvanceByDeadlineTillEpoch

func AdvanceByDeadlineTillEpoch(t *testing.T, v *VM, minerIDAddr address.Address, e abi.ChainEpoch) (*VM, *dline.Info)

Advances by deadline until e is contained within the deadline period represented by the returned deadline info. The VM returned will be set to the last deadline close, not at e.

func AdvanceByDeadlineTillIndex

func AdvanceByDeadlineTillIndex(t *testing.T, v *VM, minerIDAddr address.Address, i uint64) (*VM, *dline.Info)

Advances by deadline until the deadline index matches the given index. The vm returned will be set to the close epoch of the previous deadline.

func AdvanceTillProvingDeadline

func AdvanceTillProvingDeadline(t *testing.T, v *VM, minerIDAddress address.Address, sectorNumber abi.SectorNumber) (*dline.Info, uint64, *VM)

Advance to the epoch when the sector is due to be proven. Returns the deadline info for proving deadline for sector, partition index of sector, and a VM at the opening of the deadline (ready for SubmitWindowedPoSt).

func NewVM

func NewVM(ctx context.Context, actorImpls ActorImplLookup, store adt.Store) *VM

NewVM creates a new runtime for executing messages.

func NewVMAtEpoch

func NewVMAtEpoch(ctx context.Context, actorImpls ActorImplLookup, store adt.Store, stateRoot cid.Cid, epoch abi.ChainEpoch) (*VM, error)

NewVM creates a new runtime for executing messages.

func NewVMWithSingletons

func NewVMWithSingletons(ctx context.Context, t testing.TB, bs ipldcbor.IpldBlockstore) *VM

Creates a new VM and initializes all singleton actors plus a root verifier account.

func (*VM) Abortf

func (vm *VM) Abortf(errExitCode exitcode.ExitCode, msg string, args ...interface{})

func (*VM) ApplyMessage

func (vm *VM) ApplyMessage(from, to address.Address, value abi.TokenAmount, method abi.MethodNum, params interface{}) (cbor.Marshaler, exitcode.ExitCode)

ApplyMessage applies the message to the current state.

func (*VM) GetActor

func (vm *VM) GetActor(a address.Address) (*states.Actor, bool, error)

func (*VM) GetCallStats

func (vm *VM) GetCallStats() map[MethodKey]*CallStats

Get call stats

func (*VM) GetEpoch

func (vm *VM) GetEpoch() abi.ChainEpoch

Get the chain epoch for this vm

func (*VM) GetLogs

func (vm *VM) GetLogs() []string

func (*VM) GetState

func (vm *VM) GetState(addr address.Address, out cbor.Unmarshaler) error

func (*VM) GetStateTree

func (vm *VM) GetStateTree() (*states.Tree, error)

func (*VM) GetTotalActorBalance

func (vm *VM) GetTotalActorBalance() (abi.TokenAmount, error)

func (*VM) Invocations

func (vm *VM) Invocations() []*Invocation

func (*VM) LastInvocation

func (vm *VM) LastInvocation() *Invocation

func (*VM) Log

func (vm *VM) Log(level rt.LogLevel, msg string, args ...interface{})

func (*VM) NormalizeAddress

func (vm *VM) NormalizeAddress(addr address.Address) (address.Address, bool)

func (*VM) SetActorState

func (vm *VM) SetActorState(ctx context.Context, key address.Address, state cbor.Marshaler) error

SetActorState stores the state and updates the addressed actor

func (*VM) SetStatsSource

func (vm *VM) SetStatsSource(s StatsSource)

func (*VM) StateRoot

func (vm *VM) StateRoot() cid.Cid

func (*VM) Store

func (vm *VM) Store() adt.Store

func (*VM) WithEpoch

func (vm *VM) WithEpoch(epoch abi.ChainEpoch) (*VM, error)

func (*VM) WithNetworkVersion

func (vm *VM) WithNetworkVersion(nv network.Version) (*VM, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL