cert-manager/make/test.mk
Maël Valais 3405edf821 make: add the targets 'e2e-setup-kind', 'e2e-setup-kind', and 'e2e'
The commands can be run concurrently, with the exception of e2e that
has to be run after e2e-setup is done. The e2e target does not check
whether cert-manager and the addons are installed.

The two only scripts that were kept are:

- make/e2e.sh      (previously called ./devel/run-e2e.sh)
- make/cluster.sh  (previsouly called ./devel/cluster/create.sh)

The reason for the removal of the other scripts is that they didn't
have that much logic and could easily ported to Make, improving greatly
the execution speed thanks to make's concurrency.

make/e2e.sh now behaves "as expected" when using -ginkgo.focus or
GINKGO_FOCUS; previously, the logs would not be shown before the end
of the test.

make/cluster.sh has lost the ability to create an OpenShift 3.11 cluster.
for running the end-to-end tests. The two reasons are that OpenShift 4
wasn't supported by the script devel/cluster/create.sh, and OpenShift
3.11 is not supported by cert-manager anymore.

The Makefile targets that were used in the Prow jobs (verify, verify_deps,
verify_chart, verify_upgrade, and cluster) have been kept around. They
now show a warning to encourage people to use the new Make-based targets.
When running one of the deprecated targets the Makefile won't check the
presence of the system tools such as Go and jq, since Bazel takes care of
these dependencies.

On version change, downloaded tools and images are re-downloaded. The
command 'make clean' now keeps the downloaded images and tools.

Note that a lot of attention has been put into having a Make system that works
flawlessly both on Linux and on BSDs (such as macOS).

You will note that some recursive calls to make are made, and $(MAKE)
instead of plain "make" is used in that case. If we didn't use $(MAKE),
we would have concurrency issues, and warnings such as:

  make[1]: warning: jobserver unavailable: using -j1. Add `+' to parent make rule.

Signed-off-by: Maël Valais <mael@vls.dev>
2022-03-13 12:32:08 +01:00

92 lines
3.7 KiB
Makefile

export KUBEBUILDER_ASSETS=bin/tools
# WHAT can be used to control which unit tests are run by "make test"; defaults to running all
# tests except e2e tests (which require more significant setup)
# For example: make WHAT=./pkg/util/pki test-pretty to only run the PKI utils tests
WHAT ?= ./pkg/... ./cmd/... ./internal/... ./test/...
.PHONY: test
## Test is the workhorse test command which by default runs all unit and
## integration tests. Configured through WHAT, e.g.:
##
## make test WHAT=./pkg/...
##
## @category Development
test: setup-integration-tests bin/tools/gotestsum bin/tools/etcd bin/tools/kubectl bin/tools/kube-apiserver
$(GOTESTSUM) -- $(WHAT)
.PHONY: test-ci
# test-ci runs all unit and integration tests and writes a JUnit report of the
# results.
test-ci: setup-integration-tests bin/tools/gotestsum bin/tools/etcd bin/tools/kubectl bin/tools/kube-apiserver | bin/testlogs
$(GOTESTSUM) --junitfile bin/testlogs/test-ci.xml -- ./...
.PHONY: unit-test
## Same as `test` but only runs the unit tests. By "unit tests", we mean tests
## that are quick to run and don't require dependencies like a Kubernetes, etcd,
## or an apiserver.
##
## @category Development
unit-test: bin/tools/gotestsum
$(GOTESTSUM) ./cmd/... ./pkg/... ./internal/...
.PHONY: setup-integration-tests
setup-integration-tests: test/integration/versionchecker/testdata/test_manifests.tar templated-crds
@$(eval GIT_TAGS_FILE := bin/scratch/git/upstream-tags.txt)
@echo -e "\033[0;33mLatest known tag for integration tests is $(shell tail -1 $(GIT_TAGS_FILE)); if that seems out-of-date,\npull latest tags, run 'rm $(GIT_TAGS_FILE)' and retest\033[0m"
.PHONY: integration-test
## Same as `test` but only run the integration tests. By "integration tests",
## we mean the tests that require a live apiserver and etcd to run, but don't
## require a full Kubernetes cluster.
##
## @category Development
integration-test: setup-integration-tests bin/tools/gotestsum bin/tools/etcd bin/tools/kubectl bin/tools/kube-apiserver
$(GOTESTSUM) ./test/...
.PHONY: e2e
## Run the end-to-end tests. Before running this, you need to run:
##
## make -j e2e-setup
##
## To run a specific test instead of the whole suite, run:
##
## make e2e GINKGO_FOCUS='.*call the dummy webhook'
##
## For more information about GINKGO_FOCUS, see "make/e2e.sh --help".
##
## @category Development
e2e: bin/scratch/kind-exists bin/tools/kubectl bin/tools/ginkgo
make/e2e.sh
.PHONY: e2e-ci
e2e-ci: e2e-setup-kind e2e-setup
$(MAKE) --no-print-directory e2e FLAKE_ATTEMPTS=2 K8S_VERSION="$(K8S_VERSION)" || (make kind-logs && exit 1)
test/integration/versionchecker/testdata/test_manifests.tar: bin/scratch/oldcrds.tar bin/yaml/cert-manager.yaml
@# Remove the temp files if they exist
rm -f bin/scratch/versionchecker-test-manifests.tar bin/scratch/$(RELEASE_VERSION).yaml
@# Copy the old CRDs tar and append the currentl release version to it
cp bin/scratch/oldcrds.tar bin/scratch/versionchecker-test-manifests.tar
cp bin/yaml/cert-manager.yaml bin/scratch/$(RELEASE_VERSION).yaml
tar --append -f bin/scratch/versionchecker-test-manifests.tar -C bin/scratch ./$(RELEASE_VERSION).yaml
cp bin/scratch/versionchecker-test-manifests.tar $@
bin/scratch/oldcrds.tar: bin/scratch/git/upstream-tags.txt | bin/scratch/oldcrds
@# First, download the CRDs for all releases listed in upstream-tags.txt
<bin/scratch/git/upstream-tags.txt xargs -I% --max-procs=5 \
curl --compressed -sfL \
-o bin/scratch/oldcrds/%.yaml \
"https://github.com/cert-manager/cert-manager/releases/download/%/cert-manager.yaml"
@# Next, tar up the old CRDs together
tar cf $@ -C bin/scratch/oldcrds .
bin/scratch/oldcrds:
@mkdir -p $@
bin/test:
@mkdir -p $@
bin/testlogs:
@mkdir -p $@