diff options
| author | tv <tv@krebsco.de> | 2026-10-31 21:58:21 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-31 21:58:21 +0100 |
| commit | 189cd36d9e015968b751117688fa4f0fd64bde36 (patch) | |
| tree | 1a1261153cdcad7e23cee91ea13a846e44d9fc7b /src/transport/libp2p/tests.rs | |
| parent | d1e49f0920e4c10f7822ab94099ffd03a4ba3d6c (diff) | |
libp2p: warn/refuse bad prefer/ignore combos
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 9eb2808..f3c9374 100644 --- a/src/transport/libp2p/tests.rs +++ b/src/transport/libp2p/tests.rs @@ -220,6 +220,40 @@ fn address_ranges() { for wrong in ["10.244.0.0/33", "42::/129", "nowhere", "10.0.0.0/x"] { assert!(wrong.parse::<IpRange>().is_err(), "{wrong}"); } + // Mycelium's range: a prefix that isn't a multiple of 8. + let mycelium = [range("400::/7")]; + assert!(ignored( + &mycelium, + &address("/ip6/45f:fa21:4bdd:1::1/tcp/9661") + )); + assert!(ignored(&mycelium, &address("/ip6/5ff::1/tcp/9661"))); + assert!(!ignored(&mycelium, &address("/ip6/600::1/tcp/9661"))); +} + +/// A preferred range all ignored is refused; one with an ignored range in it is fine +/// (with a warning). +#[test] +fn preferred_and_ignored_ranges() { + let check = |ignore: &[&str], prefer: &[&str]| { + let given = |ranges: &[&str]| { + ranges + .iter() + .map(|range| range.to_string()) + .collect::<Vec<_>>() + }; + let (ignore, prefer) = (given(ignore), given(prefer)); + super::config::check_preferred( + &super::config::parse_ranges("libp2p-ignore", &ignore).unwrap(), + &super::config::parse_ranges("libp2p-prefer", &prefer).unwrap(), + &ignore, + &prefer, + ) + }; + assert!(check(&["10.244.0.0/16"], &["10.23.0.0/16"]).is_ok()); + assert!(check(&["10.0.0.0/8"], &["10.23.0.0/16"]).is_err()); + assert!(check(&["10.23.0.0/16"], &["10.23.0.0/16"]).is_err()); + assert!(check(&["10.23.5.0/24"], &["10.23.0.0/16"]).is_ok()); + assert!(check(&["42::/16"], &["10.0.0.0/8"]).is_ok()); } /// Ranges left out aren't published; announced addresses are, whatever they are. |
