rpki/tests/test_cli_payload_delta_replay_smoke.rs
yuyr 557a69cbd2 20260316迭代 增加delta replay以及multi-rir
replay 对比,五个RIR 输出vrp与routinator一致
2026-03-16 22:54:48 +08:00

74 lines
2.6 KiB
Rust

use std::process::Command;
#[test]
fn cli_payload_delta_replay_rejects_wrong_base_locks() {
let bin = env!("CARGO_BIN_EXE_rpki");
let db_dir = tempfile::tempdir().expect("db tempdir");
let out_dir = tempfile::tempdir().expect("out tempdir");
let report_path = out_dir.path().join("report.json");
let wrong_base_locks = out_dir.path().join("wrong-base-locks.json");
std::fs::write(&wrong_base_locks, b"wrong-base-locks").expect("write wrong base locks");
let tal_path = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.join("tests/fixtures/tal/apnic-rfc7730-https.tal");
let ta_path =
std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/ta/apnic-ta.cer");
let demo_root = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.join("target/live/apnic_delta_demo/20260315-170223-autoplay");
let base_archive = demo_root.join("base-payload-archive");
let delta_archive = demo_root.join("payload-delta-archive");
let delta_locks = demo_root.join("locks-delta.json");
assert!(
base_archive.is_dir(),
"base archive missing: {}",
base_archive.display()
);
assert!(
delta_archive.is_dir(),
"delta archive missing: {}",
delta_archive.display()
);
assert!(
delta_locks.is_file(),
"delta locks missing: {}",
delta_locks.display()
);
let out = Command::new(bin)
.args([
"--db",
db_dir.path().to_string_lossy().as_ref(),
"--tal-path",
tal_path.to_string_lossy().as_ref(),
"--ta-path",
ta_path.to_string_lossy().as_ref(),
"--payload-base-archive",
base_archive.to_string_lossy().as_ref(),
"--payload-base-locks",
wrong_base_locks.to_string_lossy().as_ref(),
"--payload-delta-archive",
delta_archive.to_string_lossy().as_ref(),
"--payload-delta-locks",
delta_locks.to_string_lossy().as_ref(),
"--validation-time",
"2026-03-15T10:00:00Z",
"--max-depth",
"0",
"--max-instances",
"1",
"--report-json",
report_path.to_string_lossy().as_ref(),
])
.output()
.expect("run delta replay cli");
assert_eq!(out.status.code(), Some(2), "status={}", out.status);
let stderr = String::from_utf8_lossy(&out.stderr);
assert!(
stderr.contains("base locks sha256 mismatch")
|| stderr.contains("payload replay setup failed"),
"stderr={stderr}"
);
}