42 lines
1.8 KiB
Bash
Executable file
42 lines
1.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Server-Tests gegen PostgreSQL in Docker (→ KONZEPT.md 14.2: SQLite oder PostgreSQL).
|
|
#
|
|
# scripts/postgres-test.sh # ganze Testsuite
|
|
# scripts/postgres-test.sh -k bundle # weitere Argumente gehen an pytest
|
|
# POSTGRES_IMAGE=postgres:16.10 scripts/postgres-test.sh
|
|
# scripts/postgres-test.sh --compose # die dauerhafte PostgreSQL aus docker-compose.yml nutzen
|
|
#
|
|
# Startet einen Wegwerf-Container (Daten im Speicher), führt Migrationen und
|
|
# Tests aus, je Test eine eigene Datenbank, und entfernt den Container danach.
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
|
|
if [[ "${1:-}" == "--compose" ]]; then
|
|
shift
|
|
(cd "$ROOT" && docker compose up -d --wait postgres >/dev/null)
|
|
echo "PostgreSQL aus docker-compose.yml (127.0.0.1:55432)"
|
|
cd "$ROOT/server"
|
|
exec env HUGIN_TEST_POSTGRES="postgresql+psycopg://hugin:hugin@127.0.0.1:55432/postgres" \
|
|
uv run pytest -q -p no:warnings "$@"
|
|
fi
|
|
|
|
IMAGE="${POSTGRES_IMAGE:-postgres:17.6}"
|
|
NAME="hugin-postgres-test-$$"
|
|
PASSWORD="hugin-test"
|
|
|
|
docker run -d --rm --name "$NAME" -e POSTGRES_PASSWORD="$PASSWORD" -e POSTGRES_USER=hugin \
|
|
--tmpfs /var/lib/postgresql/data -p 127.0.0.1::5432 "$IMAGE" >/dev/null
|
|
trap 'rc=$?; docker rm -f "$NAME" >/dev/null 2>&1 || true; exit $rc' EXIT
|
|
PORT="$(docker port "$NAME" 5432/tcp | head -1 | sed 's/.*://')"
|
|
|
|
for _ in $(seq 60); do
|
|
docker exec "$NAME" pg_isready -U hugin -q 2>/dev/null && break
|
|
sleep 0.5
|
|
done
|
|
docker exec "$NAME" pg_isready -U hugin -q || { echo "PostgreSQL startet nicht"; exit 1; }
|
|
echo "PostgreSQL $(docker exec "$NAME" postgres --version | awk '{print $3}') auf Port $PORT"
|
|
|
|
cd "$ROOT/server"
|
|
HUGIN_TEST_POSTGRES="postgresql+psycopg://hugin:$PASSWORD@127.0.0.1:$PORT/postgres" \
|
|
uv run pytest -q -p no:warnings "$@"
|