Jelajahi Sumber

store: add test_fetch_address() unit test

lunar-mining 2 tahun lalu
induk
melakukan
0ac12ff19d
1 mengubah file dengan 92 tambahan dan 0 penghapusan
  1. 92 0
      src/net/hosts/store.rs

+ 92 - 0
src/net/hosts/store.rs

@@ -1360,6 +1360,98 @@ mod tests {
         });
         });
     }
     }
 
 
+    #[test]
+    fn test_fetch_address() {
+        smol::block_on(async {
+            let connect_count = 8;
+            let n_anchor = 10;
+            let n_white = 10;
+            let n_grey = 10;
+
+            let mut anchor_urls = vec![];
+            let mut white_urls = vec![];
+            let mut grey_urls = vec![];
+            let mut fetched_urls = vec![];
+
+            let ex = Arc::new(Executor::new());
+
+            let settings = Settings {
+                outbound_connections: 8,
+                allowed_transports: vec!["tcp".to_string()],
+                ..Default::default()
+            };
+            let p2p = P2p::new(settings, ex.clone()).await;
+            let hosts = p2p.hosts();
+
+            for i in 0..n_anchor {
+                anchor_urls.push(Url::parse(&format!("tcp://anchorlist{}:123", i)).unwrap());
+            }
+            for i in 0..n_white {
+                white_urls.push(Url::parse(&format!("tcp://whitelist{}:123", i)).unwrap());
+            }
+            for i in 0..n_grey {
+                grey_urls.push(Url::parse(&format!("tcp://greylist{}:123", i)).unwrap());
+            }
+
+            // Build up a hostlist
+            for anchor in &anchor_urls {
+                let last_seen = UNIX_EPOCH.elapsed().unwrap().as_secs();
+                hosts.anchorlist_store(anchor.clone(), last_seen).await;
+            }
+            for white in &white_urls {
+                let last_seen = UNIX_EPOCH.elapsed().unwrap().as_secs();
+                hosts.whitelist_store(white.clone(), last_seen).await;
+            }
+            for grey in &grey_urls {
+                let last_seen = UNIX_EPOCH.elapsed().unwrap().as_secs();
+                hosts.greylist_store(grey.clone(), last_seen).await;
+            }
+
+            assert!(!hosts.is_empty_anchorlist().await);
+            assert!(!hosts.is_empty_whitelist().await);
+            assert!(!hosts.is_empty_greylist().await);
+
+            let transports = &p2p.settings().allowed_transports;
+            let slot_count = p2p.settings().outbound_connections;
+            let white_count = slot_count * p2p.settings().white_connection_percent / 100;
+            let anchor_count = p2p.settings().anchor_connection_count;
+
+            for i in 0..connect_count {
+                if i < anchor_count {
+                    fetched_urls.push(
+                        hosts
+                            .anchorlist_fetch_address_with_lock(p2p.clone(), transports)
+                            .await
+                            .unwrap(),
+                    );
+                } else if i < white_count {
+                    fetched_urls.push(
+                        hosts
+                            .whitelist_fetch_address_with_lock(p2p.clone(), transports)
+                            .await
+                            .unwrap(),
+                    );
+                } else if i < slot_count {
+                    fetched_urls.push(
+                        hosts
+                            .greylist_fetch_address_with_lock(p2p.clone(), transports)
+                            .await
+                            .unwrap(),
+                    );
+                }
+            }
+
+            assert!(anchor_urls.iter().any(|u| u.clone() == fetched_urls[0].0));
+            assert!(anchor_urls.iter().any(|u| u.clone() == fetched_urls[1].0));
+            assert!(white_urls.iter().any(|u| u.clone() == fetched_urls[2].0));
+            assert!(white_urls.iter().any(|u| u.clone() == fetched_urls[3].0));
+            assert!(grey_urls.iter().any(|u| u.clone() == fetched_urls[4].0));
+            assert!(grey_urls.iter().any(|u| u.clone() == fetched_urls[5].0));
+            assert!(grey_urls.iter().any(|u| u.clone() == fetched_urls[6].0));
+            assert!(grey_urls.iter().any(|u| u.clone() == fetched_urls[7].0));
+        })
+    }
+
     #[test]
     #[test]
     fn test_anchorlist_fetch() {
     fn test_anchorlist_fetch() {
         smol::block_on(async {
         smol::block_on(async {