Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

K8SPG-175: add standby test #568

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions e2e-tests/run-minikube.csv
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ operator-self-healing
scaling
scheduled-backup
self-healing
standby
start-from-backup
telemetry-transfer
users
1 change: 1 addition & 0 deletions e2e-tests/run-pr.csv
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ operator-self-healing
scaling
scheduled-backup
self-healing
standby
start-from-backup
telemetry-transfer
users
1 change: 1 addition & 0 deletions e2e-tests/run-release.csv
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ operator-self-healing
scaling
scheduled-backup
self-healing
standby
start-from-backup
telemetry-transfer
users
24 changes: 24 additions & 0 deletions e2e-tests/tests/standby/00-assert.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
apiVersion: kuttl.dev/v1beta1
kind: TestAssert
timeout: 120
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: perconapgclusters.pgv2.percona.com
spec:
group: pgv2.percona.com
names:
kind: PerconaPGCluster
listKind: PerconaPGClusterList
plural: perconapgclusters
singular: perconapgcluster
scope: Namespaced
---
apiVersion: kuttl.dev/v1beta1
kind: TestAssert
metadata:
name: check-operator-deploy-status
timeout: 120
commands:
- script: kubectl assert exist-enhanced deployment percona-postgresql-operator -n ${OPERATOR_NS:-$NAMESPACE} --field-selector status.readyReplicas=1
13 changes: 13 additions & 0 deletions e2e-tests/tests/standby/00-deploy-operator.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
timeout: 10
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

deploy_operator
deploy_client
deploy_s3_secrets
108 changes: 108 additions & 0 deletions e2e-tests/tests/standby/01-assert.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
apiVersion: kuttl.dev/v1beta1
kind: TestAssert
timeout: 600
---
kind: StatefulSet
apiVersion: apps/v1
metadata:
labels:
postgres-operator.crunchydata.com/cluster: standby-primary
postgres-operator.crunchydata.com/data: postgres
postgres-operator.crunchydata.com/instance-set: instance1
ownerReferences:
- apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
name: standby-primary
controller: true
blockOwnerDeletion: true
status:
observedGeneration: 1
replicas: 1
readyReplicas: 1
currentReplicas: 1
updatedReplicas: 1
collisionCount: 0
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: standby-primary-pgbouncer
labels:
postgres-operator.crunchydata.com/cluster: standby-primary
postgres-operator.crunchydata.com/role: pgbouncer
annotations:
deployment.kubernetes.io/revision: '1'
ownerReferences:
- apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
name: standby-primary
controller: true
blockOwnerDeletion: true
status:
observedGeneration: 1
replicas: 3
updatedReplicas: 3
readyReplicas: 3
---
kind: Job
apiVersion: batch/v1
metadata:
labels:
postgres-operator.crunchydata.com/cluster: standby-primary
postgres-operator.crunchydata.com/pgbackrest: ''
postgres-operator.crunchydata.com/pgbackrest-backup: replica-create
postgres-operator.crunchydata.com/pgbackrest-repo: repo1
annotations:
postgres-operator.crunchydata.com/pgbackrest-config: database
ownerReferences:
- apiVersion: pgv2.percona.com/v2
kind: PerconaPGBackup
controller: true
blockOwnerDeletion: true
status:
succeeded: 1
---
apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
name: standby-primary
ownerReferences:
- apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
name: standby-primary
controller: true
blockOwnerDeletion: true
finalizers:
- postgres-operator.crunchydata.com/finalizer
status:
instances:
- name: instance1
readyReplicas: 3
replicas: 3
updatedReplicas: 3
observedGeneration: 1
pgbackrest:
repos:
- name: repo1
stanzaCreated: true
proxy:
pgBouncer:
readyReplicas: 3
replicas: 3
---
apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
metadata:
name: standby-primary
status:
pgbouncer:
ready: 3
size: 3
postgres:
instances:
- name: instance1
ready: 3
size: 3
ready: 3
size: 3
state: ready
18 changes: 18 additions & 0 deletions e2e-tests/tests/standby/01-create-cluster.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
timeout: 10
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

get_cr \
| yq ".metadata.name=\"${test_name}-primary\"" \
| yq "del(.spec.backups.pgbackrest.repos[0].schedules)" \
| yq "del(.spec.backups.pgbackrest.repos[0].volume)" \
| yq ".spec.backups.pgbackrest.repos[0].gcs.bucket=\"pg-operator-testing\"" \
| yq ".spec.backups.pgbackrest.configuration[0].secret.name=\"standby-pgbackrest-secrets\"" \
| yq ".spec.backups.pgbackrest.global.repo1-path = \"/backrestrepo/postgres-operator/'${test_name}${RANDOM}'/repo1\"" \
| kubectl -n "${NAMESPACE}" apply -f -
16 changes: 16 additions & 0 deletions e2e-tests/tests/standby/02-write-data.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

run_psql_local \
'CREATE DATABASE myapp; \c myapp \\\ CREATE TABLE IF NOT EXISTS myApp (id int PRIMARY KEY);' \
"postgres:$(get_psql_user_pass standby-primary-pguser-postgres)@$(get_psql_user_host standby-primary-pguser-postgres)"

run_psql_local \
'\c myapp \\\ INSERT INTO myApp (id) VALUES (100500)' \
"postgres:$(get_psql_user_pass standby-primary-pguser-postgres)@$(get_psql_user_host standby-primary-pguser-postgres)"
10 changes: 10 additions & 0 deletions e2e-tests/tests/standby/03-assert.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: kuttl.dev/v1beta1
kind: TestAssert
timeout: 30
---
kind: ConfigMap
apiVersion: v1
metadata:
name: 03-read-from-primary
data:
data: ' 100500'
12 changes: 12 additions & 0 deletions e2e-tests/tests/standby/03-read-from-primary.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
timeout: 30
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions
data=$(run_psql_local '\c myapp \\\ SELECT * from myApp;' "postgres:$(get_psql_user_pass standby-primary-pguser-postgres)@$(get_psql_user_host standby-primary-pguser-postgres)")

kubectl create configmap -n "${NAMESPACE}" 03-read-from-primary --from-literal=data="${data}"
90 changes: 90 additions & 0 deletions e2e-tests/tests/standby/04-assert.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
apiVersion: kuttl.dev/v1beta1
kind: TestAssert
timeout: 300
---
kind: StatefulSet
apiVersion: apps/v1
metadata:
labels:
postgres-operator.crunchydata.com/cluster: standby-standby
postgres-operator.crunchydata.com/data: postgres
postgres-operator.crunchydata.com/instance-set: instance1
ownerReferences:
- apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
name: standby-standby
controller: true
blockOwnerDeletion: true
status:
observedGeneration: 1
replicas: 1
readyReplicas: 1
currentReplicas: 1
updatedReplicas: 1
collisionCount: 0
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: standby-standby-pgbouncer
labels:
postgres-operator.crunchydata.com/cluster: standby-standby
postgres-operator.crunchydata.com/role: pgbouncer
annotations:
deployment.kubernetes.io/revision: '1'
ownerReferences:
- apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
name: standby-standby
controller: true
blockOwnerDeletion: true
status:
observedGeneration: 1
replicas: 3
updatedReplicas: 3
readyReplicas: 3
---
apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
name: standby-standby
ownerReferences:
- apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
name: standby-standby
controller: true
blockOwnerDeletion: true
finalizers:
- postgres-operator.crunchydata.com/finalizer
status:
instances:
- name: instance1
readyReplicas: 3
replicas: 3
updatedReplicas: 3
observedGeneration: 1
pgbackrest:
repos:
- name: repo1
stanzaCreated: false
proxy:
pgBouncer:
readyReplicas: 3
replicas: 3
---
apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
metadata:
name: standby-standby
status:
pgbouncer:
ready: 3
size: 3
postgres:
instances:
- name: instance1
ready: 3
size: 3
ready: 3
size: 3
state: ready
22 changes: 22 additions & 0 deletions e2e-tests/tests/standby/04-create-standby.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
timeout: 10
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

repo_path=$(kubectl get pg -n "${NAMESPACE}" "${test_name}-primary" -o yaml | yq ".spec.backups.pgbackrest.global.repo1-path")

get_cr \
| yq ".metadata.name=\"${test_name}-standby\"" \
| yq ".spec.standby.enabled=true" \
| yq ".spec.standby.repoName=\"repo1\"" \
| yq "del(.spec.backups.pgbackrest.repos[0].schedules)" \
| yq "del(.spec.backups.pgbackrest.repos[0].volume)" \
| yq ".spec.backups.pgbackrest.repos[0].gcs.bucket=\"pg-operator-testing\"" \
| yq ".spec.backups.pgbackrest.configuration[0].secret.name=\"standby-pgbackrest-secrets\"" \
| yq ".spec.backups.pgbackrest.global.repo1-path = \"$repo_path\"" \
| kubectl -n "${NAMESPACE}" apply -f -
10 changes: 10 additions & 0 deletions e2e-tests/tests/standby/05-assert.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: kuttl.dev/v1beta1
kind: TestAssert
timeout: 30
---
kind: ConfigMap
apiVersion: v1
metadata:
name: 05-read-from-standby
data:
data: ' 100500'
12 changes: 12 additions & 0 deletions e2e-tests/tests/standby/05-read-from-standby.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
timeout: 30
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions
data=$(run_psql_local '\c myapp \\\ SELECT * from myApp;' "postgres:$(get_psql_user_pass standby-primary-pguser-postgres)@$(get_psql_user_host standby-standby-pguser-postgres)")

kubectl create configmap -n "${NAMESPACE}" 05-read-from-standby --from-literal=data="${data}"
13 changes: 13 additions & 0 deletions e2e-tests/tests/standby/06-write-data-to-standby.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

run_psql_local \
'CREATE DATABASE myapp2; \c myapp2 \\\ CREATE TABLE IF NOT EXISTS myApp (id int PRIMARY KEY);' \
"postgres:$(get_psql_user_pass standby-primary-pguser-postgres)@$(get_psql_user_host standby-standby-pguser-postgres)" 2>&1 | cat \
| grep "ERROR: cannot execute CREATE DATABASE in a read-only transaction"
Loading
Loading