rpki/tests/test_rc_helpers.rs

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));
}