Files
tranquil-pds/scripts/test-infra.sh
T
Johanna LarssonandTangled ffc8ef4e01 Disable fsync for postgres too
Summary [ 166.110s] 1453 tests run: 1453 passed (1 slow), 15 skipped

Above is before this commit, below is after.

     Summary [ 140.410s] 1453 tests run: 1453 passed, 15 skipped

The mechanism here is the same as for the metastore tests. By skipping fsync we can run the tests much faster, and fsync doesn't matter in tests. Unless you're testing postgres itself I guess
2026-09-23 17:24:44 +00:00

128 lines
4.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
INFRA_FILE="${TMPDIR:-/tmp}/tranquil_pds_test_infra.env"
CONTAINER_PREFIX="tranquil-pds-test"
command_exists() {
command -v "$1" >/dev/null 2>&1
}
if command_exists podman; then
CONTAINER_CMD="podman"
if [[ -z "${DOCKER_HOST:-}" ]]; then
RUNTIME_DIR="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}"
PODMAN_SOCK="$RUNTIME_DIR/podman/podman.sock"
if [[ -S "$PODMAN_SOCK" ]]; then
export DOCKER_HOST="unix://$PODMAN_SOCK"
fi
fi
elif command_exists docker; then
CONTAINER_CMD="docker"
else
echo "Error: Neither podman nor docker found" >&2
exit 1
fi
start_infra() {
echo "Starting test infrastructure..."
if [[ -f "$INFRA_FILE" ]]; then
source "$INFRA_FILE"
if $CONTAINER_CMD ps --format '{{.Names}}' 2>/dev/null | grep -q "^${CONTAINER_PREFIX}-postgres$"; then
echo "Infrastructure already running (found $INFRA_FILE)"
cat "$INFRA_FILE"
return 0
fi
echo "Stale infra file found, cleaning up..."
rm -f "$INFRA_FILE"
fi
$CONTAINER_CMD rm -f "${CONTAINER_PREFIX}-postgres" 2>/dev/null || true
echo "Starting PostgreSQL..."
$CONTAINER_CMD run -d \
--name "${CONTAINER_PREFIX}-postgres" \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_USER=postgres \
-e POSTGRES_DB=postgres \
-P \
--label tranquil_pds_test=true \
postgres:18-alpine \
-c max_connections=500 \
-c fsync=off \
-c synchronous_commit=off \
-c full_page_writes=off >/dev/null
echo "Waiting for services to be ready..."
for i in {1..30}; do
if $CONTAINER_CMD exec "${CONTAINER_PREFIX}-postgres" pg_isready -U postgres >/dev/null 2>&1; then
break
fi
echo "Waiting for PostgreSQL... ($i/30)"
sleep 1
done
PG_PORT=$($CONTAINER_CMD port "${CONTAINER_PREFIX}-postgres" 5432 | head -1 | cut -d: -f2)
cat > "$INFRA_FILE" << EOF
export DATABASE_URL="postgres://postgres:postgres@127.0.0.1:${PG_PORT}/postgres"
export TEST_DB_PORT="${PG_PORT}"
export TRANQUIL_PDS_TEST_INFRA_READY="1"
export TRANQUIL_PDS_ALLOW_INSECURE_SECRETS="1"
export SKIP_IMPORT_VERIFICATION="true"
export DISABLE_RATE_LIMITING="1"
export TRANQUIL_LEXICON_OFFLINE="1"
EOF
echo ""
echo "Infrastructure ready!"
echo "Config written to: $INFRA_FILE"
echo ""
cat "$INFRA_FILE"
}
stop_infra() {
echo "Stopping test infrastructure..."
$CONTAINER_CMD rm -f "${CONTAINER_PREFIX}-postgres" 2>/dev/null || true
rm -f "$INFRA_FILE"
rm -rf "${TMPDIR:-/tmp}"/tranquil-pds-test-* 2>/dev/null || true
echo "Infrastructure stopped."
}
status_infra() {
echo "Test Infrastructure Status:"
echo "============================"
if [[ -f "$INFRA_FILE" ]]; then
echo "Config file: $INFRA_FILE"
source "$INFRA_FILE"
echo "Database URL: $DATABASE_URL"
else
echo "Config file: NOT FOUND"
fi
echo ""
echo "Containers:"
$CONTAINER_CMD ps -a --filter "label=tranquil_pds_test=true" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null || echo " (none)"
}
case "${1:-}" in
start)
start_infra
;;
stop)
stop_infra
;;
restart)
stop_infra
start_infra
;;
status)
status_infra
;;
env)
if [[ -f "$INFRA_FILE" ]]; then
cat "$INFRA_FILE"
else
echo "Infrastructure not running. Run: $0 start" >&2
exit 1
fi
;;
*)
echo "Usage: $0 {start|stop|restart|status|env}"
echo ""
echo "Commands:"
echo " start - Start test infrastructure (Postgres)"
echo " stop - Stop and remove test containers"
echo " restart - Stop then start infrastructure"
echo " status - Show infrastructure status"
echo " env - Output environment variables for sourcing"
exit 1
;;
esac