You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

117 lines
3.5 KiB

#!/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":5432,"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 5432: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 5432 -U mudbase
[ "$(echo $?)" == "0" ] && break
sleep 1
done
elif [ ! -z "${START_POSTGRES_TESTCONTAINER}" ]; then
# Fire up a test Postgres process.
POSTGRES_USER=mudbase POSTGRES_PASSWORD=mudbase POSTGRES_DATABASE=mudbase /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