前言
本文件主要著重於測試 Scudo、GWP-ASan 和 LLVM-libc 的變更,也就是說文件使用這些範例,但概念會轉移至任何 third_party/ 專案。適用對象為 Fuchsia 開發人員和上游專案的開發人員,例如尚未提供 Fuchsia 結帳功能或熟悉版本的開發人員。
結帳
如果還沒有 Fuchsia 結帳,請按照這裡的步驟操作。
執行測試
如要進一步瞭解如何建立及執行測試,請參閱「設定及建構 Fuchsia」和「執行 Fuchsia 測試」。如需快速摘要,請參閱下文。
所有方法都會返回測試的實際執行方式。而所有 third_party/ 測試的執行方式會不同 (如果有執行)。建議您開始回覆 *.gn{,i}
檔案,查看這些專案在建構中的參照位置。如果是 Scudo,它屬於 libc 版本的一部分,以及與它有關的大部分建構邏輯,您可以在 //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-test-pkg
有一些 GWP-ASan 測試。如果只要執行這些測試,請執行 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 都會由自動滾動器叫用,如果破壞版本或測試停止通過,則不會失敗。如要在本機進行測試,請將自動滾動器所建立的差異套用至 //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 本機副本,也就是 https://llvm.googlesource.com/scudo
,然後推送至可存取的 Git 主機。詳情請參閱 go/gob/users/user-repository、go/gob/users/team-repository 和 go/gob/users/new-host。變更專案的遠端,使其指向主機存放區位址。變更本機副本,並將修訂版本變更為您要測試的修訂版本。完成發布後,請前往審查頁面新增要測試的特定機器人。
範例:tqr/634497