测试第三方更改

序言

本文档主要侧重于测试对 Scudo、GWP-ASan 和 LLVM-libc 的更改,因此本文档以这些为示例,但相关概念将转给任何第三方/ 项目。适用于 Fuchsia 开发者,以及可能没有 Fuchsia 签出或熟悉 build 的上游项目的开发者。

正在结账

还没有 Fuchsia 结账服务的用户可以按照此处的步骤操作。

运行测试

如需详细了解如何构建和运行测试,请参阅配置和构建 Fuchsia 以及运行 Fuchsia 测试。有关快速摘要,请参阅下文。

所有方法都将参考测试的实际运行方式。所有 third_party/ 测试都将以不同的方式运行(如果运行的话)。建议您首先针对 *.gn{,i} 文件执行 grep 命令,以查看这些项目在 build 中的引用位置。对于 Scudo,它是 libc 构建的一部分,与 Scudo 和其测试相关的大部分构建逻辑都可以在 //zircon/system/ulib/c/scudo/BUILD.gn 中找到。对于此特定目标,它依赖于 //zircon/system/ulib/c:tests

首先运行 fx set core.x64 --with //zircon/system/ulib/c:tests,请参阅构建文档了解详情,不过此配置是一个不错的默认配置。此操作只需运行一次。

然后运行 ffx emu start --headless。这将启动模拟器并构建其需要的任何内容。此外,还应在后台或前台运行 fx serve,但如果是后者,则需要创建一个新的终端会话。这两个命令都只需运行一次,但如果它们终止或机器重启,则需要再次运行。注意:如果 jiri update,最好重新构建并调整模拟器和软件包提供方式。

如需运行测试,您可以查看最终的结果取决于您感兴趣的测试。Scudo 测试会放入 libc 测试中,它们为 libc-unittests-pkg、一些 GWP-ASan 测试以及 gwp-asan-test-pkg。运行 fx test -v libc-unittests-pkg gwp-asan-test-pkg 即可仅运行这些测试。如有疑问,fx test -v 可以在不使用任何参数的情况下运行,以运行所有测试。如果您仅添加了 //zircon/system/ulib/c:tests,用时不会太长。

在本地测试更改

要在本地测试更改,只需将补丁应用到相应的 //third_party 目录即可。通常为 //third_party/${proj}/src,但对于 GWP-ASan,它位于 //third_party/scudo/gwp-asan 中。应用差异后,请照常运行测试,然后目标将根据新的更改重新构建。这是一种对您在上游提交的更改进行快速迭代的好方法,或者在他人提交之前测试其他人的更改。

测试失败的掷骰子

所有 Scudo、gwp-asan 和 llvm-libc 都由自动滚动程序卷入,如果它们破坏构建或如果测试停止通过(它们或树测试中的其他组件),它们将失败。如需在本地进行测试,请将自动滚动器创建的 diff 应用到 //integration,这只是一行更改,增加了该项目的修订版本。如需手动修改提交哈希值以在另一个修订版本中进行测试,请手动更改该文件或运行 jiri edit -project=${proj}=${hash} ${manifest},其中清单可能是 //integration/fuchsia/third_party/flower。然后运行 jiri update -local-manifest,这将提取 //integration 目录中指定的新更改。在这里,jiri 可能会给出错误,指出 //integration 中有未提交的更改,但这实际上不会阻止 jiri 正确更新第三方项目。如果这给您带来了困扰,请在 //integration 中创建一个新分支并提交您的更改,这样会使 jiri 直接警告 //integration 不在 JIRI_HEAD 上。为确保您的项目得到正确更新,请运行 cat ${path_to_proj}/src/.git/HEAD。照常运行测试。

[仅限 Google 员工] 利用聊天机器人

只有 Google 员工才能将更改推送到 //integration 并查看 tqr/

有些故障仅发生在某些设备上,如果无法在本地访问这些故障,则无法在本地重现。这些情况应该极为罕见,因此工作流程不是特别优化。首先,找到您要测试的项目。在 Scudo 中,项目如下所示:<project name="scudo" gitsubmoduleof="fuchsia" path="third_party/scudo/src" remote="https://llvm.googlesource.com/scudo" revision="b0c7c7b80b6dfa2cd0b5dae98cb1ea33d31d2497"/> 为遥控器创建一个 git clone(此处为 https://llvm.googlesource.com/scudo),并将其推送到可访问的 Git 主机。请参阅 go/gob/users/user-inventory、go/gob/users/team-repo 和 go/gob/users/new-host。将项目的遥控器更改为指向您的主机代码库地址。对克隆进行更改,并将修订版本更改为您要测试的修订版本。之后,推送您的更改,转到审核部分,然后添加您要测试的特定聊天机器人。

示例:tqr/634497