[#388] embedded postgresql tests
This commit is contained in:
parent
8b84f42a9c
commit
a28618387b
6 changed files with 71 additions and 62 deletions
|
|
@ -38,6 +38,8 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Run JVM tests
|
name: Run JVM tests
|
||||||
command: |
|
command: |
|
||||||
|
export BABASHKA_FEATURE_JDBC=true
|
||||||
|
export BABASHKA_FEATURE_POSTGRESQL=true
|
||||||
script/test
|
script/test
|
||||||
script/run_lib_tests
|
script/run_lib_tests
|
||||||
# - run:
|
# - run:
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,8 @@
|
||||||
:feature/transit
|
:feature/transit
|
||||||
:feature/datascript
|
:feature/datascript
|
||||||
{:dependencies [[clj-commons/conch "0.9.2"]
|
{:dependencies [[clj-commons/conch "0.9.2"]
|
||||||
[com.clojure-goes-fast/clj-async-profiler "0.4.1"]]}]
|
[com.clojure-goes-fast/clj-async-profiler "0.4.1"]
|
||||||
|
[com.opentable.components/otj-pg-embedded "0.13.3"]]}]
|
||||||
:uberjar {:global-vars {*assert* false}
|
:uberjar {:global-vars {*assert* false}
|
||||||
:jvm-opts ["-Dclojure.compiler.direct-linking=true"
|
:jvm-opts ["-Dclojure.compiler.direct-linking=true"
|
||||||
"-Dclojure.spec.skip-macros=true"]
|
"-Dclojure.spec.skip-macros=true"]
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,5 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -eu
|
BABASHKA_FEATURE_JDBC=true
|
||||||
|
BABASHKA_FEATURE_POSTGRESQL=true
|
||||||
trap 'docker rm -f babashka-postgres' EXIT
|
lein test :only babashka.postgresql-test
|
||||||
|
|
||||||
docker run --name babashka-postgres -p 54322:5432 -e POSTGRES_PASSWORD=mysecretpassword -d postgres
|
|
||||||
|
|
||||||
BABASHKA_TEST_ENV=${BABASHKA_TEST_ENV:-}
|
|
||||||
|
|
||||||
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
|
|
||||||
BB_CMD="./bb"
|
|
||||||
else
|
|
||||||
BB_CMD="lein with-profiles +feature/jdbc,+feature/postgresql bb"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
BABASHKA_FEATURE_JDBC=true \
|
|
||||||
BABASHKA_FEATURE_POSTGRESQL=true \
|
|
||||||
$BB_CMD -f test-resources/babashka/postgresql_test.clj
|
|
||||||
|
|
|
||||||
23
test-resources/babashka/embedded_pg_tests.clj
Normal file
23
test-resources/babashka/embedded_pg_tests.clj
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
(ns embedded-pg-tests
|
||||||
|
(:require [clojure.test :as t :refer [is]]
|
||||||
|
[next.jdbc :as jdbc]
|
||||||
|
[next.jdbc.sql :as sql]))
|
||||||
|
|
||||||
|
(defn wait-for-postgres
|
||||||
|
[db]
|
||||||
|
(while
|
||||||
|
(not
|
||||||
|
(try (jdbc/execute! db ["select version()"])
|
||||||
|
(catch Exception e
|
||||||
|
(prn (ex-message e))
|
||||||
|
(Thread/sleep 100))))))
|
||||||
|
|
||||||
|
(defn create-table-test [db]
|
||||||
|
(is (jdbc/execute! db ["drop table if exists foo; create table foo ( foo text )"])))
|
||||||
|
|
||||||
|
(defn insert-test [db]
|
||||||
|
(is (sql/insert-multi! db :foo [:foo] [["foo"] ["bar"] ["baz"]])))
|
||||||
|
|
||||||
|
(defn query-test [db]
|
||||||
|
(let [results (jdbc/execute! db ["select * from foo"])]
|
||||||
|
results))
|
||||||
|
|
@ -1,43 +0,0 @@
|
||||||
(ns babashka.postgres-test
|
|
||||||
(:require [clojure.test :as t :refer [deftest is]]
|
|
||||||
[next.jdbc :as jdbc]
|
|
||||||
[next.jdbc.sql :as sql]))
|
|
||||||
|
|
||||||
(def db {:dbtype "postgres"
|
|
||||||
:port 54322
|
|
||||||
:dbname "postgres"
|
|
||||||
:user "postgres"
|
|
||||||
:password "mysecretpassword"})
|
|
||||||
|
|
||||||
(defmethod clojure.test/report :begin-test-var [m]
|
|
||||||
(println "===" (-> m :var meta :name))
|
|
||||||
(println))
|
|
||||||
|
|
||||||
(defn wait-for-postgres []
|
|
||||||
(while
|
|
||||||
(not
|
|
||||||
(try (jdbc/execute! db ["select version()"])
|
|
||||||
(catch Exception e
|
|
||||||
(prn (ex-message e))
|
|
||||||
(Thread/sleep 100))))))
|
|
||||||
|
|
||||||
(deftest create-table-test
|
|
||||||
(is (jdbc/execute! db ["drop table if exists foo; create table foo ( foo text )"])))
|
|
||||||
|
|
||||||
(deftest insert-test
|
|
||||||
(is (sql/insert-multi! db :foo [:foo] [["foo"] ["bar"] ["baz"]])))
|
|
||||||
|
|
||||||
(deftest query-test
|
|
||||||
(let [results (jdbc/execute! db ["select * from foo"])]
|
|
||||||
(is (= '[{:foo/foo "foo"} {:foo/foo "bar"} {:foo/foo "baz"}]
|
|
||||||
results))))
|
|
||||||
|
|
||||||
(defn test-ns-hook []
|
|
||||||
(wait-for-postgres)
|
|
||||||
(create-table-test)
|
|
||||||
(insert-test)
|
|
||||||
(query-test))
|
|
||||||
|
|
||||||
(let [{:keys [:fail :error]}
|
|
||||||
(t/run-tests)]
|
|
||||||
(System/exit (+ fail error)))
|
|
||||||
41
test/babashka/postgresql_test.clj
Normal file
41
test/babashka/postgresql_test.clj
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
(ns babashka.postgresql-test
|
||||||
|
(:require [babashka.test-utils :as tu]
|
||||||
|
[clojure.test :as t :refer [deftest is]])
|
||||||
|
(:import [com.opentable.db.postgres.embedded EmbeddedPostgres]))
|
||||||
|
|
||||||
|
(def db {:dbtype "embedded-postgres"
|
||||||
|
:port 54322})
|
||||||
|
|
||||||
|
(defmethod clojure.test/report :begin-test-var [m]
|
||||||
|
(println "===" (-> m :var meta :name))
|
||||||
|
(println))
|
||||||
|
|
||||||
|
(defn jdbc-feature-flag? []
|
||||||
|
(= (System/getenv "BABASHKA_FEATURE_JDBC") "true"))
|
||||||
|
|
||||||
|
(defn pg-feature-flag? []
|
||||||
|
(= (System/getenv "BABASHKA_FEATURE_POSTGRESQL") "true"))
|
||||||
|
|
||||||
|
(deftest postgresql-test
|
||||||
|
(when (= "embedded-postgres" (:dbtype db))
|
||||||
|
(if (and tu/jvm? (jdbc-feature-flag?) (pg-feature-flag?))
|
||||||
|
(let [pg-db-instance (-> (EmbeddedPostgres/builder)
|
||||||
|
(.setPort (:port db))
|
||||||
|
.start
|
||||||
|
.getPostgresDatabase
|
||||||
|
.getConnection)
|
||||||
|
bb-tests (tu/bb nil
|
||||||
|
"-e" "(require '[clojure.test :as t :refer [deftest is]])"
|
||||||
|
"-e" "(require '[next.jdbc :as jdbc])"
|
||||||
|
"-e" "(require '[next.jdbc.sql :as sql])"
|
||||||
|
"-e" "(load-file (io/file \"test-resources\" \"babashka\" \"embedded_pg_tests.clj\"))"
|
||||||
|
"-e" "(require '[embedded-pg-tests :as em-pg])"
|
||||||
|
"-e" "(def db {:dbtype \"postgres\" :port 54322 :user \"postgres\" :dbname \"postgres\"})"
|
||||||
|
"-e" "(def expected-query-res [{:foo/foo \"foo\"} {:foo/foo \"bar\"} {:foo/foo \"baz\"}])"
|
||||||
|
"-e" "(em-pg/wait-for-postgres db)"
|
||||||
|
"-e" "(em-pg/create-table-test db)"
|
||||||
|
"-e" "(em-pg/insert-test db)"
|
||||||
|
"-e" "(is (= expected-query-res (em-pg/query-test db)))")]
|
||||||
|
(is (= bb-tests "true\n"))
|
||||||
|
(.close pg-db-instance))
|
||||||
|
(println "Did not run the pg-tests. Turn on the feature flags to run these tests."))))
|
||||||
Loading…
Reference in a new issue