aboutsummaryrefslogtreecommitdiffstats
path: root/src/transport/libp2p/tests.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-31 21:58:21 +0100
committertv <tv@krebsco.de>2026-10-31 21:58:21 +0100
commit189cd36d9e015968b751117688fa4f0fd64bde36 (patch)
tree1a1261153cdcad7e23cee91ea13a846e44d9fc7b /src/transport/libp2p/tests.rs
parentd1e49f0920e4c10f7822ab94099ffd03a4ba3d6c (diff)
libp2p: warn/refuse bad prefer/ignore combos
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 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.