Skip to content

Commit 8b4be5d

Browse files
authored
K8SPG-989 test switchover in standby tests (#1525)
1 parent c128bb6 commit 8b4be5d

24 files changed

+532
-1
lines changed

e2e-tests/tests/standby-pgbackrest/00-deploy-operator.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ commands:
1111
1212
deploy_operator
1313
deploy_s3_secrets
14+
deploy_client

e2e-tests/tests/standby-pgbackrest/02-create-standby-cluster.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ commands:
1010
1111
repo_path=$(kubectl get pg -n "${NAMESPACE}" source-cluster -o jsonpath='{.spec.backups.pgbackrest.global.repo1-path}')
1212
get_cr "standby-cluster" \
13+
| yq eval 'del(.spec.users)' - \
1314
| yq eval '.spec.instances[0].sidecars = [{"name": "netshoot", "image": "docker.io/nicolaka/netshoot:latest", "command": ["sleep", "infinity"], "securityContext": {"capabilities": {"add": ["NET_ADMIN", "NET_RAW"]}, "privileged": false}, "resources": {"limits": {"cpu": "100m", "memory": "128Mi"}}}]' - \
1415
| yq eval ".spec.backups.pgbackrest.global.repo1-path = \"${repo_path}\"" - \
1516
| yq eval '.spec.standby.enabled = true' - \
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
timeout: 60
4+
commands:
5+
- script: |-
6+
set -o errexit
7+
set -o xtrace
8+
9+
source ../../functions
10+
11+
run_psql_local \
12+
'CREATE DATABASE myapp; \c myapp \\\ CREATE TABLE myTable (id int PRIMARY KEY);' \
13+
"postgres:$(get_psql_user_pass source-cluster-pguser-postgres)@$(get_psql_user_host source-cluster-pguser-postgres)"
14+
15+
run_psql_local \
16+
'\c myapp \\\ INSERT INTO myTable (id) VALUES (100500)' \
17+
"postgres:$(get_psql_user_pass source-cluster-pguser-postgres)@$(get_psql_user_host source-cluster-pguser-postgres)"
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
timeout: 30
4+
---
5+
apiVersion: v1
6+
kind: ConfigMap
7+
metadata:
8+
name: 08-verify-data-source
9+
data:
10+
data: ' 100500'
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
timeout: 60
4+
commands:
5+
- script: |-
6+
set -o xtrace
7+
8+
source ../../functions
9+
10+
data=$(run_psql_local \
11+
'\c myapp \\\ SELECT * from myTable;' \
12+
"postgres:$(get_psql_user_pass source-cluster-pguser-postgres)@$(get_psql_user_host source-cluster-pguser-postgres)")
13+
14+
kubectl create configmap -n "${NAMESPACE}" 08-verify-data-source --from-literal=data="${data}"
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
timeout: 30
4+
---
5+
apiVersion: v1
6+
kind: ConfigMap
7+
metadata:
8+
name: 09-verify-data-standby
9+
data:
10+
data: ' 100500'
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
timeout: 60
4+
commands:
5+
- script: |-
6+
set -o xtrace
7+
8+
source ../../functions
9+
10+
# with pgbackrest standby replicating data may take time. We need to give some time for this before failing
11+
data=''
12+
timer=0
13+
until [[ -n "$data" ]]; do
14+
data=$(run_psql_local \
15+
'\c myapp \\\ SELECT * from myTable;' \
16+
"postgres:$(get_psql_user_pass source-cluster-pguser-postgres)@$(get_psql_user_host standby-cluster-pguser-standby-cluster)")
17+
if [[ $timer -gt 20 ]]; then
18+
echo "ERROR: data not replicated after 400 seconds"
19+
exit 1
20+
fi
21+
sleep 20
22+
timer=$((timer + 1))
23+
done
24+
25+
kubectl create configmap -n "${NAMESPACE}" 09-verify-data-standby --from-literal=data="${data}"
26+
27+
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
timeout: 480
4+
---
5+
apiVersion: apps/v1
6+
kind: StatefulSet
7+
metadata:
8+
labels:
9+
postgres-operator.crunchydata.com/cluster: standby-cluster
10+
postgres-operator.crunchydata.com/data: postgres
11+
postgres-operator.crunchydata.com/instance-set: instance1
12+
ownerReferences:
13+
- apiVersion: postgres-operator.crunchydata.com/v1beta1
14+
blockOwnerDeletion: true
15+
controller: true
16+
kind: PostgresCluster
17+
name: standby-cluster
18+
status:
19+
availableReplicas: 1
20+
currentReplicas: 1
21+
readyReplicas: 1
22+
replicas: 1
23+
updatedReplicas: 1
24+
---
25+
kind: Deployment
26+
apiVersion: apps/v1
27+
metadata:
28+
name: standby-cluster-pgbouncer
29+
labels:
30+
postgres-operator.crunchydata.com/cluster: standby-cluster
31+
postgres-operator.crunchydata.com/role: pgbouncer
32+
ownerReferences:
33+
- apiVersion: postgres-operator.crunchydata.com/v1beta1
34+
kind: PostgresCluster
35+
name: standby-cluster
36+
controller: true
37+
blockOwnerDeletion: true
38+
status:
39+
observedGeneration: 1
40+
replicas: 3
41+
updatedReplicas: 3
42+
readyReplicas: 3
43+
---
44+
kind: Job
45+
apiVersion: batch/v1
46+
metadata:
47+
labels:
48+
postgres-operator.crunchydata.com/cluster: standby-cluster
49+
postgres-operator.crunchydata.com/pgbackrest: ''
50+
postgres-operator.crunchydata.com/pgbackrest-backup: replica-create
51+
postgres-operator.crunchydata.com/pgbackrest-repo: repo1
52+
ownerReferences:
53+
- apiVersion: pgv2.percona.com/v2
54+
kind: PerconaPGBackup
55+
controller: true
56+
blockOwnerDeletion: true
57+
status:
58+
succeeded: 1
59+
---
60+
apiVersion: postgres-operator.crunchydata.com/v1beta1
61+
kind: PostgresCluster
62+
metadata:
63+
name: standby-cluster
64+
ownerReferences:
65+
- apiVersion: pgv2.percona.com/v2
66+
kind: PerconaPGCluster
67+
name: standby-cluster
68+
controller: true
69+
blockOwnerDeletion: true
70+
finalizers:
71+
- postgres-operator.crunchydata.com/finalizer
72+
status:
73+
instances:
74+
- name: instance1
75+
readyReplicas: 3
76+
replicas: 3
77+
updatedReplicas: 3
78+
observedGeneration: 2
79+
pgbackrest:
80+
repos:
81+
- name: repo1
82+
stanzaCreated: true
83+
proxy:
84+
pgBouncer:
85+
readyReplicas: 3
86+
replicas: 3
87+
---
88+
apiVersion: pgv2.percona.com/v2
89+
kind: PerconaPGCluster
90+
metadata:
91+
name: standby-cluster
92+
spec:
93+
standby:
94+
enabled: false
95+
status:
96+
pgbouncer:
97+
ready: 3
98+
size: 3
99+
postgres:
100+
instances:
101+
- name: instance1
102+
ready: 3
103+
size: 3
104+
ready: 3
105+
size: 3
106+
state: ready
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
timeout: 60
4+
commands:
5+
- script: |-
6+
set -o xtrace
7+
8+
source ../../functions
9+
10+
# pause source cluster and then standby to be primary
11+
12+
kubectl patch pg -n "${NAMESPACE}" source-cluster --type=merge -p '{"spec": {"pause": true}}'
13+
14+
# wait till source cluster is paused
15+
16+
kubectl -n "${NAMESPACE}" wait --for=jsonpath='{.status.state}=paused' pg source-cluster --timeout=120s
17+
18+
kubectl patch pg -n "${NAMESPACE}" standby-cluster --type=merge -p '{"spec":{"standby":{"enabled":false}}}'
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
timeout: 60
4+
commands:
5+
- script: |-
6+
set -o errexit
7+
set -o xtrace
8+
9+
source ../../functions
10+
11+
run_psql_local \
12+
'\c myapp \\\ INSERT INTO myTable (id) VALUES (100501)' \
13+
"postgres:$(get_psql_user_pass source-cluster-pguser-postgres)@$(get_psql_user_host standby-cluster-pguser-standby-cluster)"

0 commit comments

Comments
 (0)