diff --git a/.drone.yml b/.drone.yml index 5dfb8dc..d19acf1 100644 --- a/.drone.yml +++ b/.drone.yml @@ -9,10 +9,16 @@ steps: - npm install - cd server && npm install; cd .. -- name: back-end test +- name: back-end test (SQLite3) image: node commands: - - cd server && npm test; cd .. + - cd server && ./test/test.sh --sqlite ; cd .. + +- name: back-end test (PostgreSQL) + image: node + commands: + - POSTGRES_USER=mudbase POSTGRES_DATABASE=mudbase POSTGRES_DB=mudbase \ + cd server && ./test/test.sh --postgres --start-postgres-testcontainer ; cd .. --- kind: pipeline diff --git a/server/test/test.sh b/server/test/test.sh index b5c72f8..e088401 100755 --- a/server/test/test.sh +++ b/server/test/test.sh @@ -12,13 +12,17 @@ POSTGRES_CONFIG='{"client":"pg","connection":{"host":"localhost","port":9432,"us DO_SQLITE= DO_POSTGRES= +START_POSTGRES= +START_POSTGRES_TESTCONTAINER= usage() { cat << EOF | echo This tool runs MuDBase's Jasmine tests. Different database back-ends can be selected (multiple is allowed too). Options: - -s,--sqlite Use SQLite in memory for testing. - -p,--postgres Use Postgres for testing. Spins up a temporary Postgres container on localhos, port 9432. + -s,--sqlite Use SQLite in memory for testing. + -p,--postgres Use Postgres for testing. Spins up a temporary Postgres container on localhos, port 9432. + -sp,--start-postgres Start its own Postgres Docker container for testing against. + -spt,--start-postgres-testcontainer Assume running in the sandervocke/postgres_node container. Spin up a PG process. any other option is passed on to Jasmine. EOF } @@ -35,6 +39,14 @@ while (( "$#" )); do DO_POSTGRES=1 shift ;; + -sp|--start-postgres) + START_POSTGRES=1 + shift + ;; + -spt|--start-postgres-testcontainer) + START_POSTGRES_TESTCONTAINER=1 + shift + ;; *) # preserve positional arguments echo "Preserving params: $1" PARAMS="$PARAMS \"$1\"" @@ -51,27 +63,45 @@ if [ ! -z "${DO_SQLITE}" ]; then SQLITE_RESULT=$(echo $?) fi if [ ! -z "${DO_POSTGRES}" ]; then - # Fire up a test Postgres. - docker pull postgres:12 - CONTAINERID=$(docker create --rm \ - --env POSTGRES_USER=mudbase \ - --env POSTGRES_PASSWORD=mudbase \ - --env POSTGRES_DB=mudbase \ - -p 9432:5432 \ - postgres:12) - docker start ${CONTAINERID} - trap "docker stop ${CONTAINERID}" EXIT + if [ ! -z "${START_POSTGRES}" ]; then + # Fire up a test Postgres. + docker pull postgres:12 + CONTAINERID=$(docker create --rm \ + --env POSTGRES_USER=mudbase \ + --env POSTGRES_PASSWORD=mudbase \ + --env POSTGRES_DB=mudbase \ + -p 9432:5432 \ + postgres:12) + docker start ${CONTAINERID} + trap "docker stop ${CONTAINERID}" EXIT - # Wait for postgres to be ready. - while [ -z "$(docker logs ${CONTAINERID} | grep 'ready to accept connections')" ]; do - sleep 1; - done + # Wait for postgres to be ready. + while true; do + pg_isready -d mudbase -h localhost -p 9432 -U mudbase + [ "$(echo $?)" == "0" ] && break + sleep 1 + done + elif [ ! -z "${START_POSTGRES_TESTCONTAINER}" ]; then + # Fire up a test Postgres process. + docker_entrypoint.sh postgres & + PID=$(echo $!) + trap "kill $PID" EXIT + + # Wait for postgres to be ready. + while true; do + pg_isready -d mudbase -h localhost -p 5432 -U mudbase + [ "$(echo $?)" == "0" ] && break + sleep 1 + done + fi MUDBASE_DB_CONFIG="$POSTGRES_CONFIG" ./node_modules/.bin/ts-node node_modules/jasmine/bin/jasmine --config=test/jasmine.json "$@" POSTGRES_RESULT=$(echo $?) - docker stop ${CONTAINERID} - trap - EXIT + if [ ! -z "${START_POSTGRES}" ]; then + docker stop ${CONTAINERID} + trap - EXIT + fi fi printf "Tests finished. Results:\n\n" @@ -82,4 +112,8 @@ if [ ! -z "${DO_POSTGRES}" ]; then echo "Postgres: $([ ${POSTGRES_RESULT} == '1' ] && echo Fail || echo Success)" fi -popd \ No newline at end of file +popd + +[ "${SQLITE_RESULT}" == '1' -o "${POSTGRES_RESULT}" == '1' ] && exit 1 +exit 0 +