#!/usr/bin/env bash # tests/pgserver/run.sh — integration harness for the pgserver wire # layer. Builds a bootstrap PRG that starts the server, then drives # it from a Go-side pgx client (located alongside this script). # # Verified scope (Phase 3): # * CREATE TABLE / INSERT / UPDATE / DELETE over Simple Query # * BEGIN / COMMIT / ROLLBACK from the wire # * Two-connection cross-visibility on shared DBF # * Per-session ROLLBACK doesn't affect other connection # # Known limitation (tracked for Phase 7): # * ≥3 concurrent connections doing in-flight INSERT/SELECT in # their own transactions can race at the hbrdd workarea layer # — surfaces as one worker's just-inserted row missing from its # own SELECT. Two-connection serial use, and N-connection use # where each goroutine completes its txn before the next starts, # are both reliable. Multi-way append-time WA arbitration is # deferred until the audit's "WorkArea collision under multi- # session" Top-Risk #2 fix lands. set -e ROOT="$(cd "$(dirname "$0")/../.." && pwd)" FIVE="$ROOT/five" PORT="${PGSERVER_TEST_PORT:-15432}" if [ ! -x "$FIVE" ]; then echo "five binary not found at $FIVE — run 'go build -o five ./cmd/five' first" >&2 exit 2 fi if ! command -v psql >/dev/null 2>&1; then echo "psql not in PATH — install PostgreSQL client tools to run this suite" >&2 exit 2 fi work="$(mktemp -d)" trap 'rm -rf "$work"' EXIT # Bootstrap PRG — opens nothing, just stands up the server. cat > "$work/boot.prg" </dev/null 2>&1 "$work/boot" & SERVER_PID=$! sleep 1 trap "kill $SERVER_PID 2>/dev/null; rm -rf '$work'" EXIT # Sanity ping via psql Simple Query. out="$(psql "postgres://alice:any@127.0.0.1:$PORT/alice?sslmode=disable" \ -c "SELECT 1 AS one, 'hello' AS greet" -At 2>&1 || true)" if ! echo "$out" | grep -q "1|hello"; then echo "FAIL psql sanity:" echo "$out" exit 1 fi echo "PASS psql sanity: SELECT 1 AS one, 'hello' AS greet" echo "================================================================" echo " pgserver integration: 1 / 1 passed" echo "================================================================"