前言
本文主要著重於測試 Scudo、GWP-ASan 和 LLVM-libc 的變更,因此本文會以這些項目做為範例,但這些概念會轉移至任何 third_party/ 專案。這項工具適用於 Fuchsia 開發人員,以及可能沒有 Fuchsia 檢查或不熟悉該版本的源端專案開發人員。
取得結帳資料
如果您還沒有 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
,請參閱build 說明文件瞭解更多詳細資訊,但這個設定是良好的預設值。這項操作只需執行一次。
然後執行 ffx emu start --headless
。這會啟動模擬器,並建構所需的所有項目。您也可以在背景或前景中執行 fx serve
,但在後者情況下,請建立新的終端機工作階段。這兩項作業只需執行一次,但如果這些作業停止運作或機器重新啟動,就需要再次執行。注意:如果您使用 jiri update
,建議您重新建構並重新啟動模擬器和套件服務。
如要執行測試,您可以根據感興趣的測試,查看哪個測試目標會結束。Scudo 測試會整合至 libc-unittests-pkg
的 libc 測試,其中包含一些 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 都會透過自動滾動器導入,如果這些項目破壞了建構作業,或是測試停止通過 (無論是自身或其他樹狀結構測試),就會失敗。如要在本機測試這項功能,請將自動滾動器建立的差異套用至 //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"/>
請複製遠端的 git (此處為 https://llvm.googlesource.com/scudo
),然後推送至可存取的 git 主機。請參閱 go/gob/users/user-repository、go/gob/users/team-repository 和 go/gob/users/new-host。變更專案的遠端,指向主機存放區地址。對複本進行變更,並將修訂版本變更為要測試的修訂版本。接著,請推送變更、前往審查頁面,然後新增要測試的特定機器人。
示例:tqr/634497