Testing your Operator project
The Operator SDK project recommends using controller-runtime’s envtest to write tests for your Operators projects. Envtest has a more active contributor community, it is more mature than Operator SDK’s test framework, and it does not require an actual cluster to run tests which can be a huge benefit in CI scenarios.
You will see that
controllers/suite_test.go is created when a controller is scaffolded by the tool. This file contains boilerplate for executing integration tests using envtest with ginkgo and gomega.
Setup instructions, including those for disconnected environments, are found here.
These tests are runnable as native Go tests:
go test controllers/ -v -ginkgo.v
The projects generated by using the SDK tool have a Makefile which contains the target tests which executes when you run
make test. Note that this target will also execute when you run
make docker-build IMG=<some-registry>/<project-name>:<tag>.
Operator SDK adopted this stack to write tests for its operators. It might be useful to check writing controller tests documentation and examples to learn how to better write tests for your operator. See, for example, that controller-runtime is covered by tests using the same stack as well.
Also you can write tests for your operator in a declarative using the kuttl. Via kuttl, you can define YAML manifests that specify the expected before and after statues of a cluster when your operator is used. For more info see Writing Kuttl Scorecard Tests.
To implement application-specific tests, the SDK’s test harness, scorecard, provides the ability to ship custom code in container images as well, which can be referenced in the test suite. Because this test suite definition metadata travels with the Operator Bundle, it allows for functional testing of the Operator without the source code or the project layout being available. See Writing Custom Scorecard Tests.