Skip to content

Commit 008dfd5

Browse files
authored
Merge pull request #170 from pcallewaert/pc/e2e-tests
Set us basic e2e tests
2 parents 3afcc67 + 786ed36 commit 008dfd5

13 files changed

+168
-2
lines changed

.github/workflows/e2e-test.yml

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
name: E2E Test
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- master
7+
push:
8+
branches:
9+
- master
10+
11+
jobs:
12+
e2e:
13+
runs-on: ubuntu-latest
14+
name: End-to-End Test
15+
timeout-minutes: 30 # Add timeout to prevent hanging jobs
16+
steps:
17+
- name: Checkout repository
18+
uses: actions/checkout@v4
19+
- name: Set up Docker Buildx
20+
uses: docker/setup-buildx-action@v2
21+
- name: Build Docker image
22+
uses: docker/build-push-action@v4
23+
with:
24+
context: .
25+
file: ./build/Dockerfile.dist
26+
push: false
27+
load: true
28+
tags: |
29+
postgres-operator:build
30+
- name: Install kubectl & krew
31+
uses: marcofranssen/[email protected]
32+
with:
33+
enablePlugins: true
34+
- name: Install KUTTL
35+
run: kubectl krew install kuttl
36+
- name: Run tests
37+
run: kubectl kuttl test --config ./tests/kuttl-test-self-hosted-postgres.yaml
38+
- name: Upload test artifacts
39+
if: always() # Run even if tests fail
40+
uses: actions/upload-artifact@v4
41+
with:
42+
name: test-results
43+
path: tests/kind-logs-*/
44+
retention-days: 7

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,6 @@ tags
8383
deploy/secret.yaml
8484
# build artifact
8585
operator
86+
# kuttl/kind
87+
tests/kind-logs-*/
88+
kubeconfig

Makefile

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
.PHONY: gen build
1+
.PHONY: gen build e2e e2e-build
22

33
gen:
44
operator-sdk generate k8s
@@ -17,3 +17,8 @@ linux-build:
1717
@GOBIN=/work/bin GO111MODULE=on GOOS=linux GOARC=x86_64 go build --mod=vendor -o operator github.com/movetokube/postgres-operator/cmd/manager
1818
docker-build:
1919
docker run -ti -v $(PWD):/work -w /work golang:1.24-bookworm make linux-build
20+
e2e-build:
21+
docker buildx build -t postgres-operator:build -f ./build/Dockerfile.dist .
22+
e2e: e2e-build
23+
kubectl kuttl test --config ./tests/kuttl-test-self-hosted-postgres.yaml
24+

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,10 @@ You can contribute to this project by opening a PR to merge to `master`, or one
213213

214214
Please write tests and fix any broken tests before you open a PR. Tests should cover at least 80% of your code.
215215

216+
#### e2e-tests
217+
218+
End-to-end tests are implemented using [kuttl](https://kuttl.dev/), a Kubernetes test framework. To execute these tests locally, first install kuttl on your system, then run the command `make e2e` from the project root directory.
219+
216220
### Compatibility
217221

218222
Postgres operator uses Operator SDK, which uses kubernetes client. Kubernetes client compatibility with Kubernetes cluster
@@ -225,4 +229,3 @@ Postgres operator compatibility with Operator SDK version is in the table below
225229
| `postgres-operator 0.4.x` | v0.17 | v1beta1 |
226230
| `postgres-operator 1.x.x` | v0.18 | v1 |
227231
| `HEAD` | v0.18 | v1 |
228-
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
collectors:
4+
- type: pod
5+
selector: app.kubernetes.io/name=ext-postgres-operator
6+
tail: 100
7+
---
8+
apiVersion: db.movetokube.com/v1alpha1
9+
kind: Postgres
10+
metadata:
11+
name: my-db
12+
status:
13+
roles:
14+
owner: test-db-group
15+
reader: test-db-reader
16+
writer: test-db-writer
17+
schemas:
18+
- stores
19+
- customers
20+
succeeded: true
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: db.movetokube.com/v1alpha1
2+
kind: Postgres
3+
metadata:
4+
name: my-db
5+
spec:
6+
database: test-db
7+
dropOnDelete: true
8+
masterRole: test-db-group
9+
schemas:
10+
- stores
11+
- customers
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
collectors:
4+
- type: pod
5+
selector: app.kubernetes.io/name=ext-postgres-operator
6+
tail: 100
7+
---
8+
apiVersion: db.movetokube.com/v1alpha1
9+
kind: PostgresUser
10+
metadata:
11+
name: my-db-user
12+
status:
13+
databaseName: test-db
14+
postgresGroup: test-db-group
15+
succeeded: true
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
apiVersion: db.movetokube.com/v1alpha1
2+
kind: PostgresUser
3+
metadata:
4+
name: my-db-user
5+
spec:
6+
role: username
7+
database: my-db
8+
secretName: my-secret
9+
privileges: OWNER
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
collectors:
4+
- type: pod
5+
selector: app.kubernetes.io/name=ext-postgres-operator
6+
tail: 100
7+
commands:
8+
- command: bash -c "! kubectl get postgresuser my-db-user -n $NAMESPACE"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
delete:
4+
- apiVersion: db.movetokube.com/v1alpha1
5+
kind: PostgresUser
6+
name: my-db-user
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
collectors:
4+
- type: pod
5+
selector: app.kubernetes.io/name=ext-postgres-operator
6+
tail: 100
7+
commands:
8+
- command: bash -c "! kubectl get postgres my-db -n $NAMESPACE"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
delete:
4+
- apiVersion: db.movetokube.com/v1alpha1
5+
kind: Postgres
6+
name: my-db
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestSuite
3+
testDirs:
4+
- ./tests/e2e/
5+
# crdDir: ./deploy/crds/
6+
startKIND: true
7+
kindContext: self-hosted-postgres
8+
kindContainers:
9+
- postgres-operator:build
10+
artifactsDir: ./tests/
11+
commands:
12+
- command: helm repo add ext-postgres-operator https://movetokube.github.io/postgres-operator/
13+
- command: >-
14+
helm install -n $NAMESPACE postgresql oci://registry-1.docker.io/bitnamicharts/postgresql
15+
--version 16.6.0
16+
--set global.postgresql.auth.password=postgres
17+
--set global.postgresql.auth.username=postgres
18+
--wait
19+
timeout: 120
20+
- command: >-
21+
helm install -n $NAMESPACE ext-postgres-operator ext-postgres-operator/ext-postgres-operator
22+
--set image.repository=postgres-operator
23+
--set image.tag=build
24+
--set postgres.host=postgresql
25+
--set postgres.user=postgres
26+
--set postgres.password=postgres
27+
--set postgres.uri_args="sslmode=disable"
28+
--wait

0 commit comments

Comments
 (0)