# MoonVCR 可靠性测试与验收说明

本文件把可靠性目标映射到可运行测试和故障门禁。测试数量只用于核对执行完整性，不能代替逐项行为验收。

0.3.2针对独立审核的F1–F7补齐测试与修复，原始10项修前2通过/8失败、修后10/10；核心129/129、native154/154（含核心），见5bea80b的CI41185113305。`audit_paths_test.mbt`、`audit_matching_test.mbt`、`audit_consistency_test.mbt`补充精确路径、契约、重复值保序与3600组合诊断/回放对照。native新增3项头部、10项硬读取预算测试及真实双Cookie验收均已在Ubuntu运行通过；发布状态仅以 `AUDIT_REMEDIATION_0.3.2.md`、`FINAL_ACCEPTANCE.md` 实际记录为准。

0.3.0 的测试未覆盖官方发现的两条漏洞，已经导致正式验收失败。0.3.1 新增 `security_redaction_test.mbt` 的16项回归与 `native/security_test.mbt` 的3项异步/文件测试；本地和Ubuntu CI核心92/92，Ubuntu native104/104通过（含核心92，不重复相加），证据run41163071443。另有独立子代理1024编码组合与40录制组合、外部访问私有字段编译负例。详细复核见 `SECURITY_FIX_REPORT.md`，不要把旧版76/85绿色结果当作安全证明。

公开安全验收入口：`moon run cmd/moonvcr-security-acceptance`；候选归档与公网包均须执行12条失败关闭录制、1024条编码录制、模式保护、错误Debug和私有字段负例。CI先验候选归档，发布后再切换为正式包版本。

## 核心验收命令

```text
moon fmt --check
moon check
moon build
moon test
moon run cmd/moonvcr-demo
moon run cmd/moonvcr-pagination
moon run cmd/moonvcr-order-contract
moon run cmd/moonvcr-restricted-ci
moon package --list
git diff --check
```

故障命令必须非零：

```text
moon run cmd/moonvcr-pagination-failure
moon run cmd/moonvcr-order-contract-failure
moon run cmd/moonvcr-restricted-ci-failure
```

## 核心矩阵

| 验收项 | 证据位置 | 通过标准 |
| --- | --- | --- |
| 匹配键无分隔符碰撞 | `normalize_test.mbt`、`matcher_test.mbt` | 结构不同的请求不能误命中 |
| query/header 重复、空值、Unicode | `normalize_test.mbt` | 正反例行为固定 |
| ReplayMiss 不泄露完整 key | `session_test.mbt`、`reliability_test.mbt` | error/summary 无植入秘密 |
| URL 用户信息、fragment、编码参数脱敏 | `redact_test.mbt` | cassette 无秘密原文 |
| 请求/响应独立规则、必填/可选规则 | `redact_test.mbt`、`session_test.mbt` | 跨侧字段不误报，必填失败不追加 |
| Session 输入/输出快照隔离 | `session_test.mbt` | 外部修改不改变既定回放 |
| 重复消费、多/少调用、完整消费 | `session_test.mbt` | 错误不误消费，`assert_complete` 可阻断 |
| 状态/header 值/body/JSON/数组契约 | `contract_test.mbt` | 正例有效，负例路径与类型明确 |
| 诊断和契约摘要不带原文 | `diagnostics_test.mbt`、`contract_test.mbt` | 仅输出安全描述 |
| 三业务场景 | `cmd/moonvcr-*` | 成功命令为零，故障命令非零 |
| 受限网络不调用 transport | `cmd/moonvcr-restricted-ci` | 输出 `network_calls=0` |
| 100/1,000/10,000 条容量 | `capacity_test.mbt` | 编码、解码、末项回放均成功 |

## Native IO 矩阵

Ubuntu CI 的 native job 执行：

1. `moon check --target native`、`moon build --target native`、`moon test --target native --serial`；
2. 启动 `cmd/moonvcr-loopback-server`；
3. `cmd/moonvcr-native-http-acceptance` 验证 GET、POST、请求/响应 header、JSON、非法 UTF-8 字节转 Base64、连接失败、超时、503 和 302；
4. `cmd/moonvcr-native-record` 通过真实 HTTP 录制两条交互、脱敏并保存；
5. 关闭 loopback 服务并确认端口不可达；
6. 新进程运行 `cmd/moonvcr-native-replay`，加载文件、离线回放、检查订单契约和完整消费；
7. `/usr/bin/time -v` 记录容量用例的实际时间与最大常驻内存。

文件层测试覆盖：缺失文件、负大小限制、过大输入、损坏 JSON、未知格式版本、默认禁止覆盖、临时文件冲突保护和显式替换。失败路径必须保持已有目标文件不变。

## 容量说明

Windows 本地 wasm 单独运行 100/1,000/10,000 条容量用例为 3/3 通过；2026-09-26 一次测量墙钟约 559 ms，包含测试进程启动开销。Ubuntu CI run `36245555879` 对同三组用例的 `/usr/bin/time -v` 记录为 0.34 s、最大常驻内存 67,120 KB，退出码 0。这些数字只描述当次机器与工具链，不是性能承诺；版本冻结后仍需在冻结提交上重新取证。

建议默认单 cassette 不超过 10 MB；10,000 条是本轮验收规模，不表示无限扩展。matcher 是线性候选扫描，大型套件应按服务、资源或测试域拆分 cassette。

## 平台边界

- 核心 wasm：Windows 本地与 Ubuntu CI；
- native HTTP/文件 IO：Ubuntu CI；
- Windows native：当前仅类型检查，因为本机没有 C 编译器，不宣称运行支持；
- 外部互联网：集成验收只访问 `127.0.0.1`，不依赖第三方服务；
- TLS：不关闭官方客户端证书验证；本轮 loopback 使用 HTTP，未把本地 HTTP 当作 TLS 验证证据。

## 安全与发布检查

- `MoonVCR_submission.md` 被 `.gitignore` 排除；
- `moon package --list` 不得包含报名材料或个人联系方式；
- 测试只含合成凭据，且最终录制文件会搜索确保秘密原文为零；
- 依赖与许可证见 `THIRD_PARTY_NOTICES.md`；
- 最终证据状态见 `FINAL_ACCEPTANCE.md`。
