134 lines
No EOL
5.5 KiB
Clojure
134 lines
No EOL
5.5 KiB
Clojure
(ns dda.c4k-common.postgres-test
|
|
(:require
|
|
#?(:clj [clojure.test :refer [deftest is are testing run-tests]]
|
|
:cljs [cljs.test :refer-macros [deftest is are testing run-tests]])
|
|
[clojure.spec.test.alpha :as st]
|
|
[dda.c4k-common.test-helper :as ct]
|
|
[dda.c4k-common.postgres :as cut]))
|
|
|
|
(st/instrument `cut/generate-config)
|
|
(st/instrument `cut/generate-deployment)
|
|
(st/instrument `cut/generate-persistent-volume)
|
|
(st/instrument `cut/generate-pvc)
|
|
(st/instrument `cut/generate-secret)
|
|
(st/instrument `cut/generate-service)
|
|
|
|
(deftest should-generate-config
|
|
(is (= {:postgres-db "postgres"
|
|
:postgresql.conf
|
|
"max_connections = 100\nwork_mem = 4MB\nshared_buffers = 512MB\n"}
|
|
(:data (cut/generate-config))))
|
|
(is (= {:postgres-db "postgres"
|
|
:postgresql.conf
|
|
"max_connections = 700\nwork_mem = 3MB\nshared_buffers = 2048MB\n"}
|
|
(:data (cut/generate-config {:postgres-size :8gb}))))
|
|
(is (= {:postgres-db "test"
|
|
:postgresql.conf
|
|
"max_connections = 100\nwork_mem = 4MB\nshared_buffers = 512MB\n"}
|
|
(:data (cut/generate-config {:db-name "test"}))))
|
|
)
|
|
|
|
(deftest should-generate-config-diff
|
|
(is (= {:postgres-db-c1 "postgres",
|
|
:postgres-db-c2 "test",
|
|
:postgresql.conf-c1 "max_connections = 100\nwork_mem = 4MB\nshared_buffers = 512MB\n",
|
|
:postgresql.conf-c2 "max_connections = 700\nwork_mem = 3MB\nshared_buffers = 2048MB\n"}
|
|
(ct/map-diff (cut/generate-config) (cut/generate-config {:db-name "test" :postgres-size :8gb})))))
|
|
|
|
(deftest should-generate-persistent-volume
|
|
(is (= {:kind "PersistentVolume"
|
|
:apiVersion "v1"
|
|
:metadata
|
|
{:name "postgres-pv-volume", :labels {:type "local"}}
|
|
:spec
|
|
{:storageClassName "manual"
|
|
:accessModes ["ReadWriteOnce"]
|
|
:capacity {:storage "10Gi"}
|
|
:hostPath {:path "xx"}}}
|
|
(cut/generate-persistent-volume {:postgres-data-volume-path "xx"})))
|
|
(is (= {:kind "PersistentVolume"
|
|
:apiVersion "v1"
|
|
:metadata
|
|
{:name "postgres-pv-volume", :labels {:type "local"}}
|
|
:spec
|
|
{:storageClassName "manual"
|
|
:accessModes ["ReadWriteOnce"]
|
|
:capacity {:storage "20Gi"}
|
|
:hostPath {:path "xx"}}}
|
|
(cut/generate-persistent-volume {:postgres-data-volume-path "xx"
|
|
:pv-storage-size-gb 20}))))
|
|
|
|
(deftest should-generate-persistent-volume-diff
|
|
(is (= {:storage-c1 "10Gi", :storage-c2 "20Gi",
|
|
:path-c1 "/var/postgres", :path-c2 "xx"}
|
|
(ct/map-diff (cut/generate-persistent-volume {})
|
|
(cut/generate-persistent-volume {:postgres-data-volume-path "xx"
|
|
:pv-storage-size-gb 20})))))
|
|
|
|
(deftest should-generate-persistent-volume-claim
|
|
(is (= {:apiVersion "v1"
|
|
:kind "PersistentVolumeClaim"
|
|
:metadata
|
|
{:name "postgres-claim", :labels {:app "postgres"}}
|
|
:spec
|
|
{:storageClassName "manual"
|
|
:accessModes ["ReadWriteOnce"]
|
|
:resources {:requests {:storage "10Gi"}}}}
|
|
(cut/generate-pvc {})))
|
|
(is (= {:apiVersion "v1"
|
|
:kind "PersistentVolumeClaim"
|
|
:metadata
|
|
{:name "postgres-claim", :labels {:app "postgres"}}
|
|
:spec
|
|
{:storageClassName "local-path"
|
|
:accessModes ["ReadWriteOnce"]
|
|
:resources {:requests {:storage "20Gi"}}}}
|
|
(cut/generate-pvc {:pv-storage-size-gb 20
|
|
:pvc-storage-class-name :local-path}))))
|
|
|
|
(deftest should-generate-persistent-volume-claim-diff
|
|
(is (= {:storageClassName-c1 "manual", :storageClassName-c2 "local-path",
|
|
:storage-c1 "10Gi", :storage-c2 "20Gi"}
|
|
(ct/map-diff (cut/generate-pvc {})
|
|
(cut/generate-pvc {:pv-storage-size-gb 20
|
|
:pvc-storage-class-name :local-path})))))
|
|
|
|
(deftest should-generate-secret
|
|
(is (= {:apiVersion "v1"
|
|
:kind "Secret"
|
|
:metadata {:name "postgres-secret"}
|
|
:type "Opaque"
|
|
:data
|
|
{:postgres-user "eHgtdXM=", :postgres-password "eHgtcHc="}}
|
|
(cut/generate-secret {:postgres-db-user "xx-us" :postgres-db-password "xx-pw"}))))
|
|
|
|
(deftest should-generate-deployment
|
|
(is (= [{:image "postgres:14"
|
|
:name "postgresql"
|
|
:env
|
|
[{:name "POSTGRES_USER"
|
|
:valueFrom
|
|
{:secretKeyRef
|
|
{:name "postgres-secret", :key "postgres-user"}}}
|
|
{:name "POSTGRES_PASSWORD"
|
|
:valueFrom
|
|
{:secretKeyRef
|
|
{:name "postgres-secret", :key "postgres-password"}}}
|
|
{:name "POSTGRES_DB"
|
|
:valueFrom
|
|
{:configMapKeyRef
|
|
{:name "postgres-config", :key "postgres-db"}}}]
|
|
:ports [{:containerPort 5432, :name "postgresql"}]
|
|
:volumeMounts
|
|
[{:name "postgres-config-volume"
|
|
:mountPath "/etc/postgresql/postgresql.conf"
|
|
:subPath "postgresql.conf"
|
|
:readOnly true}
|
|
{:name "postgre-data-volume"
|
|
:mountPath "/var/lib/postgresql/data"}]}]
|
|
(get-in (cut/generate-deployment {:postgres-image "postgres:14"})
|
|
[:spec :template :spec :containers]))))
|
|
|
|
(deftest should-generate-deployment-diff
|
|
(is (= {:image-c1 "postgres:13", :image-c2 "postgres:14"}
|
|
(ct/map-diff (cut/generate-deployment) (cut/generate-deployment {:postgres-image "postgres:14"}))))) |