mina_node_testing/scenario/
step.rs

1use node::{event_source::Event, p2p::connection::outgoing::P2pConnectionOutgoingInitOpts};
2use serde::{Deserialize, Serialize};
3
4use crate::{
5    cluster::{ClusterNodeId, ClusterOcamlNodeId},
6    node::{NodeTestingConfig, NonDeterministicEvent, OcamlStep},
7};
8
9#[derive(Serialize, Deserialize, Debug, Clone)]
10#[serde(tag = "kind")]
11pub enum ScenarioStep {
12    /// Event picked from pending events, which are triggered by actual service.
13    ///
14    /// Passed string is used as a pattern to pick event from pending events.
15    Event {
16        node_id: ClusterNodeId,
17        event: String,
18    },
19    /// Manually added/dispatched event.
20    ManualEvent {
21        node_id: ClusterNodeId,
22        event: Box<Event>,
23    },
24    /// Non deterministic event.
25    ///
26    /// Event that won't occur or will, but with a different pattern,
27    /// when rerunning the same cluster with same setup.
28    NonDeterministicEvent {
29        node_id: ClusterNodeId,
30        event: Box<NonDeterministicEvent>,
31    },
32    /// Create a new node, start it and add it to the cluster.
33    AddNode {
34        config: Box<NodeTestingConfig>,
35    },
36    ConnectNodes {
37        dialer: ClusterNodeId,
38        listener: ListenerNode,
39    },
40    CheckTimeouts {
41        node_id: ClusterNodeId,
42    },
43    /// Advance global time by passed nanoseconds.
44    AdvanceTime {
45        by_nanos: u64,
46    },
47    /// Advance time by passed nanoseconds for the node.
48    AdvanceNodeTime {
49        node_id: ClusterNodeId,
50        by_nanos: u64,
51    },
52    Ocaml {
53        node_id: ClusterOcamlNodeId,
54        step: OcamlStep,
55    },
56}
57
58#[derive(Serialize, Deserialize, derive_more::From, Debug, Clone)]
59pub enum ListenerNode {
60    Rust(ClusterNodeId),
61    Ocaml(ClusterOcamlNodeId),
62    Custom(P2pConnectionOutgoingInitOpts),
63}