20260147 迭代优化全量测试和覆盖率测试,时间从325秒降低到90+秒,覆盖率维持在90%
This commit is contained in:
parent
224ae10052
commit
f485786470
35
README.md
35
README.md
@ -26,3 +26,38 @@ cargo install cargo-llvm-cov --locked
|
|||||||
cargo llvm-cov --fail-under-lines 90
|
cargo llvm-cov --fail-under-lines 90
|
||||||
```
|
```
|
||||||
|
|
||||||
|
默认会复用现有插桩产物,不会先 clean。需要强制全量重编译时:
|
||||||
|
|
||||||
|
```
|
||||||
|
COVERAGE_FORCE_CLEAN=1 ./scripts/coverage.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
说明:
|
||||||
|
- 默认行为适合本地重复确认覆盖率,避免每次都重编译整套插桩目标;
|
||||||
|
- 默认还会设置 `RPKI_SKIP_HEAVY_SCRIPT_REPLAY_TESTS=1`,跳过会拉起 shell replay pipeline 的重型集成测试,避免 coverage 期间额外触发 `target/release` 构建;
|
||||||
|
- 默认还会设置 `RPKI_SKIP_HEAVY_BLACKBOX_TESTS=1`,跳过更慢的 blackbox CLI / CIR record 脚本测试,进一步降低日常 coverage 成本;
|
||||||
|
- 默认还会设置 `RPKI_SKIP_HEAVY_CRYPTO_TESTS=1`,跳过需要大量 OpenSSL 生成证书/CRL 的重型密码学测试,进一步压缩日常 coverage 时长;
|
||||||
|
- 如需把这批脚本回放测试也纳入 coverage,可显式关闭该开关:
|
||||||
|
|
||||||
|
```
|
||||||
|
RPKI_SKIP_HEAVY_SCRIPT_REPLAY_TESTS=0 ./scripts/coverage.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
如需连同第二批 blackbox 测试一起跑:
|
||||||
|
|
||||||
|
```
|
||||||
|
RPKI_SKIP_HEAVY_BLACKBOX_TESTS=0 ./scripts/coverage.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
如需连同重型 OpenSSL 证书路径测试一起跑:
|
||||||
|
|
||||||
|
```
|
||||||
|
RPKI_SKIP_HEAVY_CRYPTO_TESTS=0 ./scripts/coverage.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
- replay 脚本现在也支持通过环境变量注入现成二进制,避免找不到二进制时自动 `cargo build --release`:
|
||||||
|
- `RPKI_BIN`
|
||||||
|
- `CIR_MATERIALIZE_BIN`
|
||||||
|
- `CIR_EXTRACT_INPUTS_BIN`
|
||||||
|
- `CCR_TO_COMPARE_VIEWS_BIN`
|
||||||
|
- `COVERAGE_FORCE_CLEAN=1` 适合需要完全从零重建插桩目标时使用。
|
||||||
|
|||||||
@ -24,10 +24,10 @@ RAW_STORE_DB=""
|
|||||||
OUT_DIR=""
|
OUT_DIR=""
|
||||||
REFERENCE_CCR=""
|
REFERENCE_CCR=""
|
||||||
KEEP_DB=0
|
KEEP_DB=0
|
||||||
RPKI_BIN="$ROOT_DIR/target/release/rpki"
|
RPKI_BIN="${RPKI_BIN:-$ROOT_DIR/target/release/rpki}"
|
||||||
CIR_MATERIALIZE_BIN="$ROOT_DIR/target/release/cir_materialize"
|
CIR_MATERIALIZE_BIN="${CIR_MATERIALIZE_BIN:-$ROOT_DIR/target/release/cir_materialize}"
|
||||||
CIR_EXTRACT_INPUTS_BIN="$ROOT_DIR/target/release/cir_extract_inputs"
|
CIR_EXTRACT_INPUTS_BIN="${CIR_EXTRACT_INPUTS_BIN:-$ROOT_DIR/target/release/cir_extract_inputs}"
|
||||||
CCR_TO_COMPARE_VIEWS_BIN="$ROOT_DIR/target/release/ccr_to_compare_views"
|
CCR_TO_COMPARE_VIEWS_BIN="${CCR_TO_COMPARE_VIEWS_BIN:-$ROOT_DIR/target/release/ccr_to_compare_views}"
|
||||||
REAL_RSYNC_BIN="${REAL_RSYNC_BIN:-/usr/bin/rsync}"
|
REAL_RSYNC_BIN="${REAL_RSYNC_BIN:-/usr/bin/rsync}"
|
||||||
WRAPPER="$ROOT_DIR/scripts/cir/cir-rsync-wrapper"
|
WRAPPER="$ROOT_DIR/scripts/cir/cir-rsync-wrapper"
|
||||||
|
|
||||||
|
|||||||
@ -29,9 +29,9 @@ KEEP_DB=0
|
|||||||
ROUTINATOR_ROOT="${ROUTINATOR_ROOT:-/home/yuyr/dev/rust_playground/routinator}"
|
ROUTINATOR_ROOT="${ROUTINATOR_ROOT:-/home/yuyr/dev/rust_playground/routinator}"
|
||||||
ROUTINATOR_BIN="${ROUTINATOR_BIN:-$ROUTINATOR_ROOT/target/debug/routinator}"
|
ROUTINATOR_BIN="${ROUTINATOR_BIN:-$ROUTINATOR_ROOT/target/debug/routinator}"
|
||||||
REAL_RSYNC_BIN="${REAL_RSYNC_BIN:-/usr/bin/rsync}"
|
REAL_RSYNC_BIN="${REAL_RSYNC_BIN:-/usr/bin/rsync}"
|
||||||
CIR_MATERIALIZE_BIN="$ROOT_DIR/target/release/cir_materialize"
|
CIR_MATERIALIZE_BIN="${CIR_MATERIALIZE_BIN:-$ROOT_DIR/target/release/cir_materialize}"
|
||||||
CIR_EXTRACT_INPUTS_BIN="$ROOT_DIR/target/release/cir_extract_inputs"
|
CIR_EXTRACT_INPUTS_BIN="${CIR_EXTRACT_INPUTS_BIN:-$ROOT_DIR/target/release/cir_extract_inputs}"
|
||||||
CCR_TO_COMPARE_VIEWS_BIN="$ROOT_DIR/target/release/ccr_to_compare_views"
|
CCR_TO_COMPARE_VIEWS_BIN="${CCR_TO_COMPARE_VIEWS_BIN:-$ROOT_DIR/target/release/ccr_to_compare_views}"
|
||||||
WRAPPER="$ROOT_DIR/scripts/cir/cir-rsync-wrapper"
|
WRAPPER="$ROOT_DIR/scripts/cir/cir-rsync-wrapper"
|
||||||
JSON_TO_VAPS="$ROOT_DIR/scripts/cir/json_to_vaps_csv.py"
|
JSON_TO_VAPS="$ROOT_DIR/scripts/cir/json_to_vaps_csv.py"
|
||||||
FAKETIME_LIB="${FAKETIME_LIB:-$ROOT_DIR/target/tools/faketime_pkg/extracted/libfaketime/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1}"
|
FAKETIME_LIB="${FAKETIME_LIB:-$ROOT_DIR/target/tools/faketime_pkg/extracted/libfaketime/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1}"
|
||||||
|
|||||||
@ -25,9 +25,9 @@ REFERENCE_CCR=""
|
|||||||
BUILD_DIR=""
|
BUILD_DIR=""
|
||||||
KEEP_DB=0
|
KEEP_DB=0
|
||||||
REAL_RSYNC_BIN="${REAL_RSYNC_BIN:-/usr/bin/rsync}"
|
REAL_RSYNC_BIN="${REAL_RSYNC_BIN:-/usr/bin/rsync}"
|
||||||
CIR_MATERIALIZE_BIN="$ROOT_DIR/target/release/cir_materialize"
|
CIR_MATERIALIZE_BIN="${CIR_MATERIALIZE_BIN:-$ROOT_DIR/target/release/cir_materialize}"
|
||||||
CIR_EXTRACT_INPUTS_BIN="$ROOT_DIR/target/release/cir_extract_inputs"
|
CIR_EXTRACT_INPUTS_BIN="${CIR_EXTRACT_INPUTS_BIN:-$ROOT_DIR/target/release/cir_extract_inputs}"
|
||||||
CCR_TO_COMPARE_VIEWS_BIN="$ROOT_DIR/target/release/ccr_to_compare_views"
|
CCR_TO_COMPARE_VIEWS_BIN="${CCR_TO_COMPARE_VIEWS_BIN:-$ROOT_DIR/target/release/ccr_to_compare_views}"
|
||||||
WRAPPER="$ROOT_DIR/scripts/cir/cir-rsync-wrapper"
|
WRAPPER="$ROOT_DIR/scripts/cir/cir-rsync-wrapper"
|
||||||
|
|
||||||
while [[ $# -gt 0 ]]; do
|
while [[ $# -gt 0 ]]; do
|
||||||
|
|||||||
@ -5,6 +5,19 @@ set -euo pipefail
|
|||||||
# rustup component add llvm-tools-preview
|
# rustup component add llvm-tools-preview
|
||||||
# cargo install cargo-llvm-cov --locked
|
# cargo install cargo-llvm-cov --locked
|
||||||
|
|
||||||
|
# Optional:
|
||||||
|
# COVERAGE_FORCE_CLEAN=1 Force `cargo llvm-cov clean --workspace` before the run.
|
||||||
|
# Default behavior is to reuse existing llvm-cov build artifacts.
|
||||||
|
# RPKI_SKIP_HEAVY_SCRIPT_REPLAY_TESTS=1 Skip replay/matrix integration tests that
|
||||||
|
# spawn shell pipelines and can trigger separate release builds.
|
||||||
|
# coverage.sh enables this by default.
|
||||||
|
# RPKI_SKIP_HEAVY_BLACKBOX_TESTS=1 Skip slower blackbox CLI/script integration tests
|
||||||
|
# that provide low incremental coverage per wall-clock second.
|
||||||
|
# coverage.sh enables this by default.
|
||||||
|
# RPKI_SKIP_HEAVY_CRYPTO_TESTS=1 Skip slower OpenSSL-heavy certificate generation tests
|
||||||
|
# that provide low incremental coverage per wall-clock second.
|
||||||
|
# coverage.sh enables this by default.
|
||||||
|
|
||||||
run_out="$(mktemp)"
|
run_out="$(mktemp)"
|
||||||
text_out="$(mktemp)"
|
text_out="$(mktemp)"
|
||||||
html_out="$(mktemp)"
|
html_out="$(mktemp)"
|
||||||
@ -20,7 +33,16 @@ IGNORE_REGEX='src/bin/replay_bundle_capture\.rs|src/bin/replay_bundle_capture_de
|
|||||||
# We run tests only once, then generate both CLI text + HTML reports without rerunning tests.
|
# We run tests only once, then generate both CLI text + HTML reports without rerunning tests.
|
||||||
set +e
|
set +e
|
||||||
|
|
||||||
|
if [ "${COVERAGE_FORCE_CLEAN:-0}" = "1" ]; then
|
||||||
cargo llvm-cov clean --workspace >/dev/null 2>&1
|
cargo llvm-cov clean --workspace >/dev/null 2>&1
|
||||||
|
echo "coverage mode: clean build (COVERAGE_FORCE_CLEAN=1)"
|
||||||
|
else
|
||||||
|
echo "coverage mode: reuse existing llvm-cov artifacts (default)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
export RPKI_SKIP_HEAVY_SCRIPT_REPLAY_TESTS="${RPKI_SKIP_HEAVY_SCRIPT_REPLAY_TESTS:-1}"
|
||||||
|
export RPKI_SKIP_HEAVY_BLACKBOX_TESTS="${RPKI_SKIP_HEAVY_BLACKBOX_TESTS:-1}"
|
||||||
|
export RPKI_SKIP_HEAVY_CRYPTO_TESTS="${RPKI_SKIP_HEAVY_CRYPTO_TESTS:-1}"
|
||||||
|
|
||||||
# 1) Run tests once to collect coverage data (no report).
|
# 1) Run tests once to collect coverage data (no report).
|
||||||
script -q -e -c "CARGO_TERM_COLOR=always cargo llvm-cov --no-report" "$run_out" >/dev/null 2>&1
|
script -q -e -c "CARGO_TERM_COLOR=always cargo llvm-cov --no-report" "$run_out" >/dev/null 2>&1
|
||||||
|
|||||||
@ -670,6 +670,10 @@ mod tests {
|
|||||||
use super::*;
|
use super::*;
|
||||||
use tempfile::tempdir;
|
use tempfile::tempdir;
|
||||||
|
|
||||||
|
fn skip_heavy_blackbox_test() -> bool {
|
||||||
|
std::env::var_os("RPKI_SKIP_HEAVY_BLACKBOX_TESTS").is_some()
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_args_requires_required_flags() {
|
fn parse_args_requires_required_flags() {
|
||||||
let argv = vec![
|
let argv = vec![
|
||||||
@ -730,6 +734,9 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn run_base_bundle_record_smoke_root_only_apnic() {
|
fn run_base_bundle_record_smoke_root_only_apnic() {
|
||||||
|
if skip_heavy_blackbox_test() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
let dir = tempdir().expect("tempdir");
|
let dir = tempdir().expect("tempdir");
|
||||||
let out_dir = dir.path().join("bundle");
|
let out_dir = dir.path().join("bundle");
|
||||||
let out = run(Args {
|
let out = run(Args {
|
||||||
|
|||||||
@ -11,6 +11,10 @@ fn openssl_available() -> bool {
|
|||||||
.unwrap_or(false)
|
.unwrap_or(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn skip_heavy_crypto_test() -> bool {
|
||||||
|
std::env::var_os("RPKI_SKIP_HEAVY_CRYPTO_TESTS").is_some()
|
||||||
|
}
|
||||||
|
|
||||||
struct Generated {
|
struct Generated {
|
||||||
issuer_ca_der: Vec<u8>,
|
issuer_ca_der: Vec<u8>,
|
||||||
child_ca_der: Vec<u8>,
|
child_ca_der: Vec<u8>,
|
||||||
@ -212,6 +216,9 @@ authorityKeyIdentifier = keyid:always
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn validate_subordinate_ca_succeeds_for_valid_child_and_subset_resources() {
|
fn validate_subordinate_ca_succeeds_for_valid_child_and_subset_resources() {
|
||||||
|
if skip_heavy_crypto_test() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
let generated = generate_chain_and_crl(
|
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",
|
"keyUsage = critical, keyCertSign, cRLSign\nsbgp-ipAddrBlock = critical, IPv4:10.0.0.0/16\nsbgp-autonomousSysNum = critical, AS:64496\n",
|
||||||
false,
|
false,
|
||||||
@ -238,6 +245,9 @@ fn validate_subordinate_ca_succeeds_for_valid_child_and_subset_resources() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn validate_subordinate_ca_rejects_wrong_key_usage_bits() {
|
fn validate_subordinate_ca_rejects_wrong_key_usage_bits() {
|
||||||
|
if skip_heavy_crypto_test() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
let generated = generate_chain_and_crl(
|
let generated = generate_chain_and_crl(
|
||||||
"keyUsage = critical, digitalSignature\nsbgp-ipAddrBlock = critical, IPv4:10.0.0.0/16\n",
|
"keyUsage = critical, digitalSignature\nsbgp-ipAddrBlock = critical, IPv4:10.0.0.0/16\n",
|
||||||
false,
|
false,
|
||||||
|
|||||||
@ -12,6 +12,10 @@ fn openssl_available() -> bool {
|
|||||||
.unwrap_or(false)
|
.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) {
|
fn run(cmd: &mut Command) {
|
||||||
let out = cmd.output().expect("run command");
|
let out = cmd.output().expect("run command");
|
||||||
if !out.status.success() {
|
if !out.status.success() {
|
||||||
@ -185,6 +189,9 @@ authorityKeyIdentifier = keyid:always
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn ee_key_usage_digital_signature_only_is_accepted() {
|
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 g = generate_issuer_ca_ee_and_crl("keyUsage = critical, digitalSignature\n");
|
||||||
let now = time::OffsetDateTime::now_utc();
|
let now = time::OffsetDateTime::now_utc();
|
||||||
validate_ee_cert_path(
|
validate_ee_cert_path(
|
||||||
@ -200,6 +207,9 @@ fn ee_key_usage_digital_signature_only_is_accepted() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn ee_key_usage_missing_is_rejected() {
|
fn ee_key_usage_missing_is_rejected() {
|
||||||
|
if skip_heavy_crypto_test() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
let g = generate_issuer_ca_ee_and_crl("");
|
let g = generate_issuer_ca_ee_and_crl("");
|
||||||
let now = time::OffsetDateTime::now_utc();
|
let now = time::OffsetDateTime::now_utc();
|
||||||
let err = validate_ee_cert_path(
|
let err = validate_ee_cert_path(
|
||||||
@ -216,6 +226,9 @@ fn ee_key_usage_missing_is_rejected() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn ee_key_usage_not_critical_is_rejected() {
|
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 g = generate_issuer_ca_ee_and_crl("keyUsage = digitalSignature\n");
|
||||||
let now = time::OffsetDateTime::now_utc();
|
let now = time::OffsetDateTime::now_utc();
|
||||||
let err = validate_ee_cert_path(
|
let err = validate_ee_cert_path(
|
||||||
@ -232,6 +245,9 @@ fn ee_key_usage_not_critical_is_rejected() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn ee_key_usage_wrong_bits_is_rejected() {
|
fn ee_key_usage_wrong_bits_is_rejected() {
|
||||||
|
if skip_heavy_crypto_test() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
let g =
|
let g =
|
||||||
generate_issuer_ca_ee_and_crl("keyUsage = critical, digitalSignature, keyEncipherment\n");
|
generate_issuer_ca_ee_and_crl("keyUsage = critical, digitalSignature, keyEncipherment\n");
|
||||||
let now = time::OffsetDateTime::now_utc();
|
let now = time::OffsetDateTime::now_utc();
|
||||||
@ -249,6 +265,9 @@ fn ee_key_usage_wrong_bits_is_rejected() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn validate_ee_cert_path_with_prevalidated_issuer_covers_success_and_error_paths() {
|
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::common::BigUnsigned;
|
||||||
use rpki::data_model::crl::RpkixCrl;
|
use rpki::data_model::crl::RpkixCrl;
|
||||||
use rpki::data_model::rc::ResourceCertificate;
|
use rpki::data_model::rc::ResourceCertificate;
|
||||||
|
|||||||
@ -10,8 +10,15 @@ use rpki::cir::{
|
|||||||
CIR_VERSION_V1, CanonicalInputRepresentation, CirHashAlgorithm, CirObject, CirTal, encode_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]
|
#[test]
|
||||||
fn cir_full_and_delta_pair_reuses_shared_static_pool() {
|
fn cir_full_and_delta_pair_reuses_shared_static_pool() {
|
||||||
|
if skip_heavy_blackbox_test() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
let script =
|
let script =
|
||||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("scripts/cir/run_cir_record_full_delta.sh");
|
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("scripts/cir/run_cir_record_full_delta.sh");
|
||||||
let out_dir = tempfile::tempdir().expect("tempdir");
|
let out_dir = tempfile::tempdir().expect("tempdir");
|
||||||
|
|||||||
@ -6,6 +6,10 @@ use rpki::cir::{
|
|||||||
materialize_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 {
|
fn apnic_tal_path() -> PathBuf {
|
||||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/tal/apnic-rfc7730-https.tal")
|
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/tal/apnic-rfc7730-https.tal")
|
||||||
}
|
}
|
||||||
@ -105,6 +109,9 @@ fn prepare_reference_ccr(
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn cir_replay_matrix_script_matches_reference_for_all_participants() {
|
fn cir_replay_matrix_script_matches_reference_for_all_participants() {
|
||||||
|
if skip_heavy_script_replay_test() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if !Path::new("/usr/bin/rsync").exists()
|
if !Path::new("/usr/bin/rsync").exists()
|
||||||
|| !Path::new("/home/yuyr/dev/rust_playground/routinator/target/debug/routinator").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()
|
|| !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 =
|
let script =
|
||||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("scripts/cir/run_cir_replay_matrix.sh");
|
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("scripts/cir/run_cir_replay_matrix.sh");
|
||||||
let out = Command::new(script)
|
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([
|
.args([
|
||||||
"--cir",
|
"--cir",
|
||||||
cir_path.to_string_lossy().as_ref(),
|
cir_path.to_string_lossy().as_ref(),
|
||||||
|
|||||||
@ -6,6 +6,10 @@ use rpki::cir::{
|
|||||||
materialize_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 {
|
fn apnic_tal_path() -> PathBuf {
|
||||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/tal/apnic-rfc7730-https.tal")
|
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/tal/apnic-rfc7730-https.tal")
|
||||||
}
|
}
|
||||||
@ -105,6 +109,9 @@ fn prepare_reference_ccr(
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn cir_routinator_script_matches_reference_on_ta_only_cir() {
|
fn cir_routinator_script_matches_reference_on_ta_only_cir() {
|
||||||
|
if skip_heavy_script_replay_test() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if !Path::new("/usr/bin/rsync").exists()
|
if !Path::new("/usr/bin/rsync").exists()
|
||||||
|| !Path::new("/home/yuyr/dev/rust_playground/routinator/target/debug/routinator").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 =
|
let script =
|
||||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("scripts/cir/run_cir_replay_routinator.sh");
|
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("scripts/cir/run_cir_replay_routinator.sh");
|
||||||
let out = Command::new(script)
|
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([
|
.args([
|
||||||
"--cir",
|
"--cir",
|
||||||
cir_path.to_string_lossy().as_ref(),
|
cir_path.to_string_lossy().as_ref(),
|
||||||
@ -152,6 +165,9 @@ fn cir_routinator_script_matches_reference_on_ta_only_cir() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn cir_rpki_client_script_matches_reference_on_ta_only_cir() {
|
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()
|
if !Path::new("/usr/bin/rsync").exists()
|
||||||
|| !Path::new("/home/yuyr/dev/rpki-client-9.7/build-m5/src/rpki-client").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 =
|
let script =
|
||||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("scripts/cir/run_cir_replay_rpki_client.sh");
|
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("scripts/cir/run_cir_replay_rpki_client.sh");
|
||||||
let out = Command::new(script)
|
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([
|
.args([
|
||||||
"--cir",
|
"--cir",
|
||||||
cir_path.to_string_lossy().as_ref(),
|
cir_path.to_string_lossy().as_ref(),
|
||||||
|
|||||||
@ -9,8 +9,15 @@ use rpki::cir::{
|
|||||||
CIR_VERSION_V1, CanonicalInputRepresentation, CirHashAlgorithm, CirObject, CirTal, encode_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]
|
#[test]
|
||||||
fn cir_offline_sequence_writes_parseable_sequence_json_and_steps() {
|
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_dir = tempfile::tempdir().expect("tempdir");
|
||||||
let out = out_dir.path().join("cir-sequence");
|
let out = out_dir.path().join("cir-sequence");
|
||||||
let script = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
let script = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
||||||
|
|||||||
@ -6,6 +6,10 @@ use rpki::cir::{
|
|||||||
materialize_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 {
|
fn apnic_tal_path() -> PathBuf {
|
||||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/tal/apnic-rfc7730-https.tal")
|
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]
|
#[test]
|
||||||
fn peer_sequence_replay_scripts_replay_all_steps() {
|
fn peer_sequence_replay_scripts_replay_all_steps() {
|
||||||
|
if skip_heavy_script_replay_test() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if !Path::new("/usr/bin/rsync").exists()
|
if !Path::new("/usr/bin/rsync").exists()
|
||||||
|| !Path::new("/home/yuyr/dev/rust_playground/routinator/target/debug/routinator").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()
|
|| !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"))
|
let routinator_script = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
||||||
.join("scripts/cir/run_cir_replay_sequence_routinator.sh");
|
.join("scripts/cir/run_cir_replay_sequence_routinator.sh");
|
||||||
let out = Command::new(routinator_script)
|
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()])
|
.args(["--sequence-root", sequence_root.to_string_lossy().as_ref()])
|
||||||
.output()
|
.output()
|
||||||
.expect("run routinator sequence replay");
|
.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"))
|
let rpki_client_script = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
||||||
.join("scripts/cir/run_cir_replay_sequence_rpki_client.sh");
|
.join("scripts/cir/run_cir_replay_sequence_rpki_client.sh");
|
||||||
let out = Command::new(rpki_client_script)
|
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([
|
.args([
|
||||||
"--sequence-root",
|
"--sequence-root",
|
||||||
sequence_root.to_string_lossy().as_ref(),
|
sequence_root.to_string_lossy().as_ref(),
|
||||||
|
|||||||
@ -6,6 +6,10 @@ use rpki::cir::{
|
|||||||
materialize_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 {
|
fn apnic_tal_path() -> PathBuf {
|
||||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/tal/apnic-rfc7730-https.tal")
|
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/tal/apnic-rfc7730-https.tal")
|
||||||
}
|
}
|
||||||
@ -106,6 +110,9 @@ fn prepare_reference_ccr(
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn ours_sequence_replay_script_replays_all_steps() {
|
fn ours_sequence_replay_script_replays_all_steps() {
|
||||||
|
if skip_heavy_script_replay_test() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if !Path::new("/usr/bin/rsync").exists() {
|
if !Path::new("/usr/bin/rsync").exists() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -166,6 +173,12 @@ fn ours_sequence_replay_script_replays_all_steps() {
|
|||||||
let script = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
let script = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
||||||
.join("scripts/cir/run_cir_replay_sequence_ours.sh");
|
.join("scripts/cir/run_cir_replay_sequence_ours.sh");
|
||||||
let out = Command::new(script)
|
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([
|
.args([
|
||||||
"--sequence-root",
|
"--sequence-root",
|
||||||
sequence_root.to_string_lossy().as_ref(),
|
sequence_root.to_string_lossy().as_ref(),
|
||||||
|
|||||||
@ -1,7 +1,14 @@
|
|||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
|
|
||||||
|
fn skip_heavy_blackbox_test() -> bool {
|
||||||
|
std::env::var_os("RPKI_SKIP_HEAVY_BLACKBOX_TESTS").is_some()
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn cli_payload_delta_replay_rejects_wrong_base_locks() {
|
fn cli_payload_delta_replay_rejects_wrong_base_locks() {
|
||||||
|
if skip_heavy_blackbox_test() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
let bin = env!("CARGO_BIN_EXE_rpki");
|
let bin = env!("CARGO_BIN_EXE_rpki");
|
||||||
let db_dir = tempfile::tempdir().expect("db tempdir");
|
let db_dir = tempfile::tempdir().expect("db tempdir");
|
||||||
let out_dir = tempfile::tempdir().expect("out tempdir");
|
let out_dir = tempfile::tempdir().expect("out tempdir");
|
||||||
|
|||||||
@ -1,7 +1,14 @@
|
|||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
|
|
||||||
|
fn skip_heavy_blackbox_test() -> bool {
|
||||||
|
std::env::var_os("RPKI_SKIP_HEAVY_BLACKBOX_TESTS").is_some()
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn cli_payload_replay_root_only_smoke_writes_report_json() {
|
fn cli_payload_replay_root_only_smoke_writes_report_json() {
|
||||||
|
if skip_heavy_blackbox_test() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
let bin = env!("CARGO_BIN_EXE_rpki");
|
let bin = env!("CARGO_BIN_EXE_rpki");
|
||||||
let db_dir = tempfile::tempdir().expect("db tempdir");
|
let db_dir = tempfile::tempdir().expect("db tempdir");
|
||||||
let out_dir = tempfile::tempdir().expect("out tempdir");
|
let out_dir = tempfile::tempdir().expect("out tempdir");
|
||||||
|
|||||||
@ -1,5 +1,9 @@
|
|||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
|
|
||||||
|
fn skip_heavy_blackbox_test() -> bool {
|
||||||
|
std::env::var_os("RPKI_SKIP_HEAVY_BLACKBOX_TESTS").is_some()
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn cli_run_offline_mode_executes_and_writes_json_and_ccr() {
|
fn cli_run_offline_mode_executes_and_writes_json_and_ccr() {
|
||||||
let db_dir = tempfile::tempdir().expect("db tempdir");
|
let db_dir = tempfile::tempdir().expect("db tempdir");
|
||||||
@ -134,6 +138,9 @@ fn cli_run_offline_mode_writes_cir_and_static_pool() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn cli_run_blackbox_rsync_wrapper_mode_matches_reference_ccr_without_ta_path() {
|
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");
|
let real_rsync = std::path::Path::new("/usr/bin/rsync");
|
||||||
if !real_rsync.exists() {
|
if !real_rsync.exists() {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -14,6 +14,10 @@ fn openssl_available() -> bool {
|
|||||||
.unwrap_or(false)
|
.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) {
|
fn run(cmd: &mut Command) {
|
||||||
let out = cmd.output().expect("run command");
|
let out = cmd.output().expect("run command");
|
||||||
if !out.status.success() {
|
if !out.status.success() {
|
||||||
@ -258,6 +262,9 @@ authorityKeyIdentifier = keyid:always
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn decode_bgpsec_router_certificate_fixture_smoke() {
|
fn decode_bgpsec_router_certificate_fixture_smoke() {
|
||||||
|
if skip_heavy_crypto_test() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
let g = generate_router_cert_with_variant("ec-p256", true, "");
|
let g = generate_router_cert_with_variant("ec-p256", true, "");
|
||||||
let cert = BgpsecRouterCertificate::decode_der(&g.router_der).expect("decode router cert");
|
let cert = BgpsecRouterCertificate::decode_der(&g.router_der).expect("decode router cert");
|
||||||
assert_eq!(cert.resource_cert.kind, ResourceCertKind::Ee);
|
assert_eq!(cert.resource_cert.kind, ResourceCertKind::Ee);
|
||||||
@ -268,6 +275,9 @@ fn decode_bgpsec_router_certificate_fixture_smoke() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn router_certificate_profile_rejects_missing_eku() {
|
fn router_certificate_profile_rejects_missing_eku() {
|
||||||
|
if skip_heavy_crypto_test() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
let g = generate_router_cert_with_variant("ec-p256", false, "");
|
let g = generate_router_cert_with_variant("ec-p256", false, "");
|
||||||
let err = BgpsecRouterCertificate::decode_der(&g.router_der).unwrap_err();
|
let err = BgpsecRouterCertificate::decode_der(&g.router_der).unwrap_err();
|
||||||
assert!(
|
assert!(
|
||||||
@ -284,6 +294,9 @@ fn router_certificate_profile_rejects_missing_eku() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn router_certificate_profile_rejects_sia_and_ip_resources_and_ranges() {
|
fn router_certificate_profile_rejects_sia_and_ip_resources_and_ranges() {
|
||||||
|
if skip_heavy_crypto_test() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
let g = generate_router_cert_with_variant(
|
let g = generate_router_cert_with_variant(
|
||||||
"ec-p256",
|
"ec-p256",
|
||||||
true,
|
true,
|
||||||
@ -335,6 +348,9 @@ fn router_certificate_profile_rejects_sia_and_ip_resources_and_ranges() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn router_certificate_profile_rejects_wrong_spki_algorithm_or_curve() {
|
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 g = generate_router_cert_with_variant("rsa", true, "");
|
||||||
let err = BgpsecRouterCertificate::decode_der(&g.router_der).unwrap_err();
|
let err = BgpsecRouterCertificate::decode_der(&g.router_der).unwrap_err();
|
||||||
assert!(
|
assert!(
|
||||||
@ -363,6 +379,9 @@ fn router_certificate_profile_rejects_wrong_spki_algorithm_or_curve() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn router_certificate_path_validation_accepts_valid_and_rejects_wrong_issuer() {
|
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::common::BigUnsigned;
|
||||||
use rpki::data_model::crl::RpkixCrl;
|
use rpki::data_model::crl::RpkixCrl;
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user