From 9bde65792e7d65d93b04c676f2a4f1c659d01b65 Mon Sep 17 00:00:00 2001 From: Stavros kois Date: Sun, 10 Mar 2024 02:22:29 +0200 Subject: [PATCH] more tests --- .../tests/cnpg/cluster_spec_test.yaml | 62 +++++++++++++++ .../tests/cnpg/cluster_validation_test.yaml | 2 +- .../tests/cnpg/pg_version_configmap_test.yaml | 79 +++++++++++++++++++ .../lib/cnpg/cluster/_validation.tpl | 2 +- library/common/templates/spawner/_cnpg.tpl | 1 - library/common/values.yaml | 77 ++++++++++-------- 6 files changed, 187 insertions(+), 36 deletions(-) create mode 100644 library/common-test/tests/cnpg/pg_version_configmap_test.yaml diff --git a/library/common-test/tests/cnpg/cluster_spec_test.yaml b/library/common-test/tests/cnpg/cluster_spec_test.yaml index 863a071f..085d3435 100644 --- a/library/common-test/tests/cnpg/cluster_spec_test.yaml +++ b/library/common-test/tests/cnpg/cluster_spec_test.yaml @@ -67,6 +67,12 @@ tests: - it: should respect changed fallbackDefaults set: + postgres15Image: + repository: ghcr.io/cloudnative-pg/postgresql + tag: "15.6" + global: + fallbackDefaults: + pgVersion: "15" fallbackDefaults: vctAccessModes: - ReadWriteMany @@ -91,6 +97,7 @@ tests: isSubset: path: spec content: + imageName: ghcr.io/cloudnative-pg/postgresql:15.6 storage: pvcTemplate: accessModes: @@ -108,6 +115,61 @@ tests: 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 + pgVersion: "15" + type: vectors + asserts: + - documentIndex: &clusterDoc 1 + 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 + pgVersion: "15" + asserts: + - documentIndex: &clusterDoc 1 + 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 diff --git a/library/common-test/tests/cnpg/cluster_validation_test.yaml b/library/common-test/tests/cnpg/cluster_validation_test.yaml index a43f5d38..94a4fd9b 100644 --- a/library/common-test/tests/cnpg/cluster_validation_test.yaml +++ b/library/common-test/tests/cnpg/cluster_validation_test.yaml @@ -71,7 +71,7 @@ tests: type: invalid asserts: - failedTemplate: - errorMessage: CNPG Cluster - Expected [type] to be one of [postgres, postgis, timescaledb], but got [invalid] + errorMessage: CNPG Cluster - Expected [type] to be one of [postgres, postgis, timescaledb, vectors], but got [invalid] - it: should fail with invalid log level set: diff --git a/library/common-test/tests/cnpg/pg_version_configmap_test.yaml b/library/common-test/tests/cnpg/pg_version_configmap_test.yaml new file mode 100644 index 00000000..6600a0bb --- /dev/null +++ b/library/common-test/tests/cnpg/pg_version_configmap_test.yaml @@ -0,0 +1,79 @@ +suite: cnpg pgVersion configmap test +templates: + - common.yaml +release: + name: test-release-name + namespace: test-release-namespace +tests: + - it: should generate correct configmap + set: + cnpg: + my-pg: + enabled: true + user: test-user + database: test-db + asserts: + - documentIndex: &cmDoc 2 + isKind: + of: ConfigMap + - documentIndex: *cmDoc + isAPIVersion: + of: v1 + - documentIndex: *cmDoc + equal: + path: metadata.name + value: test-release-name-common-test-cnpg-my-pg-pgversion + - documentIndex: *cmDoc + equal: + path: data.version + value: "16" + + - it: should generate correct configmap with changed defaults + set: + global: + fallbackDefaults: + pgVersion: "15" + cnpg: + my-pg: + enabled: true + user: test-user + database: test-db + asserts: + - documentIndex: &cmDoc 2 + isKind: + of: ConfigMap + - documentIndex: *cmDoc + isAPIVersion: + of: v1 + - documentIndex: *cmDoc + equal: + path: metadata.name + value: test-release-name-common-test-cnpg-my-pg-pgversion + - documentIndex: *cmDoc + equal: + path: data.version + value: "15" + + - it: should generate correct configmap with changed at cnpg level + set: + cnpg: + my-pg: + enabled: true + user: test-user + database: test-db + pgVersion: "15" + asserts: + - documentIndex: &cmDoc 2 + isKind: + of: ConfigMap + - documentIndex: *cmDoc + isAPIVersion: + of: v1 + - documentIndex: *cmDoc + equal: + path: metadata.name + value: test-release-name-common-test-cnpg-my-pg-pgversion + - documentIndex: *cmDoc + equal: + path: data.version + value: "15" diff --git a/library/common/templates/lib/cnpg/cluster/_validation.tpl b/library/common/templates/lib/cnpg/cluster/_validation.tpl index 833f97bd..5502c1e7 100644 --- a/library/common/templates/lib/cnpg/cluster/_validation.tpl +++ b/library/common/templates/lib/cnpg/cluster/_validation.tpl @@ -39,7 +39,7 @@ {{- end -}} {{- if (hasKey $objectData "type") -}} - {{- $validTypes := (list "postgres" "postgis" "timescaledb") -}} + {{- $validTypes := (list "postgres" "postgis" "timescaledb" "vectors") -}} {{- if not (mustHas $objectData.type $validTypes) -}} {{- fail (printf "CNPG Cluster - Expected [type] to be one of [%s], but got [%s]" (join ", " $validTypes) $objectData.type) -}} {{- end -}} diff --git a/library/common/templates/spawner/_cnpg.tpl b/library/common/templates/spawner/_cnpg.tpl index d2cb7c5c..8e5b9b64 100644 --- a/library/common/templates/spawner/_cnpg.tpl +++ b/library/common/templates/spawner/_cnpg.tpl @@ -31,7 +31,6 @@ {{- with (lookup "v1" "ConfigMap" $.Release.Namespace (printf "%s-%s" $fullname $versionConfigMapName)) -}} {{/* If a different version is set and upgrade is enabled, upgrade */}} {{- if and (ne $pgVersion .data.version) $objectData.upgradeMajor -}} - {{/* TODO: maybe check that the version is newer and not older? */}} {{/* TODO: actually handle postgres version updates here */}} {{- else -}} {{- $pgVersion = .data.version -}} diff --git a/library/common/values.yaml b/library/common/values.yaml index 468acaa3..f633fa6e 100644 --- a/library/common/values.yaml +++ b/library/common/values.yaml @@ -8,10 +8,10 @@ global: # TODO: Currently some objects do not support this namespace: "" fallbackDefaults: - # -- Define a postgresql version for CNPG - # will be used for all CNPG objects - # Can be overruled per CNPG objects - pgVersion: 16 + # -- Define a postgresql version for CNPG + # will be used for all CNPG objects + # Can be overruled per CNPG objects + pgVersion: 16 metallb: # -- Adds metalLB annotations to services addServiceAnnotations: true @@ -578,13 +578,14 @@ ingress: annotations: {} # -- Set the ingressClass that is used for this ingress. # Requires Kubernetes >=1.19 - ingressClassName: "" + ingressClassName: "" # Defaults to primary service and primary port # targetSelector: # # service: port # main: main ## Configure the hosts for the ingress - hosts: [] + hosts: + [] # - # -- Host address. Helm template can be passed. # host: chart-example.local # ## Configure the paths for the host @@ -625,7 +626,8 @@ ingress: # # Optional, by default will try to # # "lookup" the namespace based on the name # namespace: "" - middlewares: [] + middlewares: + [] # - name: my-middleware # # Optional, by default will try to # # "lookup" the namespace based on the name @@ -651,7 +653,8 @@ ingress: # - key: some key # value: some value -certificate: {} +certificate: + {} # main: # enabled: false # certificateIssuer: someissuer @@ -681,28 +684,28 @@ route: labels: {} # -- Configure the resource the route attaches to. parentRefs: - - # Group of the referent resource. - group: gateway.networking.k8s.io - # Kind of the referent resource. - kind: Gateway - # Name of the referent resource - name: - # Namespace of the referent resource - namespace: - # Name of the section within the target resource. - sectionName: + - # Group of the referent resource. + group: gateway.networking.k8s.io + # Kind of the referent resource. + kind: Gateway + # Name of the referent resource + name: + # Namespace of the referent resource + namespace: + # Name of the section within the target resource. + sectionName: # -- Host addresses hostnames: [] # -- Configure rules for routing. Defaults to the primary service. rules: - - # -- Configure backends where matching requests should be sent. + - # -- Configure backends where matching requests should be sent. backendRefs: - - group: "" - kind: Service - name: - namespace: - port: - weight: 1 + - group: "" + kind: Service + name: + namespace: + port: + weight: 1 ## Configure conditions used for matching incoming requests. Only for HTTPRoutes matches: - path: @@ -878,7 +881,8 @@ metrics: honorLabels: false prometheusRule: enabled: false - groups: {} + groups: + {} # somegroup: # # list of rules # rules: [] @@ -958,12 +962,14 @@ addons: # -- All variables specified here will be added to the vpn sidecar container # See the documentation of the VPN image for all config values - env: {} + env: + {} # TZ: UTC # -- All variables specified here will be added to the vpn sidecar container # See the documentation of the VPN image for all config values - envList: [] + envList: + [] # - name: someenv # value: somevalue @@ -1011,7 +1017,8 @@ addons: # -- All variables specified here will be added to the codeserver sidecar container # See the documentation of the codeserver image for all config values - envList: [] + envList: + [] # - name: someenv # value: somevalue # -- Set codeserver command line arguments. @@ -1042,7 +1049,8 @@ addons: ingress: # -- Enable an ingress for the code-server add-on. enabled: false - annotations: {} + annotations: + {} # kubernetes.io/ingress.class: nginx labels: {} hosts: @@ -1155,7 +1163,8 @@ cnpg: # BootstrapInitDB is the configuration of the bootstrap process when initdb is used # See: https://cloudnative-pg.io/documentation/current/bootstrap/ # See: https://cloudnative-pg.io/documentation/current/api_reference/#bootstrapinitdb - initdb: {} + initdb: + {} # postInitSQL: # - CREATE EXTENSION IF NOT EXISTS vector; # postInitApplicationSQL: @@ -1164,7 +1173,8 @@ cnpg: monitoring: enablePodMonitor: true disableDefaultQueries: false - customQueries: [] + customQueries: + [] # - name: "pg_cache_hit_ratio" # expandObjectName: true # key: "custom-key" (defaults to "custom-queries") @@ -1284,7 +1294,8 @@ cnpg: retentionPolicy: "30d" # - Manual list of backups - manualBackups: [] + manualBackups: + [] # - name: today # labels: {} # annotations: {}