本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

这是尚未发布的文档。 Admission Controller 1.34-dev.

针对策略作者的测试

SUSE Security Admission Controller策略是编译为WebAssembly(Wasm)的常规程序。 与任何类型的程序一样,良好的测试覆盖率是重要的。

策略作者可以使用他们喜欢的开发环境。 您可以使用熟悉的工具和测试框架来验证开发。

这些Admission Controller策略是用RustGo编写的示例:

他们有使用标准测试的测试套件来支持他们的开发环境。

这些策略使用GitHub Actions作为他们的CI管道。

端到端测试

您还可以编写针对包含您的策略的Wasm二进制文件执行的测试。 要在不部署Kubernetes集群的情况下做到这一点,您可以使用以下工具:

  • bats:用于编写测试并自动化其执行。

  • kwctl:Admission Controller的默认CLI工具,帮助您进行与策略相关的操作;拉取、检查、注释、推送和运行。

要使用`kwctl run`,您需要以下内容:

  1. 要运行的策略的Wasm二进制文件引用。 Admission Controller策略可以从以下位置加载:

    • 本地文件系统(file://)

    • HTTP(s)服务器(https://

    • OCI注册表(registry://).

  2. 要测试的准入请求对象。 您可以通过`--request-path`参数提供它,或者通过将`--request-path`设置为`-`在`stdin`上提供它。

  3. 通过`--settings-json`标志以内联JSON的形式设置运行时策略。 或者是一个JSON或YAML文件,通过`--settings-path`从文件系统加载。

在测试`kwctl`之后,将`ValidationResponse`对象打印到标准输出。

这就是您如何使用`kwctl`来测试之前提到的https://github.com/kubewarden/ingress-policy[ingress-policy]的Wasm二进制文件:

$ curl https://raw.githubusercontent.com/kubewarden/ingress-policy/v0.1.8/test_data/ingress-wildcard.json 2> /dev/null | \
    kwctl run \
        --settings-json '{"allowPorts": [80], "denyPorts": [3000]}' \
        --request-path - \
        registry://ghcr.io/kubewarden/policies/ingress:v0.1.8 | jq

您可以下载`kwctl`的预构建二进制文件 在这里

使用`bats`,您可以编写一个测试来运行此命令并查找预期的输出:

一个bats测试
@test "all is good" {
  run kwctl run \
    --request-path test_data/ingress-wildcard.json \
    --settings-json '{"allowPorts": [80], "denyPorts": [3000]}' \
    ingress-policy.wasm

  # this prints the output when one the checks below fails
  echo "output = ${output}"

  # settings validation passed
  [[ "$output" == *"valid: true"* ]]

  # request accepted
  [[ "$output" == *"allowed: true"* ]]
}

您可以将代码放在一个文件中,例如`e2e.bats`,然后通过以下方式调用`bats`:

$ bats e2e.bats
 ✓ all is good

1 tests, 0 failures

This文档的这一部分包含有关编写端到端测试您的策略的更多信息。