mirror of
https://tangled.org/tranquil.farm/tranquil-pds
synced 2026-09-24 19:24:15 +00:00
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
128 lines
4.0 KiB
Bash
Executable File
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
|