mina_node_testing/scenarios/p2p/
pubsub.rs

1use std::time::Duration;
2
3use node::ActionKind;
4
5use crate::{
6    hosts,
7    node::RustNodeTestingConfig,
8    scenarios::{ClusterRunner, RunCfg, RunCfgAdvanceTime},
9};
10
11/// Receive a message via meshsub
12/// 1. Create a normal node with default devnet config, with devnet peers as initial peers
13/// 2. Wait for 2 minutes
14/// 3. Create a node with discovery disabled and first node as only peer
15/// 4. Wait for first node to broadcast message to second one
16#[derive(documented::Documented, Default, Clone, Copy)]
17pub struct P2pReceiveMessage;
18
19impl P2pReceiveMessage {
20    pub async fn run(self, mut runner: ClusterRunner<'_>) {
21        let config = RustNodeTestingConfig::devnet_default()
22            .initial_peers(hosts::devnet())
23            .initial_time(redux::Timestamp::global_now());
24
25        let retransmitter_mina_rust_node = runner.add_rust_node(config);
26
27        let _ = runner
28            .run(
29                RunCfg::default()
30                    .timeout(Duration::from_secs(120))
31                    .advance_time(RunCfgAdvanceTime::Real)
32                    .action_handler(|_, _, _, _| false),
33            )
34            .await;
35
36        let config = RustNodeTestingConfig::devnet_default()
37            // Make sure it doesn't connect to any more peers
38            .with_no_peer_discovery()
39            .initial_peers(vec![retransmitter_mina_rust_node.into()]);
40
41        let receiver_mina_rust_node = runner.add_rust_node(config);
42
43        runner
44            .run(
45                RunCfg::default()
46                    .timeout(Duration::from_secs(60 * 30))
47                    .advance_time(RunCfgAdvanceTime::Real)
48                    .action_handler(move |node, _state, _, action| {
49                        node == receiver_mina_rust_node
50                            && matches!(
51                                action.action().kind(),
52                                ActionKind::P2pNetworkPubsubValidateIncomingMessage
53                            )
54                    }),
55            )
56            .await
57            .expect("Test failed");
58    }
59}