add db-wait tests

This commit is contained in:
Stavros kois
2024-03-10 14:24:35 +02:00
parent 4c18d6664b
commit 10f4e19fbc
2 changed files with 190 additions and 29 deletions

View File

@@ -0,0 +1,155 @@
suite: cnpg db-wait test
templates:
- common.yaml
release:
name: test-release-name
namespace: test-release-namespace
tests:
- it: should generate correct db-wait script
set:
workload: &workload
my-workload:
type: Deployment
enabled: true
primary: true
podSpec:
my-container:
enabled: true
primary: true
cnpg:
my-pg:
enabled: true
user: test-user
database: test-db
asserts:
- documentIndex: &deployDoc 4
isKind:
of: Deployment
- documentIndex: *deployDoc
isAPIVersion:
of: apps/v1
- documentIndex: *deployDoc
equal:
path: spec.template.spec.initContainers[0].name
value: test-release-name-common-test-system-cnpg-wait
- documentIndex: *deployDoc
equal:
path: spec.template.spec.initContainers[0].command
value:
- /bin/sh
- -c
- |-
/bin/sh <<'EOF'
echo "Executing DB waits..."
echo "Testing Database availability on [CNPG RW]"
until
echo "Testing database on url: [test-release-name-common-test-cnpg-my-pg-rw]"
pg_isready -U test-user -d test-db -h test-release-name-common-test-cnpg-my-pg-rw
do sleep 5
done
echo "Database available on url: [test-release-name-common-test-cnpg-my-pg-rw]"
echo "Done executing DB waits..."
EOF
- it: should generate correct db-wait script with pooler, only rw
set:
workload: *workload
cnpg:
my-pg:
enabled: true
user: test-user
database: test-db
pooler:
enabled: true
createRO: false
asserts:
- documentIndex: &deployDoc 5
isKind:
of: Deployment
- documentIndex: *deployDoc
isAPIVersion:
of: apps/v1
- documentIndex: *deployDoc
equal:
path: spec.template.spec.initContainers[0].name
value: test-release-name-common-test-system-cnpg-wait
- documentIndex: *deployDoc
equal:
path: spec.template.spec.initContainers[0].command
value:
- /bin/sh
- -c
- |-
/bin/sh <<'EOF'
echo "Executing DB waits..."
echo "Testing Database availability on [CNPG RW]"
until
echo "Testing database on url: [test-release-name-common-test-cnpg-my-pg-rw]"
pg_isready -U test-user -d test-db -h test-release-name-common-test-cnpg-my-pg-rw
do sleep 5
done
echo "Database available on url: [test-release-name-common-test-cnpg-my-pg-rw]"
echo "Testing Database availability on [CNPG Pooler RW]"
until
echo "Testing database on url: [test-release-name-common-test-cnpg-my-pg-pooler-rw]"
pg_isready -U test-user -d test-db -h test-release-name-common-test-cnpg-my-pg-pooler-rw
do sleep 5
done
echo "Database available on url: [test-release-name-common-test-cnpg-my-pg-pooler-rw]"
echo "Done executing DB waits..."
EOF
- it: should generate correct db-wait script with pooler rw and ro
set:
workload: *workload
cnpg:
my-pg:
enabled: true
user: test-user
database: test-db
pooler:
enabled: true
createRO: true
asserts:
- documentIndex: &deployDoc 6
isKind:
of: Deployment
- documentIndex: *deployDoc
isAPIVersion:
of: apps/v1
- documentIndex: *deployDoc
equal:
path: spec.template.spec.initContainers[0].name
value: test-release-name-common-test-system-cnpg-wait
- documentIndex: *deployDoc
equal:
path: spec.template.spec.initContainers[0].command
value:
- /bin/sh
- -c
- |-
/bin/sh <<'EOF'
echo "Executing DB waits..."
echo "Testing Database availability on [CNPG RW]"
until
echo "Testing database on url: [test-release-name-common-test-cnpg-my-pg-rw]"
pg_isready -U test-user -d test-db -h test-release-name-common-test-cnpg-my-pg-rw
do sleep 5
done
echo "Database available on url: [test-release-name-common-test-cnpg-my-pg-rw]"
echo "Testing Database availability on [CNPG Pooler RW]"
until
echo "Testing database on url: [test-release-name-common-test-cnpg-my-pg-pooler-rw]"
pg_isready -U test-user -d test-db -h test-release-name-common-test-cnpg-my-pg-pooler-rw
do sleep 5
done
echo "Database available on url: [test-release-name-common-test-cnpg-my-pg-pooler-rw]"
echo "Testing Database availability on [CNPG Pooler RO]"
until
echo "Testing database on url: [test-release-name-common-test-cnpg-my-pg-pooler-ro]"
pg_isready -U test-user -d test-db -h test-release-name-common-test-cnpg-my-pg-pooler-ro
do sleep 5
done
echo "Database available on url: [test-release-name-common-test-cnpg-my-pg-pooler-ro]"
echo "Done executing DB waits..."
EOF

View File

@@ -361,35 +361,41 @@ command:
- "-c"
- |
/bin/sh <<'EOF'
{{ range $name, $cnpg := .Values.cnpg }}
{{ if $cnpg.enabled }}
{{- range $name, $cnpg := .Values.cnpg -}}
{{- if $cnpg.enabled }}
echo "Executing DB waits..."
{{ $cnpgName := include "tc.v1.common.lib.chart.names.fullname" $ }}
{{ $cnpgName = printf "%v-cnpg-%v" $cnpgName $name }}
echo "Testing Database availability..."
until
echo "Testing database on url: {{ $cnpgName }}-rw"
pg_isready -U {{ .user }} -d {{ .database }} -h {{ $cnpgName }}-rw
do sleep 5
done
{{ if and $cnpg.pooler $cnpg.pooler.enabled }}
echo "Detected RW pooler, testing RW pooler availability..."
until
echo "Testing database on url: {{ $cnpgName }}-pooler-rw"
pg_isready -U {{ .user }} -d {{ .database }} -h {{ $cnpgName }}-pooler-rw
do sleep 5
done
{{ if $cnpg.pooler.createRO }}
echo "Detected RO pooler, testing RO pooler availability..."
until
echo "Testing database on url: {{ $cnpgName }}-pooler-ro"
pg_isready -U {{ .user }} -d {{ .database }} -h {{ $cnpgName }}-pooler-ro
do sleep 5
done
{{ end }}
{{ end }}
{{ end }}
{{ end }}
sleep 5
{{- $cnpgName := include "tc.v1.common.lib.chart.names.fullname" $ -}}
{{- $cnpgName = printf "%v-cnpg-%v" $cnpgName $name -}}
{{/* Wait RW CNPG */}}
{{- include "cnpg.wait.script" (dict "url" (printf "%s-rw" $cnpgName) "user" .user "db" .database "on" "CNPG RW") | nindent 4 -}}
{{- if and $cnpg.pooler $cnpg.pooler.enabled -}}
{{/* Wait RW Pooler */}}
{{- include "cnpg.wait.script" (dict "url" (printf "%s-pooler-rw" $cnpgName) "user" .user "db" .database "on" "CNPG Pooler RW") | nindent 4 -}}
{{/* Wait RO Pooler */}}
{{- if $cnpg.pooler.createRO -}}
{{- include "cnpg.wait.script" (dict "url" (printf "%s-pooler-ro" $cnpgName) "user" .user "db" .database "on" "CNPG Pooler RO") | nindent 4 -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- end }}
echo "Done executing DB waits..."
EOF
{{- end -}}
{{- define "cnpg.wait.script" -}}
{{- $url := .url -}}
{{- $user := .user -}}
{{- $db := .db -}}
{{- $on := .on -}}
echo "Testing Database availability on [{{ $on }}]"
until
echo "Testing database on url: [{{ $url }}]"
pg_isready -U {{ $user }} -d {{ $db }} -h {{ $url }}
do sleep 5
done
echo "Database available on url: [{{ $url }}]"
{{- end -}}