如何测试违规?

时间:2019-12-10 19:52:45

标签: open-policy-agent

我偶然发现的测试似乎已经重新进行了很多测试。

我正在调查与Gatekeeper的冲突。

例如,this Constraint Template策略将测试容器来自的仓库:

Exception in thread "main" java.lang.NullPointerException
at maus.move(maus.java:23)
at Main.main(Main.java:8)

我将在哪里开始对此进行测试?

1 个答案:

答案 0 :(得分:1)

如果您要为OPA Gatekeeper编写自己的模板,我们建议您为这些模板中的规则编写测试,就像为OPA编写的任何其他规则一样。在这种情况下,您想编写测试以执行拒绝(即其中一条规则中的所有语句都匹配)并且没有结果(即两条规则中的至少一条语句不匹配)的测试。我们建议您尽可能使用OPA的功能来进行测试驱动的开发(TDD)。

package k8sallowedrepos

test_image_safety_positive {
    count(violation) == 1 with input.parameters.repos as ["hooli.com/"]
        with input.review.object.spec.containers as [
            {"name": "ok", "image": "hooli.com/web"},
            {"name": "bad", "image": "badrepo.com/web"},
        ]
}

test_image_safety_negative {
    count(violation) == 0 with input.parameters.repos as ["hooli.com/"]
        with input.review.object.spec.containers as [
            {"name": "ok", "image": "hooli.com/web"},
        ]
}

test_image_safety_init_container_positive {
    count(violation) == 1 with input.parameters.repos as ["hooli.com/"]
        with input.review.object.spec.initContainers as [
            {"name": "ok", "image": "hooli.com/web"},
            {"name": "bad", "image": "badrepo.com/web"},
        ]
}

test_image_safety_init_container_negative {
    count(violation) == 0 with input.parameters.repos as ["hooli.com/"]
        with input.review.object.spec.initContainers as [
            {"name": "ok", "image": "hooli.com/web"},
        ]
}

我们在OPA Gatekeeper库(WIP)中遵循的模式是将测试包含在与规则相同的程序包中,但包括在同一目录中的单独文件中(例如src.rego和src_test.rego)。链接:https://github.com/open-policy-agent/gatekeeper/tree/master/library。请注意,最终将规则加载到群集中的ConstraintTemplate YAML文件应被视为构建工件。将源保持在磁盘上的.rego文件中(在版本控制中),然后从这些文件生成ContsraintTemplate YAML。