hugin/scripts/postgres-test.sh
2026-10-27 08:33:21 +01:00

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 "$@"