NEW:获取项目更新TwitterMastodon

运行端到端测试

cert-manager 拥有一个广泛的端到端 (e2e) 测试套件,用于验证针对真实 Kubernetes 集群的功能。

完整的端到端测试套件可能需要很长时间才能完成,并且针对对 cert-manager 项目做出的每个拉取请求运行。

除非你对 cert-manager 代码库(或端到端测试本身)进行了重大更改,否则你可能无需在本地运行测试。但是,如果你确实想运行测试,本文档将说明如何操作。

主分支上每个提交的状态都报告在 testgrid.k8s.io 上。加入 cert-manager-dev-alerts Google 群组以接收测试失败的电子邮件通知。

需求

端到端测试没有特殊要求。所有依赖项都可以通过 make 构建系统自动配置。

设置端到端测试

创建集群

您可以使用 Make 创建 kind 集群

# Create a cluster using whatever K8s version is default, named "kind"
make e2e-setup-kind
# Create a cluster using K8s 1.23 named "keith"
make K8S_VERSION=1.23 KIND_CLUSTER_NAME=keith e2e-setup-kind

重要提示: kind 集群将使用特定服务 CIDR 范围进行设置,以启用端到端测试中的某些功能。此 CIDR 范围目前不可配置。

完成后,集群可通过 kubectl 使用,就像您期望的那样。

安装测试依赖项

端到端测试需要各种依赖项,所有这些依赖项也可以通过 Make 安装

make e2e-setup

如果您只需要更新或重新安装测试集群中的某个依赖项,则可以改为显式安装命名组件以节省时间。

最常见的用例是重新安装 cert-manager 本身,例如,如果您在本地进行了更改并希望在集群中测试该更改

# Most important: reinstall cert-manager, including rebuilding changed containers locally
make e2e-setup-certmanager
# An example of reinstalling something else; reinstall bind
make e2e-setup-bind
# More generally, see make/e2e-setup.mk for different targets!

运行端到端测试

与设置一样,运行测试也可以通过 make 完成。事实上,您只需运行 make e2e,无需手动设置任何内容!

# Set up a cluster using the defaults if one's not already present, and then run the end-to-end tests
make e2e
# Set up a K8s 1.23 cluster and then run tests
make K8S_VERSION=1.23 e2e
# Run tests exactly as they're run in CI; usually not needed
make e2e-ci

如果您不想运行所有测试,可以使用 GINKGO_FOCUS 语法专注于特定测试,如 Ginkgo 文档 中所述

make GINKGO_FOCUS=".*my test description" e2e

集群 IP 详细信息

如上所述,端到端测试期望某些组件以特定方式部署,甚至部署在特定 IP 地址上。

举例说明,以下集群组件以特定 IP 部署

组件 / Make 目标使用于IPDNS A 记录
e2e-setup-bindDNS-01 测试10.0.0.16
e2e-setup-ingressnginxHTTP-01 Ingress 测试10.0.0.15*.ingress-nginx.db.http01.example.com
e2e-setup-projectcontourHTTP-01 GatewayAPI 测试10.0.0.14*.gateway.db.http01.example.com

如果您未正确设置这些组件,您可能会发现 ACME HTTP01(和其他)端到端测试失败。

端到端测试结构

端到端测试包括两个主要部分:颁发者特定测试和一致性套件。

这两部分都使用 Ginkgo 在后台运行它们的测试。

一致性套件

RBAC

此套件测试授予 cert-manager 在集群上的所有 RBAC 权限,以检查它是否能够正常运行。

证书

此套件测试针对所有颁发者的证书功能。

功能集

某些颁发者不支持某些功能,例如,颁发 Ed25519 证书或将电子邮件地址添加到 X.509 SAN 扩展。

每个测试都使用 s.checkFeatures(feature) 指定一个使用的功能,然后将其与颁发者的 UnsupportedFeatures 列表进行检查。对于不支持该功能的颁发者,使用该功能的测试将跳过。

云提供商测试

cert-manager 的主分支也可以针对不同的云提供商进行测试。目前,EKS 的测试存在,它们每两天运行一次作为定期作业。

扩展云提供商测试

用于在云提供商上运行 e2e 测试的基础设施存在于 cert-manager/test-infra 存储库中。可以通过使用 Terraform 为其创建基础设施来添加更多云提供商。

除此之外,可以通过编辑 Jetstack 测试存储库 存储库中相应的 prow 作业来定制对现有基础设施的测试。例如,cert-manager 版本或云提供商版本之类的值作为 Terraform 中的变量存在,因此在使用 terraform apply 时,可以在 prow 作业中更改它们的值,例如,对于 EKS prow 作业,可以使用以下方法更改正在测试的 cert-manager 版本:

terraform apply -var="cert_manager_version=v1.3.3" -auto-approve

要查看特定基础设施中所有可配置变量的列表,您可以查看该云提供商的 基础设施variables.tf 文件。

请注意,云提供商测试在 cert-manager 的**主**分支上运行预定义版本的 cert-manager(可以在 prow 作业中更改)上的 e2e 测试。目前,它们测试 PR 中的代码,但我们有一个问题跟踪该请求。