20260607 完成transport预热、roa cache和finalize长尾优化
This commit is contained in:
@@ -3034,6 +3034,85 @@ fn parse_snapshot_time_value_reports_invalid_timestamp() {
|
||||
assert!(err.contains("invalid RFC3339 time 'not-a-time'"), "{err}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn runner_roa_validation_cache_uses_projection_not_full_vcir_fallback() {
|
||||
let now = time::OffsetDateTime::now_utc();
|
||||
let child_cert_hash = sha256_hex(b"child-cert");
|
||||
let mut vcir = sample_vcir_for_projection(now, &child_cert_hash);
|
||||
vcir.local_outputs
|
||||
.retain(|output| output.source_object_type != VcirSourceObjectType::Roa);
|
||||
vcir.summary.local_vrp_count = 0;
|
||||
vcir.summary.local_aspa_count = 1;
|
||||
vcir.summary.local_router_key_count = 1;
|
||||
|
||||
let store_dir = tempfile::tempdir().expect("store dir");
|
||||
let store = RocksStore::open(store_dir.path()).expect("open rocksdb");
|
||||
store.put_vcir(&vcir).expect("put vcir without projection");
|
||||
assert!(
|
||||
store
|
||||
.get_vcir(&vcir.manifest_rsync_uri)
|
||||
.expect("get vcir")
|
||||
.is_some()
|
||||
);
|
||||
assert!(
|
||||
store
|
||||
.get_roa_cache_projection(&vcir.manifest_rsync_uri)
|
||||
.expect("get projection")
|
||||
.is_none()
|
||||
);
|
||||
|
||||
let timing = crate::analysis::timing::TimingHandle::new(crate::analysis::timing::TimingMeta {
|
||||
recorded_at_utc_rfc3339: "2026-06-07T00:00:00Z".to_string(),
|
||||
validation_time_utc_rfc3339: "2026-06-07T00:00:00Z".to_string(),
|
||||
tal_url: None,
|
||||
db_path: None,
|
||||
});
|
||||
let policy = Policy::default();
|
||||
let runner = Rpkiv1PublicationPointRunner {
|
||||
store: &store,
|
||||
policy: &policy,
|
||||
http_fetcher: &NeverHttpFetcher,
|
||||
rsync_fetcher: &FailingRsyncFetcher,
|
||||
validation_time: now,
|
||||
timing: Some(timing.clone()),
|
||||
download_log: None,
|
||||
replay_archive_index: None,
|
||||
replay_delta_index: None,
|
||||
rrdp_dedup: false,
|
||||
rrdp_repo_cache: Mutex::new(HashMap::new()),
|
||||
rsync_dedup: false,
|
||||
rsync_repo_cache: Mutex::new(HashMap::new()),
|
||||
current_repo_index: None,
|
||||
repo_sync_runtime: None,
|
||||
parallel_phase2_config: None,
|
||||
parallel_roa_worker_pool: None,
|
||||
ccr_accumulator: None,
|
||||
persist_vcir: true,
|
||||
enable_roa_validation_cache: true,
|
||||
};
|
||||
|
||||
assert!(
|
||||
runner
|
||||
.roa_validation_cache_view_for_fresh_point(&vcir.manifest_rsync_uri)
|
||||
.is_none()
|
||||
);
|
||||
let dir = tempfile::tempdir().expect("timing dir");
|
||||
let path = dir.path().join("timing.json");
|
||||
timing.write_json(&path, 10).expect("write timing");
|
||||
let report: serde_json::Value =
|
||||
serde_json::from_slice(&std::fs::read(path).expect("read timing")).expect("parse timing");
|
||||
assert_eq!(
|
||||
report["counts"]["roa_validation_cache_projection_missing_publication_points"],
|
||||
1
|
||||
);
|
||||
assert!(
|
||||
report["phases"]["roa_validation_cache_projection_load_total"]["count"]
|
||||
.as_u64()
|
||||
.unwrap_or_default()
|
||||
>= 1
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn build_objects_output_from_vcir_tracks_expired_and_invalid_cached_outputs() {
|
||||
let now = time::OffsetDateTime::now_utc();
|
||||
|
||||
Reference in New Issue
Block a user