20260330 完成live bundle录制,远程录制,以及与routinator/rpki-client replay对比
This commit is contained in:
@@ -112,3 +112,130 @@ fn ccr_to_routinator_csv_binary_writes_vrp_csv() {
|
||||
assert!(csv.contains("ASN,IP Prefix,Max Length,Trust Anchor"));
|
||||
assert!(csv.contains("AS64496,203.0.113.0/24,24,apnic"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ccr_to_compare_views_binary_writes_vrp_and_vap_csvs() {
|
||||
use rpki::ccr::{
|
||||
CcrContentInfo, CcrDigestAlgorithm, RpkiCanonicalCacheRepresentation,
|
||||
build_aspa_payload_state, build_roa_payload_state, encode::encode_content_info,
|
||||
};
|
||||
use rpki::data_model::roa::{IpPrefix, RoaAfi};
|
||||
use rpki::validation::objects::{AspaAttestation, Vrp};
|
||||
|
||||
let dir = tempfile::tempdir().expect("tempdir");
|
||||
let ccr_path = dir.path().join("views.ccr");
|
||||
let vrps_path = dir.path().join("vrps.csv");
|
||||
let vaps_path = dir.path().join("vaps.csv");
|
||||
let roa_state = build_roa_payload_state(&[Vrp {
|
||||
asn: 64496,
|
||||
prefix: IpPrefix {
|
||||
afi: RoaAfi::Ipv4,
|
||||
prefix_len: 24,
|
||||
addr: [198, 51, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
},
|
||||
max_length: 24,
|
||||
}])
|
||||
.expect("build roa state");
|
||||
let aspa_state = build_aspa_payload_state(&[AspaAttestation {
|
||||
customer_as_id: 64496,
|
||||
provider_as_ids: vec![64498, 64497, 64498],
|
||||
}])
|
||||
.expect("build aspa state");
|
||||
let ccr = CcrContentInfo::new(RpkiCanonicalCacheRepresentation {
|
||||
version: 0,
|
||||
hash_alg: CcrDigestAlgorithm::Sha256,
|
||||
produced_at: time::OffsetDateTime::parse(
|
||||
"2026-03-30T00:00:00Z",
|
||||
&time::format_description::well_known::Rfc3339,
|
||||
)
|
||||
.expect("time"),
|
||||
mfts: None,
|
||||
vrps: Some(roa_state),
|
||||
vaps: Some(aspa_state),
|
||||
tas: None,
|
||||
rks: None,
|
||||
});
|
||||
std::fs::write(&ccr_path, encode_content_info(&ccr).expect("encode ccr")).expect("write ccr");
|
||||
|
||||
let bin = env!("CARGO_BIN_EXE_ccr_to_compare_views");
|
||||
let out = Command::new(bin)
|
||||
.args([
|
||||
"--ccr",
|
||||
ccr_path.to_string_lossy().as_ref(),
|
||||
"--vrps-out",
|
||||
vrps_path.to_string_lossy().as_ref(),
|
||||
"--vaps-out",
|
||||
vaps_path.to_string_lossy().as_ref(),
|
||||
"--trust-anchor",
|
||||
"apnic",
|
||||
])
|
||||
.output()
|
||||
.expect("run ccr_to_compare_views");
|
||||
assert!(out.status.success(), "stderr={}", String::from_utf8_lossy(&out.stderr));
|
||||
|
||||
let vrps_csv = std::fs::read_to_string(vrps_path).expect("read vrps csv");
|
||||
let vaps_csv = std::fs::read_to_string(vaps_path).expect("read vaps csv");
|
||||
assert!(vrps_csv.contains("ASN,IP Prefix,Max Length,Trust Anchor"));
|
||||
assert!(vrps_csv.contains("AS64496,198.51.100.0/24,24,apnic"));
|
||||
assert!(vaps_csv.contains("Customer ASN,Providers,Trust Anchor"));
|
||||
assert!(vaps_csv.contains("AS64496,AS64497;AS64498,apnic"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ccr_to_compare_views_binary_writes_header_only_vap_csv_when_absent() {
|
||||
use rpki::ccr::{
|
||||
CcrContentInfo, CcrDigestAlgorithm, RpkiCanonicalCacheRepresentation,
|
||||
build_roa_payload_state, encode::encode_content_info,
|
||||
};
|
||||
use rpki::data_model::roa::{IpPrefix, RoaAfi};
|
||||
use rpki::validation::objects::Vrp;
|
||||
|
||||
let dir = tempfile::tempdir().expect("tempdir");
|
||||
let ccr_path = dir.path().join("views-no-vaps.ccr");
|
||||
let vrps_path = dir.path().join("vrps.csv");
|
||||
let vaps_path = dir.path().join("vaps.csv");
|
||||
let roa_state = build_roa_payload_state(&[Vrp {
|
||||
asn: 64496,
|
||||
prefix: IpPrefix {
|
||||
afi: RoaAfi::Ipv4,
|
||||
prefix_len: 24,
|
||||
addr: [203, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
},
|
||||
max_length: 24,
|
||||
}])
|
||||
.expect("build roa state");
|
||||
let ccr = CcrContentInfo::new(RpkiCanonicalCacheRepresentation {
|
||||
version: 0,
|
||||
hash_alg: CcrDigestAlgorithm::Sha256,
|
||||
produced_at: time::OffsetDateTime::parse(
|
||||
"2026-03-30T00:00:00Z",
|
||||
&time::format_description::well_known::Rfc3339,
|
||||
)
|
||||
.expect("time"),
|
||||
mfts: None,
|
||||
vrps: Some(roa_state),
|
||||
vaps: None,
|
||||
tas: None,
|
||||
rks: None,
|
||||
});
|
||||
std::fs::write(&ccr_path, encode_content_info(&ccr).expect("encode ccr")).expect("write ccr");
|
||||
|
||||
let bin = env!("CARGO_BIN_EXE_ccr_to_compare_views");
|
||||
let out = Command::new(bin)
|
||||
.args([
|
||||
"--ccr",
|
||||
ccr_path.to_string_lossy().as_ref(),
|
||||
"--vrps-out",
|
||||
vrps_path.to_string_lossy().as_ref(),
|
||||
"--vaps-out",
|
||||
vaps_path.to_string_lossy().as_ref(),
|
||||
"--trust-anchor",
|
||||
"apnic",
|
||||
])
|
||||
.output()
|
||||
.expect("run ccr_to_compare_views");
|
||||
assert!(out.status.success(), "stderr={}", String::from_utf8_lossy(&out.stderr));
|
||||
|
||||
let vaps_csv = std::fs::read_to_string(vaps_path).expect("read vaps csv");
|
||||
assert_eq!(vaps_csv, "Customer ASN,Providers,Trust Anchor\n");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user