Documentation ¶
Index ¶
- func GenerateIDs(t *testing.T, logger zerolog.Logger, n int, opts ...func(*optsConfig)) (flow.IdentityList, []p2p.LibP2PNode, []observable.Observable)
- func GenerateIDsMiddlewaresNetworks(t *testing.T, n int, log zerolog.Logger, codec network.Codec, ...) (flow.IdentityList, []p2p.LibP2PNode, []network.Middleware, []network.Network, ...)
- func GenerateSubscriptionManagers(t *testing.T, mws []network.Middleware) []network.SubscriptionManager
- func IsRateLimitedPeerFilter(rateLimiter p2p.RateLimiter) p2p.PeerFilter
- func MisbehaviorReportFixture(t *testing.T) network.MisbehaviorReport
- func MisbehaviorReportsFixture(t *testing.T, count int) []network.MisbehaviorReport
- func MisbehaviorTypeFixture(_ *testing.T) network.Misbehavior
- func NetworkConfigFixture(t *testing.T, logger zerolog.Logger, myId flow.Identity, ...) *p2p.NetworkConfig
- func NetworkPayloadFixture(t *testing.T, size uint) []byte
- func NetworksFixture(t *testing.T, log zerolog.Logger, ids flow.IdentityList, ...) []network.Network
- func NewConnectionGater(idProvider module.IdentityProvider, allowListFilter p2p.PeerFilter) connmgr.ConnectionGater
- func NewRateLimiterConsumer(callback func(pid peer.ID, role, msgType, topic, reason string)) p2p.RateLimiterConsumer
- func NewResourceManager(t *testing.T) p2pNetwork.ResourceManager
- func OptionalSleep(send ConduitSendWrapperFunc)
- func StartNetworks(ctx irrecoverable.SignalerContext, t *testing.T, nets []network.Network, ...)
- func StartNodes(ctx irrecoverable.SignalerContext, t *testing.T, nodes []p2p.LibP2PNode, ...)
- func StartNodesAndNetworks(ctx irrecoverable.SignalerContext, t *testing.T, nodes []p2p.LibP2PNode, ...)
- func StopComponents[R module.ReadyDoneAware](t *testing.T, rda []R, duration time.Duration)
- func WithConnectionGater(connectionGater connmgr.ConnectionGater) func(*optsConfig)
- func WithCreateStreamRetryInterval(delay time.Duration) func(*optsConfig)
- func WithDHT(prefix string, dhtOpts ...dht.Option) func(*optsConfig)
- func WithIdentityOpts(idOpts ...func(*flow.Identity)) func(*optsConfig)
- func WithNetworkMetrics(m module.NetworkMetrics) func(*optsConfig)
- func WithPeerManagerFilters(filters ...p2p.PeerFilter) func(*optsConfig)
- func WithPeerUpdateInterval(interval time.Duration) func(*optsConfig)
- func WithUnicastRateLimiterDistributor(distributor p2p.UnicastRateLimiterDistributor) func(*optsConfig)
- func WithUnicastRateLimiters(limiters *ratelimit.RateLimiters) func(*optsConfig)
- type ConduitSendWrapperFunc
- type ConduitWrapper
- func (c *ConduitWrapper) Multicast(msg interface{}, conduit network.Conduit, targetIDs ...flow.Identifier) error
- func (c *ConduitWrapper) Publish(msg interface{}, conduit network.Conduit, targetIDs ...flow.Identifier) error
- func (c *ConduitWrapper) Unicast(msg interface{}, conduit network.Conduit, targetIDs ...flow.Identifier) error
- type MeshEngine
- func (e *MeshEngine) Process(channel channels.Channel, originID flow.Identifier, event interface{}) error
- func (e *MeshEngine) ProcessLocal(event interface{}) error
- func (e *MeshEngine) Submit(channel channels.Channel, originID flow.Identifier, event interface{})
- func (e *MeshEngine) SubmitLocal(event interface{})
- type PeerTag
- type RateLimitConsumer
- type TagWatchingConnManager
- type UpdatableIDProvider
- func GenerateIDsAndMiddlewares(t *testing.T, n int, logger zerolog.Logger, codec network.Codec, ...) (flow.IdentityList, []p2p.LibP2PNode, []network.Middleware, ...)
- func GenerateMiddlewares(t *testing.T, logger zerolog.Logger, identities flow.IdentityList, ...) ([]network.Middleware, []*UpdatableIDProvider)
- func NewUpdatableIDProvider(identities flow.IdentityList) *UpdatableIDProvider
- func (p *UpdatableIDProvider) ByNodeID(flowID flow.Identifier) (*flow.Identity, bool)
- func (p *UpdatableIDProvider) ByPeerID(peerID peer.ID) (*flow.Identity, bool)
- func (p *UpdatableIDProvider) Identifiers() flow.IdentifierList
- func (p *UpdatableIDProvider) Identities(filter flow.IdentityFilter) flow.IdentityList
- func (p *UpdatableIDProvider) SetIdentities(identities flow.IdentityList)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GenerateIDs ¶
func GenerateIDs(t *testing.T, logger zerolog.Logger, n int, opts ...func(*optsConfig)) (flow.IdentityList, []p2p.LibP2PNode, []observable.Observable)
GenerateIDs is a test helper that generate flow identities with a valid port and libp2p nodes.
func GenerateIDsMiddlewaresNetworks ¶
func GenerateIDsMiddlewaresNetworks(t *testing.T, n int, log zerolog.Logger, codec network.Codec, consumer slashing.ViolationsConsumer, opts ...func(*optsConfig)) (flow.IdentityList, []p2p.LibP2PNode, []network.Middleware, []network.Network, []observable.Observable)
func GenerateSubscriptionManagers ¶
func GenerateSubscriptionManagers(t *testing.T, mws []network.Middleware) []network.SubscriptionManager
GenerateSubscriptionManagers creates and returns a ChannelSubscriptionManager for each middleware object.
func IsRateLimitedPeerFilter ¶ added in v0.30.0
func IsRateLimitedPeerFilter(rateLimiter p2p.RateLimiter) p2p.PeerFilter
IsRateLimitedPeerFilter returns a p2p.PeerFilter that will return an error if the peer is rate limited.
func MisbehaviorReportFixture ¶ added in v0.31.0
func MisbehaviorReportFixture(t *testing.T) network.MisbehaviorReport
MisbehaviorReportFixture generates a random misbehavior report. Args:
- t: the test object.
This is used in tests to generate random misbehavior reports. It fails the test if it cannot generate a valid report.
func MisbehaviorReportsFixture ¶ added in v0.31.0
func MisbehaviorReportsFixture(t *testing.T, count int) []network.MisbehaviorReport
MisbehaviorReportsFixture generates a slice of random misbehavior reports. Args:
- t: the test object.
It fails the test if it cannot generate a valid report. This is used in tests to generate random misbehavior reports.
func MisbehaviorTypeFixture ¶ added in v0.31.0
func MisbehaviorTypeFixture(_ *testing.T) network.Misbehavior
MisbehaviorTypeFixture generates a random misbehavior type. Args:
- t: the test object (used to emphasize that this is a test helper).
func NetworkConfigFixture ¶ added in v0.31.0
func NetworkConfigFixture( t *testing.T, logger zerolog.Logger, myId flow.Identity, allIds flow.IdentityList, mw network.Middleware, subMgr network.SubscriptionManager, opts ...p2p.NetworkConfigOption) *p2p.NetworkConfig
func NetworkPayloadFixture ¶
NetworkPayloadFixture creates a blob of random bytes with the given size (in bytes) and returns it. The primary goal of utilizing this helper function is to apply stress tests on the network layer by sending large messages to transmit.
func NetworksFixture ¶ added in v0.31.0
func NetworksFixture(t *testing.T, log zerolog.Logger, ids flow.IdentityList, mws []network.Middleware, sms []network.SubscriptionManager) []network.Network
NetworksFixture generates the network for the given middlewares
func NewConnectionGater ¶
func NewConnectionGater(idProvider module.IdentityProvider, allowListFilter p2p.PeerFilter) connmgr.ConnectionGater
NewConnectionGater creates a new connection gater for testing with given allow listing filter.
func NewRateLimiterConsumer ¶ added in v0.30.0
func NewRateLimiterConsumer(callback func(pid peer.ID, role, msgType, topic, reason string)) p2p.RateLimiterConsumer
NewRateLimiterConsumer returns a p2p.RateLimiterConsumer fixture that will invoke the callback provided.
func NewResourceManager ¶
func NewResourceManager(t *testing.T) p2pNetwork.ResourceManager
NewResourceManager creates a new resource manager for testing with no limits.
func OptionalSleep ¶
func OptionalSleep(send ConduitSendWrapperFunc)
OptionalSleep introduces a sleep to allow nodes to heartbeat and discover each other (only needed when using PubSub)
func StartNetworks ¶ added in v0.31.0
func StartNetworks(ctx irrecoverable.SignalerContext, t *testing.T, nets []network.Network, duration time.Duration)
StartNetworks starts the provided networks using the provided irrecoverable context Arguments: - ctx: the irrecoverable context to use for starting the networks. - t: the test object. - nets: the networks to start. - duration: the timeout to use for waiting for the networks to start.
This function fails the test if the networks do not start within the given timeout.
func StartNodes ¶
func StartNodes(ctx irrecoverable.SignalerContext, t *testing.T, nodes []p2p.LibP2PNode, duration time.Duration)
StartNodes starts the provided nodes and their peer managers using the provided irrecoverable context
func StartNodesAndNetworks ¶
func StartNodesAndNetworks(ctx irrecoverable.SignalerContext, t *testing.T, nodes []p2p.LibP2PNode, nets []network.Network, timeout time.Duration)
StartNodesAndNetworks starts the provided networks and libp2p nodes, returning the irrecoverable error channel. Arguments: - ctx: the irrecoverable context to use for starting the nodes and networks. - t: the test object. - nodes: the libp2p nodes to start. - nets: the networks to start. - timeout: the timeout to use for waiting for the nodes and networks to start.
This function fails the test if the nodes or networks do not start within the given timeout.
func StopComponents ¶
StopComponents stops ReadyDoneAware instances in parallel and fails the test if they could not be stopped within the duration.
func WithConnectionGater ¶ added in v0.30.0
func WithConnectionGater(connectionGater connmgr.ConnectionGater) func(*optsConfig)
func WithCreateStreamRetryInterval ¶ added in v0.30.0
func WithIdentityOpts ¶
func WithNetworkMetrics ¶
func WithNetworkMetrics(m module.NetworkMetrics) func(*optsConfig)
func WithPeerManagerFilters ¶ added in v0.30.0
func WithPeerManagerFilters(filters ...p2p.PeerFilter) func(*optsConfig)
func WithPeerUpdateInterval ¶
func WithUnicastRateLimiterDistributor ¶ added in v0.30.0
func WithUnicastRateLimiterDistributor(distributor p2p.UnicastRateLimiterDistributor) func(*optsConfig)
func WithUnicastRateLimiters ¶
func WithUnicastRateLimiters(limiters *ratelimit.RateLimiters) func(*optsConfig)
Types ¶
type ConduitSendWrapperFunc ¶
type ConduitSendWrapperFunc func(msg interface{}, conduit network.Conduit, targetIDs ...flow.Identifier) error
ConduitSendWrapperFunc is a wrapper around the set of methods offered by the Conduit (e.g., Publish). This data type is solely introduced at the test level. Its primary purpose is to make the same test reusable on different Conduit methods.
type ConduitWrapper ¶
type ConduitWrapper struct{}
func (*ConduitWrapper) Multicast ¶
func (c *ConduitWrapper) Multicast(msg interface{}, conduit network.Conduit, targetIDs ...flow.Identifier) error
Multicast defines a function that receives a message, conduit of an engine instance, and a set of target ID. It then sends the message to the target IDs using the Multicast method of conduit.
func (*ConduitWrapper) Publish ¶
func (c *ConduitWrapper) Publish(msg interface{}, conduit network.Conduit, targetIDs ...flow.Identifier) error
Publish defines a function that receives a message, conduit of an engine instance, and a set target IDs. It then sends the message to the target IDs using the Publish method of conduit.
func (*ConduitWrapper) Unicast ¶
func (c *ConduitWrapper) Unicast(msg interface{}, conduit network.Conduit, targetIDs ...flow.Identifier) error
Unicast defines a function that receives a message, conduit of an engine instance, and a set of target IDs. It then sends the message to the target IDs using individual Unicasts to each target in the underlying network.
type MeshEngine ¶
type MeshEngine struct { sync.Mutex Con network.Conduit // used to directly communicate with the network Event chan interface{} // used to keep track of the events that the node receives Channel chan channels.Channel // used to keep track of the channels that events are Received on Received chan struct{} // used as an indicator on reception of messages for testing mockcomponent.Component // contains filtered or unexported fields }
MeshEngine is a simple engine that is used for testing the correctness of driving the engines with libp2p, it simply receives and stores the incoming messages
func GenerateEngines ¶
func GenerateEngines(t *testing.T, nets []network.Network) []*MeshEngine
GenerateEngines generates MeshEngines for the given networks
func NewMeshEngine ¶
func (*MeshEngine) Process ¶
func (e *MeshEngine) Process(channel channels.Channel, originID flow.Identifier, event interface{}) error
Process receives an originID and an Event and casts them into the corresponding fields of the MeshEngine. It then flags the Received Channel on reception of an Event.
func (*MeshEngine) ProcessLocal ¶
func (e *MeshEngine) ProcessLocal(event interface{}) error
ProcessLocal is implemented for a valid type assertion to Engine any call to it fails the test
func (*MeshEngine) Submit ¶
func (e *MeshEngine) Submit(channel channels.Channel, originID flow.Identifier, event interface{})
Submit is implemented for a valid type assertion to Engine any call to it fails the test
func (*MeshEngine) SubmitLocal ¶
func (e *MeshEngine) SubmitLocal(event interface{})
SubmitLocal is implemented for a valid type assertion to Engine any call to it fails the test
type RateLimitConsumer ¶ added in v0.30.0
type RateLimitConsumer struct {
// contains filtered or unexported fields
}
RateLimitConsumer p2p.RateLimiterConsumer fixture that invokes a callback when rate limit event is consumed.
func (*RateLimitConsumer) OnRateLimitedPeer ¶ added in v0.30.0
func (r *RateLimitConsumer) OnRateLimitedPeer(pid peer.ID, role, msgType, topic, reason string)
type TagWatchingConnManager ¶
type TagWatchingConnManager struct { *connection.ConnManager // contains filtered or unexported fields }
TagWatchingConnManager implements connection.ConnManager struct, and manages connections with tags. It also maintains a set of observers that it notifies when a tag is added or removed from a peer.
func NewTagWatchingConnManager ¶
func NewTagWatchingConnManager(log zerolog.Logger, metrics module.LibP2PConnectionMetrics, config *connection.ManagerConfig) (*TagWatchingConnManager, error)
NewTagWatchingConnManager creates a new TagWatchingConnManager with the given config. It returns an error if the config is invalid.
func (*TagWatchingConnManager) Protect ¶
func (tw *TagWatchingConnManager) Protect(id peer.ID, tag string)
Protect adds a tag to a peer. It also notifies all observers that a tag has been added to a peer.
func (*TagWatchingConnManager) Subscribe ¶
func (tw *TagWatchingConnManager) Subscribe(observer observable.Observer)
Subscribe allows an observer to subscribe to receive notifications when a tag is added or removed from a peer.
func (*TagWatchingConnManager) Unprotect ¶
func (tw *TagWatchingConnManager) Unprotect(id peer.ID, tag string) bool
Unprotect removes a tag from a peer. It also notifies all observers that a tag has been removed from a peer.
func (*TagWatchingConnManager) Unsubscribe ¶
func (tw *TagWatchingConnManager) Unsubscribe(observer observable.Observer)
Unsubscribe allows an observer to unsubscribe from receiving notifications.
type UpdatableIDProvider ¶
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 GenerateIDsAndMiddlewares ¶
func GenerateIDsAndMiddlewares(t *testing.T, n int, logger zerolog.Logger, codec network.Codec, consumer slashing.ViolationsConsumer, opts ...func(*optsConfig)) (flow.IdentityList, []p2p.LibP2PNode, []network.Middleware, []observable.Observable, []*UpdatableIDProvider)
GenerateIDsAndMiddlewares returns nodeIDs, libp2pNodes, middlewares, and observables which can be subscirbed to in order to witness protect events from pubsub
func GenerateMiddlewares ¶
func GenerateMiddlewares(t *testing.T, logger zerolog.Logger, identities flow.IdentityList, libP2PNodes []p2p.LibP2PNode, codec network.Codec, consumer slashing.ViolationsConsumer, opts ...func(*optsConfig)) ([]network.Middleware, []*UpdatableIDProvider)
GenerateMiddlewares creates and initializes middleware instances for all the identities
func NewUpdatableIDProvider ¶
func NewUpdatableIDProvider(identities flow.IdentityList) *UpdatableIDProvider
func (*UpdatableIDProvider) ByNodeID ¶
func (p *UpdatableIDProvider) ByNodeID(flowID flow.Identifier) (*flow.Identity, bool)
func (*UpdatableIDProvider) Identifiers ¶
func (p *UpdatableIDProvider) Identifiers() flow.IdentifierList
func (*UpdatableIDProvider) Identities ¶
func (p *UpdatableIDProvider) Identities(filter flow.IdentityFilter) flow.IdentityList
func (*UpdatableIDProvider) SetIdentities ¶
func (p *UpdatableIDProvider) SetIdentities(identities flow.IdentityList)
SetIdentities updates the IdentityList returned by this provider.