Files
truecharts/charts/library/common-test/tests/cnpg/cluster_spec_test.yaml
T
BoemeltreinandGitHub e818f936ef feat(common): Add CNPG Vectorchord extension (#40702)
**Description**
<!--
Please include a summary of the change and which issue is fixed. Please
also include relevant motivation and context. List any dependencies that
are required for this change.
-->
https://github.com/tensorchord/cloudnative-pgvecto.rs
Is depricated and VectorChord serves as the successor to
[pgvecto.rs](https://github.com/tensorchord/pgvecto.rs) with better
stability and performance.
https://github.com/tensorchord/cloudnative-vectorchord
Also needed when you want to use for example immich with this database
extension type.


⚒️ Fixes  # <!--(issue)-->

**⚙️ Type of change**

- [x] ⚙️ Feature/App addition
- [ ] 🪛 Bugfix
- [ ] ⚠️ Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [ ] 🔃 Refactor of current code
- [ ] 📜 Documentation Changes

**🧪 How Has This Been Tested?**
<!--
Please describe the tests that you ran to verify your changes. Provide
instructions so we can reproduce. Please also list any relevant details
for your test configuration
-->
Added the tests in the common.

**📃 Notes:**
<!-- Please enter any other relevant information here -->

**✔️ Checklist:**

- [ ] ⚖️ My code follows the style guidelines of this project
- [x] 👀 I have performed a self-review of my own code
- [ ] #️⃣ I have commented my code, particularly in hard-to-understand
areas
- [ ] 📄 I have made changes to the documentation
- [ ] 🧪 I have added tests to this description that prove my fix is
effective or that my feature works
- [ ] ⬆️ I increased versions for any altered app according to semantic
versioning
- [x] I made sure the title starts with `feat(chart-name):`,
`fix(chart-name):`, `chore(chart-name):`, `docs(chart-name):` or
`fix(docs):`

** App addition**

If this PR is an app addition please make sure you have done the
following.

- [ ] 🖼️ I have added an icon in the Chart's root directory called
`icon.png`

---

_Please don't blindly check all the boxes. Read them and only check
those that apply.
Those checkboxes are there for the reviewer to see what is this all
about and
the status of this PR with a quick glance._
2025-10-18 00:05:13 +02:00

704 lines
20 KiB
YAML

suite: cnpg cluster spec test
templates:
- common.yaml
release:
name: test-release-name
namespace: test-release-namespace
tests:
- it: should generate correct spec
set:
postgres16Image:
repository: ghcr.io/cloudnative-pg/postgresql
tag: "16.3"
pullPolicy: IfNotPresent
cnpg:
my-pg:
enabled: true
user: test-user
database: test-db
password: test-password
asserts:
- documentIndex: &clusterDoc 0
isKind:
of: Cluster
- documentIndex: *clusterDoc
isAPIVersion:
of: postgresql.cnpg.io/v1
- documentIndex: *clusterDoc
equal:
path: metadata.name
value: test-release-name-common-test-cnpg-my-pg
- documentIndex: *clusterDoc
equal:
path: spec
value:
enableSuperuserAccess: true
imageName: ghcr.io/cloudnative-pg/postgresql:16.3
primaryUpdateStrategy: unsupervised
primaryUpdateMethod: switchover
postgresUID: 26
postgresGID: 26
logLevel: info
instances: 2
nodeMaintenanceWindow:
reusePVC: true
inProgress: false
resources:
limits:
cpu: 1500m
memory: 2400Mi
requests:
cpu: 75m
memory: 200Mi
storage:
pvcTemplate:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
walStorage:
pvcTemplate:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
bootstrap:
initdb:
secret:
name: test-release-name-common-test-cnpg-my-pg-user
database: test-db
owner: test-user
dataChecksums: true
- it: should work with custom UID/GID
set:
postgres16Image:
repository: ghcr.io/cloudnative-pg/postgresql
tag: "16.3"
pullPolicy: IfNotPresent
cnpg:
my-pg:
enabled: true
user: test-user
database: test-db
password: test-password
cluster:
postgresUID: 666
postgresGID: 666
asserts:
- documentIndex: &clusterDoc 0
isKind:
of: Cluster
- documentIndex: *clusterDoc
isAPIVersion:
of: postgresql.cnpg.io/v1
- documentIndex: *clusterDoc
equal:
path: metadata.name
value: test-release-name-common-test-cnpg-my-pg
- documentIndex: *clusterDoc
equal:
path: spec
value:
enableSuperuserAccess: true
imageName: ghcr.io/cloudnative-pg/postgresql:16.3
postgresUID: 666
postgresGID: 666
primaryUpdateStrategy: unsupervised
primaryUpdateMethod: switchover
logLevel: info
instances: 2
nodeMaintenanceWindow:
reusePVC: true
inProgress: false
resources:
limits:
cpu: 1500m
memory: 2400Mi
requests:
cpu: 75m
memory: 200Mi
storage:
pvcTemplate:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
walStorage:
pvcTemplate:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
bootstrap:
initdb:
secret:
name: test-release-name-common-test-cnpg-my-pg-user
database: test-db
owner: test-user
dataChecksums: true
- it: should respect changed fallbackDefaults
set:
postgres15Image:
repository: ghcr.io/cloudnative-pg/postgresql
tag: "15.6"
global:
fallbackDefaults:
cnpg:
pgVersion: 15
vctAccessModes:
- ReadWriteMany
- ReadWriteOnce
cnpg:
my-pg:
enabled: true
user: test-user
database: test-db
password: test-password
asserts:
- documentIndex: *clusterDoc
isKind:
of: Cluster
- documentIndex: *clusterDoc
isAPIVersion:
of: postgresql.cnpg.io/v1
- documentIndex: *clusterDoc
equal:
path: metadata.name
value: test-release-name-common-test-cnpg-my-pg
- documentIndex: *clusterDoc
isSubset:
path: spec
content:
imageName: ghcr.io/cloudnative-pg/postgresql:15.6
storage:
pvcTemplate:
accessModes:
- ReadWriteMany
- ReadWriteOnce
resources:
requests:
storage: 100Gi
walStorage:
pvcTemplate:
accessModes:
- ReadWriteMany
- ReadWriteOnce
resources:
requests:
storage: 100Gi
- it: should generate correct imageName with changed type and pgVersion
set:
postgresVectors15Image:
repository: ghcr.io/tensorchord/cloudnative-pgvecto.rs
tag: "15.6-v0.2.1"
cnpg:
my-pg:
enabled: true
user: test-user
database: test-db
password: test-password
pgVersion: 15
type: vectors
asserts:
- documentIndex: *clusterDoc
isKind:
of: Cluster
- documentIndex: *clusterDoc
isAPIVersion:
of: postgresql.cnpg.io/v1
- documentIndex: *clusterDoc
equal:
path: metadata.name
value: test-release-name-common-test-cnpg-my-pg
- documentIndex: *clusterDoc
equal:
path: spec.imageName
value: ghcr.io/tensorchord/cloudnative-pgvecto.rs:15.6-v0.2.1
- it: should generate correct imageName with changed pgVersion
set:
postgres15Image:
repository: ghcr.io/cloudnative-pg/postgresql
tag: "15.6"
cnpg:
my-pg:
enabled: true
user: test-user
database: test-db
password: test-password
pgVersion: 15
asserts:
- documentIndex: *clusterDoc
isKind:
of: Cluster
- documentIndex: *clusterDoc
isAPIVersion:
of: postgresql.cnpg.io/v1
- documentIndex: *clusterDoc
equal:
path: metadata.name
value: test-release-name-common-test-cnpg-my-pg
- documentIndex: *clusterDoc
equal:
path: spec.imageName
value: ghcr.io/cloudnative-pg/postgresql:15.6
- it: should override options
set:
ext1: some-extension
ext2: some-other-extension
cnpg:
my-pg:
enabled: true
user: test-user
database: test-db
password: test-password
cluster:
enableSuperuserAccess: false
imageName: some-image
primaryUpdateStrategy: supervised
primaryUpdateMethod: restart
postgresUID: 26
postgresGID: 26
logLevel: debug
instances: 3
initdb:
dataChecksums: false
encoding: some-encoding
localeCollate: some-locale
localeCtype: some-locale
walSegmentSize: 16
postInitApplicationSQL:
- CREATE EXTENSION IF NOT EXISTS {{ .Values.ext1 }};
- CREATE EXTENSION IF NOT EXISTS {{ .Values.ext2 }};
postInitSQL:
- CREATE EXTENSION IF NOT EXISTS {{ .Values.ext1 }}1;
- CREATE EXTENSION IF NOT EXISTS {{ .Values.ext2 }}2;
postInitTemplateSQL:
- CREATE EXTENSION IF NOT EXISTS {{ .Values.ext1 }}1;
- CREATE EXTENSION IF NOT EXISTS {{ .Values.ext2 }}2;
nodeMaintenanceWindow:
reusePVC: false
inProgress: true
resources:
limits:
cpu: 2000m
memory: 4Gi
requests:
cpu: 20m
memory: 100Mi
storage:
size: 200Gi
accessModes:
- ReadWriteMany
walStorage:
size: 200Gi
accessModes:
- ReadWriteMany
asserts:
- documentIndex: *clusterDoc
isKind:
of: Cluster
- documentIndex: *clusterDoc
equal:
path: spec
value:
enableSuperuserAccess: false
imageName: some-image
primaryUpdateStrategy: supervised
primaryUpdateMethod: restart
postgresUID: 26
postgresGID: 26
logLevel: debug
instances: 3
nodeMaintenanceWindow:
reusePVC: false
inProgress: true
resources:
limits:
cpu: 2000m
memory: 4Gi
requests:
cpu: 20m
memory: 100Mi
storage:
pvcTemplate:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 200Gi
walStorage:
pvcTemplate:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 200Gi
bootstrap:
initdb:
secret:
name: test-release-name-common-test-cnpg-my-pg-user
database: test-db
owner: test-user
dataChecksums: false
encoding: some-encoding
localeCollate: some-locale
localeCtype: some-locale
walSegmentSize: 16
postInitApplicationSQL:
- CREATE EXTENSION IF NOT EXISTS some-extension;
- CREATE EXTENSION IF NOT EXISTS some-other-extension;
postInitSQL:
- CREATE EXTENSION IF NOT EXISTS some-extension1;
- CREATE EXTENSION IF NOT EXISTS some-other-extension2;
postInitTemplateSQL:
- CREATE EXTENSION IF NOT EXISTS some-extension1;
- CREATE EXTENSION IF NOT EXISTS some-other-extension2;
- it: should override resources from top level
set:
resources:
limits:
cpu: 2000m
memory: 4Gi
requests:
cpu: 20m
memory: 100Mi
cnpg:
my-pg:
enabled: true
user: test-user
database: test-db
password: test-password
asserts:
- documentIndex: *clusterDoc
isKind:
of: Cluster
- documentIndex: *clusterDoc
isSubset:
path: spec
content:
resources:
limits:
cpu: 2000m
memory: 4Gi
requests:
cpu: 20m
memory: 100Mi
- it: should pass with custom-conf
set:
cnpg:
my-pg:
enabled: true
user: app
database: app
password: test-password
cluster:
postgresql:
key1: value1
key2: '{{ printf "test-tpl" }}'
preloadLibraries:
- pg_stat_statements
- pg_cron
asserts:
- documentIndex: *clusterDoc
isKind:
of: Cluster
- documentIndex: *clusterDoc
isSubset:
path: spec
content:
postgresql:
parameters:
key1: value1
key2: test-tpl
shared_preload_libraries:
- pg_stat_statements
- pg_cron
- it: should pass with timescaledb
set:
postgresTimescaledb16Image:
repository: docker.io/timescale/timescaledb
tag: "some-tag"
cnpg:
my-pg:
enabled: true
user: app
database: app
password: test-password
type: timescaledb
cluster:
initdb:
postInitApplicationSQL:
- CREATE EXTENSION IF NOT EXISTS some-extension;
postgresql:
key1: value1
key2: '{{ printf "test-tpl" }}'
preloadLibraries:
- pg_stat_statements
- pg_cron
asserts:
- documentIndex: *clusterDoc
isKind:
of: Cluster
- documentIndex: *clusterDoc
isSubset:
path: spec
content:
postgresql:
parameters:
key1: value1
key2: test-tpl
shared_preload_libraries:
- pg_stat_statements
- pg_cron
- timescaledb
bootstrap:
initdb:
secret:
name: test-release-name-common-test-cnpg-my-pg-user
database: app
owner: app
dataChecksums: true
postInitApplicationSQL:
- CREATE EXTENSION IF NOT EXISTS timescaledb;
- CREATE EXTENSION IF NOT EXISTS some-extension;
- it: should pass with postgis
set:
postgresPostgis16Image:
repository: docker.io/postgis/postgisdb
tag: "some-tag"
cnpg:
my-pg:
enabled: true
user: app
database: app
password: test-password
type: postgis
cluster:
initdb:
postInitApplicationSQL:
- CREATE EXTENSION IF NOT EXISTS some-extension;
postgresql:
key1: value1
key2: '{{ printf "test-tpl" }}'
preloadLibraries:
- pg_stat_statements
- pg_cron
asserts:
- documentIndex: *clusterDoc
isKind:
of: Cluster
- documentIndex: *clusterDoc
isSubset:
path: spec
content:
postgresql:
parameters:
key1: value1
key2: test-tpl
shared_preload_libraries:
- pg_stat_statements
- pg_cron
bootstrap:
initdb:
secret:
name: test-release-name-common-test-cnpg-my-pg-user
database: app
owner: app
dataChecksums: true
postInitApplicationSQL:
- CREATE EXTENSION IF NOT EXISTS postgis;
- CREATE EXTENSION IF NOT EXISTS postgis_topology;
- CREATE EXTENSION IF NOT EXISTS fuzzystrmatch;
- CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder;
- CREATE EXTENSION IF NOT EXISTS some-extension;
- it: should pass with vectors
set:
postgresVectors16Image:
repository: docker.io/vectors/vectors
tag: "some-tag"
cnpg:
my-pg:
enabled: true
user: app
database: app
password: test-password
type: vectors
cluster:
initdb:
postInitApplicationSQL:
- CREATE EXTENSION IF NOT EXISTS some-extension;
postgresql:
key1: value1
key2: '{{ printf "test-tpl" }}'
preloadLibraries:
- pg_stat_statements
- pg_cron
asserts:
- documentIndex: *clusterDoc
isKind:
of: Cluster
- documentIndex: *clusterDoc
isSubset:
path: spec
content:
postgresql:
parameters:
key1: value1
key2: test-tpl
shared_preload_libraries:
- pg_stat_statements
- pg_cron
- vectors.so
bootstrap:
initdb:
secret:
name: test-release-name-common-test-cnpg-my-pg-user
database: app
owner: app
dataChecksums: true
postInitApplicationSQL:
- CREATE EXTENSION IF NOT EXISTS vectors;
- CREATE EXTENSION IF NOT EXISTS some-extension;
- it: should pass with vectorchord
set:
postgresVectorchord16Image:
repository: docker.io/vectorchord/vectorchord
tag: "some-tag"
cnpg:
my-pg:
enabled: true
user: app
database: app
password: test-password
type: vectorchord
cluster:
initdb:
postInitApplicationSQL:
- CREATE EXTENSION IF NOT EXISTS some-extension;
postgresql:
key1: value1
key2: '{{ printf "test-tpl" }}'
preloadLibraries:
- pg_stat_statements
- pg_cron
asserts:
- documentIndex: *clusterDoc
isKind:
of: Cluster
- documentIndex: *clusterDoc
isSubset:
path: spec
content:
postgresql:
parameters:
key1: value1
key2: test-tpl
shared_preload_libraries:
- pg_stat_statements
- pg_cron
- vchord.so
bootstrap:
initdb:
secret:
name: test-release-name-common-test-cnpg-my-pg-user
database: app
owner: app
dataChecksums: true
postInitApplicationSQL:
- CREATE EXTENSION IF NOT EXISTS vchord CASCADE;
- CREATE EXTENSION IF NOT EXISTS some-extension;
- it: should pass with enabled monitoring
set:
postgresTimescaledb16Image:
repository: docker.io/timescale/timescaledb
tag: "some-tag"
cnpg:
my-pg:
enabled: true
user: app
database: app
password: test-password
type: timescaledb
monitoring:
enablePodMonitor: true
asserts:
- documentIndex: *clusterDoc
isKind:
of: Cluster
- documentIndex: *clusterDoc
equal:
path: spec.monitoring
value:
enablePodMonitor: true
disableDefaultQueries: false
- it: should pass with override monitoring
set:
postgresTimescaledb16Image:
repository: docker.io/timescale/timescaledb
tag: "some-tag"
cnpg:
my-pg:
enabled: true
user: app
database: app
password: test-password
type: timescaledb
monitoring:
enablePodMonitor: true
disableDefaultQueries: true
customQueries:
- name: test-query
query: test-query
metrics:
- a-gauge:
usage: GAUGE
description: test-metric
- a-counter:
usage: COUNTER
description: test-metric
- name: test-query2
query: test-query2
metrics:
- a-gauge:
usage: GAUGE
description: test-metric
- a-counter:
usage: COUNTER
description: test-metric
- name: test-query3
query: test-query3
expandObjectName: false
key: test-key
asserts:
- documentIndex: *clusterDoc
isKind:
of: Cluster
- documentIndex: *clusterDoc
equal:
path: spec.monitoring
value:
enablePodMonitor: true
disableDefaultQueries: true
customQueriesConfigMap:
- name: test-release-name-common-test-cnpg-my-pg-test-query
key: custom-queries
- name: test-release-name-common-test-cnpg-my-pg-test-query2
key: custom-queries
- name: test-query3
key: test-key