Avoid extra syncing in case there are no changes in pooler requirements. Add pooler specific labels to pooler secrets. Add test case to check for pooler secret creation and deletion. Co-authored-by: Rafia Sabih <rafia.sabih@zalando.de> |
||
|---|---|---|
| .. | ||
| scripts | ||
| tests | ||
| Dockerfile | ||
| Makefile | ||
| README.md | ||
| exec.sh | ||
| exec_into_env.sh | ||
| kind-cluster-postgres-operator-e2e-tests.yaml | ||
| requirements.txt | ||
| run.sh | ||
README.md
Postgres Operator end-to-end tests
End-to-end tests shall ensure that the Postgres Operator does its job when
applying manifests against a Kubernetes (K8s) environment. A test runner
Dockerfile is provided to run e2e tests without the need to install K8s and
its runtime kubectl in advance. The test runner uses
kind to create a local K8s cluster which runs on
Docker.
Prerequisites
Docker Go
Notice
The manifest folder in e2e tests folder is not commited to git, it comes from /manifests
Build test runner
In the directory of the cloned Postgres Operator repository change to the e2e folder and run:
make
This will build the postgres-operator-e2e-tests image and download the kind
runtime.
Run tests
In the e2e folder you can invoke tests either with make test or with:
./run.sh main
To run both the build and test step you can invoke make e2e from the parent
directory.
To run the end 2 end test and keep the kind state execute:
NOCLEANUP=True ./run.sh main
Run individual test
After having executed a normal E2E run with NOCLEANUP=True Kind still continues to run, allowing you subsequent test runs.
To run an individual test, run the following command in the e2e directory
NOCLEANUP=True ./run.sh main tests.test_e2e.EndToEndTestCase.test_lazy_spilo_upgrade
Inspecting Kind
If you want to inspect Kind/Kubernetes cluster, switch kubeconfig file and context
# save the old config in case you have it
export KUBECONFIG_SAVED=$KUBECONFIG
# use the one created by e2e tests
export KUBECONFIG=/tmp/kind-config-postgres-operator-e2e-tests
# this kubeconfig defines a single context
kubectl config use-context kind-postgres-operator-e2e-tests
or use the following script to exec into the K8s setup and then use kubectl
./exec_into_env.sh
# use kubectl
kubectl get pods
# watch relevant objects
./scripts/watch_objects.sh
# get operator logs
./scripts/get_logs.sh
If you want to inspect the state of the kind cluster manually with a single command, add a context flag
kubectl get pods --context kind-kind
or set the context for a few commands at once
Cleaning up Kind
To cleanup kind and start fresh
e2e/run.sh cleanup
That also helps in case you see the
ERROR: no nodes found for cluster "postgres-operator-e2e-tests"
that happens when the kind cluster was deleted manually but its configuraiton file was not.
Covered use cases
The current tests are all bundled in test_e2e.py:
- support for multiple namespaces
- scale Postgres cluster up and down
- taint-based eviction of Postgres pods
- invoking logical backup cron job
- uniqueness of master pod
- custom service annotations