322b33197c
This commit introduces a new package `conformance` containing: 1. the test driver to exercise Lotus against interoperable test vectors, and 2. the test runner, which integrates go test with the test vector corpus hosted at https://github.com/filecoin-project/conformance-vectors. The corpus is mounted via a git submodule. Right now, only message-class test vectors are supported. In the next week, this support will be extended to tipset-class, chain-class, and block sequence-class vectors.
55 lines
1.7 KiB
Go
55 lines
1.7 KiB
Go
package conformance
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/filecoin-project/go-address"
|
|
"github.com/filecoin-project/lotus/chain/state"
|
|
"github.com/filecoin-project/lotus/chain/vm"
|
|
|
|
"github.com/filecoin-project/specs-actors/actors/abi"
|
|
"github.com/filecoin-project/specs-actors/actors/crypto"
|
|
"github.com/filecoin-project/specs-actors/actors/runtime"
|
|
|
|
cbor "github.com/ipfs/go-ipld-cbor"
|
|
)
|
|
|
|
type testRand struct{}
|
|
|
|
var _ vm.Rand = (*testRand)(nil)
|
|
|
|
func (r *testRand) GetChainRandomness(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) {
|
|
return []byte("i_am_random_____i_am_random_____"), nil // 32 bytes.
|
|
}
|
|
|
|
func (r *testRand) GetBeaconRandomness(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) {
|
|
return []byte("i_am_random_____i_am_random_____"), nil // 32 bytes.
|
|
}
|
|
|
|
type testSyscalls struct {
|
|
runtime.Syscalls
|
|
}
|
|
|
|
// TODO VerifySignature this will always succeed; but we want to be able to test failures too.
|
|
func (fss *testSyscalls) VerifySignature(_ crypto.Signature, _ address.Address, _ []byte) error {
|
|
return nil
|
|
}
|
|
|
|
// TODO VerifySeal this will always succeed; but we want to be able to test failures too.
|
|
func (fss *testSyscalls) VerifySeal(_ abi.SealVerifyInfo) error {
|
|
return nil
|
|
}
|
|
|
|
// TODO VerifyPoSt this will always succeed; but we want to be able to test failures too.
|
|
func (fss *testSyscalls) VerifyPoSt(_ abi.WindowPoStVerifyInfo) error {
|
|
return nil
|
|
}
|
|
|
|
func mkFakedSigSyscalls(base vm.SyscallBuilder) vm.SyscallBuilder {
|
|
return func(ctx context.Context, cstate *state.StateTree, cst cbor.IpldStore) runtime.Syscalls {
|
|
return &testSyscalls{
|
|
base(ctx, cstate, cst),
|
|
}
|
|
}
|
|
}
|