Просмотр исходного кода

net/tests: ensure ports are unique

draoi 2 лет назад
Родитель
Сommit
348ed19a7d
1 измененных файлов с 25 добавлено и 15 удалено
  1. 25 15
      src/net/tests.rs

+ 25 - 15
src/net/tests.rs

@@ -43,7 +43,7 @@ fn init_logger() {
     cfg.add_filter_ignore("net::session".to_string());
     cfg.add_filter_ignore("net::outbound_session".to_string());
     cfg.add_filter_ignore("net::inbound_session".to_string());
-    cfg.add_filter_ignore("net::message_subscriber".to_string());
+    cfg.add_filter_ignore("net::message_publisher".to_string());
     cfg.add_filter_ignore("net::protocol_address".to_string());
     cfg.add_filter_ignore("net::protocol_version".to_string());
     cfg.add_filter_ignore("net::protocol_registry".to_string());
@@ -75,21 +75,32 @@ fn get_random_available_port() -> usize {
     let listener = TcpListener::bind("127.0.0.1:0").unwrap();
     let port = listener.local_addr().unwrap().port();
     drop(listener);
-    info!("Found port: {}", port);
     port.into()
 }
 
+fn get_unique_ports() -> Vec<usize> {
+    let mut ports = HashSet::new();
+
+    while ports.len() < N_NODES {
+        ports.insert(get_random_available_port());
+    }
+
+    ports.into_iter().collect()
+}
+
 async fn spawn_seed_session(seed_addr: Url, ex: Arc<Executor<'static>>) -> Vec<Arc<P2p>> {
-    let mut outbound_instances = vec![];
     info!("========================================================");
     info!("Initializing outbound nodes...");
     info!("========================================================");
-    for _ in 0..N_NODES {
-        let inbound_port = get_random_available_port();
+
+    let mut outbound_instances = vec![];
+    let ports = get_unique_ports();
+
+    for port in ports {
         let settings = Settings {
             localnet: true,
-            inbound_addrs: vec![Url::parse(&format!("tcp://127.0.0.1:{}", inbound_port)).unwrap()],
-            external_addrs: vec![Url::parse(&format!("tcp://127.0.0.1:{}", inbound_port)).unwrap()],
+            inbound_addrs: vec![Url::parse(&format!("tcp://127.0.0.1:{}", port)).unwrap()],
+            external_addrs: vec![Url::parse(&format!("tcp://127.0.0.1:{}", port)).unwrap()],
             outbound_connections: 2,
             outbound_peer_discovery_cooloff_time: 2,
             outbound_connect_timeout: 2,
@@ -97,7 +108,7 @@ async fn spawn_seed_session(seed_addr: Url, ex: Arc<Executor<'static>>) -> Vec<A
             greylist_refinery_interval: 15,
             peers: vec![],
             seeds: vec![seed_addr.clone()],
-            node_id: (inbound_port).to_string(),
+            node_id: (port).to_string(),
             allowed_transports: vec!["tcp".to_string()],
             ..Default::default()
         };
@@ -115,16 +126,12 @@ async fn spawn_seed_session(seed_addr: Url, ex: Arc<Executor<'static>>) -> Vec<A
 }
 
 async fn spawn_manual_session(ex: Arc<Executor<'static>>) -> Vec<Arc<P2p>> {
-    let mut manual_instances = vec![];
-    let mut rng = rand::thread_rng();
-    let mut ports = vec![];
-
     info!("========================================================");
     info!("Initializing manual nodes...");
     info!("========================================================");
-    for _ in 0..N_NODES {
-        ports.push(get_random_available_port());
-    }
+    let mut manual_instances = vec![];
+    let mut rng = rand::thread_rng();
+    let ports = get_unique_ports();
 
     for i in 0..N_NODES {
         let mut peer_indexes_copy: Vec<usize> = (0..N_NODES).collect();
@@ -445,6 +452,9 @@ async fn p2p_test_real(ex: Arc<Executor<'static>>) {
     for p2p in manual_instances.clone() {
         // We should have (N_CONNS outbound + N_CONNS inbound)
         // connections at this point.
+        info!("========================================================");
+        info!("Checking manual node={}", p2p.settings().node_id);
+        info!("========================================================");
         let channels = p2p.hosts().channels().await;
         assert!(channels.len() == N_CONNS * 2);
     }