2017-07-28 35 views
1

我正在嘗試使用bazel restricted_to屬性進行測試。使用[bazel] restricted_to屬性

我希望測試只能在特定的cpu = build上運行。

爲了使這個稍微複雜一些,CPU類型在我們

/tools/cpp/CROSSTOOL file (cpu=armhf-debian). 

我已經沒有運氣猜測restricted_to參數 的語法(我的第一個猜測是//cpu:armhf-debian定義,它只是看着對於CPU封裝)

有什麼建議嗎?

回答

2

關於restricted_to以及其他適用於environment_group和environment_group的規則,沒有太多文檔。這主要是因爲它的用例對於Google的存儲庫設置非常具體,我們正在用更靈活的系統替換它們。

要使用restricted_to,您需要定義幾個環境規則和一個environment_group來包含它們,然後指定測試限制在哪個環境,最後始終使用「--target_environment」標誌指定當前環境組。這將是這個樣子:

environment(name = "x86") 
environment(name = "ppc") 
environment_group(
    name = "cpus", 
    defaults = [":x86"], 
    environments = [ 
    ":x86", 
    ":ppc", 
    ]) 

cc_test(
    name = "test", 
    other config 
    restricted_to = [":ppc"],) 

然後,您可以運行測試像這樣:

bazel test --target_environment=//:ppc //:test 

,以獲得環境檢查。

這並不是非常有用,因爲運行測試的人還必須正確設置「--target_environment」。

一種更好的方式來禁用測試,使用目前支持的代碼,是用config_setting和選擇,像這樣:

config_setting(
    name = "k8", 
    values = {"cpu": "k8"}) 
config_setting(
    name = "ppc", 
    values = {"cpu":, "ppc") 

cc_test(
    name = "test", 
    other config 
    srcs = [other sources] + 
    select({ 
     "//:x86": ["x86_test_src.cpp"], 
     "//:ppc": ["ppc_test_src.cpp"], 
     "//conditions:default": ["default_test_src.cpp"], 
    }) 

config_setting將基於當前的「--cpu」標誌的值。通過更改select中包含的文件,可以控制測試中包含的每個cpu設置的文件。

很明顯,這些不必位於同一個包中,而是應用通常的Bazel可見性規則。有關config_setting的示例,請參閱Bazel的src/BUILD;有關在select中使用它的示例,請參見src/test/cpp/BUILD

我們在平臺上努力工作,這是一種更好的方式來描述和查詢Bazel的執行環境,我們將確保發佈文檔和博客文章,以便人們可以測試。