Skip to content

Commit dee28f4

Browse files
mvachharFrostman
authored andcommitted
feat(rust)!: Add bolero generator for .networks on BGP address families
Signed-off-by: Manish Vachharajani <manish@githedgehog.com>
1 parent 150567b commit dee28f4

File tree

1 file changed

+47
-4
lines changed

1 file changed

+47
-4
lines changed

src/bolero/bgp.rs

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22
// Copyright 2025 Hedgehog
33

44
use crate::bolero::support::{
5-
CidrString, IpAddrString, Ipv4AddrString, K8sObjectNameString, LinuxIfName, choose,
5+
CidrString, IpAddrString, Ipv4AddrString, K8sObjectNameString, LinuxIfName,
6+
UniqueV4CidrGenerator, UniqueV6CidrGenerator, choose,
67
};
78
use crate::config::{
89
BgpAddressFamilyIPv4, BgpAddressFamilyIPv6, BgpAddressFamilyL2vpnEvpn, BgpAf, BgpNeighbor,
910
BgpNeighborUpdateSource, RouteMap, RouterConfig, bgp_neighbor_update_source,
1011
};
11-
use bolero::{Driver, TypeGenerator};
12+
use bolero::{Driver, TypeGenerator, ValueGenerator};
1213
use std::ops::Bound;
1314

1415
#[derive(Clone, Copy, PartialEq, TypeGenerator)]
@@ -19,20 +20,28 @@ enum BgpNeighborUpdateSourceType {
1920

2021
impl TypeGenerator for BgpAddressFamilyIPv4 {
2122
fn generate<D: Driver>(d: &mut D) -> Option<Self> {
23+
let v4_prefix_generator = UniqueV4CidrGenerator::new(
24+
d.gen_u16(Bound::Included(&0), Bound::Included(&10))?,
25+
d.gen_u8(Bound::Included(&1), Bound::Included(&32))?,
26+
);
2227
Some(BgpAddressFamilyIPv4 {
2328
redistribute_connected: d.gen_bool(None)?,
2429
redistribute_static: d.gen_bool(None)?,
25-
networks: vec![],
30+
networks: v4_prefix_generator.generate(d)?,
2631
})
2732
}
2833
}
2934

3035
impl TypeGenerator for BgpAddressFamilyIPv6 {
3136
fn generate<D: Driver>(d: &mut D) -> Option<Self> {
37+
let v6_prefix_generator = UniqueV6CidrGenerator::new(
38+
d.gen_u16(Bound::Included(&0), Bound::Included(&10))?,
39+
d.gen_u8(Bound::Included(&1), Bound::Included(&128))?,
40+
);
3241
Some(BgpAddressFamilyIPv6 {
3342
redistribute_connected: d.gen_bool(None)?,
3443
redistribute_static: d.gen_bool(None)?,
35-
networks: vec![],
44+
networks: v6_prefix_generator.generate(d)?,
3645
})
3746
}
3847
}
@@ -150,4 +159,38 @@ mod test {
150159
assert!(router_config.asn.parse::<u32>().is_ok());
151160
});
152161
}
162+
163+
#[test]
164+
fn test_bgp_address_family_ipv4() {
165+
let mut some_networks = false;
166+
bolero::check!()
167+
.with_type::<BgpAddressFamilyIPv4>()
168+
.for_each(|bgp_address_family_ipv4| {
169+
if !bgp_address_family_ipv4.networks.is_empty() {
170+
some_networks = true;
171+
let mut seen = std::collections::HashSet::new();
172+
for network in &bgp_address_family_ipv4.networks {
173+
assert!(seen.insert(network), "Duplicate network found: {network}");
174+
}
175+
}
176+
});
177+
assert!(some_networks);
178+
}
179+
180+
#[test]
181+
fn test_bgp_address_family_ipv6() {
182+
let mut some_networks = false;
183+
bolero::check!()
184+
.with_type::<BgpAddressFamilyIPv6>()
185+
.for_each(|bgp_address_family_ipv6| {
186+
if !bgp_address_family_ipv6.networks.is_empty() {
187+
some_networks = true;
188+
let mut seen = std::collections::HashSet::new();
189+
for network in &bgp_address_family_ipv6.networks {
190+
assert!(seen.insert(network), "Duplicate network found: {network}");
191+
}
192+
}
193+
});
194+
assert!(some_networks);
195+
}
153196
}

0 commit comments

Comments
 (0)