unittest

package
v0.33.17 Latest Latest
Warning

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

Go to latest
Published: Apr 17, 2024 License: AGPL-3.0 Imports: 83 Imported by: 30

Documentation

Index

Constants

View Source
const (
	DefaultSeedFixtureLength = 64
	DefaultAddress           = "localhost:0"
)
View Source
const GenesisStateCommitmentHex = "e4674bba14f59af783bbf70b2a43c1696a7d9888eeaca86cf74b033580fe1c23"

Pre-calculated state commitment with root account with the above private key

View Source
const ServiceAccountPrivateKeyHashAlgo = hash.SHA2_256
View Source
const ServiceAccountPrivateKeyHex = "8ae3d0461cfed6d6f49bfc25fa899351c39d1bd21fdba8c87595b6c49bb4cc43"
View Source
const ServiceAccountPrivateKeySignAlgo = crypto.ECDSAP256

Variables

View Source
var EpochCommitFixtureCCF = func() []byte {
	b, err := ccf.Encode(createEpochCommittedEvent())
	if err != nil {
		panic(err)
	}
	_, err = ccf.Decode(nil, b)
	if err != nil {
		panic(err)
	}
	return b
}()
View Source
var GenesisStateCommitment flow.StateCommitment
View Source
var GenesisTokenSupply = func() cadence.UFix64 {

	value, err := cadence.NewUFix64("1000000000.0")
	if err != nil {
		panic(fmt.Errorf("invalid genesis token supply: %w", err))
	}
	return value
}()
View Source
var IncorporatedResult incorporatedResultFactory
View Source
var IncorporatedResultSeal incorporatedResultSealFactory
View Source
var Seal sealFactory
View Source
var ServiceAccountPrivateKey flow.AccountPrivateKey
View Source
var ServiceAccountPublicKey flow.AccountPublicKey
View Source
var VersionBeaconFixtureCCF = func() []byte {
	b, err := ccf.Encode(createVersionBeaconEvent())
	if err != nil {
		panic(err)
	}
	_, err = ccf.Decode(nil, b)
	if err != nil {
		panic(err)
	}
	return b
}()

Functions

func AccountFixture added in v0.23.5

func AccountFixture() (*flow.Account, error)

AccountFixture returns a randomly generated account.

func AccountKeyDefaultFixture added in v0.15.0

func AccountKeyDefaultFixture() (*flow.AccountPrivateKey, error)

AccountKeyDefaultFixture returns a randomly generated ECDSA/SHA3 account key.

func AccountKeyFixture

func AccountKeyFixture(
	seedLength int,
	signingAlgo crypto.SigningAlgorithm,
	hashAlgo hash.HashingAlgorithm,
) (*flow.AccountPrivateKey, error)

AccountKeyFixture returns a randomly generated account key.

func AddVersionBeacon added in v0.31.0

func AddVersionBeacon(t *testing.T, beacon *flow.VersionBeacon, state protocol.FollowerState)

AddVersionBeacon adds blocks sequence with given VersionBeacon so this service events takes effect in Flow protocol. This means execution result where event was emitted is sealed, and the seal is finalized by a valid block. This assumes state is bootstrapped with a root block, as it does NOT produce results for final block of the state Root <- A <- B(result(A(VB))) <- C(seal(B))

func AddressFixture

func AddressFixture() flow.Address

func AllowAllPeerFilter added in v0.27.0

func AllowAllPeerFilter() func(peer.ID) error

func AlterTransactionForCluster

func AlterTransactionForCluster(tx flow.TransactionBody, clusters flow.ClusterList, target flow.IdentityList, after func(tx *flow.TransactionBody)) flow.TransactionBody

AlterTransactionForCluster modifies a transaction nonce until it is assigned to the target cluster.

The `after` function is run after each modification to allow for any content dependent changes to the transaction (eg. signing it).

func ApprovalFor added in v0.14.0

func ApprovalFor(result *flow.ExecutionResult, chunkIdx uint64, approverID flow.Identifier) *flow.ResultApproval

func AreNumericallyClose added in v0.33.1

func AreNumericallyClose(a, b float64, epsilon float64) bool

AreNumericallyClose returns true if the two floats are within epsilon of each other. The epsilon is calculated as:

epsilon = max(|a|, |b|) * epsilon

Example:

AreNumericallyClose(1.0, 1.1, 0.1) // true since 1.0 * 0.1 = 0.1 < 0.1
AreNumericallyClose(1.0, 1.1, 0.01) // false since 1.0 * 0.01 = 0.01 < 0.1
AreNumericallyClose(1.0, 1.1, 0.11) // false since 1.1 * 0.11 = 0.121 > 0.1

Args: a: the first float b: the second float epsilon: the epsilon value Returns: true if the two floats are within epsilon of each other false otherwise

func AsSlashable added in v0.29.0

func AsSlashable[T any](msg T) flow.Slashable[T]

AsSlashable returns the input message T, wrapped as a flow.Slashable instance with a random origin ID.

func AssertClosesBefore

func AssertClosesBefore(t assert.TestingT, done <-chan struct{}, duration time.Duration, msgAndArgs ...interface{})

AssertClosesBefore asserts that the given channel closes before the duration expires.

func AssertEqualBlocksLenAndOrder added in v0.23.2

func AssertEqualBlocksLenAndOrder(t *testing.T, expectedBlocks, actualSegmentBlocks []*flow.Block)

AssertEqualBlocksLenAndOrder asserts that both a segment of blocks have the same len and blocks are in the same order

func AssertErrSubstringMatch

func AssertErrSubstringMatch(t testing.TB, expected, actual error)

AssertErrSubstringMatch asserts that two errors match with substring checking on the Error method (`expected` must be a substring of `actual`, to account for the actual error being wrapped). Fails the test if either error is nil.

NOTE: This should only be used in cases where `errors.Is` cannot be, like when errors are transmitted over the network without type information.

func AssertFloatEqual added in v0.26.0

func AssertFloatEqual(t *testing.T, expected, actual float64, message string)

func AssertNotClosesBefore added in v0.23.0

func AssertNotClosesBefore(t assert.TestingT, done <-chan struct{}, duration time.Duration, msgAndArgs ...interface{})

AssertNotClosesBefore asserts that the given channel does not close before the duration expires.

func AssertReturnsBefore

func AssertReturnsBefore(t *testing.T, f func(), duration time.Duration, msgAndArgs ...interface{}) bool

AssertReturnsBefore asserts that the given function returns before the duration expires.

func AssertSnapshotsEqual added in v0.15.0

func AssertSnapshotsEqual(t *testing.T, snap1, snap2 protocol.Snapshot)

func AttestationFixture added in v0.26.1

func AttestationFixture() *flow.Attestation

func BadgerDB

func BadgerDB(t testing.TB, dir string) *badger.DB

func BatchFixture

func BatchFixture() chainsync.Batch

func BatchListFixture

func BatchListFixture(n int) []chainsync.Batch

func BlockEventsFixture added in v0.23.7

func BlockEventsFixture(
	header *flow.Header,
	n int,
	types ...flow.EventType,
) flow.BlockEvents

BlockEventsFixture returns a block events model populated with random events of length n.

func BlockExecutionDatEntityFixture added in v0.30.4

func BlockExecutionDatEntityFixture(opts ...func(*execution_data.BlockExecutionData)) *execution_data.BlockExecutionDataEntity

func BlockExecutionDatEntityListFixture added in v0.30.4

func BlockExecutionDatEntityListFixture(n int) []*execution_data.BlockExecutionDataEntity

func BlockExecutionDataFixture added in v0.30.4

func BlockExecutionDataFixture(opts ...func(*execution_data.BlockExecutionData)) *execution_data.BlockExecutionData

func BlockFixture

func BlockFixture() flow.Block

func BlockFixtures added in v0.13.0

func BlockFixtures(number int) []*flow.Block

func BlockHeaderFixture

func BlockHeaderFixture(opts ...func(header *flow.Header)) *flow.Header

func BlockHeaderFixtureOnChain

func BlockHeaderFixtureOnChain(
	chainID flow.ChainID,
	opts ...func(header *flow.Header),
) *flow.Header

func BlockHeaderWithParentFixture

func BlockHeaderWithParentFixture(parent *flow.Header) *flow.Header

func BlockHeaderWithParentWithSoRFixture added in v0.32.0

func BlockHeaderWithParentWithSoRFixture(parent *flow.Header, source []byte) *flow.Header

func BlockSealsFixture

func BlockSealsFixture(n int) []*flow.Seal

func BlockWithGuaranteesFixture added in v0.17.6

func BlockWithGuaranteesFixture(guarantees []*flow.CollectionGuarantee) *flow.Block

func BlockWithParentAndProposerFixture added in v0.10.0

func BlockWithParentAndProposerFixture(
	t *testing.T,
	parent *flow.Header,
	proposer flow.Identifier,
) flow.Block

func BlockWithParentAndSeals added in v0.26.2

func BlockWithParentAndSeals(parent *flow.Header, seals []*flow.Header) *flow.Block

func BlockWithParentFixture

func BlockWithParentFixture(parent *flow.Header) *flow.Block

func BlockchainFixture added in v0.32.1

func BlockchainFixture(length int) []*flow.Block

func BootstrapExecutionResultFixture

func BootstrapExecutionResultFixture(
	block *flow.Block,
	commit flow.StateCommitment,
) *flow.ExecutionResult

func BootstrapFixture

func BootstrapFixture(
	participants flow.IdentityList,
	opts ...func(*flow.Block),
) (*flow.Block, *flow.ExecutionResult, *flow.Seal)

BootstrapFixture generates all the artifacts necessary to bootstrap the protocol state.

func BootstrapFixtureWithChainID added in v0.30.7

func BootstrapFixtureWithChainID(
	participants flow.IdentityList,
	chainID flow.ChainID,
	opts ...func(*flow.Block),
) (*flow.Block, *flow.ExecutionResult, *flow.Seal)

func CertifyBlock added in v0.30.0

func CertifyBlock(header *flow.Header) *flow.QuorumCertificate

CertifyBlock returns a quorum certificate for the given block header

func ChainFixture added in v0.11.0

func ChainFixture(nonGenesisCount int) (
	[]*flow.Block,
	*flow.ExecutionResult,
	*flow.Seal,
)

ChainFixture creates a list of blocks that forms a chain

func ChainFixtureFrom added in v0.11.0

func ChainFixtureFrom(count int, parent *flow.Header) []*flow.Block

ChainFixtureFrom creates a chain of blocks starting from a given parent block, the total number of blocks in the chain is specified by the given count

func ChunkDataPackFixture

func ChunkDataPackFixture(
	chunkID flow.Identifier,
	opts ...func(*flow.ChunkDataPack),
) *flow.ChunkDataPack

func ChunkDataPackRequestFixture added in v0.17.0

func ChunkDataPackRequestFixture(opts ...func(*verification.ChunkDataPackRequest)) *verification.
	ChunkDataPackRequest

ChunkDataPackRequestFixture creates a chunk data request with some default values, i.e., one agree execution node, one disagree execution node, and height of zero. Use options to customize the request.

func ChunkDataPackRequestListFixture added in v0.17.0

func ChunkDataPackRequestListFixture(
	n int,
	opts ...func(*verification.ChunkDataPackRequest),
) verification.ChunkDataPackRequestList

ChunkDataPackRequestListFixture creates and returns a list of chunk data pack requests fixtures.

func ChunkDataPacksFixture added in v0.21.0

func ChunkDataPacksFixture(
	count int,
	opts ...func(*flow.ChunkDataPack),
) []*flow.ChunkDataPack

func ChunkDataResponseMessageListFixture added in v0.23.2

func ChunkDataResponseMessageListFixture(chunkIDs flow.IdentifierList) []*messages.ChunkDataResponse

ChunkDataResponseMessageListFixture creates a list of chunk data response messages each with a single-transaction collection, and random chunk ID.

func ChunkDataResponseMsgFixture added in v0.23.2

func ChunkDataResponseMsgFixture(
	chunkID flow.Identifier,
	opts ...func(*messages.ChunkDataResponse),
) *messages.ChunkDataResponse

ChunkDataResponseMsgFixture creates a chunk data response message with a single-transaction collection, and random chunk ID. Use options to customize the response.

func ChunkExecutionDataFixture added in v0.30.4

func ChunkExecutionDataFixture(t *testing.T, minSize int, opts ...func(*execution_data.ChunkExecutionData)) *execution_data.ChunkExecutionData

func ChunkFixture

func ChunkFixture(
	blockID flow.Identifier,
	collectionIndex uint,
	opts ...func(*flow.Chunk),
) *flow.Chunk

func ChunkListFixture added in v0.14.8

func ChunkListFixture(n uint, blockID flow.Identifier) flow.ChunkList

func ChunkLocatorFixture added in v0.15.0

func ChunkLocatorFixture(resultID flow.Identifier, index uint64) *chunks.Locator

func ChunkLocatorListFixture added in v0.15.0

func ChunkLocatorListFixture(n uint) chunks.LocatorList

func ChunkStatusListFixture added in v0.17.0

func ChunkStatusListFixture(
	t *testing.T,
	blockHeight uint64,
	result *flow.ExecutionResult,
	n int,
) verification.ChunkStatusList

ChunkStatusListFixture receives an execution result, samples `n` chunks out of it and creates a chunk status for them. It returns the list of sampled chunk statuses for the result.

func ChunkStatusListToChunkLocatorFixture added in v0.17.0

func ChunkStatusListToChunkLocatorFixture(statuses []*verification.ChunkStatus) chunks.LocatorMap

ChunkStatusListToChunkLocatorFixture extracts chunk locators from a list of chunk statuses.

func ClosedChannel added in v0.29.0

func ClosedChannel() <-chan struct{}

ClosedChannel returns a closed channel.

func ClusterAssignment

func ClusterAssignment(n uint, nodes flow.IdentityList) flow.AssignmentList

ClusterAssignment creates an assignment list with n clusters and with nodes evenly distributed among clusters.

func ClusterBlockChainFixture added in v0.31.7

func ClusterBlockChainFixture(n int) []cluster.Block

func ClusterBlockFixture

func ClusterBlockFixture() cluster.Block

func ClusterBlockWithParent

func ClusterBlockWithParent(parent *cluster.Block) cluster.Block

ClusterBlockWithParent creates a new cluster consensus block that is valid with respect to the given parent block.

func ClusterList added in v0.16.0

func ClusterList(n uint, nodes flow.IdentityList) flow.ClusterList

func ClusterPayloadFixture

func ClusterPayloadFixture(n int) *cluster.Payload

func ClusterProposalFromBlock added in v0.26.0

func ClusterProposalFromBlock(block *cluster.Block) *messages.ClusterBlockProposal

func CollectionFixture

func CollectionFixture(n int, options ...func(*flow.Collection)) flow.Collection

func CollectionGuaranteeFixture

func CollectionGuaranteeFixture(options ...func(*flow.CollectionGuarantee)) *flow.CollectionGuarantee

func CollectionGuaranteesFixture

func CollectionGuaranteesFixture(
	n int,
	options ...func(*flow.CollectionGuarantee),
) []*flow.CollectionGuarantee

func CollectionGuaranteesWithCollectionIDFixture added in v0.17.6

func CollectionGuaranteesWithCollectionIDFixture(collections []*flow.Collection) []*flow.CollectionGuarantee

func CollectionListFixture added in v0.17.6

func CollectionListFixture(n int, options ...func(*flow.Collection)) []*flow.Collection

func CommitWithCounter

func CommitWithCounter(counter uint64) func(*flow.EpochCommit)

func CompleteCollectionFixture

func CompleteCollectionFixture() *entity.CompleteCollection

func CompleteCollectionFromTransactions added in v0.19.0

func CompleteCollectionFromTransactions(txs []*flow.TransactionBody) *entity.CompleteCollection

func CompleteIdentitySet

func CompleteIdentitySet(identities ...*flow.Identity) flow.IdentityList

CompleteIdentitySet takes a number of identities and completes the missing roles.

func Concurrently added in v0.18.3

func Concurrently(n int, f func(int))

func CrashTest added in v0.27.2

func CrashTest(t *testing.T, scenario func(*testing.T), expectedErrorMsg string)

CrashTest safely tests functions that crash (as the expected behavior) by checking that running the function creates an error and an expected error message.

func CrashTestWithExpectedStatus added in v0.28.0

func CrashTestWithExpectedStatus(
	t *testing.T,
	scenario func(*testing.T),
	expectedErrorMsg string,
	expectedStatus ...int,
)

CrashTestWithExpectedStatus checks for the test crashing with a specific exit code.

func CreateNParticipantsWithMyRole

func CreateNParticipantsWithMyRole(myRole flow.Role, otherRoles ...flow.Role) (
	flow.IdentityList, flow.Identifier, *module.Local)

CreateNParticipantsWithMyRole creates a list of identities from given roles

func CreateSendTxHttpPayload added in v0.32.0

func CreateSendTxHttpPayload(tx flow.TransactionBody) map[string]interface{}

func DKGBroadcastMessageFixture added in v0.20.0

func DKGBroadcastMessageFixture() *messages.BroadcastDKGMessage

DKGBroadcastMessageFixture creates a single DKG broadcast message with random fields

func DKGMessageFixture added in v0.20.0

func DKGMessageFixture() *messages.DKGMessage

DKGMessageFixture creates a single DKG message with random fields

func DKGParticipantLookup added in v0.16.0

func DKGParticipantLookup(participants flow.IdentityList) map[flow.Identifier]flow.DKGParticipant

func EmulatorRootKey

func EmulatorRootKey() (*flow.AccountPrivateKey, error)

func EngineMessageFixture added in v0.29.0

func EngineMessageFixture() *engine.Message

func EngineMessageFixtures added in v0.29.0

func EngineMessageFixtures(count int) []*engine.Message

func EnsureEventsIndexSeq added in v0.28.2

func EnsureEventsIndexSeq(t *testing.T, events []flow.Event, chainID flow.ChainID)

EnsureEventsIndexSeq checks if values of given event index sequence are monotonically increasing.

func EntityWithID added in v0.14.0

func EntityWithID(expectedID flow.Identifier) interface{}

func EpochCommitFixture

func EpochCommitFixture(opts ...func(*flow.EpochCommit)) *flow.EpochCommit

func EpochCommitFixtureByChainID added in v0.30.0

func EpochCommitFixtureByChainID(chain flow.ChainID) (flow.Event, *flow.EpochCommit)

EpochCommitFixture returns an EpochCommit service event as a Cadence event representation and as a protocol model representation.

func EpochSetupCCFWithNonHexRandomSource added in v0.33.1

func EpochSetupCCFWithNonHexRandomSource() []byte

func EpochSetupFixture

func EpochSetupFixture(opts ...func(setup *flow.EpochSetup)) *flow.EpochSetup

EpochSetupFixture creates a valid EpochSetup with default properties for testing. The default properties can be overwritten with optional parameter functions.

func EpochSetupFixtureByChainID added in v0.30.0

func EpochSetupFixtureByChainID(chain flow.ChainID) (flow.Event, *flow.EpochSetup)

EpochSetupFixtureByChainID returns an EpochSetup service event as a Cadence event representation and as a protocol model representation.

func EpochSetupFixtureCCF added in v0.31.2

func EpochSetupFixtureCCF(randomSource []byte) []byte

func EpochSetupRandomSourceFixture added in v0.33.1

func EpochSetupRandomSourceFixture() []byte

func EpochStatusFixture added in v0.14.0

func EpochStatusFixture() *flow.EpochStatus

func EventFixture

func EventFixture(
	eType flow.EventType,
	transactionIndex uint32,
	eventIndex uint32,
	txID flow.Identifier,
	_ int,
) flow.Event

EventFixture returns an event

func EventTypeFixture added in v0.33.1

func EventTypeFixture(chainID flow.ChainID) flow.EventType

func EventsFixture added in v0.31.14

func EventsFixture(
	n int,
	types ...flow.EventType,
) []flow.Event

func ExecutableBlockFixture

func ExecutableBlockFixture(
	collectionsSignerIDs [][]flow.Identifier,
	startState *flow.StateCommitment,
) *entity.ExecutableBlock

func ExecutableBlockFixtureWithParent

func ExecutableBlockFixtureWithParent(
	collectionsSignerIDs [][]flow.Identifier,
	parent *flow.Header,
	startState *flow.StateCommitment,
) *entity.ExecutableBlock

func ExecutableBlockFromTransactions added in v0.19.0

func ExecutableBlockFromTransactions(
	chain flow.ChainID,
	txss [][]*flow.TransactionBody,
) *entity.ExecutableBlock

func ExecutionReceiptFixture

func ExecutionReceiptFixture(opts ...func(*flow.ExecutionReceipt)) *flow.ExecutionReceipt

func ExecutionResultFixture

func ExecutionResultFixture(opts ...func(*flow.ExecutionResult)) *flow.ExecutionResult

func ExecutionResultListFixture added in v0.17.0

func ExecutionResultListFixture(
	n int,
	opts ...func(*flow.ExecutionResult),
) []*flow.ExecutionResult

func FailOnIrrecoverableError added in v0.29.0

func FailOnIrrecoverableError(t *testing.T, done <-chan struct{}, errCh <-chan error)

FailOnIrrecoverableError waits for either the done signal, or an error to be sent over the error channel. If an error is observed, it is logged and the test is failed. Must be invoked as a goroutine.

func FinalizedProtocolStateWithParticipants

func FinalizedProtocolStateWithParticipants(participants flow.IdentityList) (
	*flow.Block, *mockprotocol.Snapshot, *mockprotocol.State, *mockprotocol.Snapshot)

FinalizedProtocolStateWithParticipants returns a protocol state with finalized participants

func FixedReferenceBlockID added in v0.26.1

func FixedReferenceBlockID() flow.Identifier

func FullBlockFixture added in v0.14.0

func FullBlockFixture() flow.Block

func GenerateRandomStringWithLen added in v0.28.0

func GenerateRandomStringWithLen(commentLen uint) string

GenerateRandomStringWithLen returns a string of random alpha characters of the provided length

func GenesisFixture

func GenesisFixture() *flow.Block

func GenesisStateCommitmentByChainID added in v0.30.7

func GenesisStateCommitmentByChainID(chainID flow.ChainID) flow.StateCommitment

this is done by printing the state commitment in TestBootstrapLedger test with different chain ID

func GetFlowProtocolEventID added in v0.30.0

func GetFlowProtocolEventID(
	t *testing.T,
	channel channels.Channel,
	event interface{},
) flow.Identifier

GetFlowProtocolEventID returns the event ID for the event provided.

func GetPRG added in v0.30.0

func GetPRG(t *testing.T) *rand.Rand

returns a deterministic math/rand PRG that can be used for deterministic randomness in tests only. The PRG seed is logged in case the test iteration needs to be reproduced.

func GossipSubMessageFixture added in v0.33.1

func GossipSubMessageFixture(s string, opts ...func(*pubsub_pb.Message)) *pubsub_pb.Message

GossipSubMessageFixture returns a gossip sub message fixture for the specified topic.

func GossipSubMessageFixtures added in v0.33.1

func GossipSubMessageFixtures(n int, topic string, opts ...func(*pubsub_pb.Message)) []*pubsub_pb.Message

GossipSubMessageFixtures returns a list of gossipsub message fixtures.

func HashFixture

func HashFixture(size int) hash.Hash

func HeaderWithView added in v0.23.7

func HeaderWithView(view uint64) func(*flow.Header)

func HeadersFromMap

func HeadersFromMap(headerDB map[flow.Identifier]*flow.Header) *storage.Headers

HeadersFromMap creates a storage header mock that backed by a given map

func IDEqual added in v0.11.0

func IDEqual(t *testing.T, id1, id2 flow.Identifier)

func IDsEqual added in v0.11.0

func IDsEqual(t *testing.T, id1, id2 []flow.Identifier)

func IPPort added in v0.29.0

func IPPort(port string) string

func IdentifierFixture

func IdentifierFixture() flow.Identifier

func IdentifierListFixture

func IdentifierListFixture(n int) flow.IdentifierList

func IdentityFixture

func IdentityFixture(opts ...func(*flow.Identity)) *flow.Identity

IdentityFixture returns a node identity.

func IdentityListFixture

func IdentityListFixture(n int, opts ...func(*flow.Identity)) flow.IdentityList

IdentityListFixture returns a list of node identity objects. The identities can be customized (ie. set their role) by passing in a function that modifies the input identities as required.

func IdentityWithNetworkingKeyFixture added in v0.22.4

func IdentityWithNetworkingKeyFixture(opts ...func(*flow.Identity)) (
	*flow.Identity,
	crypto.PrivateKey,
)

IdentityWithNetworkingKeyFixture returns a node identity and networking private key

func IndexFixture added in v0.14.0

func IndexFixture() *flow.Index

func InsertAndFinalize added in v0.29.0

func InsertAndFinalize(t *testing.T, st protocol.ParticipantState, block *flow.Block)

InsertAndFinalize inserts, then finalizes, the input block.

func InvalidAddressFixture added in v0.11.0

func InvalidAddressFixture() flow.Address

func InvalidFormatSignature added in v0.12.0

func InvalidFormatSignature() flow.TransactionSignature

func IsServiceEvent added in v0.28.2

func IsServiceEvent(event flow.Event, chainID flow.ChainID) bool

func KeyFixture

func KeyFixture(algo crypto.SigningAlgorithm) crypto.PrivateKey

func KeysFixture added in v0.17.0

func KeysFixture(n int, algo crypto.SigningAlgorithm) []crypto.PrivateKey

func LibP2PResourceLimitOverrideFixture added in v0.33.1

func LibP2PResourceLimitOverrideFixture() p2pconfig.ResourceManagerOverrideLimit

LibP2PResourceLimitOverrideFixture returns a random resource limit override for testing. The values are not guaranteed to be valid between 0 and 1000. Returns:

  • p2pconf.ResourceManagerOverrideLimit: a random resource limit override.

func LightTransactionResultsFixture added in v0.32.0

func LightTransactionResultsFixture(n int) []flow.LightTransactionResult

func LogVerbose added in v0.20.0

func LogVerbose()

func Logger added in v0.10.0

func Logger() zerolog.Logger

Logger returns a zerolog use -vv flag to print debugging logs for tests

func LoggerForTest added in v0.28.0

func LoggerForTest(t *testing.T, level zerolog.Level) zerolog.Logger

go:noinline

func LoggerWithLevel added in v0.25.0

func LoggerWithLevel(level zerolog.Level) zerolog.Logger

func LoggerWithName added in v0.27.3

func LoggerWithName(mod string) zerolog.Logger

func LoggerWithWriterAndLevel added in v0.25.0

func LoggerWithWriterAndLevel(writer io.Writer, level zerolog.Level) zerolog.Logger

func MachineAccountFixture added in v0.22.0

func MachineAccountFixture(t *testing.T) (
	bootstrap.NodeMachineAccountInfo,
	*sdk.Account,
)

func MakeOwnerReg added in v0.33.1

func MakeOwnerReg(key string, value string) flow.RegisterEntry

func MustDecodePublicKeyHex added in v0.19.0

func MustDecodePublicKeyHex(algo crypto.SigningAlgorithm, keyHex string) crypto.PublicKey

func MustDecodeSignatureHex added in v0.19.0

func MustDecodeSignatureHex(sigHex string) crypto.Signature

func NetworkCodec added in v0.27.0

func NetworkCodec() network.Codec

NetworkCodec returns cbor codec.

func NetworkTopology added in v0.28.0

func NetworkTopology() network.Topology

NetworkTopology returns the default topology for testing purposes.

func NetworkingKeys

func NetworkingKeys(n int) []crypto.PrivateKey

func NetworkingPrivKeyFixture added in v0.23.0

func NetworkingPrivKeyFixture() crypto.PrivateKey

NetworkingPrivKeyFixture returns random ECDSAP256 private key

func NewNodeVersionBeaconSemverStructType added in v0.32.0

func NewNodeVersionBeaconSemverStructType() *cadence.StructType

func NewNodeVersionBeaconVersionBeaconEventType added in v0.32.0

func NewNodeVersionBeaconVersionBeaconEventType() *cadence.EventType

func NewNodeVersionBeaconVersionBoundaryStructType added in v0.32.0

func NewNodeVersionBeaconVersionBoundaryStructType() *cadence.StructType

func NewSealingConfigs added in v0.26.13

func NewSealingConfigs(val uint) module.SealingConfigsSetter

func NodeConfigFixture added in v0.25.0

func NodeConfigFixture(opts ...func(*flow.Identity)) bootstrap.NodeConfig

func NodeInfoFixture added in v0.16.1

func NodeInfoFixture(opts ...func(*flow.Identity)) bootstrap.NodeInfo

func NodeInfosFixture added in v0.16.1

func NodeInfosFixture(n int, opts ...func(*flow.Identity)) []bootstrap.NodeInfo

func NodeMachineAccountInfoFixture added in v0.22.0

func NodeMachineAccountInfoFixture() bootstrap.NodeMachineAccountInfo

func NoopTxScript

func NoopTxScript() []byte

NoopTxScript returns a Cadence script for a no-op transaction.

func P2PRPCFixture added in v0.32.0

func P2PRPCFixture(opts ...RPCFixtureOpt) *pubsub.RPC

P2PRPCFixture returns a pubsub RPC fixture. Currently, this fixture only sets the ControlMessage field.

func P2PRPCGraftFixture added in v0.32.0

func P2PRPCGraftFixture(topic *string) *pubsub_pb.ControlGraft

P2PRPCGraftFixture returns a control message rpc Graft fixture.

func P2PRPCGraftFixtures added in v0.32.0

func P2PRPCGraftFixtures(topics ...string) []*pubsub_pb.ControlGraft

P2PRPCGraftFixtures returns n number of control message rpc Graft fixtures.

func P2PRPCIHaveFixture added in v0.32.0

func P2PRPCIHaveFixture(topic *string, messageIds ...string) *pubsub_pb.ControlIHave

P2PRPCIHaveFixture returns a control message rpc iHave fixture.

func P2PRPCIHaveFixtures added in v0.32.0

func P2PRPCIHaveFixtures(m int, topics ...string) []*pubsub_pb.ControlIHave

P2PRPCIHaveFixtures returns n number of control message where n = len(topics) rpc iHave fixtures with m number of message ids each.

func P2PRPCIWantFixture added in v0.32.0

func P2PRPCIWantFixture(messageIds ...string) *pubsub_pb.ControlIWant

P2PRPCIWantFixture returns a control message rpc iWant fixture.

func P2PRPCIWantFixtures added in v0.32.0

func P2PRPCIWantFixtures(n, m int) []*pubsub_pb.ControlIWant

P2PRPCIWantFixtures returns n number of control message rpc iWant fixtures with m number of message ids each.

func P2PRPCPruneFixture added in v0.32.0

func P2PRPCPruneFixture(topic *string) *pubsub_pb.ControlPrune

P2PRPCPruneFixture returns a control message rpc Prune fixture.

func P2PRPCPruneFixtures added in v0.32.0

func P2PRPCPruneFixtures(topics ...string) []*pubsub_pb.ControlPrune

P2PRPCPruneFixtures returns n number of control message rpc Prune fixtures.

func PayloadFixture

func PayloadFixture(options ...func(*flow.Payload)) flow.Payload

func PeerIDFromFlowID added in v0.27.0

func PeerIDFromFlowID(identity *flow.Identity) (peer.ID, error)

func PeerIdFixture added in v0.33.1

func PeerIdFixture(tb testing.TB) peer.ID

PeerIdFixture creates a random and unique peer ID (libp2p node ID).

func PeerIdFixtures added in v0.33.1

func PeerIdFixtures(t *testing.T, n int) []peer.ID

PeerIdFixtures creates random and unique peer IDs (libp2p node IDs).

func PrintHeapInfo added in v0.23.9

func PrintHeapInfo(logger zerolog.Logger)

PrintHeapInfo prints heap object allocation through given logger.

func PrivateKeyFixture added in v0.22.0

func PrivateKeyFixture(algo crypto.SigningAlgorithm, seedLength int) crypto.PrivateKey

PrivateKeyFixture returns a random private key with specified signature algorithm and seed length

func PrivateKeyFixtureByIdentifier added in v0.23.7

func PrivateKeyFixtureByIdentifier(
	algo crypto.SigningAlgorithm,
	seedLength int,
	id flow.Identifier,
) crypto.PrivateKey

PrivateKeyFixtureByIdentifier returns a private key for a given node. given the same identifier, it will always return the same private key

func PrivateNodeInfosFixture added in v0.20.0

func PrivateNodeInfosFixture(n int, opts ...func(*flow.Identity)) []bootstrap.NodeInfo

func ProposalFixture

func ProposalFixture() *messages.BlockProposal

func ProposalFromBlock

func ProposalFromBlock(block *flow.Block) *messages.BlockProposal

func ProposalKeyFixture

func ProposalKeyFixture() flow.ProposalKey

func PublicKeysFixture added in v0.17.0

func PublicKeysFixture(n int, algo crypto.SigningAlgorithm) []crypto.PublicKey

func QCSigDataFixture added in v0.23.9

func QCSigDataFixture() []byte

func QCSigDataWithSoRFixture added in v0.32.0

func QCSigDataWithSoRFixture(sor []byte) []byte

func QCWithBlockID added in v0.15.0

func QCWithBlockID(blockID flow.Identifier) func(*flow.QuorumCertificate)

func QCWithRootBlockID added in v0.29.0

func QCWithRootBlockID(blockID flow.Identifier) func(*flow.QuorumCertificate)

func QCWithSignerIndices added in v0.26.1

func QCWithSignerIndices(signerIndices []byte) func(*flow.QuorumCertificate)

func QuorumCertificateFixture

func QuorumCertificateFixture(opts ...func(*flow.QuorumCertificate)) *flow.QuorumCertificate

func QuorumCertificateWithSignerIDsFixture added in v0.26.1

func QuorumCertificateWithSignerIDsFixture(opts ...func(*flow.QuorumCertificateWithSignerIDs)) *flow.QuorumCertificateWithSignerIDs

func QuorumCertificatesFixtures added in v0.17.1

func QuorumCertificatesFixtures(
	n uint,
	opts ...func(*flow.QuorumCertificate),
) []*flow.QuorumCertificate

func QuorumCertificatesFromAssignments added in v0.26.1

func QuorumCertificatesFromAssignments(assignment flow.AssignmentList) []*flow.QuorumCertificateWithSignerIDs

func QuorumCertificatesWithSignerIDsFixtures added in v0.26.1

func QuorumCertificatesWithSignerIDsFixtures(
	n uint,
	opts ...func(*flow.QuorumCertificateWithSignerIDs),
) []*flow.QuorumCertificateWithSignerIDs

func RandomAddressFixture added in v0.11.0

func RandomAddressFixture() flow.Address

func RandomAddressFixtureForChain added in v0.33.1

func RandomAddressFixtureForChain(chainID flow.ChainID) flow.Address

func RandomBeaconPriv added in v0.23.2

func RandomBeaconPriv() *encodable.RandomBeaconPrivKey

func RandomByteSlice added in v0.32.0

func RandomByteSlice(t *testing.T, n int) []byte

RandomByteSlice is a test helper that generates a cryptographically secure random byte slice of size n.

func RandomBytes

func RandomBytes(n int) []byte

func RandomSDKAddressFixture added in v0.22.0

func RandomSDKAddressFixture() sdk.Address

func RandomSourcesFixture added in v0.32.0

func RandomSourcesFixture(n int) [][]byte

func RandomStringFixture added in v0.32.0

func RandomStringFixture(t *testing.T, n int) string

RandomStringFixture is a test helper that generates a cryptographically secure random string of size n.

func RangeFixture

func RangeFixture() chainsync.Range

func RangeListFixture

func RangeListFixture(n int) []chainsync.Range

func ReadyDoneify

func ReadyDoneify(toMock interface{})

ReadyDoneify sets up a generated mock to respond to Ready and Done lifecycle methods. Any mock type generated by mockery can be used.

func ReceiptAndSealForBlock added in v0.15.0

func ReceiptAndSealForBlock(block *flow.Block) (*flow.ExecutionReceipt, *flow.Seal)

func ReceiptChainFor added in v0.14.0

func ReceiptChainFor(
	blocks []*flow.Block,
	result0 *flow.ExecutionResult,
) []*flow.ExecutionReceipt

func ReceiptForBlockExecutorFixture added in v0.14.1

func ReceiptForBlockExecutorFixture(
	block *flow.Block,
	executor flow.Identifier,
) *flow.ExecutionReceipt

func ReceiptForBlockFixture added in v0.14.0

func ReceiptForBlockFixture(block *flow.Block) *flow.ExecutionReceipt

func ReceiptsForBlockFixture added in v0.17.0

func ReceiptsForBlockFixture(
	block *flow.Block,
	ids []flow.Identifier,
) []*flow.ExecutionReceipt

func ReconnectBlocksAndReceipts added in v0.14.0

func ReconnectBlocksAndReceipts(blocks []*flow.Block, receipts []*flow.ExecutionReceipt)

ReconnectBlocksAndReceipts re-computes each block's PayloadHash and ParentID so that all the blocks are connected. blocks' height have to be in strict increasing order.

func RegisterEntryFixture added in v0.33.1

func RegisterEntryFixture() flow.RegisterEntry

func RegisterIDFixture added in v0.32.10

func RegisterIDFixture() flow.RegisterID

RegisterIDFixture returns a RegisterID with a fixed key and owner

func RequireCloseBefore added in v0.12.0

func RequireCloseBefore(t testing.TB, c <-chan struct{}, duration time.Duration, message string)

RequireCloseBefore requires that the given channel returns before the duration expires.

func RequireClosed added in v0.21.0

func RequireClosed(t *testing.T, ch <-chan struct{}, message string)

RequireClosed is a test helper function that fails the test if channel `ch` is not closed.

func RequireComponentsDoneBefore added in v0.17.0

func RequireComponentsDoneBefore(t testing.TB, duration time.Duration, components ...module.ReadyDoneAware)

RequireComponentsDoneBefore invokes the done method of each of the input components concurrently, and fails the test if any components shutdown takes longer than the specified duration.

func RequireComponentsReadyBefore added in v0.17.0

func RequireComponentsReadyBefore(t testing.TB, duration time.Duration, components ...module.ReadyDoneAware)

RequireComponentsReadyBefore invokes the ready method of each of the input components concurrently, and fails the test if any components startup takes longer than the specified duration.

func RequireConcurrentCallsReturnBefore added in v0.11.0

func RequireConcurrentCallsReturnBefore(t *testing.T, f func(), count int, duration time.Duration, message string)

RequireConcurrentCallsReturnBefore is a test helper that runs function `f` count-many times concurrently, and requires all invocations to return within duration.

func RequireFileEmpty added in v0.14.0

func RequireFileEmpty(t *testing.T, path string)

func RequireNeverClosedWithin added in v0.11.0

func RequireNeverClosedWithin(t *testing.T, ch <-chan struct{}, duration time.Duration, message string)

RequireNeverClosedWithin is a test helper function that fails the test if channel `ch` is closed before the determined duration.

func RequireNeverReturnBefore added in v0.11.0

func RequireNeverReturnBefore(t *testing.T, f func(), duration time.Duration, message string) <-chan struct{}

RequireNeverReturnBefore is a test helper that tries invoking function `f` and fails the test if either: - function `f` is not invoked within 1 second. - function `f` returns before specified `duration`.

It also returns a channel that is closed once the function `f` returns and hence its openness can evaluate return status of function `f` for intervals longer than duration.

func RequireNotClosed added in v0.21.0

func RequireNotClosed(t *testing.T, ch <-chan struct{}, message string)

RequireNotClosed is a test helper function that fails the test if channel `ch` is closed.

func RequireNumericallyClose added in v0.33.1

func RequireNumericallyClose(t testing.TB, a, b float64, epsilon float64, msgAndArgs ...interface{})

RequireNumericallyClose is a wrapper around require.Equal that allows for a small epsilon difference between two floats. This is useful when comparing floats that are the result of a computation. For example, when comparing the result of a computation with a constant. The epsilon is calculated as:

epsilon = max(|a|, |b|) * epsilon

Example:

RequireNumericallyClose(t, 1.0, 1.1, 0.1) // passes since 1.0 * 0.1 = 0.1 < 0.1
RequireNumericallyClose(t, 1.0, 1.1, 0.01) // fails since 1.0 * 0.01 = 0.01 < 0.1
RequireNumericallyClose(t, 1.0, 1.1, 0.11) // fails since 1.1 * 0.11 = 0.121 > 0.1

Args:

	t: the testing.TB instance
 a: the first float
 b: the second float

func RequireReturnsBefore

func RequireReturnsBefore(t testing.TB, f func(), duration time.Duration, message string)

RequireReturnsBefore requires that the given function returns before the duration expires.

func ResultApprovalFixture

func ResultApprovalFixture(opts ...func(*flow.ResultApproval)) *flow.ResultApproval

func RootSnapshotFixture added in v0.15.0

func RootSnapshotFixture(
	participants flow.IdentityList,
	opts ...func(*flow.Block),
) *inmem.Snapshot

RootSnapshotFixture returns a snapshot representing a root chain state, for example one as returned from BootstrapFixture.

func RootSnapshotFixtureWithChainID added in v0.30.7

func RootSnapshotFixtureWithChainID(
	participants flow.IdentityList,
	chainID flow.ChainID,
	opts ...func(*flow.Block),
) *inmem.Snapshot

func RunWithBadgerDB

func RunWithBadgerDB(t testing.TB, f func(*badger.DB))

func RunWithTempDir

func RunWithTempDir(t testing.TB, f func(string))

func RunWithTypedBadgerDB added in v0.22.4

func RunWithTypedBadgerDB(t testing.TB, create func(badger.Options) (*badger.DB, error), f func(*badger.DB))

RunWithTypedBadgerDB creates a Badger DB that is passed to f and closed after f returns. The extra create parameter allows passing in a database constructor function which instantiates a database with a particular type marker, for testing storage modules which require a backed with a particular type.

func SealBlock added in v0.15.0

func SealBlock(t *testing.T, st protocol.ParticipantState, block *flow.Block, receipt *flow.ExecutionReceipt, seal *flow.Seal) (br *flow.Header, bs *flow.Header)

SealBlock seals a block B by building two blocks on it, the first containing a receipt for the block (BR), the second (BS) containing a seal for the block. B <- BR(Result_B) <- BS(Seal_B) Returns the two generated blocks.

func SeedFixture

func SeedFixture(n int) []byte

SeedFixture returns a random []byte with length n

func SeedFixtures

func SeedFixtures(m int, n int) [][]byte

SeedFixtures returns a list of m random []byte, each having length n

func ServiceEventsFixture added in v0.21.0

func ServiceEventsFixture(n int) flow.ServiceEventList

func SetupWithCounter

func SetupWithCounter(counter uint64) func(*flow.EpochSetup)

func SignatureFixture

func SignatureFixture() crypto.Signature

func SignaturesFixture

func SignaturesFixture(n int) []crypto.Signature

func SignerIndicesByIndices added in v0.26.1

func SignerIndicesByIndices(n int, indices []int) []byte

func SignerIndicesFixture added in v0.26.1

func SignerIndicesFixture(n int) []byte

func SkipBenchmarkUnless added in v0.26.0

func SkipBenchmarkUnless(b *testing.B, reason SkipBenchmarkReason, message string)

func SkipUnless added in v0.23.9

func SkipUnless(t *testing.T, reason SkipReason, message string)

func SnapshotClusterByIndex added in v0.26.2

func SnapshotClusterByIndex(
	snapshot *inmem.Snapshot,
	clusterIndex uint,
) (protocol.Cluster, error)

func StakingKeys

func StakingKeys(n int) []crypto.PrivateKey

func StakingPrivKeyByIdentifier added in v0.23.7

func StakingPrivKeyByIdentifier(id flow.Identifier) crypto.PrivateKey

func StakingPrivKeyFixture added in v0.23.0

func StakingPrivKeyFixture() crypto.PrivateKey

StakingPrivKeyFixture returns a random BLS12381 private keyf

func StateCommitmentFixture

func StateCommitmentFixture() flow.StateCommitment

func StateCommitmentPointerFixture added in v0.17.0

func StateCommitmentPointerFixture() *flow.StateCommitment

func StateInteractionsFixture added in v0.11.0

func StateInteractionsFixture() *snapshot.ExecutionSnapshot

func StateSnapshotForKnownBlock added in v0.14.0

func StateSnapshotForKnownBlock(block *flow.Header, identities map[flow.Identifier]*flow.Identity) *protocol.Snapshot

func StateSnapshotForUnknownBlock added in v0.14.0

func StateSnapshotForUnknownBlock() *protocol.Snapshot

func TempBadgerDB

func TempBadgerDB(t testing.TB) (*badger.DB, string)

func TempDir

func TempDir(t testing.TB) string

func TempPebbleDBWithOpts added in v0.32.0

func TempPebbleDBWithOpts(t testing.TB, opts *pebble.Options) (*pebble.DB, string)

func TempPebblePath added in v0.32.0

func TempPebblePath(t *testing.T) string

func TransactionBodyFixture

func TransactionBodyFixture(opts ...func(*flow.TransactionBody)) flow.TransactionBody

func TransactionBodyListFixture added in v0.23.9

func TransactionBodyListFixture(n int) []flow.TransactionBody

func TransactionDSLFixture

func TransactionDSLFixture(chain flow.Chain) dsl.Transaction

func TransactionFixture

func TransactionFixture(n ...func(t *flow.Transaction)) flow.Transaction

func TransactionForCluster

func TransactionForCluster(clusters flow.ClusterList, target flow.IdentityList) flow.TransactionBody

TransactionForCluster generates a transaction that will be assigned to the target cluster ID.

func TransactionResultsFixture added in v0.26.0

func TransactionResultsFixture(n int) []flow.TransactionResult

func TransactionSignatureFixture

func TransactionSignatureFixture() flow.TransactionSignature

func TypedBadgerDB added in v0.22.4

func TypedBadgerDB(t testing.TB, dir string, create func(badger.Options) (*badger.DB, error)) *badger.DB

func Uint64InRange added in v0.29.0

func Uint64InRange(min, max uint64) uint64

Uint64InRange returns a uint64 value drawn from the uniform random distribution [min,max].

func VerifiableChunkDataFixture

func VerifiableChunkDataFixture(chunkIndex uint64) *verification.VerifiableChunkData

VerifiableChunkDataFixture returns a complete verifiable chunk with an execution receipt referencing the block/collections.

func VersionBeaconFixture added in v0.30.5

func VersionBeaconFixture(options ...func(*flow.VersionBeacon)) *flow.VersionBeacon

func VersionBeaconFixtureByChainID added in v0.30.5

func VersionBeaconFixtureByChainID(chain flow.ChainID) (flow.Event, *flow.VersionBeacon)

VersionBeaconFixtureByChainID returns a VersionTable service event as a Cadence event representation and as a protocol model representation.

func VoteFixture

func VoteFixture(opts ...func(vote *hotstuff.Vote)) *hotstuff.Vote

func VoteForBlockFixture added in v0.23.9

func VoteForBlockFixture(
	block *hotstuff.Block,
	opts ...func(vote *hotstuff.Vote),
) *hotstuff.Vote

func VoteWithBeaconSig added in v0.23.9

func VoteWithBeaconSig() func(*hotstuff.Vote)

func VoteWithStakingSig added in v0.23.9

func VoteWithStakingSig() func(*hotstuff.Vote)

func WithAddress added in v0.13.0

func WithAddress(address string) func(*flow.Identity)

WithAddress sets the network address of identity fixture.

func WithAgrees added in v0.17.0

func WithAgrees(list flow.IdentifierList) func(*verification.ChunkDataPackRequest)

func WithAllRoles

func WithAllRoles() func(*flow.Identity)

WithAllRoles can be used used to ensure an IdentityList fixtures contains all the roles required for a valid genesis block.

func WithAllRolesExcept

func WithAllRolesExcept(except ...flow.Role) func(*flow.Identity)

Same as above, but omitting a certain role for cases where we are manually setting up nodes or a particular role.

func WithAllTheFixins added in v0.15.0

func WithAllTheFixins(payload *flow.Payload)

WithAllTheFixins ensures a payload contains no empty slice fields. When encoding and decoding, nil vs empty slices are not preserved, which can result in two models that are semantically equal being considered non-equal by our testing framework.

func WithApproverID added in v0.11.0

func WithApproverID(approverID flow.Identifier) func(*flow.ResultApproval)

func WithApproximateSize added in v0.28.3

func WithApproximateSize(bytes uint64) func(*messages.ChunkDataResponse)

WithApproximateSize sets the ChunkDataResponse to be approximately bytes in size.

func WithAttestationBlock added in v0.14.0

func WithAttestationBlock(block *flow.Block) func(*flow.ResultApproval)

func WithBlock added in v0.11.0

func WithBlock(block *flow.Block) func(*flow.ExecutionResult)

func WithBlockExecutionDataBlockID added in v0.30.4

func WithBlockExecutionDataBlockID(blockID flow.Identifier) func(*execution_data.BlockExecutionData)

func WithBlockID added in v0.11.0

func WithBlockID(id flow.Identifier) func(*flow.ResultApproval)

func WithBoundaries added in v0.31.0

func WithBoundaries(boundaries ...flow.VersionBoundary) func(*flow.VersionBeacon)

func WithChunk added in v0.11.0

func WithChunk(chunkIdx uint64) func(*flow.ResultApproval)

func WithChunkDataPackCollection added in v0.21.0

func WithChunkDataPackCollection(collection *flow.Collection) func(*flow.ChunkDataPack)

func WithChunkEvents added in v0.30.4

func WithChunkEvents(events flow.EventsList) func(*execution_data.ChunkExecutionData)

func WithChunkExecutionDatas added in v0.30.4

func WithChunkExecutionDatas(chunks ...*execution_data.ChunkExecutionData) func(*execution_data.BlockExecutionData)

func WithChunkID added in v0.23.2

func WithChunkID(chunkID flow.Identifier) func(*verification.ChunkDataPackRequest)

func WithChunkStartState added in v0.27.0

func WithChunkStartState(startState flow.StateCommitment) func(chunk *flow.Chunk)

func WithChunks added in v0.17.0

func WithChunks(n uint) func(*flow.ExecutionResult)

func WithClusterQCsFromAssignments added in v0.20.0

func WithClusterQCsFromAssignments(assignments flow.AssignmentList) func(*flow.EpochCommit)

func WithCollRef

func WithCollRef(refID flow.Identifier) func(*flow.CollectionGuarantee)

func WithCollection added in v0.14.0

func WithCollection(collection *flow.Collection) func(guarantee *flow.CollectionGuarantee)

func WithDKGFromParticipants

func WithDKGFromParticipants(participants flow.IdentityList) func(*flow.EpochCommit)

func WithDisagrees added in v0.17.0

func WithDisagrees(list flow.IdentifierList) func(*verification.ChunkDataPackRequest)

func WithEjected added in v0.16.0

func WithEjected(ejected bool) func(*flow.Identity)

func WithExecutionDataID added in v0.26.2

func WithExecutionDataID(id flow.Identifier) func(result *flow.ExecutionResult)

func WithExecutionResultBlockID added in v0.17.0

func WithExecutionResultBlockID(blockID flow.Identifier) func(*flow.ExecutionResult)

func WithExecutionResultID

func WithExecutionResultID(id flow.Identifier) func(*flow.ResultApproval)

func WithExecutionResults added in v0.23.2

func WithExecutionResults(results ...*flow.ExecutionResult) func(*flow.Payload)

WithExecutionResults will add execution results to payload

func WithExecutorID added in v0.11.0

func WithExecutorID(executorID flow.Identifier) func(*flow.ExecutionReceipt)

func WithFinalState added in v0.30.7

func WithFinalState(commit flow.StateCommitment) func(*flow.ExecutionResult)

func WithFinalView

func WithFinalView(view uint64) func(*flow.EpochSetup)

func WithFirstView added in v0.15.0

func WithFirstView(view uint64) func(*flow.EpochSetup)

func WithFrom added in v0.33.1

func WithFrom(pid peer.ID) func(*pubsub_pb.Message)

func WithGuarantees added in v0.15.0

func WithGuarantees(guarantees ...*flow.CollectionGuarantee) func(*flow.Payload)

func WithHeaderHeight added in v0.17.0

func WithHeaderHeight(height uint64) func(header *flow.Header)

func WithHeight added in v0.17.0

func WithHeight(height uint64) func(*verification.ChunkDataPackRequest)

func WithHeightGreaterThan added in v0.17.0

func WithHeightGreaterThan(height uint64) func(*verification.ChunkDataPackRequest)

func WithKeys added in v0.16.1

func WithKeys(identity *flow.Identity)

func WithNetworkingKey added in v0.13.0

func WithNetworkingKey(key crypto.PublicKey) func(*flow.Identity)

WithNetworkingKey sets the networking public key of identity fixture.

func WithNodeID

func WithNodeID(id flow.Identifier) func(*flow.Identity)

WithNodeID adds a node ID with the given first byte to an identity.

func WithParticipants

func WithParticipants(participants flow.IdentityList) func(*flow.EpochSetup)

func WithPreviousResult added in v0.11.0

func WithPreviousResult(prevResult flow.ExecutionResult) func(*flow.ExecutionResult)

func WithRandomPublicKeys

func WithRandomPublicKeys() func(*flow.Identity)

WithRandomPublicKeys adds random public keys to an identity.

func WithReceipts added in v0.15.0

func WithReceipts(receipts ...*flow.ExecutionReceipt) func(*flow.Payload)

func WithReceiptsAndNoResults added in v0.23.2

func WithReceiptsAndNoResults(receipts ...*flow.ExecutionReceipt) func(*flow.Payload)

WithReceiptsAndNoResults will add receipt to payload only

func WithReferenceBlock

func WithReferenceBlock(id flow.Identifier) func(tx *flow.TransactionBody)

func WithResult added in v0.11.0

func WithResult(result *flow.ExecutionResult) func(*flow.ExecutionReceipt)

func WithRole

func WithRole(role flow.Role) func(*flow.Identity)

WithRole adds a role to an identity fixture.

func WithSeals added in v0.15.0

func WithSeals(seals ...*flow.Seal) func(*flow.Payload)

func WithServiceEvents

func WithServiceEvents(n int) func(result *flow.ExecutionResult)

func WithSpocks added in v0.32.0

func WithSpocks(spocks []crypto.Signature) func(*flow.ExecutionReceipt)

func WithStakingPubKey added in v0.20.0

func WithStakingPubKey(pubKey crypto.PublicKey) func(*flow.Identity)

WithStakingPubKey adds a staking public key to the identity

func WithStartState added in v0.17.0

func WithStartState(startState flow.StateCommitment) func(*flow.ChunkDataPack)

func WithTransactionDSL

func WithTransactionDSL(txDSL dsl.Transaction) func(tx *flow.TransactionBody)

func WithTrieUpdate added in v0.31.14

func WithTrieUpdate(trieUpdate *ledger.TrieUpdate) func(*execution_data.ChunkExecutionData)

func WithVoteBlockID added in v0.23.9

func WithVoteBlockID(blockID flow.Identifier) func(*hotstuff.Vote)

func WithVoteSignerID added in v0.23.9

func WithVoteSignerID(signerID flow.Identifier) func(*hotstuff.Vote)

func WithVoteView added in v0.23.9

func WithVoteView(view uint64) func(*hotstuff.Vote)

func WithWeight added in v0.25.0

func WithWeight(weight uint64) func(*flow.Identity)

WithWeight sets the weight on an identity fixture.

func WithoutGuarantee added in v0.15.1

func WithoutGuarantee(payload *flow.Payload)

Types

type BaseChainSuite added in v0.14.0

type BaseChainSuite struct {
	suite.Suite

	// IDENTITIES
	ConID flow.Identifier
	ExeID flow.Identifier
	VerID flow.Identifier

	Identities map[flow.Identifier]*flow.Identity
	Approvers  flow.IdentityList

	// BLOCKS
	RootBlock             flow.Block
	LatestSealedBlock     flow.Block
	LatestFinalizedBlock  *flow.Block
	UnfinalizedBlock      flow.Block
	LatestExecutionResult *flow.ExecutionResult
	Blocks                map[flow.Identifier]*flow.Block

	// PROTOCOL STATE
	State          *protocol.State
	SealedSnapshot *protocol.Snapshot
	FinalSnapshot  *protocol.Snapshot

	// MEMPOOLS and STORAGE which are injected into Matching Engine
	// mock storage.ExecutionReceipts: backed by in-memory map PersistedReceipts
	ReceiptsDB *storage.ExecutionReceipts

	ResultsDB        *storage.ExecutionResults
	PersistedResults map[flow.Identifier]*flow.ExecutionResult

	// mock mempool.IncorporatedResultSeals: backed by in-memory map PendingSeals
	SealsPL      *mempool.IncorporatedResultSeals
	PendingSeals map[flow.Identifier]*flow.IncorporatedResultSeal

	// mock BLOCK STORAGE: backed by in-memory map Blocks
	HeadersDB  *storage.Headers               // backed by map Blocks
	IndexDB    *storage.Index                 // backed by map Blocks
	PayloadsDB *storage.Payloads              // backed by map Blocks
	SealsDB    *storage.Seals                 // backed by map SealsIndex
	SealsIndex map[flow.Identifier]*flow.Seal // last valid seal for block

	// mock mempool.ReceiptsForest: used to test whether or not Matching Engine stores receipts
	ReceiptsPL *mempool.ExecutionTree

	Assigner    *module.ChunkAssigner
	Assignments map[flow.Identifier]*chunks.Assignment // index for assignments for given execution result

	PendingReceipts *mempool.PendingReceipts
}

func (*BaseChainSuite) AddSubgraphFixtureToMempools added in v0.14.0

func (bc *BaseChainSuite) AddSubgraphFixtureToMempools(subgraph subgraphFixture)

addSubgraphFixtureToMempools adds add entities in subgraph to mempools and persistent storage mocks

func (*BaseChainSuite) Extend added in v0.14.0

func (bc *BaseChainSuite) Extend(block *flow.Block)

func (*BaseChainSuite) SetupChain added in v0.14.0

func (bc *BaseChainSuite) SetupChain()

func (*BaseChainSuite) ValidSubgraphFixture added in v0.14.0

func (bc *BaseChainSuite) ValidSubgraphFixture() subgraphFixture

Generates a valid subgraph: let

  • R1 be a result which pertains to blockA
  • R2 be R1's previous result, where R2 pertains to blockB

The execution results form a valid subgraph if and only if:

blockA.ParentID == blockB.ID

type ClusterStateChecker

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

ClusterStateChecker is a test utility for checking cluster state. First, prepare it with expectations about the state, using `Expect*` functions, then use `Check` to assert the expectations.

Duplicates are checked automatically without setting any expectations.

func NewClusterStateChecker

func NewClusterStateChecker(state cluster.State) *ClusterStateChecker

NewClusterStateChecker returns a state checker for the given state.

func (*ClusterStateChecker) Assert

func (checker *ClusterStateChecker) Assert(t *testing.T)

Assert checks all assertions against the cluster state. If any assertions fail, the test will fail.

func (*ClusterStateChecker) ExpectContainsTx

func (checker *ClusterStateChecker) ExpectContainsTx(txIDs ...flow.Identifier) *ClusterStateChecker

ExpectContainsTx adds an expectation that the given transaction exists in the cluster state.

func (*ClusterStateChecker) ExpectOmitsTx

func (checker *ClusterStateChecker) ExpectOmitsTx(txIDs ...flow.Identifier) *ClusterStateChecker

ExpectOmitsTx adds an expectation that the given transaction does not exist in the cluster state.

func (*ClusterStateChecker) ExpectTxCount

func (checker *ClusterStateChecker) ExpectTxCount(n int) *ClusterStateChecker

ExpectTxCount adds an expectation for the total count of transactions in the cluster state.

type EpochBuilder added in v0.12.0

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

EpochBuilder is a testing utility for building epochs into chain state.

func NewEpochBuilder added in v0.12.0

func NewEpochBuilder(t *testing.T, states ...protocol.FollowerState) *EpochBuilder

NewEpochBuilder returns a new EpochBuilder which will build epochs using the given states. At least one state must be provided. If more than one are provided they must have the same initial state.

func (*EpochBuilder) AddBlocksWithSeals added in v0.25.0

func (builder *EpochBuilder) AddBlocksWithSeals(n int, counter uint64) *EpochBuilder

AddBlocksWithSeals for the n number of blocks specified this func will add a seal for the second highest block in the state and a receipt for the highest block in state to the given block before adding it to the state. NOTE: This func should only be used after BuildEpoch to extend the commit phase

func (*EpochBuilder) BuildBlocks added in v0.20.0

func (builder *EpochBuilder) BuildBlocks(n uint)

BuildBlocks builds empty blocks on top of the finalized state. It is used to build epochs that are not the minimum possible length, which is the default result from chaining BuildEpoch and CompleteEpoch.

func (*EpochBuilder) BuildEpoch added in v0.12.0

func (builder *EpochBuilder) BuildEpoch() *EpochBuilder

BuildEpoch builds and finalizes a sequence of blocks comprising a minimal full epoch (epoch N). We assume the latest finalized block is within staking phase in epoch N.

                |                                  EPOCH N                                                      |
                |                                                                                               |
P                 A               B               C               D             E             F

+------------+  +------------+  +-----------+  +-----------+  +----------+  +----------+  +----------+
| ER(P-1)    |->| ER(P)      |->| ER(A)     |->| ER(B)     |->| ER(C)    |->| ER(D)    |->| ER(E)    |
| S(ER(P-2)) |  | S(ER(P-1)) |  | S(ER(P))  |  | S(ER(A))  |  | S(ER(B)) |  | S(ER(C)) |  | S(ER(D)) |
+------------+  +------------+  +-----------+  +-----------+  +----------+  +----------+  +----------+
                                                              |                           |
                                                            Setup                       Commit

ER(X) := ExecutionReceipt for block X S(ER(X)) := Seal for the ExecutionResult contained in ER(X) (seals block X)

A is the latest finalized block. Every block contains a receipt for the previous block and a seal for the receipt contained in the previous block. The only exception is when A is the root block, in which case block B does not contain a receipt for block A, and block C does not contain a seal for block A. This is because the root block is sealed from genesis, and we can't insert duplicate seals.

D contains a seal for block B containing the EpochSetup service event, processing D causes the EpochSetup to become activated.

F contains a seal for block D containing the EpochCommit service event. processing F causes the EpochCommit to become activated.

To build a sequence of epochs, we call BuildEpoch, then CompleteEpoch, and so on.

Upon building an epoch N (preparing epoch N+1), we store some information about the heights of blocks in the BUILT epoch (epoch N). These can be queried with EpochHeights.

func (*EpochBuilder) CompleteEpoch added in v0.12.0

func (builder *EpochBuilder) CompleteEpoch() *EpochBuilder

CompleteEpoch caps off the current epoch by building the first block of the next epoch. We must be in the Committed phase to call CompleteEpoch. Once the epoch has been capped off, we can build the next epoch with BuildEpoch.

func (*EpochBuilder) EpochHeights added in v0.15.0

func (builder *EpochBuilder) EpochHeights(counter uint64) (*EpochHeights, bool)

EpochHeights returns heights of each phase within about a built epoch.

func (*EpochBuilder) UsingCommitOpts added in v0.12.0

func (builder *EpochBuilder) UsingCommitOpts(opts ...func(*flow.EpochCommit)) *EpochBuilder

UsingCommitOpts sets options for the epoch setup event. For options targeting the same field, those added here will take precedence over defaults.

func (*EpochBuilder) UsingSetupOpts added in v0.12.0

func (builder *EpochBuilder) UsingSetupOpts(opts ...func(*flow.EpochSetup)) *EpochBuilder

UsingSetupOpts sets options for the epoch setup event. For options targeting the same field, those added here will take precedence over defaults.

type EpochHeights added in v0.15.0

type EpochHeights struct {
	Counter        uint64 // which epoch this is
	Staking        uint64 // first height of staking phase
	Setup          uint64 // first height of setup phase
	Committed      uint64 // first height of committed phase
	CommittedFinal uint64 // final height of the committed phase
}

EpochHeights is a structure caching the results of building an epoch with EpochBuilder. It contains the first block height for each phase of the epoch.

func (EpochHeights) CommittedRange added in v0.15.0

func (epoch EpochHeights) CommittedRange() []uint64

CommittedRange returns the range of all heights in the committed phase.

func (EpochHeights) FinalHeight added in v0.30.0

func (epoch EpochHeights) FinalHeight() uint64

FinalHeight returns the height of the first block in the epoch.

func (EpochHeights) FirstHeight added in v0.30.0

func (epoch EpochHeights) FirstHeight() uint64

FirstHeight returns the height of the first block in the epoch.

func (EpochHeights) Range added in v0.15.0

func (epoch EpochHeights) Range() []uint64

Range returns the range of all heights that are in this epoch.

func (EpochHeights) SetupRange added in v0.15.0

func (epoch EpochHeights) SetupRange() []uint64

SetupRange returns the range of all heights in the setup phase.

func (EpochHeights) StakingRange added in v0.15.0

func (epoch EpochHeights) StakingRange() []uint64

StakingRange returns the range of all heights in the staking phase.

type FixedStaker added in v0.15.1

type FixedStaker struct {
	Staked bool
}

func NewFixedStaker added in v0.15.1

func NewFixedStaker(initial bool) *FixedStaker

func (*FixedStaker) AmIStakedAt added in v0.15.1

func (f *FixedStaker) AmIStakedAt(_ flow.Identifier) bool

type LoggerHook added in v0.22.0

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

LoggerHook implements the zerolog.Hook interface and can be used to capture logs for testing purposes.

func HookedLogger added in v0.22.0

func HookedLogger() (zerolog.Logger, LoggerHook)

func NewLoggerHook added in v0.22.0

func NewLoggerHook() LoggerHook

func (LoggerHook) Logs added in v0.22.0

func (hook LoggerHook) Logs() string

Logs returns the logs as a string

func (LoggerHook) Run added in v0.22.0

func (hook LoggerHook) Run(_ *zerolog.Event, level zerolog.Level, msg string)

Run implements zerolog.Hook and appends the log message to the log.

type MockEntity added in v0.23.9

type MockEntity struct {
	Identifier flow.Identifier
	Nonce      uint64
}

MockEntity implements a bare minimum entity for sake of test.

func EntityListFixture added in v0.23.9

func EntityListFixture(n uint) []*MockEntity

func MockEntityFixture added in v0.23.9

func MockEntityFixture() *MockEntity

func MockEntityListFixture added in v0.29.0

func MockEntityListFixture(count int) []*MockEntity

func (MockEntity) Checksum added in v0.23.9

func (m MockEntity) Checksum() flow.Identifier

func (MockEntity) ID added in v0.23.9

func (m MockEntity) ID() flow.Identifier

type ProtectedMap added in v0.29.0

type ProtectedMap[K comparable, V any] struct {
	// contains filtered or unexported fields
}

ProtectedMap is a thread-safe map.

func NewProtectedMap added in v0.29.0

func NewProtectedMap[K comparable, V any]() *ProtectedMap[K, V]

NewProtectedMap returns a new ProtectedMap with the given types

func (*ProtectedMap[K, V]) Add added in v0.29.0

func (p *ProtectedMap[K, V]) Add(key K, value V)

Add adds a key-value pair to the map

func (*ProtectedMap[K, V]) ForEach added in v0.29.0

func (p *ProtectedMap[K, V]) ForEach(fn func(k K, v V) error) error

ForEach iterates over the map and calls the given function for each key-value pair. If the function returns an error, the iteration is stopped and the error is returned.

func (*ProtectedMap[K, V]) Get added in v0.29.0

func (p *ProtectedMap[K, V]) Get(key K) (V, bool)

Get returns the value for the given key and a boolean indicating if the key was found

func (*ProtectedMap[K, V]) Has added in v0.29.0

func (p *ProtectedMap[K, V]) Has(key K) bool

Has returns true if the map contains the given key

func (*ProtectedMap[K, V]) Remove added in v0.29.0

func (p *ProtectedMap[K, V]) Remove(key K)

Remove removes a key-value pair from the map

func (*ProtectedMap[K, V]) Size added in v0.32.0

func (p *ProtectedMap[K, V]) Size() int

Size returns the size of the map.

type RPCFixtureOpt added in v0.32.0

type RPCFixtureOpt func(rpc *pubsub.RPC)

func WithGrafts added in v0.32.0

func WithGrafts(grafts ...*pubsub_pb.ControlGraft) RPCFixtureOpt

WithGrafts sets the grafts on the rpc control message.

func WithIHaves added in v0.32.0

func WithIHaves(iHaves ...*pubsub_pb.ControlIHave) RPCFixtureOpt

WithIHaves sets the iHaves on the rpc control message.

func WithIWants added in v0.32.0

func WithIWants(iWants ...*pubsub_pb.ControlIWant) RPCFixtureOpt

WithIWants sets the iWants on the rpc control message.

func WithPrunes added in v0.32.0

func WithPrunes(prunes ...*pubsub_pb.ControlPrune) RPCFixtureOpt

WithPrunes sets the prunes on the rpc control message.

func WithPubsubMessages added in v0.33.1

func WithPubsubMessages(msgs ...*pubsub_pb.Message) RPCFixtureOpt

type SkipBenchmarkReason added in v0.26.0

type SkipBenchmarkReason int
const (
	BENCHMARK_EXPERIMENT SkipBenchmarkReason = iota + 1
)

func (SkipBenchmarkReason) String added in v0.26.0

func (s SkipBenchmarkReason) String() string

type SkipReason added in v0.23.9

type SkipReason int
const (
	TEST_FLAKY               SkipReason = iota + 1 // flaky
	TEST_TODO                                      // not fully implemented or broken and needs to be fixed
	TEST_REQUIRES_GCP_ACCESS                       // requires the environment to be configured with GCP credentials
	TEST_DEPRECATED                                // uses code that has been deprecated / disabled
	TEST_LONG_RUNNING                              // long running
	TEST_RESOURCE_INTENSIVE                        // resource intensive test
)

func ParseSkipReason added in v0.26.0

func ParseSkipReason(output string) (SkipReason, bool)

func (SkipReason) MarshalJSON added in v0.26.0

func (s SkipReason) MarshalJSON() ([]byte, error)

func (SkipReason) String added in v0.23.9

func (s SkipReason) String() string

type TestTime added in v0.29.0

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

TestTime is a fake time used for testing.

func NewTestTime added in v0.29.0

func NewTestTime() *TestTime

NewTestTime returns new TestTime.

func (*TestTime) Advance added in v0.29.0

func (tt *TestTime) Advance(dur time.Duration)

Advance advances the fake time.

func (*TestTime) Now added in v0.29.0

func (tt *TestTime) Now() time.Time

Now returns the current fake time.

func (*TestTime) Since added in v0.29.0

func (tt *TestTime) Since(t time.Time) time.Duration

Since returns the fake time since the given time.

type UpdatableIDProvider added in v0.32.0

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

UpdatableIDProvider implements an IdentityProvider which can be manually updated by setting the IdentityList to a new value. It also implements an IdentifierProvider which provides the identifiers of the IdentityList. This is mainly used to simulate epoch transitions in tests.

func NewUpdatableIDProvider added in v0.32.0

func NewUpdatableIDProvider(identities flow.IdentityList) *UpdatableIDProvider

func (*UpdatableIDProvider) ByNodeID added in v0.32.0

func (p *UpdatableIDProvider) ByNodeID(flowID flow.Identifier) (*flow.Identity, bool)

func (*UpdatableIDProvider) ByPeerID added in v0.32.0

func (p *UpdatableIDProvider) ByPeerID(peerID peer.ID) (*flow.Identity, bool)

func (*UpdatableIDProvider) Identifiers added in v0.32.0

func (p *UpdatableIDProvider) Identifiers() flow.IdentifierList

func (*UpdatableIDProvider) Identities added in v0.32.0

func (*UpdatableIDProvider) SetIdentities added in v0.32.0

func (p *UpdatableIDProvider) SetIdentities(identities flow.IdentityList)

SetIdentities updates the IdentityList returned by this provider.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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