CTF 使用手冊

這份使用手冊提供相容性測試的完整總覽 對 Fuchsia (CTF) 而言,這是一項可凍結分支版本構件的機制 並在 main 分支版本中載入這些模組進行測試。

CTF 最常見的用途是在發布分支版本上凍結測試,以及 然後針對 CI/CQ 中 main 分支版本的元件執行這項測試。這個 避免回溯不相容的變更,會導致預先建構的用戶端中斷。

如要進一步瞭解 CTF 的整體情況,請參閱總覽動機。 文件。

基本用法

本節說明如何使用 CTF 以及常見情境。

驚喜包廂套票

如要凍結名為 my-package 的 Fuchsia 套件,請按照下列步驟操作:

  1. 將套件從 fuchsia_package 變更為 ctf_fuchsia_package
  2. {PACKAGE_NAME}_archive 目標納入 //sdk/ctf/tests:tests.

範例:

# Old src/my-package/BUILD.gn
import("//build/components/fuchsia_package.gni")

fuchsia_package("my-package") {
  # ...
}

將檔案變更為以下程式碼:

# New src/my-package/BUILD.gn
import("//sdk/ctf/build/ctf.gni")

ctf_fuchsia_package("my-package") {
  # ...
}

然後更新 //sdk/ctf/tests/BUILD.gn

group("tests") {
  deps = [
    # ...
    "//src/my-package:my-package_archive",
  ]
}

您也可以在本機 BUILD.gn 中建立 group("ctf_tests"), 並在 //sdk/ctf/tests/BUILD.gn 中參照該 ID。

系統會編譯您的套件,並將套件儲存在 ctf-artifacts 當 Fuchsia 里程碑推出時。完成這個步驟後 必須附上載入檔案包的操作說明 (請參閱下一節)。

正在載入 Fuchsia 套件

如要載入凍結的 Fuchsia 套件,請先進行更新 generate_ctf_tests.gni敬上 ,附上載入檔案包的操作說明。

您需要在 generate_ctf_tests.gni 中定義新範本 檔案名稱為 generate_my-package,且這個範本必須展開為 Fuchsia 測試套件。

範本會收到名為 test_info 的參數 包含下載套件的標籤 test_info.target_label

例如:

template("generate_my-package") {
  forward_variables_from(invoker, [ "test_info" ])
  fuchsia_package_with_test(target_name) {
    test_component = "//src/my-package:my-package-test-root",
    test_component_name = "test-root.cm"
    subpackages = [
      test_info.target_label, # prebuilt version of the test suite.
      # other packages needed to implement the test, such as a RealmFactory.
    ]
  }
}

凍結主機測試

如要凍結主機測試,請按照下列步驟操作:

  1. 將建構規則從 host_test 變更為 ctf_host_test
  2. 將該目標納入 //sdk/ctf/tests:tests.

範例:

# Old src/my-host-test/BUILD.gn
import("//build/testing/host_test.gni")

host_test("my-host-test") {
  # ...
}

將檔案變更為以下程式碼:

# New src/my-host-test/BUILD.gn
import("//sdk/ctf/build/ctf.gni")

ctf_host_test("my-host-test") {
  # ...
}

然後更新 //sdk/ctf/tests/BUILD.gn

group("tests") {
  deps = [
    # ...
    "//src/my-host-test:my-host-test",
  ]
}

您也可以在本機 BUILD.gn 中建立 group("ctf_tests"), 並在 //sdk/ctf/tests/BUILD.gn 中參照該 ID。

這會導致主機測試及其依附元件 在下一個 Fuchsia 里程碑發布時,ctf-artifacts。 完成這個步驟後,您的測試將會自動以 CTF 語言執行 使用您傳遞給 ctf_host_test 的任何引數。

基本概念

CTF 包含兩種機制:

  1. 建構規則以凍結構件並上傳至 CIPD
  2. 建構規則來監控構件並轉向 並進行測試

凍結和載入程序會在 fuchsia.git 的尖端執行 本機測試的存放區,透過 //sdk/ctf 建構目標。包含 在 fx set 引數中,--with-test //sdk/ctf 會產生以下結果: 建構輸出內容:

$FUCHSIA_DIR/out/default/cts/host_test_manifest.json
$FUCHSIA_DIR/out/default/cts/package_archives.json
$FUCHSIA_DIR/out/default/cts/*.far       # Packages referenced in manifest
$FUCHSIA_DIR/out/default/cts/host_x64/*  # Host tests referenced in manifest

這可同時帶來原始測試和新版測試 包含在建構中的容器:

$ fx test --dry
...
  fuchsia-pkg://fuchsia.com/fuchsia-diagnostics-tests-latest#meta/fuchsia-diagnostics-tests-root.cm
  fuchsia-pkg://fuchsia.com/fuchsia-driver-test_tests-package#meta/test-root.cm
...
  fuchsia-pkg://fuchsia.com/fuchsia-diagnostics-tests_ctf_in_development#meta/fuchsia-diagnostics-tests-root.cm
  fuchsia-pkg://fuchsia.com/fuchsia-driver-test_tests_ctf_in_development#meta/test-root.cm

generate_ctf_tests.gni 中定義的規則如下: 負責移除 package_archives.json 中提及的套件 變更成正常的 Fuchsia 測試套件。因為這些 套件從 CTF 組件竊取的; 都具有 ctf_in_development 後置字串這些測試都能 使用 fx test 執行。

每個 Fuchsia 里程碑 (例如 F16 和 F17) 的發布版本為 已與 Git 中的發布分支版本相關聯 (例如 refs/heads/releases/F16。系統會透過 進而產生新的 ctf ,當中包含資訊清單中參照的套件和主機測試。 不過,在版本分支版本上,系統會壓縮產生的目錄 上傳至 CIPD,做為預先建構的記錄檔 jiri run-hooks。您可以在 在 prebuilt/ctf/f* 結帳,找到一次價格:fuchsia.git 每個 Fuchsia 里程碑發布的目錄。可靠資料來源 哪些里程碑預先建構的套件 version_history.json,列出 supported 要測試的 API 級別。

//sdk/ctf/release:tests 中定義的建構目標會疊代 並套用 generate_ctf_tests.gni 適用的規則 下載套件的方式 和開發中套件一樣 他們被盜獵了。您可以在 fx set 引數中使用 --with-test //sdk/ctf/release:tests 即可加入這些參數。

這項操作會在建構作業中新增每個支援等級的新測試:

$ fx test --dry
...
  fuchsia-pkg://fuchsia.com/fuchsia-diagnostics-tests_ctf18#meta/fuchsia-diagnostics-tests-root.cm
  fuchsia-pkg://fuchsia.com/fuchsia-driver-test_tests_ctf18#meta/test-root.cm
...
  fuchsia-pkg://fuchsia.com/fuchsia-diagnostics-tests_ctf19#meta/fuchsia-diagnostics-tests-root.cm
  fuchsia-pkg://fuchsia.com/fuchsia-driver-test_tests_ctf19#meta/test-root.cm

每項已建立測試的測試都有一個字尾,可指出發布分支版本,位置是 凍結的套件 (例如 ctf18、F18 和 F19 的 ctf19) )。所有這些測試都可以使用 fx test 執行。

疑難排解失敗情形

CTF 測試會在不相容時失敗 於冷卻套件之間 fuchsia.git,這會導致 core.x64-debug-ctf 建構工具 無法順利提交變更詳情請參閱 如需詳細操作說明,請參閱疑難排解指南 以及如何解決 CL 提交的失敗問題。