[#388] embedded postgresql tests

This commit is contained in:
Sameer Kolhar 2020-05-18 20:38:34 +05:30 committed by GitHub
parent 8b84f42a9c
commit a28618387b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 71 additions and 62 deletions

View file

@ -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:

View file

@ -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"]

View file

@ -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

View 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))

View file

@ -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)))

View 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."))))