sc-site-sync/test/runPg.sh
2026-10-19 01:25:16 -05:00

53 lines
2.2 KiB
Bash
Executable file

#!/usr/bin/env bash
# Run a site-sync test file against a THROWAWAY Postgres database (site_sync_test_<pid>),
# 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"