94 lines
2.7 KiB
Rust
94 lines
2.7 KiB
Rust
use rpki::data_model::rc::{
|
|
Afi, AsIdOrRange, AsIdentifierChoice, AsResourceSet, IpAddressChoice, IpAddressFamily, IpAddressOrRange,
|
|
IpPrefix,
|
|
};
|
|
|
|
#[test]
|
|
fn ip_address_family_contains_prefix_afi_mismatch_is_false() {
|
|
let fam = IpAddressFamily {
|
|
afi: Afi::Ipv4,
|
|
choice: IpAddressChoice::Inherit,
|
|
};
|
|
let p = IpPrefix {
|
|
afi: Afi::Ipv6,
|
|
prefix_len: 0,
|
|
addr: vec![0; 16],
|
|
};
|
|
assert!(!fam.contains_prefix(&p));
|
|
}
|
|
|
|
#[test]
|
|
fn ip_address_family_inherit_covers_all_prefixes_of_same_afi() {
|
|
let fam = IpAddressFamily {
|
|
afi: Afi::Ipv6,
|
|
choice: IpAddressChoice::Inherit,
|
|
};
|
|
let p = IpPrefix {
|
|
afi: Afi::Ipv6,
|
|
prefix_len: 32,
|
|
addr: vec![0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
};
|
|
assert!(fam.contains_prefix(&p));
|
|
}
|
|
|
|
#[test]
|
|
fn as_resource_set_asnum_single_id_returns_expected_values() {
|
|
let inherit = AsResourceSet {
|
|
asnum: Some(AsIdentifierChoice::Inherit),
|
|
rdi: None,
|
|
};
|
|
assert_eq!(inherit.asnum_single_id(), None);
|
|
|
|
let single_id = AsResourceSet {
|
|
asnum: Some(AsIdentifierChoice::AsIdsOrRanges(vec![AsIdOrRange::Id(64512)])),
|
|
rdi: None,
|
|
};
|
|
assert_eq!(single_id.asnum_single_id(), Some(64512));
|
|
|
|
let single_range = AsResourceSet {
|
|
asnum: None,
|
|
rdi: Some(AsIdentifierChoice::AsIdsOrRanges(vec![AsIdOrRange::Range {
|
|
min: 64512,
|
|
max: 64520,
|
|
}])),
|
|
};
|
|
assert_eq!(single_range.asnum_single_id(), None);
|
|
|
|
let multiple = AsResourceSet {
|
|
asnum: Some(AsIdentifierChoice::AsIdsOrRanges(vec![
|
|
AsIdOrRange::Id(64512),
|
|
AsIdOrRange::Id(64513),
|
|
])),
|
|
rdi: None,
|
|
};
|
|
assert_eq!(multiple.asnum_single_id(), None);
|
|
}
|
|
|
|
#[test]
|
|
fn as_identifier_choice_has_range_detects_ranges() {
|
|
assert!(!AsIdentifierChoice::Inherit.has_range());
|
|
assert!(!AsIdentifierChoice::AsIdsOrRanges(vec![AsIdOrRange::Id(64512)]).has_range());
|
|
assert!(AsIdentifierChoice::AsIdsOrRanges(vec![AsIdOrRange::Range { min: 1, max: 2 }]).has_range());
|
|
}
|
|
|
|
#[test]
|
|
fn ip_resource_contains_prefix_finds_matching_family() {
|
|
let fam_v6 = IpAddressFamily {
|
|
afi: Afi::Ipv6,
|
|
choice: IpAddressChoice::AddressesOrRanges(vec![IpAddressOrRange::Prefix(IpPrefix {
|
|
afi: Afi::Ipv6,
|
|
prefix_len: 32,
|
|
addr: vec![0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
})]),
|
|
};
|
|
let set = rpki::data_model::rc::IpResourceSet { families: vec![fam_v6] };
|
|
|
|
let p = IpPrefix {
|
|
afi: Afi::Ipv6,
|
|
prefix_len: 48,
|
|
addr: vec![0x20, 0x01, 0x0d, 0xb8, 0x12, 0x34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
};
|
|
assert!(set.contains_prefix(&p));
|
|
}
|
|
|