對 CTF 做出測試

本指南說明如何新增移除 CTF 測試。

如何將測試新增至 CTF

開始之前,請先詳閱 CTF 測試規定。最常見的需求是,測試必須先使用測試領域,才能遵循本指南。

如果測試位於 //sdk/ctf/tests:tests 的群組中,則測試會納入 CTF。 將測試新增至這個群組之前,必須先重新編寫建構規則,才能使用 CTF 版本。很抱歉,您必須採取這項必要步驟,不久後就會停用。

如要在這個群組中新增測試,請在包含測試 fuchsia_test_component 目標的 BUILD.gn 檔案中執行下列步驟。

1. 匯入 CTF 建構規則

import("//sdk/ctf/build/ctf.gni")

2. 使用 CTF GN 範本

將測試的 fuchsia_package 宣告替換為 ctf_fuchsia_package

使用前

fuchsia_package("fuchsia-example-tests") {
  testonly = true
  package_name = "fuchsia-example-tests"
  deps = [ ":fuchsia-example-test-component" ]
}

使用後

ctf_fuchsia_package("fuchsia-example-tests") {
  testonly = true
  package_name = "fuchsia-example-tests"
  deps = [ ":fuchsia-example-test-component" ]
}

3. 將測試版本封存新增至建構圖表

ctf_fuchsia_package 會產生 ${target_name}_archive 目標,以產生測試的 FAR 封存檔。這個封存內容是 CTF 中發布的內容。將 group("tests") 目標新增至 BUILD.gn 檔案 (如果該檔案不存在),然後將封存新增為依附元件:

group("tests") {
  testonly = true
  deps = [
    ":fuchsia-example-tests_archive",
    ...
  ]
}

您已成功將 group("tests") 新增至 BUILD.gn 檔案。現在,您可以將該群組新增至 //sdk/ctf/tests:tests

4. 新增 GN 範本以建構預先建構的 CTF 測試

如要指示 CTF 如何將測試的預先建構套件建構至可執行的目標,請建立 GN 範本,此範本會產生套件,與用於執行最新版測試的 fuchsia_test_package 相同。舉例來說,如果測試根元件和測試套件看起來像這樣:

fuchsia_test_component("fuchsia-example-test-root") {
  testonly = true
  manifest = "meta/fuchsia-example-test-root.cml"
  test_type = "ctf"
}

fuchsia_test_package("fuchsia-example-tests-latest") {
  test_components = [ ":fuchsia-example-test-root" ]
  subpackages = [
    ":fuchsia-example-tests", # latest version of the test suite.
    ":fuchsia-example-test-realm-factory",
  ]
  deps = [ ":fuchsia-example-test-helper" ]
}

接著將這個範本新增至 //sdk/ctf/build/generate_ctf_tests.gni

template("generate_fuchsia-example-tests") {
  forward_variables_from(invoker, [ "test_info" ])
  fuchsia_package_with_test(target_name) {
    test_component = "//path/to/test:fuchsia-example-test-root",
    test_component_name = "test-root.cm"
    subpackages = [
      test_info.target_label, # prebuilt version of the test suite.
      "//path/to/test:fuchsia-example-test-realm_factory"
    ]
    deps = [ "//path/to/test:fuchsia-example-test-helper" ]
  }
}
  • 如要讓 CTF 比對此範本與預先建構的測試套件,此範本必須generate_{package_name} 命名,且 package_name 必須與測試的原始 ctf_fuchsia_package 名稱相符。
  • 這個範本子套件是 test_info.target_label,而非 :fuchsia-example-tests,因為前者會指向 CIPD 的預先建構測試版本,後者會指向透過來源建構的最新版本。

5. 測試變更

如要確認這些步驟是否已正確完成,請執行下列指令:

fx set core.x64 --with //sdk/ctf:ctf_artifacts
fx build

建構應會顯示錯誤提示,以執行更新 //sdk/ctf/goldens/package_Archives.json 的指令。執行該指令,然後再次執行 fx build

在這個階段,如果上一步驟中定義的 GN 範本缺少,或無法比對預先建構的測試與 GN 範本,建構作業會輸出錯誤。如果一切都成功,即可使用下列指令執行測試:

fx test fuchsia-example-test_ctf<N>

由於這是目前版本預建測試的版本,而非先前 CTF 版本的某些版本,因此 N 是 Fuchsia 平台目前的開發 API 級別。

6. 提交變更

將變更送審。提交測試後,當剪下下一個里程碑分支版本時,系統會自動將測試納入下一個 CTF 版本。如要提出其他審查要求,請聯絡 fuchsia-ctf-team@google.com

如何從 CTF 移除測試

如何從日後的 CTF 版本中移除測試:

  1. 從建構圖中移除測試封存
  2. 刪除測試的gn Template
  3. 從測試的建構規則中移除 ctf 範本

請將這些變更提交至主要分支版本。隨著時間過去,系統會停止支援與各版本對應的所有 API 級別,且最後一個測試版本也會停止在 CQ 中執行。

如果您必須立即從 CQ 中移除一項測試和其所有預先建構的版本,則是按照 Fuchsia 的變更控製程序,挑選 CL,從每個對應的版本分支中移除測試。舉例來說,如果您想要從 API 級別 20 的 CTF 版本移除測試,就必須將 CL 選入 releases/f20 分支版本中。

測試規定

每項測試都必須符合這些規定,才能新增至 CTF。

CTF 測試必須使用測試領域工廠模式

測試領域工廠模式可讓建構在 CTF 中對測試套件元件的版本進行版本管理,而不必管理測試元件的版本。請先詳閱測試領域工廠指南,並視需要重構測試,然後再按照本指南操作。

CTF 測試只能依附於合作夥伴端的 ABI

CTF 測試只能在執行階段依附合作夥伴 SDK 類別中的軟體,因為測試會強制讓依附元件保持穩定。這並非由預先提交檢查強制執行。一般來說,測試作者只需驗證測試套件元件使用的 FIDL 通訊協定,就在 partner SDK 類別中。

CTF 測試必須以 C、C++ 或 Rust 編寫

撰寫 CTF 時,僅支援這些語言。