From 792947c9390a90f771301c63c97d83103eef152e Mon Sep 17 00:00:00 2001 From: bom Date: Mon, 13 Jun 2022 22:08:23 +0200 Subject: [PATCH 1/2] Add common_test namespace with map-diff function The map-diff function searches two collections with the same structure for equal keywords with differing values and returns the diff as a map. --- src/main/cljc/dda/c4k_common/common_test.cljc | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/cljc/dda/c4k_common/common_test.cljc diff --git a/src/main/cljc/dda/c4k_common/common_test.cljc b/src/main/cljc/dda/c4k_common/common_test.cljc new file mode 100644 index 0000000..da8bb32 --- /dev/null +++ b/src/main/cljc/dda/c4k_common/common_test.cljc @@ -0,0 +1,26 @@ +(ns dda.c4k-common.common-test) + +; Heavily assumes c1 and c2 have an identical structure but maybe different values +; This function finds the diff of two nested maps/vectors +(defn map-diff + ([c1 c2] + (into {} + (cond (or (map? c1) (vector? c1)) + (map + #(if (= (% c1) (% c2)) + nil + (let [c1-value (% c1) + c2-value (% c2) + key-name (name %)] + (cond + (map? c1-value) (map-diff c1-value c2-value) + (vector? c1-value) (map-diff c1-value c2-value key-name) + :else {(keyword (str key-name "-c1")) c1-value + (keyword (str key-name "-c2")) c2-value}))) + (keys c1))))) + ([c1 c2 last-name] + (first (for [x c1 y c2] (cond + (map? x) (map-diff x y) + (vector? x) (map-diff x y last-name) + :else {(keyword (str last-name "-c1")) x + (keyword (str last-name "-c2")) y}))))) \ No newline at end of file From b0fe222c25d6c658b0b72cc9361dc350b9f475dc Mon Sep 17 00:00:00 2001 From: bom Date: Mon, 13 Jun 2022 22:15:25 +0200 Subject: [PATCH 2/2] Use map-diff function in postgres_test Add tests alongside the existing tests which use map-diff to demonstrate the usage of map-diff. --- .../cljc/dda/c4k_common/postgres_test.cljc | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/test/cljc/dda/c4k_common/postgres_test.cljc b/src/test/cljc/dda/c4k_common/postgres_test.cljc index 4b698c0..6d4bbe5 100644 --- a/src/test/cljc/dda/c4k_common/postgres_test.cljc +++ b/src/test/cljc/dda/c4k_common/postgres_test.cljc @@ -3,6 +3,7 @@ #?(: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.common-test :as ct] [dda.c4k-common.postgres :as cut])) (st/instrument `cut/generate-config) @@ -27,6 +28,13 @@ (: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" @@ -50,6 +58,13 @@ (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" @@ -71,6 +86,13 @@ (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" @@ -106,3 +128,7 @@ :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"}))))) \ No newline at end of file