From 92534ae4ec2f6981ae712135bd5fbc7ca916177e Mon Sep 17 00:00:00 2001 From: Thomas Eizinger Date: Sun, 20 Apr 2025 21:02:55 +1000 Subject: [PATCH] test(connlib): ensure we have gaps in port ranges (#8862) This should fix the flaky proptest. --- rust/connlib/tunnel/src/peer.rs | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/rust/connlib/tunnel/src/peer.rs b/rust/connlib/tunnel/src/peer.rs index d60a9888b..e22b84890 100644 --- a/rust/connlib/tunnel/src/peer.rs +++ b/rust/connlib/tunnel/src/peer.rs @@ -1464,24 +1464,34 @@ mod proptests { filters() .prop_filter("empty filters accepts every packet", |f| !f.is_empty()) .prop_flat_map(|f| { - let filters = f.clone(); any::() - .prop_filter_map( - "If ICMP is contained there is no way to generate gaps", + .prop_filter_map("If ICMP is contained there is no way to generate gaps", { + let f = f.clone(); + move |p| { - (p != ProtocolKind::Icmp || !filters.contains(&Filter::Icmp)) - .then_some(p) - }, - ) + (p != ProtocolKind::Icmp || !f.contains(&Filter::Icmp)).then_some(p) + } + }) + .prop_filter("no gaps in port ranges", { + let f = f.clone(); + + move |p| !gaps(f.clone(), *p).is_empty() + }) .prop_flat_map(move |p| { if p == ProtocolKind::Icmp { Just((f.clone(), Protocol::Icmp)).boxed() } else { - let f = f.clone(); select(gaps(f.clone(), p)) - .prop_flat_map(move |g| { + .prop_flat_map({ let f = f.clone(); - g.prop_map(move |dport| (f.clone(), p.into_protocol(dport))) + + move |g| { + g.prop_map({ + let f = f.clone(); + + move |dport| (f.clone(), p.into_protocol(dport)) + }) + } }) .boxed() }