Skip to content

Commit b04ec0b

Browse files
committed
feat(p2p/meshsub): test in progress
1 parent 1d93f0b commit b04ec0b

File tree

4 files changed

+98
-0
lines changed

4 files changed

+98
-0
lines changed

node/testing/src/scenarios/mod.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ use crate::scenario::{Scenario, ScenarioId, ScenarioStep};
2727

2828
use self::multi_node::basic_connectivity_initial_joining::MultiNodeBasicConnectivityInitialJoining;
2929
use self::multi_node::basic_connectivity_peer_discovery::MultiNodeBasicConnectivityPeerDiscovery;
30+
use self::multi_node::pubsub_advanced::MultiNodePubsubPropagateBlock;
3031
use self::multi_node::sync_4_block_producers::MultiNodeSync4BlockProducers;
3132
use self::multi_node::vrf_correct_ledgers::MultiNodeVrfGetCorrectLedgers;
3233
use self::multi_node::vrf_correct_slots::MultiNodeVrfGetCorrectSlots;
@@ -64,6 +65,7 @@ pub enum Scenarios {
6465
SimulationSmall(SimulationSmall),
6566
SimulationSmallForeverRealTime(SimulationSmallForeverRealTime),
6667
P2pReceiveBlock(P2pReceiveBlock),
68+
MultiNodePubsubPropagateBlock(MultiNodePubsubPropagateBlock),
6769
RecordReplayBootstrap(RecordReplayBootstrap),
6870
RecordReplayBlockProduction(RecordReplayBlockProduction),
6971
}
@@ -86,6 +88,7 @@ impl Scenarios {
8688
Self::MultiNodeBasicConnectivityPeerDiscovery(_) => cfg!(feature = "p2p-webrtc"),
8789
Self::SimulationSmall(_) => true,
8890
Self::SimulationSmallForeverRealTime(_) => true,
91+
Self::MultiNodePubsubPropagateBlock(_) => true, // in progress
8992
_ => false,
9093
}
9194
}
@@ -144,6 +147,7 @@ impl Scenarios {
144147
Self::SimulationSmall(_) => SimulationSmall::DOCS,
145148
Self::SimulationSmallForeverRealTime(_) => SimulationSmallForeverRealTime::DOCS,
146149
Self::P2pReceiveBlock(_) => P2pReceiveBlock::DOCS,
150+
Self::MultiNodePubsubPropagateBlock(_) => MultiNodePubsubPropagateBlock::DOCS,
147151
Self::RecordReplayBootstrap(_) => RecordReplayBootstrap::DOCS,
148152
Self::RecordReplayBlockProduction(_) => RecordReplayBlockProduction::DOCS,
149153
}
@@ -179,6 +183,7 @@ impl Scenarios {
179183
Self::SimulationSmall(v) => v.run(runner).await,
180184
Self::SimulationSmallForeverRealTime(v) => v.run(runner).await,
181185
Self::P2pReceiveBlock(v) => v.run(runner).await,
186+
Self::MultiNodePubsubPropagateBlock(v) => v.run(runner).await,
182187
Self::RecordReplayBootstrap(v) => v.run(runner).await,
183188
Self::RecordReplayBlockProduction(v) => v.run(runner).await,
184189
}

node/testing/src/scenarios/multi_node/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ pub mod basic_connectivity_peer_discovery;
55

66
#[cfg(feature = "p2p-libp2p")]
77
pub mod connection_discovery;
8+
#[cfg(feature = "p2p-libp2p")]
9+
pub mod pubsub_advanced;
810
pub mod vrf_correct_ledgers;
911
pub mod vrf_correct_slots;
1012
pub mod vrf_epoch_bounds_correct_ledgers;
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
use std::{iter, str::FromStr, time::Duration};
2+
3+
use node::{account::AccountSecretKey, BlockProducerConfig};
4+
5+
use crate::{
6+
node::{RustNodeBlockProducerTestingConfig, RustNodeTestingConfig},
7+
scenario::ListenerNode,
8+
scenarios::ClusterRunner,
9+
};
10+
11+
/// Create and Sync up 50 nodes, one amoung them is block producer.
12+
///
13+
/// 1. Create the nodes.
14+
/// 2. Connect them to each other.
15+
/// 3. Wait kademlia bootstrap is done, observe the connection graph.
16+
/// 4. Wait pubsub mesh construction is done, observe the mesh.
17+
/// 5. Wait block is produced and observe the propagation.
18+
#[derive(documented::Documented, Default, Clone, Copy)]
19+
pub struct MultiNodePubsubPropagateBlock;
20+
21+
impl MultiNodePubsubPropagateBlock {
22+
const WORKERS: usize = 4;
23+
24+
pub async fn run(self, mut runner: ClusterRunner<'_>) {
25+
// let seed_node = ListenerNode::Custom(
26+
// "/ip4/34.135.63.47/tcp/10001/p2p/12D3KooWLjs54xHzVmMmGYb7W5RVibqbwD1co7M2ZMfPgPm7iAag"
27+
// .parse()
28+
// .unwrap(),
29+
// );
30+
31+
let seed_config = RustNodeTestingConfig::devnet_default()
32+
.max_peers(100)
33+
.ask_initial_peers_interval(Duration::from_secs(60 * 60));
34+
35+
let seed_node = ListenerNode::Rust(runner.add_rust_node(seed_config));
36+
37+
// for account B62qrztYfPinaKqpXaYGY6QJ3SSW2NNKs7SajBLF1iFNXW9BoALN2Aq
38+
let sec_key =
39+
AccountSecretKey::from_str("EKEEpMELfQkMbJDt2fB4cFXKwSf1x4t7YD4twREy5yuJ84HBZtF9")
40+
.unwrap();
41+
42+
let producer_node = runner.add_rust_node(RustNodeTestingConfig {
43+
initial_time: redux::Timestamp::ZERO,
44+
genesis: node::config::DEVNET_CONFIG.clone(),
45+
max_peers: 10,
46+
ask_initial_peers_interval: Duration::from_secs(60 * 60),
47+
initial_peers: vec![seed_node.clone()],
48+
peer_id: Default::default(),
49+
block_producer: Some(RustNodeBlockProducerTestingConfig {
50+
config: BlockProducerConfig {
51+
pub_key: sec_key.public_key().into(),
52+
custom_coinbase_receiver: None,
53+
proposed_protocol_version: None,
54+
},
55+
sec_key,
56+
}),
57+
snark_worker: None,
58+
timeouts: Default::default(),
59+
libp2p_port: None,
60+
recorder: Default::default(),
61+
});
62+
63+
tokio::time::sleep(Duration::from_secs(2)).await;
64+
65+
eprintln!("Producer node connected");
66+
67+
let worker_config = RustNodeTestingConfig::devnet_default()
68+
.initial_peers(vec![seed_node])
69+
.max_peers(10)
70+
.ask_initial_peers_interval(Duration::from_secs(60 * 60));
71+
let workers = iter::repeat(worker_config)
72+
.take(Self::WORKERS)
73+
.map(|config| runner.add_rust_node(config))
74+
.collect::<Vec<_>>();
75+
76+
runner
77+
.run_until_nodes_synced(Duration::from_secs(10 * 60), &workers)
78+
.await
79+
.unwrap();
80+
81+
let _ = producer_node;
82+
// TODO:
83+
}
84+
}

node/testing/tests/multi_node.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,10 @@ scenario_test!(
1616
MultiNodeBasicConnectivityInitialJoining,
1717
MultiNodeBasicConnectivityInitialJoining
1818
);
19+
20+
#[cfg(feature = "p2p-libp2p")]
21+
scenario_test!(
22+
propagate_block,
23+
openmina_node_testing::scenarios::multi_node::pubsub_advanced::MultiNodePubsubPropagateBlock,
24+
openmina_node_testing::scenarios::multi_node::pubsub_advanced::MultiNodePubsubPropagateBlock
25+
);

0 commit comments

Comments
 (0)