

# 单元测试

```
cargo test 

# 查看输出
cargo test -- --nocapture
```

# 覆盖率（cargo-llvm-cov）

安装工具：

```
rustup component add llvm-tools-preview
cargo install cargo-llvm-cov --locked
```

统计行覆盖率并要求 >=90%：

```
./scripts/coverage.sh
# 或
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` 适合需要完全从零重建插桩目标时使用。
