#!/bin/sh set -eu backend_dir=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) cd "$backend_dir" # A supplied test database must permit isolated CREATE SCHEMA. Tests never use # PG* application settings or touch existing tables; every test owns its schema. if [ -n "${TEST_DATABASE_URL:-}" ]; then REQUIRE_TEST_DATABASE=1 go test -race ./... exit fi # Disposable memory-backed database, loopback only, no existing Compose volumes. test_container=$(docker run --detach --rm --publish 127.0.0.1::5432 \ --env POSTGRES_USER=ballet_test --env POSTGRES_PASSWORD=local-isolated-test \ --env POSTGRES_DB=ballet_test --tmpfs /var/lib/postgresql postgres:18-alpine) trap 'docker stop "$test_container" >/dev/null' EXIT HUP INT TERM attempt=0 until docker exec "$test_container" pg_isready -U ballet_test -d ballet_test >/dev/null 2>&1; do attempt=$((attempt + 1)) if [ "$attempt" -ge 30 ]; then printf '%s\n' 'Test PostgreSQL did not become ready.' >&2; exit 1; fi sleep 1 done test_port=$(docker port "$test_container" 5432 | sed 's/.*://') TEST_DATABASE_URL="postgres://ballet_test:local-isolated-test@127.0.0.1:$test_port/ballet_test?sslmode=disable" \ REQUIRE_TEST_DATABASE=1 go test -race ./...