mina_node_testing/scenarios/p2p/
basic_incoming_connections.rs1use std::{collections::BTreeSet, time::Duration};
2
3use crate::{
4 node::RustNodeTestingConfig,
5 scenarios::{
6 add_rust_nodes, peer_is_ready, wait_for_connection_established,
7 wait_for_nodes_listening_on_localhost, ClusterRunner, Driver,
8 },
9};
10
11#[derive(documented::Documented, Default, Clone, Copy)]
13pub struct AcceptIncomingConnection;
14
15impl AcceptIncomingConnection {
16 pub async fn run(self, runner: ClusterRunner<'_>) {
17 let mut driver = Driver::new(runner);
18
19 let (node_ut, _) = driver.add_rust_node(RustNodeTestingConfig::devnet_default());
20 let (node2, peer_id2) = driver.add_rust_node(RustNodeTestingConfig::devnet_default());
21 assert!(
22 wait_for_nodes_listening_on_localhost(
23 &mut driver,
24 Duration::from_secs(30),
25 [node_ut, node2]
26 )
27 .await
28 .unwrap(),
29 "node should be listening"
30 );
31
32 driver
33 .exec_step(crate::scenario::ScenarioStep::ConnectNodes {
34 dialer: node2,
35 listener: crate::scenario::ListenerNode::Rust(node_ut),
36 })
37 .await
38 .expect("node should be connected");
39
40 let connected = wait_for_connection_established(
42 &mut driver,
43 Duration::from_secs(30),
44 (node_ut, &peer_id2),
45 )
46 .await
47 .unwrap();
48 assert!(connected, "peer should be connected");
49
50 assert!(
51 peer_is_ready(driver.inner(), node_ut, &peer_id2),
52 "peer should be ready, but it is \n{:#?}",
53 driver
54 .inner()
55 .node(node_ut)
56 .unwrap()
57 .state()
58 .p2p
59 .get_peer(&peer_id2)
60 );
61 }
62}
63
64#[derive(documented::Documented, Default, Clone, Copy)]
66pub struct AcceptMultipleIncomingConnections;
67
68impl AcceptMultipleIncomingConnections {
69 pub async fn run(self, runner: ClusterRunner<'_>) {
70 const MAX: u8 = 16;
71
72 let mut driver = Driver::new(runner);
73
74 let (node_ut, _) = driver.add_rust_node(RustNodeTestingConfig::devnet_default());
75
76 let (peers, mut peer_ids): (Vec<_>, BTreeSet<_>) =
77 add_rust_nodes(&mut driver, MAX, RustNodeTestingConfig::devnet_default());
78
79 assert!(
80 wait_for_nodes_listening_on_localhost(
81 &mut driver,
82 Duration::from_secs(30),
83 peers.clone().into_iter().chain(std::iter::once(node_ut))
84 )
85 .await
86 .unwrap(),
87 "node should be listening"
88 );
89
90 for peer in peers {
92 driver
93 .exec_step(crate::scenario::ScenarioStep::ConnectNodes {
94 dialer: peer,
95 listener: crate::scenario::ListenerNode::Rust(node_ut),
96 })
97 .await
98 .expect("connect event should be dispatched");
99 }
100
101 let all_connected = wait_for_connection_established(
103 &mut driver,
104 Duration::from_secs(2 * 60),
105 (node_ut, &mut peer_ids),
106 )
107 .await
108 .unwrap();
109 assert!(
110 all_connected,
111 "did not accept connection from peers: {:?}",
112 peer_ids
113 );
114 }
115}