编写 E2E 测试

可以参考 Kubebuilder/v4/test/e2e/utils 包,其中提供了功能丰富的 TestContext

  • NewTestContext 用于定义:
    • 临时项目目录;
    • 临时 controller-manager 镜像;
    • Kubectl 执行方法
    • CLI 可执行文件(kubebuilderoperator-sdk 或你扩展的 CLI)。

定义完成后,即可使用 TestContext

  1. 搭建测试环境:

  2. 校验插件行为:

  3. 验证脚手架工程可工作:

    • 执行 Makefile 中的目标,见 Make
    • 临时加载被测控制器镜像到 Kind,见 LoadImageToKindCluster
    • 使用 Kubectl 验证运行中的资源,见 Kubectl
  4. 清理测试资源:

参考:

生成测试样例

查看由你的插件生成的样例项目内容非常直接。

例如 Kubebuilder 基于不同插件生成样例项目以验证布局。

你也可以用 TestContext 生成由插件脚手架的项目目录结构。用到的命令与扩展 CLI 能力与插件中类似。

以下演示使用 go/v4 插件创建样例项目的一般流程(其中 kbcTestContext 实例):

  • 初始化一个项目:

    By("initializing a project")
    err = kbc.Init(
        "--plugins", "go/v4",
        "--project-version", "3",
        "--domain", kbc.Domain,
        "--fetch-deps=false",
    )
    Expect(err).NotTo(HaveOccurred(), "Failed to initialize a project")
    
  • 定义 API:

    By("creating API definition")
    err = kbc.CreateAPI(
        "--group", kbc.Group,
        "--version", kbc.Version,
        "--kind", kbc.Kind,
        "--namespaced",
        "--resource",
        "--controller",
        "--make=false",
    )
    Expect(err).NotTo(HaveOccurred(), "Failed to create an API")
    
  • 脚手架生成 webhook 配置:

    By("scaffolding mutating and validating webhooks")
    err = kbc.CreateWebhook(
        "--group", kbc.Group,
        "--version", kbc.Version,
        "--kind", kbc.Kind,
        "--defaulting",
        "--programmatic-validation",
    )
    Expect(err).NotTo(HaveOccurred(), "Failed to create an webhook")