aboutsummaryrefslogtreecommitdiffstats
path: root/src/transport/libp2p/tests.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-31 20:53:22 +0100
committertv <tv@krebsco.de>2026-10-31 20:53:22 +0100
commit9fa1c4601f3c62555903e549e976915169602b26 (patch)
treec005ac09f07f2959f69bae56f9343f9d8ffde6b5 /src/transport/libp2p/tests.rs
parenta08c430100edfba7b924c957f98294fd79de0e1b (diff)
libp2p: add prefer option
Diffstat (limited to 'src/transport/libp2p/tests.rs')
-rw-r--r--src/transport/libp2p/tests.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/transport/libp2p/tests.rs b/src/transport/libp2p/tests.rs
index 12e4fce..9eb2808 100644
--- a/src/transport/libp2p/tests.rs
+++ b/src/transport/libp2p/tests.rs
@@ -32,6 +32,7 @@ fn memory_node_with(
mdns: false,
upnp: false,
ignore: Vec::new(),
+ prefer: Vec::new(),
public: false,
memory: true,
})
@@ -179,6 +180,7 @@ async fn announced_addresses_are_published_instead() {
mdns: false,
upnp: false,
ignore: Vec::new(),
+ prefer: Vec::new(),
public: false,
memory: true,
})
@@ -384,6 +386,7 @@ async fn a_relay_that_is_no_node() {
mdns: false,
upnp: false,
ignore: Vec::new(),
+ prefer: Vec::new(),
public: false,
memory: true,
})
@@ -601,6 +604,37 @@ fn identify_replaces_direct_addresses() {
assert!(book.knows(them, &[old]));
}
+/// Of a peer with more addresses than are kept, those that matter stay: in the ranges
+/// `libp2p-prefer` names first, then public ones, then through relays, then other
+/// private ones.
+#[test]
+fn identified_addresses_preferred_first() {
+ let mut book = Book {
+ preferred: vec!["10.23.0.0/16".parse().unwrap()],
+ ..Book::default()
+ };
+ let (relay, them) = (peer(), peer());
+ let lan: Multiaddr = "/ip4/10.23.7.7/tcp/9661".parse().unwrap();
+ let public: Multiaddr = "/ip4/198.51.100.7/tcp/9661".parse().unwrap();
+ let relayed: Multiaddr = format!("/ip4/192.0.2.1/tcp/9661/p2p/{relay}/p2p-circuit")
+ .parse()
+ .unwrap();
+ let bridges: Vec<Multiaddr> = (0..ADDRESSES_PER_PEER)
+ .map(|i| format!("/ip4/172.17.{i}.1/tcp/9661").parse().unwrap())
+ .collect();
+ let mut listen = bridges.clone();
+ listen.extend([relayed.clone(), public.clone(), lan.clone()]);
+
+ book.identified(them, listen);
+ let known = &book.addresses[&them];
+ assert_eq!(known.len(), ADDRESSES_PER_PEER);
+ assert_eq!(known[..3], [lan.clone(), public, relayed]);
+
+ // Our own: those listened on in the preferred ranges published first.
+ book.listening = vec![bridges[0].clone(), lan.clone()];
+ assert_eq!(book.direct(), [lan, bridges[0].clone()]);
+}
+
/// Peers nobody mentions any more are forgotten, but connected ones.
#[test]
fn stale_peers_are_forgotten() {