mirror of
https://github.com/zalando/postgres-operator.git
synced 2026-10-01 10:27:47 +02:00
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>
118 lines
2.8 KiB
Markdown
118 lines
2.8 KiB
Markdown
# 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](https://kind.sigs.k8s.io/) 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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
./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:
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
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
|
|
```bash
|
|
# 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`
|
|
|
|
```bash
|
|
./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
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
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`](tests/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
|