[#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:
|
||||
name: Run JVM tests
|
||||
command: |
|
||||
export BABASHKA_FEATURE_JDBC=true
|
||||
export BABASHKA_FEATURE_POSTGRESQL=true
|
||||
script/test
|
||||
script/run_lib_tests
|
||||
# - run:
|
||||
|
|
|
|||
|
|
@ -47,7 +47,8 @@
|
|||
:feature/transit
|
||||
:feature/datascript
|
||||
{: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}
|
||||
:jvm-opts ["-Dclojure.compiler.direct-linking=true"
|
||||
"-Dclojure.spec.skip-macros=true"]
|
||||
|
|
|
|||
|
|
@ -1,20 +1,5 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -eu
|
||||
|
||||
trap 'docker rm -f babashka-postgres' EXIT
|
||||
|
||||
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
|
||||
BABASHKA_FEATURE_JDBC=true
|
||||
BABASHKA_FEATURE_POSTGRESQL=true
|
||||
lein test :only babashka.postgresql-test
|
||||
|
|
|
|||
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