测试第三方更改

序言

本文档主要侧重于测试对 Scudo、GWP-ASan 和 LLVM-libc 的更改,因此本文档将这些内容用作示例,但这些概念可应用于任何 third_party/ 项目。本指南面向 Fuchsia 开发者和可能没有 Fuchsia 代码库或不熟悉 build 的上游项目开发者。

获取结账信息

如果您还没有 Fuchsia 结账账号,可以按照此处的步骤操作。

运行测试

如需有关构建和运行测试的进一步文档,请分别参阅配置和构建 Fuchsia运行 Fuchsia 测试。如需简要了解,请参阅下文。

所有方法都将回归到实际运行测试的方式。所有 third_party/ 测试都会以不同的方式运行(如果运行的话)。一个不错的起点是使用 grep 搜索 *.gn{,i} 文件,看看这些项目在构建中的引用位置。对于 Scudo,它是 libc 构建的一部分,与其相关的大多数构建逻辑及其测试都可以在 //sdk/lib/c/scudo/BUILD.gn 中找到。对于此特定目标,它受 //sdk/lib/c:tests 的依赖。

首先运行 fx set core.x64 --with //sdk/lib/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 来运行所有测试,如果您只包含 //sdk/lib/c:tests,则运行时间不会太长。

在本地测试更改

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

测试失败的滚动

scudo、gwp-asan 和 llvm-libc 均由自动滚动器引入,如果它们破坏了 build 或测试(包括它们自己的测试或树中的其他测试)停止通过,则会失败。如需在本地进行测试,请将自动滚动器创建的差异应用于 //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" path="third_party/scudo/src" remote="https://llvm.googlesource.com/scudo" revision="b0c7c7b80b6dfa2cd0b5dae98cb1ea33d31d2497"/> 对远程(此处为 https://llvm.googlesource.com/scudo)进行 git 克隆,然后推送到可访问的 git 主机。请参阅 go/gob/users/user-repository、go/gob/users/team-repository 和 go/gob/users/new-host。将项目的远程更改为指向您的主机代码库地址。对克隆内容进行更改,并将修订版本更改为您要测试的修订版本。然后,推送更改,前往“审核”部分,然后添加您要测试的特定聊天机器人。

示例:tqr/634497