diff options
| author | tv <tv@krebsco.de> | 2026-10-31 20:53:22 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-31 20:53:22 +0100 |
| commit | 9fa1c4601f3c62555903e549e976915169602b26 (patch) | |
| tree | c005ac09f07f2959f69bae56f9343f9d8ffde6b5 /src/transport/libp2p/tests.rs | |
| parent | a08c430100edfba7b924c957f98294fd79de0e1b (diff) | |
libp2p: add prefer option
Diffstat (limited to 'src/transport/libp2p/tests.rs')
| -rw-r--r-- | src/transport/libp2p/tests.rs | 34 |
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() { |
