20260147 迭代优化全量测试和覆盖率测试,时间从325秒降低到90+秒,覆盖率维持在90%
This commit is contained in:
@@ -11,6 +11,10 @@ fn openssl_available() -> bool {
|
||||
.unwrap_or(false)
|
||||
}
|
||||
|
||||
fn skip_heavy_crypto_test() -> bool {
|
||||
std::env::var_os("RPKI_SKIP_HEAVY_CRYPTO_TESTS").is_some()
|
||||
}
|
||||
|
||||
struct Generated {
|
||||
issuer_ca_der: Vec<u8>,
|
||||
child_ca_der: Vec<u8>,
|
||||
@@ -212,6 +216,9 @@ authorityKeyIdentifier = keyid:always
|
||||
|
||||
#[test]
|
||||
fn validate_subordinate_ca_succeeds_for_valid_child_and_subset_resources() {
|
||||
if skip_heavy_crypto_test() {
|
||||
return;
|
||||
}
|
||||
let generated = generate_chain_and_crl(
|
||||
"keyUsage = critical, keyCertSign, cRLSign\nsbgp-ipAddrBlock = critical, IPv4:10.0.0.0/16\nsbgp-autonomousSysNum = critical, AS:64496\n",
|
||||
false,
|
||||
@@ -238,6 +245,9 @@ fn validate_subordinate_ca_succeeds_for_valid_child_and_subset_resources() {
|
||||
|
||||
#[test]
|
||||
fn validate_subordinate_ca_rejects_wrong_key_usage_bits() {
|
||||
if skip_heavy_crypto_test() {
|
||||
return;
|
||||
}
|
||||
let generated = generate_chain_and_crl(
|
||||
"keyUsage = critical, digitalSignature\nsbgp-ipAddrBlock = critical, IPv4:10.0.0.0/16\n",
|
||||
false,
|
||||
|
||||
@@ -12,6 +12,10 @@ fn openssl_available() -> bool {
|
||||
.unwrap_or(false)
|
||||
}
|
||||
|
||||
fn skip_heavy_crypto_test() -> bool {
|
||||
std::env::var_os("RPKI_SKIP_HEAVY_CRYPTO_TESTS").is_some()
|
||||
}
|
||||
|
||||
fn run(cmd: &mut Command) {
|
||||
let out = cmd.output().expect("run command");
|
||||
if !out.status.success() {
|
||||
@@ -185,6 +189,9 @@ authorityKeyIdentifier = keyid:always
|
||||
|
||||
#[test]
|
||||
fn ee_key_usage_digital_signature_only_is_accepted() {
|
||||
if skip_heavy_crypto_test() {
|
||||
return;
|
||||
}
|
||||
let g = generate_issuer_ca_ee_and_crl("keyUsage = critical, digitalSignature\n");
|
||||
let now = time::OffsetDateTime::now_utc();
|
||||
validate_ee_cert_path(
|
||||
@@ -200,6 +207,9 @@ fn ee_key_usage_digital_signature_only_is_accepted() {
|
||||
|
||||
#[test]
|
||||
fn ee_key_usage_missing_is_rejected() {
|
||||
if skip_heavy_crypto_test() {
|
||||
return;
|
||||
}
|
||||
let g = generate_issuer_ca_ee_and_crl("");
|
||||
let now = time::OffsetDateTime::now_utc();
|
||||
let err = validate_ee_cert_path(
|
||||
@@ -216,6 +226,9 @@ fn ee_key_usage_missing_is_rejected() {
|
||||
|
||||
#[test]
|
||||
fn ee_key_usage_not_critical_is_rejected() {
|
||||
if skip_heavy_crypto_test() {
|
||||
return;
|
||||
}
|
||||
let g = generate_issuer_ca_ee_and_crl("keyUsage = digitalSignature\n");
|
||||
let now = time::OffsetDateTime::now_utc();
|
||||
let err = validate_ee_cert_path(
|
||||
@@ -232,6 +245,9 @@ fn ee_key_usage_not_critical_is_rejected() {
|
||||
|
||||
#[test]
|
||||
fn ee_key_usage_wrong_bits_is_rejected() {
|
||||
if skip_heavy_crypto_test() {
|
||||
return;
|
||||
}
|
||||
let g =
|
||||
generate_issuer_ca_ee_and_crl("keyUsage = critical, digitalSignature, keyEncipherment\n");
|
||||
let now = time::OffsetDateTime::now_utc();
|
||||
@@ -249,6 +265,9 @@ fn ee_key_usage_wrong_bits_is_rejected() {
|
||||
|
||||
#[test]
|
||||
fn validate_ee_cert_path_with_prevalidated_issuer_covers_success_and_error_paths() {
|
||||
if skip_heavy_crypto_test() {
|
||||
return;
|
||||
}
|
||||
use rpki::data_model::common::BigUnsigned;
|
||||
use rpki::data_model::crl::RpkixCrl;
|
||||
use rpki::data_model::rc::ResourceCertificate;
|
||||
|
||||
@@ -10,8 +10,15 @@ use rpki::cir::{
|
||||
CIR_VERSION_V1, CanonicalInputRepresentation, CirHashAlgorithm, CirObject, CirTal, encode_cir,
|
||||
};
|
||||
|
||||
fn skip_heavy_blackbox_test() -> bool {
|
||||
std::env::var_os("RPKI_SKIP_HEAVY_BLACKBOX_TESTS").is_some()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn cir_full_and_delta_pair_reuses_shared_static_pool() {
|
||||
if skip_heavy_blackbox_test() {
|
||||
return;
|
||||
}
|
||||
let script =
|
||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("scripts/cir/run_cir_record_full_delta.sh");
|
||||
let out_dir = tempfile::tempdir().expect("tempdir");
|
||||
|
||||
@@ -6,6 +6,10 @@ use rpki::cir::{
|
||||
materialize_cir,
|
||||
};
|
||||
|
||||
fn skip_heavy_script_replay_test() -> bool {
|
||||
std::env::var_os("RPKI_SKIP_HEAVY_SCRIPT_REPLAY_TESTS").is_some()
|
||||
}
|
||||
|
||||
fn apnic_tal_path() -> PathBuf {
|
||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/tal/apnic-rfc7730-https.tal")
|
||||
}
|
||||
@@ -105,6 +109,9 @@ fn prepare_reference_ccr(
|
||||
|
||||
#[test]
|
||||
fn cir_replay_matrix_script_matches_reference_for_all_participants() {
|
||||
if skip_heavy_script_replay_test() {
|
||||
return;
|
||||
}
|
||||
if !Path::new("/usr/bin/rsync").exists()
|
||||
|| !Path::new("/home/yuyr/dev/rust_playground/routinator/target/debug/routinator").exists()
|
||||
|| !Path::new("/home/yuyr/dev/rpki-client-9.7/build-m5/src/rpki-client").exists()
|
||||
@@ -127,6 +134,12 @@ fn cir_replay_matrix_script_matches_reference_for_all_participants() {
|
||||
let script =
|
||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("scripts/cir/run_cir_replay_matrix.sh");
|
||||
let out = Command::new(script)
|
||||
.env("CIR_MATERIALIZE_BIN", env!("CARGO_BIN_EXE_cir_materialize"))
|
||||
.env("CIR_EXTRACT_INPUTS_BIN", env!("CARGO_BIN_EXE_cir_extract_inputs"))
|
||||
.env(
|
||||
"CCR_TO_COMPARE_VIEWS_BIN",
|
||||
env!("CARGO_BIN_EXE_ccr_to_compare_views"),
|
||||
)
|
||||
.args([
|
||||
"--cir",
|
||||
cir_path.to_string_lossy().as_ref(),
|
||||
|
||||
@@ -6,6 +6,10 @@ use rpki::cir::{
|
||||
materialize_cir,
|
||||
};
|
||||
|
||||
fn skip_heavy_script_replay_test() -> bool {
|
||||
std::env::var_os("RPKI_SKIP_HEAVY_SCRIPT_REPLAY_TESTS").is_some()
|
||||
}
|
||||
|
||||
fn apnic_tal_path() -> PathBuf {
|
||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/tal/apnic-rfc7730-https.tal")
|
||||
}
|
||||
@@ -105,6 +109,9 @@ fn prepare_reference_ccr(
|
||||
|
||||
#[test]
|
||||
fn cir_routinator_script_matches_reference_on_ta_only_cir() {
|
||||
if skip_heavy_script_replay_test() {
|
||||
return;
|
||||
}
|
||||
if !Path::new("/usr/bin/rsync").exists()
|
||||
|| !Path::new("/home/yuyr/dev/rust_playground/routinator/target/debug/routinator").exists()
|
||||
{
|
||||
@@ -125,6 +132,12 @@ fn cir_routinator_script_matches_reference_on_ta_only_cir() {
|
||||
let script =
|
||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("scripts/cir/run_cir_replay_routinator.sh");
|
||||
let out = Command::new(script)
|
||||
.env("CIR_MATERIALIZE_BIN", env!("CARGO_BIN_EXE_cir_materialize"))
|
||||
.env("CIR_EXTRACT_INPUTS_BIN", env!("CARGO_BIN_EXE_cir_extract_inputs"))
|
||||
.env(
|
||||
"CCR_TO_COMPARE_VIEWS_BIN",
|
||||
env!("CARGO_BIN_EXE_ccr_to_compare_views"),
|
||||
)
|
||||
.args([
|
||||
"--cir",
|
||||
cir_path.to_string_lossy().as_ref(),
|
||||
@@ -152,6 +165,9 @@ fn cir_routinator_script_matches_reference_on_ta_only_cir() {
|
||||
|
||||
#[test]
|
||||
fn cir_rpki_client_script_matches_reference_on_ta_only_cir() {
|
||||
if skip_heavy_script_replay_test() {
|
||||
return;
|
||||
}
|
||||
if !Path::new("/usr/bin/rsync").exists()
|
||||
|| !Path::new("/home/yuyr/dev/rpki-client-9.7/build-m5/src/rpki-client").exists()
|
||||
{
|
||||
@@ -172,6 +188,12 @@ fn cir_rpki_client_script_matches_reference_on_ta_only_cir() {
|
||||
let script =
|
||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("scripts/cir/run_cir_replay_rpki_client.sh");
|
||||
let out = Command::new(script)
|
||||
.env("CIR_MATERIALIZE_BIN", env!("CARGO_BIN_EXE_cir_materialize"))
|
||||
.env("CIR_EXTRACT_INPUTS_BIN", env!("CARGO_BIN_EXE_cir_extract_inputs"))
|
||||
.env(
|
||||
"CCR_TO_COMPARE_VIEWS_BIN",
|
||||
env!("CARGO_BIN_EXE_ccr_to_compare_views"),
|
||||
)
|
||||
.args([
|
||||
"--cir",
|
||||
cir_path.to_string_lossy().as_ref(),
|
||||
|
||||
@@ -9,8 +9,15 @@ use rpki::cir::{
|
||||
CIR_VERSION_V1, CanonicalInputRepresentation, CirHashAlgorithm, CirObject, CirTal, encode_cir,
|
||||
};
|
||||
|
||||
fn skip_heavy_blackbox_test() -> bool {
|
||||
std::env::var_os("RPKI_SKIP_HEAVY_BLACKBOX_TESTS").is_some()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn cir_offline_sequence_writes_parseable_sequence_json_and_steps() {
|
||||
if skip_heavy_blackbox_test() {
|
||||
return;
|
||||
}
|
||||
let out_dir = tempfile::tempdir().expect("tempdir");
|
||||
let out = out_dir.path().join("cir-sequence");
|
||||
let script = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
||||
|
||||
@@ -6,6 +6,10 @@ use rpki::cir::{
|
||||
materialize_cir,
|
||||
};
|
||||
|
||||
fn skip_heavy_script_replay_test() -> bool {
|
||||
std::env::var_os("RPKI_SKIP_HEAVY_SCRIPT_REPLAY_TESTS").is_some()
|
||||
}
|
||||
|
||||
fn apnic_tal_path() -> PathBuf {
|
||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/tal/apnic-rfc7730-https.tal")
|
||||
}
|
||||
@@ -161,6 +165,9 @@ fn prepare_sequence_root(td: &Path) -> PathBuf {
|
||||
|
||||
#[test]
|
||||
fn peer_sequence_replay_scripts_replay_all_steps() {
|
||||
if skip_heavy_script_replay_test() {
|
||||
return;
|
||||
}
|
||||
if !Path::new("/usr/bin/rsync").exists()
|
||||
|| !Path::new("/home/yuyr/dev/rust_playground/routinator/target/debug/routinator").exists()
|
||||
|| !Path::new("/home/yuyr/dev/rpki-client-9.7/build-m5/src/rpki-client").exists()
|
||||
@@ -174,6 +181,12 @@ fn peer_sequence_replay_scripts_replay_all_steps() {
|
||||
let routinator_script = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
||||
.join("scripts/cir/run_cir_replay_sequence_routinator.sh");
|
||||
let out = Command::new(routinator_script)
|
||||
.env("CIR_MATERIALIZE_BIN", env!("CARGO_BIN_EXE_cir_materialize"))
|
||||
.env("CIR_EXTRACT_INPUTS_BIN", env!("CARGO_BIN_EXE_cir_extract_inputs"))
|
||||
.env(
|
||||
"CCR_TO_COMPARE_VIEWS_BIN",
|
||||
env!("CARGO_BIN_EXE_ccr_to_compare_views"),
|
||||
)
|
||||
.args(["--sequence-root", sequence_root.to_string_lossy().as_ref()])
|
||||
.output()
|
||||
.expect("run routinator sequence replay");
|
||||
@@ -192,6 +205,12 @@ fn peer_sequence_replay_scripts_replay_all_steps() {
|
||||
let rpki_client_script = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
||||
.join("scripts/cir/run_cir_replay_sequence_rpki_client.sh");
|
||||
let out = Command::new(rpki_client_script)
|
||||
.env("CIR_MATERIALIZE_BIN", env!("CARGO_BIN_EXE_cir_materialize"))
|
||||
.env("CIR_EXTRACT_INPUTS_BIN", env!("CARGO_BIN_EXE_cir_extract_inputs"))
|
||||
.env(
|
||||
"CCR_TO_COMPARE_VIEWS_BIN",
|
||||
env!("CARGO_BIN_EXE_ccr_to_compare_views"),
|
||||
)
|
||||
.args([
|
||||
"--sequence-root",
|
||||
sequence_root.to_string_lossy().as_ref(),
|
||||
|
||||
@@ -6,6 +6,10 @@ use rpki::cir::{
|
||||
materialize_cir,
|
||||
};
|
||||
|
||||
fn skip_heavy_script_replay_test() -> bool {
|
||||
std::env::var_os("RPKI_SKIP_HEAVY_SCRIPT_REPLAY_TESTS").is_some()
|
||||
}
|
||||
|
||||
fn apnic_tal_path() -> PathBuf {
|
||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/tal/apnic-rfc7730-https.tal")
|
||||
}
|
||||
@@ -106,6 +110,9 @@ fn prepare_reference_ccr(
|
||||
|
||||
#[test]
|
||||
fn ours_sequence_replay_script_replays_all_steps() {
|
||||
if skip_heavy_script_replay_test() {
|
||||
return;
|
||||
}
|
||||
if !Path::new("/usr/bin/rsync").exists() {
|
||||
return;
|
||||
}
|
||||
@@ -166,6 +173,12 @@ fn ours_sequence_replay_script_replays_all_steps() {
|
||||
let script = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
||||
.join("scripts/cir/run_cir_replay_sequence_ours.sh");
|
||||
let out = Command::new(script)
|
||||
.env("CIR_MATERIALIZE_BIN", env!("CARGO_BIN_EXE_cir_materialize"))
|
||||
.env("CIR_EXTRACT_INPUTS_BIN", env!("CARGO_BIN_EXE_cir_extract_inputs"))
|
||||
.env(
|
||||
"CCR_TO_COMPARE_VIEWS_BIN",
|
||||
env!("CARGO_BIN_EXE_ccr_to_compare_views"),
|
||||
)
|
||||
.args([
|
||||
"--sequence-root",
|
||||
sequence_root.to_string_lossy().as_ref(),
|
||||
|
||||
@@ -1,7 +1,14 @@
|
||||
use std::process::Command;
|
||||
|
||||
fn skip_heavy_blackbox_test() -> bool {
|
||||
std::env::var_os("RPKI_SKIP_HEAVY_BLACKBOX_TESTS").is_some()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn cli_payload_delta_replay_rejects_wrong_base_locks() {
|
||||
if skip_heavy_blackbox_test() {
|
||||
return;
|
||||
}
|
||||
let bin = env!("CARGO_BIN_EXE_rpki");
|
||||
let db_dir = tempfile::tempdir().expect("db tempdir");
|
||||
let out_dir = tempfile::tempdir().expect("out tempdir");
|
||||
|
||||
@@ -1,7 +1,14 @@
|
||||
use std::process::Command;
|
||||
|
||||
fn skip_heavy_blackbox_test() -> bool {
|
||||
std::env::var_os("RPKI_SKIP_HEAVY_BLACKBOX_TESTS").is_some()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn cli_payload_replay_root_only_smoke_writes_report_json() {
|
||||
if skip_heavy_blackbox_test() {
|
||||
return;
|
||||
}
|
||||
let bin = env!("CARGO_BIN_EXE_rpki");
|
||||
let db_dir = tempfile::tempdir().expect("db tempdir");
|
||||
let out_dir = tempfile::tempdir().expect("out tempdir");
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
use std::process::Command;
|
||||
|
||||
fn skip_heavy_blackbox_test() -> bool {
|
||||
std::env::var_os("RPKI_SKIP_HEAVY_BLACKBOX_TESTS").is_some()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn cli_run_offline_mode_executes_and_writes_json_and_ccr() {
|
||||
let db_dir = tempfile::tempdir().expect("db tempdir");
|
||||
@@ -134,6 +138,9 @@ fn cli_run_offline_mode_writes_cir_and_static_pool() {
|
||||
|
||||
#[test]
|
||||
fn cli_run_blackbox_rsync_wrapper_mode_matches_reference_ccr_without_ta_path() {
|
||||
if skip_heavy_blackbox_test() {
|
||||
return;
|
||||
}
|
||||
let real_rsync = std::path::Path::new("/usr/bin/rsync");
|
||||
if !real_rsync.exists() {
|
||||
return;
|
||||
|
||||
@@ -14,6 +14,10 @@ fn openssl_available() -> bool {
|
||||
.unwrap_or(false)
|
||||
}
|
||||
|
||||
fn skip_heavy_crypto_test() -> bool {
|
||||
std::env::var_os("RPKI_SKIP_HEAVY_CRYPTO_TESTS").is_some()
|
||||
}
|
||||
|
||||
fn run(cmd: &mut Command) {
|
||||
let out = cmd.output().expect("run command");
|
||||
if !out.status.success() {
|
||||
@@ -258,6 +262,9 @@ authorityKeyIdentifier = keyid:always
|
||||
|
||||
#[test]
|
||||
fn decode_bgpsec_router_certificate_fixture_smoke() {
|
||||
if skip_heavy_crypto_test() {
|
||||
return;
|
||||
}
|
||||
let g = generate_router_cert_with_variant("ec-p256", true, "");
|
||||
let cert = BgpsecRouterCertificate::decode_der(&g.router_der).expect("decode router cert");
|
||||
assert_eq!(cert.resource_cert.kind, ResourceCertKind::Ee);
|
||||
@@ -268,6 +275,9 @@ fn decode_bgpsec_router_certificate_fixture_smoke() {
|
||||
|
||||
#[test]
|
||||
fn router_certificate_profile_rejects_missing_eku() {
|
||||
if skip_heavy_crypto_test() {
|
||||
return;
|
||||
}
|
||||
let g = generate_router_cert_with_variant("ec-p256", false, "");
|
||||
let err = BgpsecRouterCertificate::decode_der(&g.router_der).unwrap_err();
|
||||
assert!(
|
||||
@@ -284,6 +294,9 @@ fn router_certificate_profile_rejects_missing_eku() {
|
||||
|
||||
#[test]
|
||||
fn router_certificate_profile_rejects_sia_and_ip_resources_and_ranges() {
|
||||
if skip_heavy_crypto_test() {
|
||||
return;
|
||||
}
|
||||
let g = generate_router_cert_with_variant(
|
||||
"ec-p256",
|
||||
true,
|
||||
@@ -335,6 +348,9 @@ fn router_certificate_profile_rejects_sia_and_ip_resources_and_ranges() {
|
||||
|
||||
#[test]
|
||||
fn router_certificate_profile_rejects_wrong_spki_algorithm_or_curve() {
|
||||
if skip_heavy_crypto_test() {
|
||||
return;
|
||||
}
|
||||
let g = generate_router_cert_with_variant("rsa", true, "");
|
||||
let err = BgpsecRouterCertificate::decode_der(&g.router_der).unwrap_err();
|
||||
assert!(
|
||||
@@ -363,6 +379,9 @@ fn router_certificate_profile_rejects_wrong_spki_algorithm_or_curve() {
|
||||
|
||||
#[test]
|
||||
fn router_certificate_path_validation_accepts_valid_and_rejects_wrong_issuer() {
|
||||
if skip_heavy_crypto_test() {
|
||||
return;
|
||||
}
|
||||
use rpki::data_model::common::BigUnsigned;
|
||||
use rpki::data_model::crl::RpkixCrl;
|
||||
use std::collections::HashSet;
|
||||
|
||||
Reference in New Issue
Block a user