Skip to content
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
24 changes: 24 additions & 0 deletions e2e-tests/tests/postgis/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/postgis/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
init_temp_dir # do this only in the first TestStep
deploy_operator
deploy_client
115 changes: 115 additions & 0 deletions e2e-tests/tests/postgis/01-assert.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
apiVersion: kuttl.dev/v1beta1
kind: TestAssert
timeout: 180
---
kind: StatefulSet
apiVersion: apps/v1
metadata:
name: postgis-repo-host
labels:
postgres-operator.crunchydata.com/cluster: postgis
postgres-operator.crunchydata.com/data: pgbackrest
postgres-operator.crunchydata.com/pgbackrest: ''
postgres-operator.crunchydata.com/pgbackrest-dedicated: ''
ownerReferences:
- apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
name: postgis
controller: true
blockOwnerDeletion: true
status:
observedGeneration: 1
replicas: 1
readyReplicas: 1
currentReplicas: 1
updatedReplicas: 1
collisionCount: 0
---
kind: StatefulSet
apiVersion: apps/v1
metadata:
labels:
postgres-operator.crunchydata.com/cluster: postgis
postgres-operator.crunchydata.com/data: postgres
postgres-operator.crunchydata.com/instance-set: instance1
ownerReferences:
- apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
name: postgis
controller: true
blockOwnerDeletion: true
status:
observedGeneration: 1
replicas: 1
readyReplicas: 1
currentReplicas: 1
updatedReplicas: 1
collisionCount: 0
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: postgis-pgbouncer
labels:
postgres-operator.crunchydata.com/cluster: postgis
postgres-operator.crunchydata.com/role: pgbouncer
ownerReferences:
- apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
name: postgis
controller: true
blockOwnerDeletion: true
status:
observedGeneration: 1
replicas: 3
updatedReplicas: 3
readyReplicas: 3
---
apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
name: postgis
ownerReferences:
- apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
name: postgis
controller: true
blockOwnerDeletion: true
finalizers:
- postgres-operator.crunchydata.com/finalizer
status:
instances:
- name: instance1
readyReplicas: 3
replicas: 3
updatedReplicas: 3
observedGeneration: 1
pgbackrest:
repoHost:
apiVersion: apps/v1
kind: StatefulSet
ready: true
repos:
- bound: true
name: repo1
proxy:
pgBouncer:
readyReplicas: 3
replicas: 3
---
apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
metadata:
name: postgis
status:
pgbouncer:
ready: 3
size: 3
postgres:
instances:
- name: instance1
ready: 3
size: 3
ready: 3
size: 3
state: ready
12 changes: 12 additions & 0 deletions e2e-tests/tests/postgis/01-create-cluster.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
timeout: 100
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

# Use the PostGIS-enabled PostgreSQL image
get_cr | yq eval '.spec.image = "'$IMAGE_POSTGIS'"' - | kubectl -n "${NAMESPACE}" apply -f -
28 changes: 28 additions & 0 deletions e2e-tests/tests/postgis/02-assert.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
apiVersion: kuttl.dev/v1beta1
kind: TestAssert
timeout: 120
---
apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
name: postgis
status:
instances:
- name: instance1
readyReplicas: 3
replicas: 3
updatedReplicas: 3
pgbackrest:
repoHost:
ready: true
proxy:
pgBouncer:
readyReplicas: 3
replicas: 3
---
apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
metadata:
name: postgis
status:
state: ready
16 changes: 16 additions & 0 deletions e2e-tests/tests/postgis/02-enable-postgis.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
timeout: 100
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

# Patch the underlying PostgresCluster to enable PostGIS.
# The Percona operator does not override postGISVersion on reconcile,
# so this setting is preserved and triggers PostGIS extension installation.
kubectl -n "${NAMESPACE}" patch postgrescluster postgis \
--type=merge \
--patch "{\"spec\":{\"postGISVersion\":\"${POSTGIS_VER}\"}}"
46 changes: 46 additions & 0 deletions e2e-tests/tests/postgis/03-check-postgis.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
timeout: 120
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

PSQL_URI="postgres:$(get_psql_user_pass postgis-pguser-postgres)@$(get_psql_user_host postgis-pguser-postgres)/postgres"

result=$(run_psql_local \
"SELECT left(postgis_version(),1);" \
"${PSQL_URI}")
if [[ "${result}" != "${POSTGIS_VER:0:1}" ]]; then
echo "PostGIS version check failed: expected major version ${POSTGIS_VER:0:1}, got ${result}"
exit 1
fi

for schema in tiger tiger_data topology; do
result=$(run_psql_local \
"SELECT nspname FROM pg_catalog.pg_namespace WHERE nspname='${schema}';" \
"${PSQL_URI}")
if [[ "${result}" != "${schema}" ]]; then
echo "PostGIS schema '${schema}' is missing"
exit 1
fi
done

result=$(run_psql_local \
"SELECT pg_typeof(ST_MakePoint(28.385200,-81.563900));" \
"${PSQL_URI}")
if [[ "${result}" != "geometry" ]]; then
echo "ST_MakePoint check failed: expected 'geometry', got '${result}'"
exit 1
fi

result=$(run_psql_local \
"SELECT ST_AsGeoJSON('SRID=4326;POINT(-118.4079 33.9434)'::geography);" \
"${PSQL_URI}")
expected='{"type":"Point","coordinates":[-118.4079,33.9434]}'
if [[ "${result}" != "${expected}" ]]; then
echo "ST_AsGeoJSON check failed: expected '${expected}', got '${result}'"
exit 1
fi
22 changes: 22 additions & 0 deletions e2e-tests/tests/postgis/99-remove-cluster-gracefully.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
delete:
- apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
metadata:
name: postgis
- apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
name: postgis
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

remove_all_finalizers
check_operator_panic
destroy_operator
timeout: 60
1 change: 1 addition & 0 deletions e2e-tests/vars.sh
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ fi
export IMAGE_PGBOUNCER=${IMAGE_PGBOUNCER:-"${IMAGE_BASE}:main-pgbouncer$PG_VER"}
export IMAGE_POSTGRESQL=${IMAGE_POSTGRESQL:-"${IMAGE_BASE}:main-ppg$PG_VER-postgres"}
export IMAGE_BACKREST=${IMAGE_BACKREST:-"${IMAGE_BASE}:main-pgbackrest$PG_VER"}
export IMAGE_POSTGIS=${s:-"docker.io/percona/percona-postgresql-operator:2.8.1-ppg17.7-postgres-gis3.3.8"}
export IMAGE_UPGRADE=${IMAGE_UPGRADE:-"${IMAGE_BASE}:main-upgrade"}
export BUCKET=${BUCKET:-"pg-operator-testing"}
export PMM_SERVER_VERSION=${PMM_SERVER_VERSION:-"9.9.9"}
Expand Down
Loading