#!/usr/bin/env bash # Run a site-sync test file against a THROWAWAY Postgres database (site_sync_test_), # proving the plugin's DDL + capture/diff/apply/row-sync work on Postgres, not just # SQLite. The DB is dropped+recreated each run; it never touches Scott's other PG # databases (e.g. saltcorn_idp). # # ./test/runPg.sh # runs test/e2e.js on PG # ./test/runPg.sh pgGate.js # runs the multi-tenant isolation gate # # If Postgres is unreachable it prints SKIPPED and exits 77 (the conventional # "skipped" code) -- never 0, so a missing database can't pass as green. set -euo pipefail EXIT_SKIPPED=77 HERE="$(cd "$(dirname "$0")" && pwd)" PLUGIN="$(dirname "$HERE")" REPO="$(dirname "$PLUGIN")" SC_BIN="$REPO/saltcorn/packages/saltcorn-cli/bin/saltcorn" TESTFILE="${1:-e2e.js}" # shellcheck source=testEnv.sh . "$HERE/testEnv.sh" export PGHOST="/var/run/postgresql" export PGUSER="scott" export PGPASSWORD="peer" ADMINDB="saltcorn_idp" # Per-invocation DB name (PID-suffixed) so concurrent runs never collide. TESTDB="site_sync_test_$$" if ! PGDATABASE="$ADMINDB" psql -tAc 'SELECT 1' >/dev/null 2>&1; then echo "SKIPPED (NOT green): Postgres not reachable (PGHOST=$PGHOST db=$ADMINDB); $TESTFILE did not run" exit "$EXIT_SKIPPED" fi STATE="$(make_state_dir site-sync-pg)" trap 'PGDATABASE="$ADMINDB" psql -c "DROP DATABASE IF EXISTS $TESTDB" >/dev/null 2>&1; rm -rf "$STATE"' EXIT isolate_saltcorn_dirs "$STATE" mkdir -p "$STATE/files" export NODE_PATH="$REPO/saltcorn/node_modules" export SALTCORN_FILE_STORE="$STATE/files" export SALTCORN_SESSION_SECRET="site-sync-pg-test-secret" export SALTCORN_NWORKERS=1 # Multi-tenant mode, like the real PG instances (and required by pgGate.js): Saltcorn # reads it once at connect time (db.enable_multi_tenant() is a no-op upstream). export SALTCORN_MULTI_TENANT=true # Force the Postgres backend: presence of SQLITE_FILEPATH would pick SQLite. unset SQLITE_FILEPATH PGDATABASE="$ADMINDB" psql -v ON_ERROR_STOP=1 -c "DROP DATABASE IF EXISTS $TESTDB" >/dev/null PGDATABASE="$ADMINDB" psql -v ON_ERROR_STOP=1 -c "CREATE DATABASE $TESTDB" >/dev/null export PGDATABASE="$TESTDB" node "$SC_BIN" reset-schema --force >/dev/null node "$HERE/$TESTFILE"