摘要

  • Rapport 现在可以接收以空格分隔的多个类别和多个测试名称,并生成每一个类别—测试组合。不存在目录的组合会提前返回,不会出现在成功、失败、跳过或未知这四类结果中。
  • 根据锁定版本的仓库树做静态推导,四个被请求的单元格中,两个路径存在、两个路径缺失。最终数字可以准确描述实际运行的场景,却没有说明最初请求的完整范围。

请求里有四个单元格,结果里只有两个。中间没有任何记录解释另外两个去了哪里。

这是 Rapport 在9 月 7 日的提交“Allow running multiple specific categories and tests”所带来的一个边界问题。提交只修改了 2-test.sh,但输入的含义发生了变化:两组选择器先被组合为矩阵,随后目录是否存在,决定了某个被请求的单元格能否进入可见结果。

在锁定到该提交的运行脚本中,第一个参数是由空格分隔的类别,第二个参数是同样形式的测试名称。外层循环逐一处理类别,内层循环把同一份测试清单应用到每个类别。代码为每一对输入构造 tests/<类别>/<测试>,然后调用 run_test。

决定性动作发生在 run_test 的开头:如果路径不是目录,函数立即以状态码零返回。此时还没有设置源目录、TESTID、类别和测试变量,没有打印 Test:,没有调用场景的 run.sh,也没有增加 Success、Failure、Skipped 或 Unknown 中的任何一个计数。

因此,缺失单元格并不是“成功”,也不是“跳过”。它根本没有成为结果记录的一部分。

四个请求如何变成两个可见执行

同一提交的不可变仓库树包含 21 个类别目录,以及 337 条符合 tests/<类别>/<测试>/run.sh 形状的路径。其中存在 sample/100-simple 和 sample/500-multi-step,但不存在 rfc9286/100-simple 与 rfc9286/500-multi-step。

把类别 sample rfc9286 与测试 100-simple 500-multi-step 组合,代码就会构造四个单元格。两个 sample 路径可以进入场景执行;两个 rfc9286 路径在目录检查处返回。只有真正执行过的场景才有机会进入四项统计。

这不是本文运行 Rapport 所得到的实验记录,而是对公开代码和仓库树的静态推导。来源中没有本地执行记录、CI 日志、运营方报告或生产影响证据。来源也没有规定所有类别必须共享同一套测试名称。某个矩阵单元格为空,完全可能符合设计。问题不在于“空”,而在于被明确请求的组合没有留下处理结果。

这个区分也保护了最终统计本身的准确性。假设两个存在的场景都成功,那么“两次成功”准确描述了执行过的 run.sh。但它不能完整描述操作方选择的四个单元格。把另外两个自动算作失败也同样不合理。需要分开的,是请求、展开、存在、执行与结果五个阶段。

扩展的是选择能力,也是证据责任

父版本脚本支持的形式更窄:运行所有类别、运行某一类别的全部测试,或运行一个精确的类别—测试组合。新提交用嵌套循环替换了这些分支。提交说明分别展示了多个类别和多个测试,却没有定义两者同时出现时的完整组合,也没有说明不存在的单元格应当如何呈现。

不能据此推断作者有意设计了这个组合场景,更不能断言作者知道哪些路径缺失。能够确认的只是两个“完成”概念已经分离:对于 shell 函数,路径不存在时返回零意味着调用结束;对于测试报告,那个组合从未取得测试身份。两者之间缺少一张对账单。

锁定版本的 README把 Rapport 描述为一个仍处于早期开发阶段、用 shell 脚本实现的 RPKI relying party 测试工具,每次运行针对一个 relying party 实现。运行器识别 fort 系列、Routinator、rpki-client 和 rpki-prover,并提醒使用者:测试套件本身可能有误,不同 relying party 也可能得出不同结果。正因为比较存在这些边界,知道究竟执行了哪些场景才更重要。

LACNIC 在其开源项目介绍中列出 Rapport,公开仓库则提供了可审查的代码依据。这些来源没有把 Rapport 定义为认证体系、采购门槛或生产验证器,本文也不作此类推断。这里讨论的是公开测试工具如何留下选择证据。

在结果之前生成选择凭证

一个小而明确的改进,是在检查路径和执行场景之前生成选择凭证。凭证可以记录原始参数、规范化后的类别和测试标记,以及展开后的每一个组合。每个组合再标明路径是否存在、处理决定是“执行”还是“路径缺失”;实际运行后,再补上 TESTID 与原有四类结果之一。

凭证不必把缺失定义为错误。它只需让处理过程可见,使操作方可以区分有意稀疏的矩阵、拼写错误、已经改名的测试,或本来就不适用于某类场景的组合。自动化系统也可以分别比较请求数、存在数、执行数与报告数,而不是从沉默中猜测分母。

Rapport 现有四类结果回答的是“场景返回了什么”。缺失的证据位于更早一步:操作方请求的每个单元格,最后得到了什么处置。