From 3fb9f9fe676e01f33fa2c90ae5a2ae86778339e7 Mon Sep 17 00:00:00 2001 From: Krisztian Gulyas Date: Wed, 21 Sep 2022 15:36:46 +0200 Subject: [PATCH 1/3] Move test-containers dependency to test deps --- deps.edn | 57 +++++++++---------- examples/acl/project.clj | 1 + examples/acl/test/acl_fixture.clj | 27 ++++++++- examples/cli-chat/project.clj | 1 + examples/cli-chat/test/cli_chat_fixture.clj | 24 +++++++- examples/controllers/project.clj | 1 + examples/frames/project.clj | 3 +- examples/sessions/project.clj | 1 + examples/sessions/test/integration_test.clj | 24 +++++++- examples/state-events/project.clj | 1 + .../src/backend/state_events/core.clj | 34 +++++++++-- src/xiana/db.clj | 22 ------- test/xiana_fixture.clj | 24 +++++++- 13 files changed, 156 insertions(+), 64 deletions(-) diff --git a/deps.edn b/deps.edn index 0bfe8185..6b230e10 100644 --- a/deps.edn +++ b/deps.edn @@ -1,28 +1,27 @@ {:paths ["src"] - :deps {org.clojure/clojure {:mvn/version "1.11.1"} - org.clojure/core.async {:mvn/version "1.5.648"} - org.clojure/tools.cli {:mvn/version "1.0.206"} - org.clojure/data.json {:mvn/version "2.4.0"}, - org.clojure/data.xml {:mvn/version "0.0.8"}, + :deps {org.clojure/clojure {:mvn/version "1.11.1"} + org.clojure/core.async {:mvn/version "1.5.648"} + org.clojure/tools.cli {:mvn/version "1.0.206"} + org.clojure/data.json {:mvn/version "2.4.0"}, + org.clojure/data.xml {:mvn/version "0.0.8"}, - com.draines/postal {:mvn/version "2.0.5"}, - com.flexiana/tiny-rbac {:mvn/version "0.1.1"}, - com.taoensso/timbre {:mvn/version "5.2.1"}, - crypto-password/crypto-password {:mvn/version "0.3.0"}, - funcool/cuerdas {:mvn/version "2.2.1"}, - info.sunng/ring-jetty9-adapter {:mvn/version "0.17.5"}, - metosin/malli {:mvn/version "0.8.4"}, - metosin/reitit {:mvn/version "0.5.18"}, + com.draines/postal {:mvn/version "2.0.5"}, + com.flexiana/tiny-rbac {:mvn/version "0.1.1"}, + com.taoensso/timbre {:mvn/version "5.2.1"}, + crypto-password/crypto-password {:mvn/version "0.3.0"}, + funcool/cuerdas {:mvn/version "2.2.1"}, + info.sunng/ring-jetty9-adapter {:mvn/version "0.17.5"}, + metosin/malli {:mvn/version "0.8.4"}, + metosin/reitit {:mvn/version "0.5.18"}, ;; migratus/migratus {:mvn/version "1.3.7"}, - migratus/migratus {:git/url "https://github.com/Flexiana/migratus" - :sha "fba4aa9d57da6cc6a1d6e8c4a2b4198ad5a44315"} - nilenso/honeysql-postgres {:mvn/version "0.4.112"}, - org.clojure/java.jdbc {:mvn/version "0.7.12"}, - clj-test-containers/clj-test-containers {:mvn/version "0.7.2"}, - org.postgresql/postgresql {:mvn/version "42.3.3"}, - piotr-yuxuan/closeable-map {:mvn/version "0.35.0"}, - seancorfield/next.jdbc {:mvn/version "1.2.659"}, - yogthos/config {:mvn/version "1.2.0"}} + migratus/migratus {:git/url "https://github.com/Flexiana/migratus" + :sha "fba4aa9d57da6cc6a1d6e8c4a2b4198ad5a44315"} + nilenso/honeysql-postgres {:mvn/version "0.4.112"}, + org.clojure/java.jdbc {:mvn/version "0.7.12"}, + org.postgresql/postgresql {:mvn/version "42.3.3"}, + piotr-yuxuan/closeable-map {:mvn/version "0.35.0"}, + seancorfield/next.jdbc {:mvn/version "1.2.659"}, + yogthos/config {:mvn/version "1.2.0"}} :aliases {:dev @@ -39,13 +38,13 @@ {:extra-deps {clj-kondo/clj-kondo {:mvn/version "2022.05.31"}} :main-opts ["-m" "clj-kondo.main" "--lint" "src"]} - :codox {:extra-deps {codox/codox {:mvn/version "0.10.8"}} + :codox {:extra-deps {codox/codox {:mvn/version "0.10.8"}} :extra-paths ["resources"] - :exec-fn codox.main/generate-docs - :exec-args {:output-path "docs/new/" - :themes [:default :xiana] - :source-paths ["src"] - :doc-files ["doc/getting-started.md", "doc/How-To.md", "doc/Development-Guide.md"]}} + :exec-fn codox.main/generate-docs + :exec-args {:output-path "docs/new/" + :themes [:default :xiana] + :source-paths ["src"] + :doc-files ["doc/getting-started.md", "doc/How-To.md", "doc/Development-Guide.md"]}} :kibit {:extra-deps {tvaughan/kibit-runner {:mvn/version "1.0.1"}} @@ -62,7 +61,7 @@ :test {:extra-paths ["config/test" "test"] - :extra-deps {clj-test-containers/clj-test-containers {:mvn/version "0.5.0"} + :extra-deps {clj-test-containers/clj-test-containers {:mvn/version "0.7.2"} clj-http/clj-http {:mvn/version "3.12.3"} http.async.client/http.async.client {:mvn/version "1.3.1"} com.cognitect/test-runner {:git/url "https://github.com/cognitect-labs/test-runner" diff --git a/examples/acl/project.clj b/examples/acl/project.clj index 9719db3c..07e0bd03 100644 --- a/examples/acl/project.clj +++ b/examples/acl/project.clj @@ -13,6 +13,7 @@ :prod {:resource-paths ["config/prod"]} :test {:resource-paths ["config/test"] :dependencies [[clj-http "3.12.3"] + [clj-test-containers "0.7.2"] [mvxcvi/cljstyle "0.15.0" :exclusions [org.clojure/clojure]]]}} :aliases {"check-style" ["with-profile" "+test" "run" "-m" "cljstyle.main" "check"] diff --git a/examples/acl/test/acl_fixture.clj b/examples/acl/test/acl_fixture.clj index 1edff0eb..68bb6803 100644 --- a/examples/acl/test/acl_fixture.clj +++ b/examples/acl/test/acl_fixture.clj @@ -1,13 +1,34 @@ (ns acl-fixture (:require [acl] - [xiana.config :as config] - [xiana.db :as db])) + [clj-test-containers.core :as tc] + [xiana.config :as config])) + +(defn docker-postgres! + [{pg-config :xiana/postgresql :as config}] + (let [{:keys [dbname user password image-name]} pg-config + container (tc/start! + (tc/create + {:image-name image-name + :exposed-ports [5432] + :env-vars {"POSTGRES_DB" dbname + "POSTGRES_USER" user + "POSTGRES_PASSWORD" password}})) + + port (get (:mapped-ports container) 5432) + pg-config (assoc + pg-config + :port port + :embedded container + :subname (str "//localhost:" port "/" dbname))] + (tc/wait {:wait-strategy :log + :message "accept connections"} (:container container)) + (assoc config :xiana/postgresql pg-config))) (defn std-system-fixture [f] (with-open [_ (-> (config/config) (merge acl/app-cfg) - db/docker-postgres! + docker-postgres! acl/->system)] (f))) diff --git a/examples/cli-chat/project.clj b/examples/cli-chat/project.clj index 33f6abd2..19340a97 100644 --- a/examples/cli-chat/project.clj +++ b/examples/cli-chat/project.clj @@ -13,6 +13,7 @@ :prod {:resource-paths ["config/prod"]} :test {:resource-paths ["config/test"] :dependencies [[clj-http "3.12.3"] + [clj-test-containers "0.7.2"] [http.async.client "1.3.1"] [mvxcvi/cljstyle "0.15.0" :exclusions [org.clojure/clojure]]]}} diff --git a/examples/cli-chat/test/cli_chat_fixture.clj b/examples/cli-chat/test/cli_chat_fixture.clj index b4681ff1..727fb0b2 100644 --- a/examples/cli-chat/test/cli_chat_fixture.clj +++ b/examples/cli-chat/test/cli_chat_fixture.clj @@ -1,13 +1,35 @@ (ns cli-chat-fixture (:require [cli-chat.core :refer [->system]] + [clj-test-containers.core :as tc] [xiana.config :as config] [xiana.db :as db])) +(defn docker-postgres! + [{pg-config :xiana/postgresql :as config}] + (let [{:keys [dbname user password image-name]} pg-config + container (tc/start! + (tc/create + {:image-name image-name + :exposed-ports [5432] + :env-vars {"POSTGRES_DB" dbname + "POSTGRES_USER" user + "POSTGRES_PASSWORD" password}})) + + port (get (:mapped-ports container) 5432) + pg-config (assoc + pg-config + :port port + :embedded container + :subname (str "//localhost:" port "/" dbname))] + (tc/wait {:wait-strategy :log + :message "accept connections"} (:container container)) + (assoc config :xiana/postgresql pg-config))) + (defn std-system-fixture [app-cfg f] (with-open [_ (-> (config/config) (merge app-cfg) - db/docker-postgres! + docker-postgres! ->system)] (f))) diff --git a/examples/controllers/project.clj b/examples/controllers/project.clj index 522e5e25..71b4db31 100644 --- a/examples/controllers/project.clj +++ b/examples/controllers/project.clj @@ -17,6 +17,7 @@ :prod {:resource-paths ["config/prod"]} :test {:resource-paths ["config/test"] :dependencies [[clj-http "3.12.3"] + [clj-test-containers "0.7.2"] [mvxcvi/cljstyle "0.15.0" :exclusions [org.clojure/clojure]]]}} :jvm-opts ["-Dmalli.registry/type=custom"] diff --git a/examples/frames/project.clj b/examples/frames/project.clj index ee7ff26e..71c0e293 100644 --- a/examples/frames/project.clj +++ b/examples/frames/project.clj @@ -12,7 +12,8 @@ :local {:resource-paths ["config/local" "resources"]} :prod {:resource-paths ["config/prod" "resources"]} :test {:resource-paths ["config/test" "resources"] - :dependencies [[mvxcvi/cljstyle "0.15.0" + :dependencies [[clj-test-containers "0.7.2"] + [mvxcvi/cljstyle "0.15.0" :exclusions [org.clojure/clojure]]]}} :shadow-cljs {:nrepl {:port 8777} diff --git a/examples/sessions/project.clj b/examples/sessions/project.clj index 673225e9..1339640d 100644 --- a/examples/sessions/project.clj +++ b/examples/sessions/project.clj @@ -18,6 +18,7 @@ :prod {:resource-paths ["config/prod"]} :test {:resource-paths ["config/test"] :dependencies [[clj-http "3.12.3"] + [clj-test-containers "0.7.2"] [mvxcvi/cljstyle "0.15.0" :exclusions [org.clojure/clojure]]]}} :shadow-cljs {:nrepl {:port 8777} diff --git a/examples/sessions/test/integration_test.clj b/examples/sessions/test/integration_test.clj index 25ae4537..c9fa2057 100644 --- a/examples/sessions/test/integration_test.clj +++ b/examples/sessions/test/integration_test.clj @@ -2,6 +2,7 @@ (:require [app.core :as app] [clj-http.client :as http] + [clj-test-containers.core :as tc] [clojure.test :refer [deftest is use-fixtures]] [jsonista.core :as json] [next.jdbc :as jdbc] @@ -12,6 +13,27 @@ (java.util UUID))) +(defn docker-postgres! + [{pg-config :xiana/postgresql :as config}] + (let [{:keys [dbname user password image-name]} pg-config + container (tc/start! + (tc/create + {:image-name image-name + :exposed-ports [5432] + :env-vars {"POSTGRES_DB" dbname + "POSTGRES_USER" user + "POSTGRES_PASSWORD" password}})) + + port (get (:mapped-ports container) 5432) + pg-config (assoc + pg-config + :port port + :embedded container + :subname (str "//localhost:" port "/" dbname))] + (tc/wait {:wait-strategy :log + :message "accept connections"} (:container container)) + (assoc config :xiana/postgresql pg-config))) + (defn merge-connection [config] (update-in config @@ -24,7 +46,7 @@ (with-open [system (-> (config/config app/app-cfg) (assoc :xiana/postgresql (:xiana/session-backend (config/config))) (assoc-in [:xiana/postgresql :image-name] "postgres:14-alpine") - db/docker-postgres! + docker-postgres! db/connect merge-connection app/->system)] diff --git a/examples/state-events/project.clj b/examples/state-events/project.clj index 030b9648..d877187a 100644 --- a/examples/state-events/project.clj +++ b/examples/state-events/project.clj @@ -21,6 +21,7 @@ :prod {:resource-paths ["config/prod"]} :test {:resource-paths ["config/test"] :dependencies [[clj-http "3.12.3"] + [clj-test-containers "0.7.2"] [cheshire "5.10.2"] [mvxcvi/cljstyle "0.15.0" :exclusions [org.clojure/clojure]]]}} diff --git a/examples/state-events/src/backend/state_events/core.clj b/examples/state-events/src/backend/state_events/core.clj index 47dd4c83..f461c04a 100644 --- a/examples/state-events/src/backend/state_events/core.clj +++ b/examples/state-events/src/backend/state_events/core.clj @@ -1,5 +1,6 @@ (ns state-events.core (:require + [clj-test-containers.core :as tc] [piotr-yuxuan.closeable-map :refer [closeable-map]] [reitit.ring :as ring] [state-events.controller-behaviors.sse :as sseb] @@ -50,20 +51,41 @@ [["/" {:action index/handle-index}] ["/re-frame" {:action re-frame/handle-index}] ["/assets/*" {:action resource-handler}] - ["/person" {:put {:action event/create-resource - :interceptors event-interceptors} - :post {:action event/modify - :interceptors event-interceptors} + ["/person" {:put {:action event/create-resource + :interceptors event-interceptors} + :post {:action event/modify + :interceptors event-interceptors} :delete {:action event/delete :interceptors event-interceptors} - :get {:action event/persons}}] + :get {:action event/persons}}] ["/events" {:get {:action event/raw}}] ["/sse" {:ws-action sse/sse-action}]]) +(defn docker-postgres! + [{pg-config :xiana/postgresql :as config}] + (let [{:keys [dbname user password image-name]} pg-config + container (tc/start! + (tc/create + {:image-name image-name + :exposed-ports [5432] + :env-vars {"POSTGRES_DB" dbname + "POSTGRES_USER" user + "POSTGRES_PASSWORD" password}})) + + port (get (:mapped-ports container) 5432) + pg-config (assoc + pg-config + :port port + :embedded container + :subname (str "//localhost:" port "/" dbname))] + (tc/wait {:wait-strategy :log + :message "accept connections"} (:container container)) + (assoc config :xiana/postgresql pg-config))) + (defn docker? [state] (if (get-in state [:xiana/postgresql :image-name]) - (db/docker-postgres! state) + (docker-postgres! state) state)) (defn ->system diff --git a/src/xiana/db.clj b/src/xiana/db.clj index 47682165..c955c87e 100644 --- a/src/xiana/db.clj +++ b/src/xiana/db.clj @@ -1,7 +1,6 @@ (ns xiana.db "Data source builder" (:require - [clj-test-containers.core :as tc] [honeysql-postgres.format] [honeysql.core :as sql] [jsonista.core :as json] @@ -95,27 +94,6 @@ (get-datasource config (inc count)) (throw e))))))) -(defn docker-postgres! - [{pg-config :xiana/postgresql :as config}] - (let [{:keys [dbname user password image-name]} pg-config - container (tc/start! - (tc/create - {:image-name image-name - :exposed-ports [5432] - :env-vars {"POSTGRES_DB" dbname - "POSTGRES_USER" user - "POSTGRES_PASSWORD" password}})) - - port (get (:mapped-ports container) 5432) - pg-config (assoc - pg-config - :port port - :embedded container - :subname (str "//localhost:" port "/" dbname))] - (tc/wait {:wait-strategy :log - :message "accept connections"} (:container container)) - (assoc config :xiana/postgresql pg-config))) - (defn migrate! ([config] (migrate! config 0)) diff --git a/test/xiana_fixture.clj b/test/xiana_fixture.clj index 7871a079..1689b757 100644 --- a/test/xiana_fixture.clj +++ b/test/xiana_fixture.clj @@ -1,5 +1,6 @@ (ns xiana-fixture (:require + [clj-test-containers.core :as tc] [piotr-yuxuan.closeable-map :refer [closeable-map]] [xiana.commons :refer [rename-key]] [xiana.config :as config] @@ -10,12 +11,33 @@ [xiana.sse :as sse] [xiana.webserver :as ws])) +(defn docker-postgres! + [{pg-config :xiana/postgresql :as config}] + (let [{:keys [dbname user password image-name]} pg-config + container (tc/start! + (tc/create + {:image-name image-name + :exposed-ports [5432] + :env-vars {"POSTGRES_DB" dbname + "POSTGRES_USER" user + "POSTGRES_PASSWORD" password}})) + + port (get (:mapped-ports container) 5432) + pg-config (assoc + pg-config + :port port + :embedded container + :subname (str "//localhost:" port "/" dbname))] + (tc/wait {:wait-strategy :log + :message "accept connections"} (:container container)) + (assoc config :xiana/postgresql pg-config))) + (defn ->system [app-cfg] (-> (config/config) (merge app-cfg) (rename-key :xiana/auth :auth) - db-core/docker-postgres! + docker-postgres! db-core/connect db-core/migrate! session-backend/init-backend From e0e9139344b48adc63b25ff854908db552d917aa Mon Sep 17 00:00:00 2001 From: Krisztian Gulyas Date: Wed, 21 Sep 2022 15:39:51 +0200 Subject: [PATCH 2/3] update CHANGELOG.md --- CHANGELOG.md | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f2a29fb..b7a9d135 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,20 +1,30 @@ +## [Unreleased] - 2022-09-21 + +- Remove test-containers dependency, and move it to test profile + ## [Unreleased] - 2022-08-25 -- Use clj-tools for - - test - - build - - install - - release + +- Use clj-tools for + - test + - build + - install + - release - Remove `project.clj` - Fix kibit complaints ## [Unreleased] - 2022-06-26 + - Added new `prune-get-request-bodies` interceptor -Breaking changes: -- refactor database migration system, use patched migratus (Flexiana/migratus), removed seed module and rewrite data migration tool +Breaking changes: + +- refactor database migration system, use patched migratus (Flexiana/migratus), removed seed module and rewrite data + migration tool ## 0.5-rc2 -Breaking changes: + +Breaking changes: + - removed monands (`funcool.cats` library), related code and docs removed `xiana.interceptor.wrap/interceptor` - changed interceptors behaviour making them similar to pedestal and sieppari @@ -23,4 +33,5 @@ Breaking changes: - a bunch of other small fixes. ## 0.5-rc1 + Breaking change: rename almost all namespaces from `framework..` to `xiana..`). From 7765be6284776a02dbde1eff8a1e99bf511018b1 Mon Sep 17 00:00:00 2001 From: Krisztian Gulyas Date: Thu, 22 Sep 2022 17:11:59 +0200 Subject: [PATCH 3/3] Use XIANA_CONFIG in auto.sh --- script/auto.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/auto.sh b/script/auto.sh index 37d137d3..3fafb635 100755 --- a/script/auto.sh +++ b/script/auto.sh @@ -248,7 +248,7 @@ _setup () _tests () { - env FRAMEWORK_EDN_CONFIG=${_CONFIG} clj -M:test + env XIANA_CONFIG=${_CONFIG} clj -M:test } _stops ()