53 lines
2.2 KiB
Bash
Executable file
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"
|