rpki/tests/test_ccr.rs
2026-04-01 16:24:01 +08:00

68 lines
2.4 KiB
Rust

use std::fs;
use std::path::PathBuf;
use rpki::rtr::loader::{ParsedAspa, ParsedVrp};
use tempfile::tempdir;
use rpki::source::ccr::{find_latest_ccr_file, load_ccr_snapshot_from_file,
snapshot_to_payloads_with_options, ParsedCcrSnapshot};
fn fixture_path(name: &str) -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("data").join(name)
}
#[test]
#[ignore = "manual CCR loader smoke test for local samples"]
fn ccr_loader_smoke() {
let snapshot = load_ccr_snapshot_from_file(fixture_path("20260324T000037Z-sng1.ccr"))
.expect("load CCR snapshot");
println!("content_type_oid: {}", snapshot.content_type_oid);
println!("produced_at : {:?}", snapshot.produced_at);
println!("vrp_count : {}", snapshot.vrps.len());
println!("vap_count : {}", snapshot.vaps.len());
println!("first_vrp : {:?}", snapshot.vrps.first());
println!("first_vap : {:?}", snapshot.vaps.first());
}
#[test]
fn find_latest_ccr_file_picks_latest_name() {
let dir = tempdir().expect("create temp dir");
let older = dir.path().join("20260324T000037Z-sng1.ccr");
let newer = dir.path().join("20260324T000138Z-zur1.ccr");
let ignored = dir.path().join("notes.txt");
fs::write(&older, b"older").expect("write older ccr");
fs::write(&newer, b"newer").expect("write newer ccr");
fs::write(&ignored, b"ignored").expect("write ignored file");
let latest = find_latest_ccr_file(dir.path()).expect("find latest ccr");
assert_eq!(latest, newer);
}
#[test]
fn snapshot_to_payloads_with_options_skips_invalid_aspa_when_not_strict() {
let snapshot = ParsedCcrSnapshot {
content_type_oid: "1.2.840.113549.1.9.16.1.54".to_string(),
produced_at: Some("20260324000037Z".to_string()),
vrps: vec![ParsedVrp {
prefix_addr: "192.0.2.0".parse().expect("parse IPv4"),
prefix_len: 24,
max_len: 24,
asn: 64496,
}],
vaps: vec![ParsedAspa {
customer_asn: 174,
provider_asns: vec![0],
}],
};
let conversion =
snapshot_to_payloads_with_options(&snapshot, false).expect("non-strict conversion");
assert_eq!(conversion.payloads.len(), 1);
assert!(conversion.invalid_vrps.is_empty());
assert_eq!(conversion.invalid_vaps.len(), 1);
assert!(conversion.invalid_vaps[0].contains("provider list must not contain AS0"));
}