ScoDoc/tools/test_api.sh

90 lines
2.1 KiB
Bash
Executable File

#!/bin/bash
# Lance les tests unitaires de l'API
# Ce script lance un serveur scodoc sur le port 5555
# attend qu'il soit initialisé puis lance les tests client API.
#
# On peut aussi le lancer avec l'option --dont-start-server
# auquel cas il utilise un serveur existant, qui doit avoir été lancé
# par ailleurs, par exemple via le script:
# tests/api/start_api_server.sh -p 5555
#
# Toutes les autres options sont passées telles qu'elles à pytest
#
# Exemples:
# - lancer tous les tests API: tools/test_api.sh
# - lancer tous les tests, en mode debug (arrêt pdb sur le 1er):
# tools/test_api.sh -x --pdb tests/api
# - lancer un module de test, en utilisant un server dev existant:
# tools/test_api.sh --dont-start-server -x --pdb tests/api/test_api_evaluations.py
#
#
# E. Viennet, Fev 2023
cd /opt/scodoc || exit 1
# suppose que le virtual env est bien configuré
# Utilise un port spécifique pour pouvoir lancer ce test sans couper
# le serveur de dev
PORT=5555
SERVER_LOG=/tmp/test_api_server.log
export SCODOC_URL="http://localhost:${PORT}"
if [ "$1" = "--dont-start-server" ]
then
START_SERVER=0
shift
echo "Using existing scodoc server on port $PORT"
else
START_SERVER=1
fi
if [ "$START_SERVER" -eq 1 ]
then
# ------- Check pas de serveur déjà lancé
if nc -z localhost "$PORT"
then
fuser -v "$PORT"/tcp
echo Server already running on port "$PORT"
echo You may want to try: fuser -k "$PORT"/tcp
echo aborting tests
exit 1
fi
tests/api/start_api_server.sh -p "$PORT" &> "$SERVER_LOG" &
pid=$!
echo "ScoDoc test server logs are in $SERVER_LOG"
# Wait for server setup
echo -n "Waiting for server"
while ! nc -z localhost "$PORT"; do
echo -n .
sleep 1
done
echo
echo Server PID "$pid" running on port "$PORT"
# ------------------
fi
if [ "$#" -eq 0 ]
then
echo "Starting pytest tests/api"
pytest tests/api
else
echo "Starting pytest $@"
pytest "$@"
fi
# ------------------
if [ "$START_SERVER" -eq 1 ]
then
echo "Killing test server"
kill "$pid"
fuser -k "$PORT"/tcp
fi