檢查驗證工具木偶架構

總覽

驗證工具系統會傳送 FIDL 指令來控制「puppet」程式,並叫用程式庫功能修改「驗證工具」進行評估的某些狀態。如要進一步瞭解檢查驗證工具,請參閱 README

Puppet 包含以下部分:

  • 提供 FIDL 通訊協定。
  • 解壓縮通訊協定並發出程式庫呼叫。
  • 建立包含 Puppet 和 驗證工具計畫的整合測試。

本文件重點說明位於 //src/diagnostics/validator/inspect/lib/rust/src/main.rs 的檢查驗證工具 Rust Puppet。

FIDL 設計

檢查 Puppet 的 FIDL 通訊協定是在 //src/diagnostics/validator/inspect/fidl/inspect_puppet.fidl 中定義。FIDL 通訊協定與 Inspect Library API 中的函式緊密對應,後者定義了要套用至任何 Inspect API 實作的動作。系統會編寫 FIDL API 來對應 Rust API

(注意:檢查 API 允許與 Rust API 不同,這類 API 可能需要修改基礎程式碼架構。)

提供 FIDL

main() 函式會執行樣板,透過 run_driver_service() 提供單一 FIDL 用戶端,該用戶端會從 FIDL 串流接收 InitializeAct 事件。Act 事件會由 Actor 物件解壓縮,該物件會維持控管 Inspect 程式庫所需的狀態。

Actor 和 Inspect 程式庫

Actor 包含 Inspector (檢查程式庫的進入點物件)、nodes 的雜湊對應,以及 properties 的雜湊對應。它會實作一個函式 act(),其中包含巨大的 match 陳述式 (其他語言的「switch」或「case」),以叫用程式庫實作的每個動作。針對程式庫不支援的動作,小狗可以回報 Unimplemented

驗證工具叫用每個動作後,就會測試程式庫在 VMO 上的作用。程式庫應處理動作的效果,以便驗證工具看到這些動作的效果。

nodesproperties 的雜湊對應儲存值,會由檢查程式庫傳回。由於 Rust 是一種 RAII 語言,會在參考記憶體遺失時自動清理,若無法儲存節點或屬性,可能會導致該節點或屬性立即遭到刪除。此外,儲存屬性可讓您更新其值,以回應 FIDL 指令。

測試與建構系統

驗證工具和 Puppet 組合應進行密封整合測試。

依附元件和名稱

Validator 的 BUILD.gn 檔案定義了 validator_bin 目標,該目標由 Rust puppet BUILD.gn 檔案使用,做為名為 inspect_validator_test_rusttest_package() 依附元件 (用於執行 Rust 木偶的測試)。

Rust 玩偶本身屬於元件。該建構規則會產生 inspect_validator_rust_puppet,包含在 fuchsia_unittest_package() 的二進位檔中。

驗證工具的 Build.gn 檔案中的 validator_bin 目標包含在 fuchsia_unittest_package()deps 中。

CQ/CI

inspect_validator_test_rust 放在 group("tests")depsBUILD.gn 即可輕鬆將 inspect_validator/lib/rust:tests 加入 src/diagnostics/BUILD.gngroup("tests") 中。deps建構系統會擷取這項資訊,並導致檢查驗證工具 Rust Puppet 測試在 CQ 和 CI 中執行。

Meta .cml 檔案

//src/diagnostics/validator/inspect/meta 包含下列 CML 檔案:

  • puppet.shard.cml

    讓 Puppet 二進位檔執行、使用記錄器和檢查,並提供 Verify 通訊協定。

  • validator.cml

    • use: protocol: 會指定驗證工具需要執行的服務。
      • fuchsia.diagnostics.ArchiveAccessor 可讀取布偶已發布的檢查資料。
      • diagnostics.validate.InspectPuppet 可控制木偶。
    • children: name: "puppet" 會將木偶放到元件階層中。
    • children: url: "#meta/puppet.cm" 可讓系統找到並載入木偶。
    • 需要 offer: protocol: "fuchsia.logger.LogSink" 才能顯示布偶的記錄。
    • 為各個小狗提供驗證工具的必要結構化設定。
  • test.shard.cml

    定義執行「檢查驗證工具」測試管理工具所需的功能,這是驗證工具及元件的父項。

這些資料分割會由 Puppet 和驗證者的 CML 檔案在每個 puppet 目錄中使用,或由測試管理員使用。目前有 4 隻木偶:

驗證工具控制器的 CML 是以 fuchsia_unittest_package() (適用於 Rust 或 C++) 或 fuchsia_unittest_component() (適用於 Go) 的 manifest 金鑰來表示。