测试与 semspec¶
pVisor 把正确性分成两层:代码层面由单元测试和集成测试保证,可以交给自动化;产品承诺由语义规格(semspec)表达,必须经过人工审核。
常用命令¶
| 命令 | 作用 |
|---|---|
just test |
通过 cargo nextest 运行全部 Rust 测试(debug 模式),再运行 Python 测试 |
just test pvisor-core |
只运行一个包;别名 pvisor、core(control、agentctl)、capture(Gateway)、shim |
just test-py -k NAME |
只运行 Python 测试,可附加 pytest 参数 |
just test-isolation |
Linux rootless/FUSE 严格回归,缺少 user namespace 时不跳过 |
just smoke |
构建 debug CLI 并检查主要子命令 |
just examples [场景] |
运行 examples/pvisor/ 下的端到端示例 |
just semantics |
在全新临时工作区运行 STAGE 领域的语义规格 |
just cases |
运行文档语义规格(S-DOC,来源 reference/cases.md) |
just semspec lint |
静态检查规格格式 |
just test-semspec |
测试 semspec 工具本身 |
只有需要 doctest 或文档明确要求的特殊 runner 时,才直接使用 cargo test。
语义规格¶
语义规格是 Markdown 用例,每条包含编号(如 S-STAGE-008)、语义、违反示例和一段可执行脚本。当前领域:
- STAGE(
tests/semantics/stage-apply.md):暂存、apply、drop 的承诺,见暂存与 apply 语义; - DOC(
docs/src/zh/reference/cases.md):文档中可执行示例的行为。
结果分为 PASS、FAIL、SKIP、XFAIL、XPASS、ERROR;审核状态分为 UNREVIEWED、STALE、REVIEWED。
人工审核规则¶
- PASS 只说明当前实现满足脚本,不说明语义本身正确;
- 新用例和修改过的用例是 UNREVIEWED 或 STALE,发布门禁不把它们当作已批准;
semspec approve/revoke以及编辑REVIEWED.toml、.approved/快照只能由维护者人工执行;- 任何人(包括 AI 工具)都不得为了通过而削弱已有的声明、检查或
xfail标注。
完整设计见 tools/semspec/DESIGN.md。