Skip to content

Commit 42efb0a

Browse files
committed
adopt e2e labels usage
1 parent a8959e3 commit 42efb0a

File tree

5 files changed

+75
-15
lines changed

5 files changed

+75
-15
lines changed

Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ export PATH := $(abspath $(TOOLS_BIN_DIR)):$(PATH)
7979
#
8080
GINKGO_FOCUS ?=
8181
GINKGO_SKIP ?=
82+
GINKGO_LABEL_FILTER ?=
8283
GINKGO_NODES ?= 1
8384
GINKGO_TIMEOUT ?= 2h
8485
GINKGO_POLL_PROGRESS_AFTER ?= 60m
@@ -978,7 +979,7 @@ test-test-extension-junit: $(SETUP_ENVTEST) $(GOTESTSUM) ## Run unit and integra
978979
.PHONY: test-e2e
979980
test-e2e: $(GINKGO) generate-e2e-templates ## Run the end-to-end tests
980981
$(GINKGO) -v --trace -poll-progress-after=$(GINKGO_POLL_PROGRESS_AFTER) \
981-
-poll-progress-interval=$(GINKGO_POLL_PROGRESS_INTERVAL) --tags=e2e --focus="$(GINKGO_FOCUS)" \
982+
-poll-progress-interval=$(GINKGO_POLL_PROGRESS_INTERVAL) --tags=e2e --focus="$(GINKGO_FOCUS)" --label-filter="$(GINKGO_LABEL_FILTER)" \
982983
$(_SKIP_ARGS) --nodes=$(GINKGO_NODES) --timeout=$(GINKGO_TIMEOUT) --no-color=$(GINKGO_NOCOLOR) \
983984
--output-dir="$(ARTIFACTS)" --junit-report="junit.e2e_suite.1.xml" $(GINKGO_ARGS) $(ROOT_DIR)/$(TEST_DIR)/e2e -- \
984985
-e2e.artifacts-folder="$(ARTIFACTS)" \

docs/book/src/developer/core/testing.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ For example to run [pull-cluster-api-e2e-main](https://github.com/kubernetes/tes
170170
just execute:
171171

172172
```bash
173-
GINKGO_FOCUS="\[PR-Blocking\]" ./scripts/ci-e2e.sh
173+
GINKGO_LABEL_FILTER="PR-Blocking" ./scripts/ci-e2e.sh
174174
```
175175

176176
### Test execution via make test-e2e
@@ -190,7 +190,7 @@ kind images). This can be done by executing the `./scripts/ci-e2e.sh` script.
190190
# Notes:
191191
# * You can cancel the script as soon as it starts the actual test execution via `make test-e2e`.
192192
# * If you want to run other tests (e.g. upgrade tests), make sure all required env variables are set (see the Prow Job config).
193-
GINKGO_FOCUS="\[PR-Blocking\]" ./scripts/ci-e2e.sh
193+
GINKGO_LABEL_FILTER="PR-Blocking" ./scripts/ci-e2e.sh
194194
```
195195

196196
Now, the tests can be run in an IDE. The following describes how this can be done in IntelliJ IDEA and VS Code. It should work
@@ -272,24 +272,24 @@ kustomize_substitutions:
272272
273273
### Running specific tests
274274
275-
To run a subset of tests, a combination of either one or both of `GINKGO_FOCUS` and `GINKGO_SKIP` env variables can be set.
275+
To run a subset of tests the `GINKGO_LABEL_FILTER` env variable can be set. See [Ginkgo Spec Labels v2](https://onsi.github.io/ginkgo/MIGRATING_TO_V2#spec-labels) for complete syntax documentation.
276+
276277
Each of these can be used to match tests, for example:
277-
- `[PR-Blocking]` => Sanity tests run before each PR merge
278-
- `[K8s-Upgrade]` => Tests which verify k8s component version upgrades on workload clusters
279-
- `[Conformance]` => Tests which run the k8s conformance suite on workload clusters
280-
- `[ClusterClass]` => Tests which use a ClusterClass to create a workload cluster
281-
- `When testing KCP.*` => Tests which start with `When testing KCP`
278+
- `PR-Blocking` => Sanity tests run before each PR merge
279+
- `K8s-Upgrade` => Tests which verify k8s component version upgrades on workload clusters
280+
- `Conformance` => Tests which run the k8s conformance suite on workload clusters
281+
- `ClusterClass` => Tests which use a ClusterClass to create a workload cluster
282+
- `/When testing KCP.*/` => Tests which start with `When testing KCP`
282283

283284
For example:
284-
` GINKGO_FOCUS="\\[PR-Blocking\\]" make test-e2e ` can be used to run the sanity E2E tests
285-
` GINKGO_SKIP="\\[K8s-Upgrade\\]" make test-e2e ` can be used to skip the upgrade E2E tests
285+
` GINKGO_LABEL_FILTER="PR-Blocking" make test-e2e ` can be used to run the sanity E2E tests
286+
` GINKGO_LABEL_FILTER="!K8s-Upgrade" make test-e2e ` can be used to skip the upgrade E2E tests
286287

287288
### Further customization
288289

289290
The following env variables can be set to customize the test execution:
290291

291-
- `GINKGO_FOCUS` to set ginkgo focus (default empty - all tests)
292-
- `GINKGO_SKIP` to set ginkgo skip (default empty - to allow running all tests)
292+
- `GINKGO_LABEL_FILTER` to set ginkgo label filter (default empty - all tests)
293293
- `GINKGO_NODES` to set the number of ginkgo parallel nodes (default to 1)
294294
- `E2E_CONF_FILE` to set the e2e test config file (default to ${REPO_ROOT}/test/e2e/config/docker.yaml)
295295
- `ARTIFACTS` to set the folder where test artifact will be stored (default to ${REPO_ROOT}/_artifacts)

scripts/ci-e2e-lib.sh

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,60 @@ capi:buildDockerImages () {
3434
fi
3535
}
3636

37+
# k8s::prepareKindestImagesVariables defaults the environment variables KUBERNETES_VERSION_MANAGEMENT, KUBERNETES_VERSION,
38+
# KUBERNETES_VERSION_UPGRADE_TO, KUBERNETES_VERSION_UPGRADE_FROM and KUBERNETES_VERSION_LATEST_CI
39+
# depending on what is set in GINKGO_LABEL_FILTER.
40+
# Note: We do this to ensure that the kindest/node image gets built if it does
41+
# not already exist, e.g. for pre-releases, but only if necessary.
42+
k8s::prepareKindestImagesVariablesGingkoFilters() {
43+
# Always default KUBERNETES_VERSION_MANAGEMENT because we always create a management cluster out of it.
44+
if [[ -z "${KUBERNETES_VERSION_MANAGEMENT:-}" ]]; then
45+
KUBERNETES_VERSION_MANAGEMENT=$(grep KUBERNETES_VERSION_MANAGEMENT: < "$E2E_CONF_FILE" | awk -F'"' '{ print $2}')
46+
echo "Defaulting KUBERNETES_VERSION_MANAGEMENT to ${KUBERNETES_VERSION_MANAGEMENT} to trigger image build (because env var is not set)"
47+
fi
48+
49+
if [[ ${GINKGO_LABEL_FILTER:-} == *"K8s-Install-ci-latest"* ]]; then
50+
# If the test focuses on [K8s-Install-ci-latest], only default KUBERNETES_VERSION_LATEST_CI
51+
# to the value in the e2e config and only if it is not set.
52+
# Note: We do this because we want to specify KUBERNETES_VERSION_LATEST_CI *only* in the e2e config.
53+
if [[ -z "${KUBERNETES_VERSION_LATEST_CI:-}" ]]; then
54+
KUBERNETES_VERSION_LATEST_CI=$(grep KUBERNETES_VERSION_LATEST_CI: < "$E2E_CONF_FILE" | awk -F'"' '{ print $2}')
55+
echo "Defaulting KUBERNETES_VERSION_LATEST_CI to ${KUBERNETES_VERSION_LATEST_CI} to trigger image build (because env var is not set)"
56+
fi
57+
elif [[ ${GINKGO_LABEL_FILTER:-} != *"K8s-Upgrade"* ]]; then
58+
# In any other case which is not [K8s-Upgrade], default KUBERNETES_VERSION if it is not set to make sure
59+
# the corresponding kindest/node image exists.
60+
if [[ -z "${KUBERNETES_VERSION:-}" ]]; then
61+
KUBERNETES_VERSION=$(grep KUBERNETES_VERSION: < "$E2E_CONF_FILE" | awk -F'"' '{ print $2}')
62+
echo "Defaulting KUBERNETES_VERSION to ${KUBERNETES_VERSION} to trigger image build (because env var is not set)"
63+
fi
64+
fi
65+
66+
# Tests not focusing on anything and skipping [Conformance] run a clusterctl upgrade test
67+
# on the latest kubernetes version as management cluster.
68+
if [[ ${GINKGO_LABEL_FILTER} =~ ^!Conformance$ ]]; then
69+
# Note: We do this because we want to specify KUBERNETES_VERSION_LATEST_CI *only* in the e2e config.
70+
if [[ -z "${KUBERNETES_VERSION_LATEST_CI:-}" ]]; then
71+
KUBERNETES_VERSION_LATEST_CI=$(grep KUBERNETES_VERSION_LATEST_CI: < "$E2E_CONF_FILE" | awk -F'"' '{ print $2}')
72+
echo "Defaulting KUBERNETES_VERSION_LATEST_CI to ${KUBERNETES_VERSION_LATEST_CI} to trigger image build (because env var is not set)"
73+
fi
74+
fi
75+
76+
# Tests not focusing on [PR-Blocking], [K8s-Install] or [K8s-Install-ci-latest],
77+
# also run upgrade tests so default KUBERNETES_VERSION_UPGRADE_TO and KUBERNETES_VERSION_UPGRADE_FROM
78+
# to the value in the e2e config if they are not set.
79+
if [[ ${GINKGO_LABEL_FILTER:-} != *"PR-Blocking"* ]] && [[ ${GINKGO_LABEL_FILTER:-} != *"K8s-Install"* ]]; then
80+
if [[ -z "${KUBERNETES_VERSION_UPGRADE_TO:-}" ]]; then
81+
KUBERNETES_VERSION_UPGRADE_TO=$(grep KUBERNETES_VERSION_UPGRADE_TO: < "$E2E_CONF_FILE" | awk -F'"' '{ print $2}')
82+
echo "Defaulting KUBERNETES_VERSION_UPGRADE_TO to ${KUBERNETES_VERSION_UPGRADE_TO} to trigger image build (because env var is not set)"
83+
fi
84+
if [[ -z "${KUBERNETES_VERSION_UPGRADE_FROM:-}" ]]; then
85+
KUBERNETES_VERSION_UPGRADE_FROM=$(grep KUBERNETES_VERSION_UPGRADE_FROM: < "$E2E_CONF_FILE" | awk -F'"' '{ print $2}')
86+
echo "Defaulting KUBERNETES_VERSION_UPGRADE_FROM to ${KUBERNETES_VERSION_UPGRADE_FROM} to trigger image build (because env var is not set)"
87+
fi
88+
fi
89+
}
90+
3791
# k8s::prepareKindestImagesVariables defaults the environment variables KUBERNETES_VERSION_MANAGEMENT, KUBERNETES_VERSION,
3892
# KUBERNETES_VERSION_UPGRADE_TO, KUBERNETES_VERSION_UPGRADE_FROM and KUBERNETES_VERSION_LATEST_CI
3993
# depending on what is set in GINKGO_FOCUS.

scripts/ci-e2e.sh

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,12 @@ export USE_EXISTING_CLUSTER=false
5353
# - KUBERNETES_VERSION_UPGRADE_FROM
5454
# - KUBERNETES_VERSION_LATEST_CI
5555
# - KUBERNETES_VERSION_MANAGEMENT
56-
k8s::prepareKindestImagesVariables
56+
if [[ -n "${GINKGO_LABEL_FILTER}" ]]; then
57+
echo "Preparing kindest/node images for Ginkgo label filter: ${GINKGO_LABEL_FILTER}"
58+
k8s::prepareKindestImagesVariablesGingkoFilters
59+
else
60+
k8s::prepareKindestImagesVariables
61+
fi
5762
k8s::prepareKindestImages
5863

5964
# pre-pull all the images that will be used in the e2e, thus making the actual test run

test/infrastructure/inmemory/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ kubectl --kubeconfig=/tmp/kubeconfig --server=https://127.0.0.1:$CONTROL_PLANE_E
126126
### E2E tests
127127

128128
CAPIM could be used to run a subset of CAPI E2E tests, but as of today we maintain only a smoke E2E scale test
129-
(10 clusters, 1 CP and 3 workers each) that can be executed by setting `GINKGO_FOCUS="in-memory"`.
129+
(10 clusters, 1 CP and 3 workers each) that can be executed by setting `GINKGO_LABEL_FILTER="in-memory"`.
130130

131131
See [Running the end-to-end tests locally](https://cluster-api.sigs.k8s.io/developer/testing#running-the-end-to-end-tests-locally) for more details.
132132

0 commit comments

Comments
 (0)