序言
本文档主要侧重于测试对 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