我有几百个不同的*。Rego文件,每个都有不同的规则。每个规则都需要检查输入中的用户角色和方法。所以我决定用以下内容创建一个functions.rego
package abc.functions
method_and_role_valid(in, meth, role) {
in.method == meth
in.current_user_roles[_] == role
}
其他文档可以导入这个函数,而不必一次又一次地重新定义它,例如
package opa.abc.institutions.view
import data.abc.functions
default allow = false
allow {
functions.method_and_role_valid(input, "view", "administrator")
}
这项工作。但是,我需要为每条规则编写测试。在阅读了opa关于测试的指导方针,特别是模拟函数和数据之后,我尝试做以下操作
package opa.abc.institutions.view
test_allow_1 {
allow with input as {"method": "view", "current_user_roles": ["authenticated"]} with data.abc.functions.method_and_role_valid as true
}
test_deny_2 {
not allow with input as {"method": "view", "current_user_roles": ["authenticated"]} with data.abc.functions.method_and_role_valid as false
}
这会产生错误rego_type_error: undefined function data.abc.functions.method_and_role_valid
文档显示了内置函数的模拟示例(也用单个布尔值替换函数),真的没有办法模拟"custom"像我一样在虚拟文档中定义函数?
在你的代码中运行opa test .
似乎可以正常工作:
❯ opa test .
PASS: 2/2
运行测试时是否忘记包含所有文件?