#!/bin/bash # Wrapper around the Jasmine test scripts. # Can test with different types of databases. SCRIPT=`realpath $0` SCRIPTPATH=`dirname $SCRIPT` SOURCEPATH="$SCRIPTPATH/.." SQLITE_CONFIG='{"client": "sqlite3", "connection": ":memory:"}' POSTGRES_CONFIG='{"client":"pg","connection":{"host":"localhost","port":9432,"user":"mudbase","password":"mudbase","database":"mudbase"}}' 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. -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 } # Argument parsing PARAMS="" while (( "$#" )); do case "$1" in -s|--sqlite) DO_SQLITE=1 shift ;; -p|--postgres) 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\"" shift ;; esac done # set positional arguments in their proper place eval set -- "$PARAMS" pushd $SOURCEPATH if [ ! -z "${DO_SQLITE}" ]; then MUDBASE_DB_CONFIG="$SQLITE_CONFIG" ./node_modules/.bin/ts-node node_modules/jasmine/bin/jasmine --config=test/jasmine.json "$@" SQLITE_RESULT=$(echo $?) fi if [ ! -z "${DO_POSTGRES}" ]; then 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 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 /usr/bin/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 $?) if [ ! -z "${START_POSTGRES}" ]; then docker stop ${CONTAINERID} trap - EXIT fi fi printf "Tests finished. Results:\n\n" if [ ! -z "${DO_SQLITE}" ]; then echo "SQLite: $([ ${SQLITE_RESULT} == '1' ] && echo Fail || echo Success)" fi if [ ! -z "${DO_POSTGRES}" ]; then echo "Postgres: $([ ${POSTGRES_RESULT} == '1' ] && echo Fail || echo Success)" fi popd [ "${SQLITE_RESULT}" == '1' -o "${POSTGRES_RESULT}" == '1' ] && exit 1 exit 0