簡體   English   中英

在 conftest 規則中使用 contains

[英]Using contains in conftest rules

我有以下 XML(它是一個 dotnet 項目文件:

<Project Sdk="Microsoft.NET.Sdk">
  <ItemGroup>
    <None Remove="appsettings.json" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="LoadA1Test" />
  </ItemGroup>
</Project>

並遵循以下規則:

package main

project_reference = input.Project.ItemGroup[i].ProjectReference

deny[msg] {

    not project_reference[i]["-Include"] = "XYZ"
    msg = sprintf("in %s works \n", [project_reference[i]])
}

deny[msg] {
    
    not contains(project_reference[i]["-Include"],"XYZ")
    msg = sprintf("in %s doesn't work \n", [project_reference[i]])
}

當我嘗試使用 conftest 進行驗證時,第一條規則按預期失敗,但第二條規則通過了。 我嘗試了幾個選項,但我不知道我做錯了什么。

有幾件事看起來有點奇怪:

  • 對項目組的迭代需要進入規則內部。
  • 使用!= x來檢查字符串是否不等於 x。

而且我認為您不需要重用i迭代器,因為您正在項目參考中查找映射鍵。 像這樣的事情可能會做:

package main

deny[msg] {
    project_reference := input.Project.ItemGroup[_].ProjectReference
    project_reference["-Include"] != "XYZ"
    msg = sprintf("-Include (%v) != XYZ", [project_reference["-Include"]])
}

deny[msg] {
    project_reference := input.Project.ItemGroup[_].ProjectReference
    not contains(project_reference["-Include"], "XYZ")
    msg = sprintf("-Include: (%v) does not contain XYZ", [project_reference["-Include"]])
}

雖然我不確定邏輯,因為如果 -Include 值不完全是 XYZ,那么第一個規則總是會失敗,所以如果 -Include 沒有,那么添加另一個拒絕也沒有多大意義不包含該值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM