Testing Rego测试:如何测试;不否认;?
我正在探索使用Testing Rego测试:如何测试;不否认;?,testing,open-policy-agent,rego,Testing,Open Policy Agent,Rego,我正在探索使用opa test测试我的Rego策略,从以下这条琐碎的规则开始: deny["Must be allowed"] { input.allowed == "no" } 我能够针对一个被拒绝的案例成功地测试这一点: test_denied_example { deny with input as {"allowed":"no"} } 但是,当我尝试针对一个应该允许的情况进行测试时,如下所示: test_allowed_example { not deny with in
opa test
测试我的Rego策略,从以下这条琐碎的规则开始:
deny["Must be allowed"] {
input.allowed == "no"
}
我能够针对一个被拒绝的案例成功地测试这一点:
test_denied_example {
deny with input as {"allowed":"no"}
}
但是,当我尝试针对一个应该允许的情况进行测试时,如下所示:
test_allowed_example {
not deny with input as {"allowed":"yes"}
}
我得到一个错误:
data.example.test_allowed_example: FAIL (330.534µs)
Enter data.example.test_allowed_example = _
| Enter data.example.test_allowed_example
| | Fail not data.example.deny with input as {"allowed": "yes"}
| Fail data.example.test_allowed_example = _
除了知道test\u allowed\u示例
是失败的测试之外,我无法真正解析此错误消息
如何正确地测试允许输入(不拒绝)的案例;你可以这样说:
count(deny)==0,输入为{“允许”:“是”}
deny==set(),输入为{“允许”:“是”}
not deny[“必须允许”],输入为{“允许”:“是”}
deny
规则,这是一个好主意
not deny with input as…
语句失败,因为not
关键字仅反转未定义/错误的语句(使其为真)。在这种情况下,deny
引用一组值。该集合可以为空,但决不能为未定义/false
在OPA/Rego中,所有规则都只是为变量赋值的IF-THEN语句。如果“If”部分是规则体中的逻辑。“THEN”部分是规则头中的赋值。有两种IF-THEN语句(又名规则):
deny=true{input.allowed==“no”}
deny[msg]{input.allowed==“no”}
deny=true{…}
和deny{…}
的意思相同。)当规则的“If”部分为true/满足时,将为变量赋值。当规则的“IF”部分为false/未满足时,变量未定义。这与false
略有不同,但在大多数情况下并不重要
部分规则为一个变量分配多个值。换句话说,它们定义了一组值。当规则的“如果”部分为真/满足时,规则头中定义的值将添加到集合中,否则不添加该值。如果没有向集合中添加任何值,它仍然是定义的--它只是空的
导言中介绍了这一点:
有关规则的更多示例和信息,请参见TLDR;你可以这样说:
count(deny)==0,输入为{“允许”:“是”}
deny==set(),输入为{“允许”:“是”}
not deny[“必须允许”],输入为{“允许”:“是”}
deny
规则,这是一个好主意
not deny with input as…
语句失败,因为not
关键字仅反转未定义/错误的语句(使其为真)。在这种情况下,deny
引用一组值。该集合可以为空,但决不能为未定义/false
在OPA/Rego中,所有规则都只是为变量赋值的IF-THEN语句。如果“If”部分是规则体中的逻辑。“THEN”部分是规则头中的赋值。有两种IF-THEN语句(又名规则):
deny=true{input.allowed==“no”}
deny[msg]{input.allowed==“no”}
deny=true{…}
和deny{…}
的意思相同。)当规则的“If”部分为true/满足时,将为变量赋值。当规则的“IF”部分为false/未满足时,变量未定义。这与false
略有不同,但在大多数情况下并不重要
部分规则为一个变量分配多个值。换句话说,它们定义了一组值。当规则的“如果”部分为真/满足时,规则头中定义的值将添加到集合中,否则不添加该值。如果没有向集合中添加任何值,它仍然是定义的--它只是空的
导言中介绍了这一点:
有关规则的更多示例和信息,请参见谢谢,详细说明为甲烷储罐澄清了rego中的变量行为,详细说明为我澄清了rego中的变量行为