20260609 CIR区分fresh和cached验证输入
This commit is contained in:
@@ -5,10 +5,7 @@ use rpki::ccr::{
|
||||
CcrContentInfo, CcrDigestAlgorithm, RpkiCanonicalCacheRepresentation, TrustAnchorState,
|
||||
encode_content_info,
|
||||
};
|
||||
use rpki::cir::{
|
||||
CIR_VERSION_V3, CanonicalInputRepresentation, CirHashAlgorithm, CirObject, CirTrustAnchor,
|
||||
compute_reject_list_sha256, encode_cir, sha256,
|
||||
};
|
||||
use rpki::cir::{CanonicalInputRepresentation, CirObject, CirTrustAnchor, encode_cir, sha256};
|
||||
|
||||
fn skip_heavy_blackbox_test() -> bool {
|
||||
std::env::var_os("RPKI_SKIP_HEAVY_BLACKBOX_TESTS").is_some()
|
||||
@@ -44,31 +41,28 @@ fn cir_full_and_delta_pair_reuses_shared_repo_bytes_db() {
|
||||
};
|
||||
let trust_anchors = vec![test_trust_anchor()];
|
||||
|
||||
let full_cir = CanonicalInputRepresentation {
|
||||
version: CIR_VERSION_V3,
|
||||
hash_alg: CirHashAlgorithm::Sha256,
|
||||
validation_time: time::OffsetDateTime::parse(
|
||||
let full_cir = CanonicalInputRepresentation::new_v4(
|
||||
time::OffsetDateTime::parse(
|
||||
"2026-03-16T11:49:15Z",
|
||||
&time::format_description::well_known::Rfc3339,
|
||||
)
|
||||
.unwrap(),
|
||||
objects: vec![CirObject {
|
||||
vec![CirObject {
|
||||
rsync_uri: "rsync://example.net/repo/full.roa".to_string(),
|
||||
sha256: hex::decode(&full_obj_hash).unwrap(),
|
||||
}],
|
||||
trust_anchors: trust_anchors.clone(),
|
||||
reject_list_sha256: compute_reject_list_sha256(std::iter::empty::<&str>()),
|
||||
rejected_objects: Vec::new(),
|
||||
};
|
||||
let delta_cir = CanonicalInputRepresentation {
|
||||
version: CIR_VERSION_V3,
|
||||
hash_alg: CirHashAlgorithm::Sha256,
|
||||
validation_time: time::OffsetDateTime::parse(
|
||||
Vec::new(),
|
||||
trust_anchors.clone(),
|
||||
Vec::new(),
|
||||
Vec::new(),
|
||||
);
|
||||
let delta_cir = CanonicalInputRepresentation::new_v4(
|
||||
time::OffsetDateTime::parse(
|
||||
"2026-03-16T11:50:15Z",
|
||||
&time::format_description::well_known::Rfc3339,
|
||||
)
|
||||
.unwrap(),
|
||||
objects: {
|
||||
{
|
||||
let mut objects = vec![
|
||||
CirObject {
|
||||
rsync_uri: "rsync://example.net/repo/full.roa".to_string(),
|
||||
@@ -82,10 +76,11 @@ fn cir_full_and_delta_pair_reuses_shared_repo_bytes_db() {
|
||||
objects.sort_by(|a, b| a.rsync_uri.cmp(&b.rsync_uri));
|
||||
objects
|
||||
},
|
||||
Vec::new(),
|
||||
trust_anchors,
|
||||
reject_list_sha256: compute_reject_list_sha256(std::iter::empty::<&str>()),
|
||||
rejected_objects: Vec::new(),
|
||||
};
|
||||
Vec::new(),
|
||||
Vec::new(),
|
||||
);
|
||||
let empty_ccr = CcrContentInfo::new(RpkiCanonicalCacheRepresentation {
|
||||
version: 0,
|
||||
hash_alg: CcrDigestAlgorithm::Sha256,
|
||||
@@ -214,8 +209,8 @@ fi
|
||||
rpki::cir::decode_cir(&std::fs::read(out.join("delta-001").join("input.cir")).unwrap())
|
||||
.expect("decode delta cir");
|
||||
|
||||
assert!(!full_cir.objects.is_empty());
|
||||
assert!(!delta_cir.objects.is_empty());
|
||||
assert!(full_cir.validated_object_count() > 0);
|
||||
assert!(delta_cir.validated_object_count() > 0);
|
||||
|
||||
let summary: serde_json::Value =
|
||||
serde_json::from_slice(&std::fs::read(out.join("summary.json")).unwrap()).unwrap();
|
||||
|
||||
@@ -6,10 +6,7 @@ use rpki::ccr::{
|
||||
CcrContentInfo, CcrDigestAlgorithm, RpkiCanonicalCacheRepresentation, TrustAnchorState,
|
||||
encode_content_info,
|
||||
};
|
||||
use rpki::cir::{
|
||||
CIR_VERSION_V3, CanonicalInputRepresentation, CirHashAlgorithm, CirObject, CirTrustAnchor,
|
||||
compute_reject_list_sha256, encode_cir, sha256,
|
||||
};
|
||||
use rpki::cir::{CanonicalInputRepresentation, CirObject, CirTrustAnchor, encode_cir, sha256};
|
||||
|
||||
#[test]
|
||||
fn cir_drop_report_counts_dropped_roa_objects_and_vrps() {
|
||||
@@ -33,22 +30,21 @@ fn cir_drop_report_counts_dropped_roa_objects_and_vrps() {
|
||||
.put_blob_bytes_batch(&[(hash.clone(), roa_bytes.clone())])
|
||||
.expect("write repo bytes");
|
||||
|
||||
let cir = CanonicalInputRepresentation {
|
||||
version: CIR_VERSION_V3,
|
||||
hash_alg: CirHashAlgorithm::Sha256,
|
||||
validation_time: time::OffsetDateTime::parse(
|
||||
let cir = CanonicalInputRepresentation::new_v4(
|
||||
time::OffsetDateTime::parse(
|
||||
"2026-04-09T00:00:00Z",
|
||||
&time::format_description::well_known::Rfc3339,
|
||||
)
|
||||
.unwrap(),
|
||||
objects: vec![CirObject {
|
||||
vec![CirObject {
|
||||
rsync_uri: "rsync://example.net/repo/AS4538.roa".to_string(),
|
||||
sha256: hex::decode(&hash).unwrap(),
|
||||
}],
|
||||
trust_anchors: vec![test_trust_anchor()],
|
||||
reject_list_sha256: compute_reject_list_sha256(std::iter::empty::<&str>()),
|
||||
rejected_objects: Vec::new(),
|
||||
};
|
||||
Vec::new(),
|
||||
vec![test_trust_anchor()],
|
||||
Vec::new(),
|
||||
Vec::new(),
|
||||
);
|
||||
std::fs::write(&cir_path, encode_cir(&cir).unwrap()).unwrap();
|
||||
|
||||
let ccr = CcrContentInfo::new(RpkiCanonicalCacheRepresentation {
|
||||
|
||||
@@ -3,8 +3,8 @@ use std::process::Command;
|
||||
|
||||
use rpki::blob_store::ExternalRepoBytesDb;
|
||||
use rpki::cir::{
|
||||
CIR_VERSION_V3, CanonicalInputRepresentation, CirHashAlgorithm, CirTrustAnchor,
|
||||
compute_reject_list_sha256, encode_cir, materialize_cir_from_repo_bytes, sha256,
|
||||
CanonicalInputRepresentation, CirTrustAnchor, encode_cir, materialize_cir_from_repo_bytes,
|
||||
sha256,
|
||||
};
|
||||
|
||||
fn skip_heavy_script_replay_test() -> bool {
|
||||
@@ -31,25 +31,24 @@ fn build_ta_only_cir() -> (CanonicalInputRepresentation, Vec<u8>) {
|
||||
.as_str()
|
||||
.to_string();
|
||||
(
|
||||
CanonicalInputRepresentation {
|
||||
version: CIR_VERSION_V3,
|
||||
hash_alg: CirHashAlgorithm::Sha256,
|
||||
validation_time: time::OffsetDateTime::parse(
|
||||
CanonicalInputRepresentation::new_v4(
|
||||
time::OffsetDateTime::parse(
|
||||
"2026-04-07T00:00:00Z",
|
||||
&time::format_description::well_known::Rfc3339,
|
||||
)
|
||||
.unwrap(),
|
||||
objects: Vec::new(),
|
||||
trust_anchors: vec![CirTrustAnchor {
|
||||
Vec::new(),
|
||||
Vec::new(),
|
||||
vec![CirTrustAnchor {
|
||||
ta_rsync_uri,
|
||||
tal_uri: "https://example.test/root.tal".to_string(),
|
||||
tal_bytes,
|
||||
ta_certificate_sha256: sha256(&ta_bytes),
|
||||
ta_certificate_der: ta_bytes.clone(),
|
||||
}],
|
||||
reject_list_sha256: compute_reject_list_sha256(std::iter::empty::<&str>()),
|
||||
rejected_objects: Vec::new(),
|
||||
},
|
||||
Vec::new(),
|
||||
Vec::new(),
|
||||
),
|
||||
ta_bytes,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@ use std::process::Command;
|
||||
|
||||
use rpki::blob_store::ExternalRepoBytesDb;
|
||||
use rpki::cir::{
|
||||
CIR_VERSION_V3, CanonicalInputRepresentation, CirHashAlgorithm, CirTrustAnchor,
|
||||
compute_reject_list_sha256, encode_cir, materialize_cir_from_repo_bytes, sha256,
|
||||
CanonicalInputRepresentation, CirTrustAnchor, encode_cir, materialize_cir_from_repo_bytes,
|
||||
sha256,
|
||||
};
|
||||
|
||||
fn skip_heavy_script_replay_test() -> bool {
|
||||
@@ -31,25 +31,24 @@ fn build_ta_only_cir() -> (CanonicalInputRepresentation, Vec<u8>) {
|
||||
.as_str()
|
||||
.to_string();
|
||||
(
|
||||
CanonicalInputRepresentation {
|
||||
version: CIR_VERSION_V3,
|
||||
hash_alg: CirHashAlgorithm::Sha256,
|
||||
validation_time: time::OffsetDateTime::parse(
|
||||
CanonicalInputRepresentation::new_v4(
|
||||
time::OffsetDateTime::parse(
|
||||
"2026-04-07T00:00:00Z",
|
||||
&time::format_description::well_known::Rfc3339,
|
||||
)
|
||||
.unwrap(),
|
||||
objects: Vec::new(),
|
||||
trust_anchors: vec![CirTrustAnchor {
|
||||
Vec::new(),
|
||||
Vec::new(),
|
||||
vec![CirTrustAnchor {
|
||||
ta_rsync_uri,
|
||||
tal_uri: "https://example.test/root.tal".to_string(),
|
||||
tal_bytes,
|
||||
ta_certificate_sha256: sha256(&ta_bytes),
|
||||
ta_certificate_der: ta_bytes.clone(),
|
||||
}],
|
||||
reject_list_sha256: compute_reject_list_sha256(std::iter::empty::<&str>()),
|
||||
rejected_objects: Vec::new(),
|
||||
},
|
||||
Vec::new(),
|
||||
Vec::new(),
|
||||
),
|
||||
ta_bytes,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -5,10 +5,7 @@ use rpki::ccr::{
|
||||
CcrContentInfo, CcrDigestAlgorithm, RpkiCanonicalCacheRepresentation, TrustAnchorState,
|
||||
encode_content_info,
|
||||
};
|
||||
use rpki::cir::{
|
||||
CIR_VERSION_V3, CanonicalInputRepresentation, CirHashAlgorithm, CirObject, CirTrustAnchor,
|
||||
compute_reject_list_sha256, encode_cir, sha256,
|
||||
};
|
||||
use rpki::cir::{CanonicalInputRepresentation, CirObject, CirTrustAnchor, encode_cir, sha256};
|
||||
|
||||
fn skip_heavy_blackbox_test() -> bool {
|
||||
std::env::var_os("RPKI_SKIP_HEAVY_BLACKBOX_TESTS").is_some()
|
||||
@@ -35,21 +32,19 @@ fn cir_offline_sequence_writes_parseable_sequence_json_and_steps() {
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let mk_cir = |uri: &str, hash_hex: &str, vt: &str| CanonicalInputRepresentation {
|
||||
version: CIR_VERSION_V3,
|
||||
hash_alg: CirHashAlgorithm::Sha256,
|
||||
validation_time: time::OffsetDateTime::parse(
|
||||
vt,
|
||||
&time::format_description::well_known::Rfc3339,
|
||||
let mk_cir = |uri: &str, hash_hex: &str, vt: &str| {
|
||||
CanonicalInputRepresentation::new_v4(
|
||||
time::OffsetDateTime::parse(vt, &time::format_description::well_known::Rfc3339)
|
||||
.unwrap(),
|
||||
vec![CirObject {
|
||||
rsync_uri: uri.to_string(),
|
||||
sha256: hex::decode(hash_hex).unwrap(),
|
||||
}],
|
||||
Vec::new(),
|
||||
vec![test_trust_anchor()],
|
||||
Vec::new(),
|
||||
Vec::new(),
|
||||
)
|
||||
.unwrap(),
|
||||
objects: vec![CirObject {
|
||||
rsync_uri: uri.to_string(),
|
||||
sha256: hex::decode(hash_hex).unwrap(),
|
||||
}],
|
||||
trust_anchors: vec![test_trust_anchor()],
|
||||
reject_list_sha256: compute_reject_list_sha256(std::iter::empty::<&str>()),
|
||||
rejected_objects: Vec::new(),
|
||||
};
|
||||
let full_hash = {
|
||||
use sha2::{Digest, Sha256};
|
||||
@@ -64,17 +59,15 @@ fn cir_offline_sequence_writes_parseable_sequence_json_and_steps() {
|
||||
&full_hash,
|
||||
"2026-03-16T11:49:15Z",
|
||||
);
|
||||
let delta_cir = CanonicalInputRepresentation {
|
||||
version: CIR_VERSION_V3,
|
||||
hash_alg: CirHashAlgorithm::Sha256,
|
||||
validation_time: time::OffsetDateTime::parse(
|
||||
let delta_cir = CanonicalInputRepresentation::new_v4(
|
||||
time::OffsetDateTime::parse(
|
||||
"2026-03-16T11:50:15Z",
|
||||
&time::format_description::well_known::Rfc3339,
|
||||
)
|
||||
.unwrap(),
|
||||
objects: {
|
||||
{
|
||||
let mut objects = vec![
|
||||
full_cir.objects[0].clone(),
|
||||
full_cir.fresh_validated_objects[0].clone(),
|
||||
CirObject {
|
||||
rsync_uri: "rsync://example.net/repo/delta.roa".to_string(),
|
||||
sha256: hex::decode(&delta_hash).unwrap(),
|
||||
@@ -83,10 +76,11 @@ fn cir_offline_sequence_writes_parseable_sequence_json_and_steps() {
|
||||
objects.sort_by(|a, b| a.rsync_uri.cmp(&b.rsync_uri));
|
||||
objects
|
||||
},
|
||||
trust_anchors: full_cir.trust_anchors.clone(),
|
||||
reject_list_sha256: compute_reject_list_sha256(std::iter::empty::<&str>()),
|
||||
rejected_objects: Vec::new(),
|
||||
};
|
||||
Vec::new(),
|
||||
full_cir.trust_anchors.clone(),
|
||||
Vec::new(),
|
||||
Vec::new(),
|
||||
);
|
||||
let empty_ccr = CcrContentInfo::new(RpkiCanonicalCacheRepresentation {
|
||||
version: 0,
|
||||
hash_alg: CcrDigestAlgorithm::Sha256,
|
||||
|
||||
@@ -3,8 +3,8 @@ use std::process::Command;
|
||||
|
||||
use rpki::blob_store::ExternalRepoBytesDb;
|
||||
use rpki::cir::{
|
||||
CIR_VERSION_V3, CanonicalInputRepresentation, CirHashAlgorithm, CirTrustAnchor,
|
||||
compute_reject_list_sha256, encode_cir, materialize_cir_from_repo_bytes, sha256,
|
||||
CanonicalInputRepresentation, CirTrustAnchor, encode_cir, materialize_cir_from_repo_bytes,
|
||||
sha256,
|
||||
};
|
||||
|
||||
fn skip_heavy_script_replay_test() -> bool {
|
||||
@@ -31,25 +31,24 @@ fn build_ta_only_cir() -> (CanonicalInputRepresentation, Vec<u8>) {
|
||||
.as_str()
|
||||
.to_string();
|
||||
(
|
||||
CanonicalInputRepresentation {
|
||||
version: CIR_VERSION_V3,
|
||||
hash_alg: CirHashAlgorithm::Sha256,
|
||||
validation_time: time::OffsetDateTime::parse(
|
||||
CanonicalInputRepresentation::new_v4(
|
||||
time::OffsetDateTime::parse(
|
||||
"2026-04-07T00:00:00Z",
|
||||
&time::format_description::well_known::Rfc3339,
|
||||
)
|
||||
.unwrap(),
|
||||
objects: Vec::new(),
|
||||
trust_anchors: vec![CirTrustAnchor {
|
||||
Vec::new(),
|
||||
Vec::new(),
|
||||
vec![CirTrustAnchor {
|
||||
ta_rsync_uri,
|
||||
tal_uri: "https://example.test/root.tal".to_string(),
|
||||
tal_bytes,
|
||||
ta_certificate_sha256: sha256(&ta_bytes),
|
||||
ta_certificate_der: ta_bytes.clone(),
|
||||
}],
|
||||
reject_list_sha256: compute_reject_list_sha256(std::iter::empty::<&str>()),
|
||||
rejected_objects: Vec::new(),
|
||||
},
|
||||
Vec::new(),
|
||||
Vec::new(),
|
||||
),
|
||||
ta_bytes,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@ use std::process::Command;
|
||||
|
||||
use rpki::blob_store::ExternalRepoBytesDb;
|
||||
use rpki::cir::{
|
||||
CIR_VERSION_V3, CanonicalInputRepresentation, CirHashAlgorithm, CirTrustAnchor,
|
||||
compute_reject_list_sha256, encode_cir, materialize_cir_from_repo_bytes, sha256,
|
||||
CanonicalInputRepresentation, CirTrustAnchor, encode_cir, materialize_cir_from_repo_bytes,
|
||||
sha256,
|
||||
};
|
||||
|
||||
fn skip_heavy_script_replay_test() -> bool {
|
||||
@@ -31,25 +31,24 @@ fn build_ta_only_cir() -> (CanonicalInputRepresentation, Vec<u8>) {
|
||||
.as_str()
|
||||
.to_string();
|
||||
(
|
||||
CanonicalInputRepresentation {
|
||||
version: CIR_VERSION_V3,
|
||||
hash_alg: CirHashAlgorithm::Sha256,
|
||||
validation_time: time::OffsetDateTime::parse(
|
||||
CanonicalInputRepresentation::new_v4(
|
||||
time::OffsetDateTime::parse(
|
||||
"2026-04-07T00:00:00Z",
|
||||
&time::format_description::well_known::Rfc3339,
|
||||
)
|
||||
.unwrap(),
|
||||
objects: Vec::new(),
|
||||
trust_anchors: vec![CirTrustAnchor {
|
||||
Vec::new(),
|
||||
Vec::new(),
|
||||
vec![CirTrustAnchor {
|
||||
ta_rsync_uri,
|
||||
tal_uri: "https://example.test/root.tal".to_string(),
|
||||
tal_bytes,
|
||||
ta_certificate_sha256: sha256(&ta_bytes),
|
||||
ta_certificate_der: ta_bytes.clone(),
|
||||
}],
|
||||
reject_list_sha256: compute_reject_list_sha256(std::iter::empty::<&str>()),
|
||||
rejected_objects: Vec::new(),
|
||||
},
|
||||
Vec::new(),
|
||||
Vec::new(),
|
||||
),
|
||||
ta_bytes,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -134,8 +134,7 @@ fn cli_run_offline_mode_writes_cir_and_static_pool() {
|
||||
);
|
||||
assert!(!cir.trust_anchors[0].ta_certificate_der.is_empty());
|
||||
assert!(
|
||||
!cir.objects
|
||||
.iter()
|
||||
!cir.validated_objects()
|
||||
.any(|item| item.rsync_uri == cir.trust_anchors[0].ta_rsync_uri)
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user