#!/bin/bash # Restore test in an isolated database: creates autoscholar_restore, restores the dump, checks counts and 20 artifact digests, drops it. # DATABASE_URL (admin-capable, e.g. local socket) ARTIFACT_ROOT ; usage: restore-test.sh set -euo pipefail DUMP="${1:?dump path}"; : "${ARTIFACT_ROOT:?}" export PATH=/opt/homebrew/opt/postgresql@17/bin:/opt/homebrew/bin:/usr/bin:/bin ADMIN_URL="${PG_ADMIN_URL:-postgresql:///postgres}" psql "$ADMIN_URL" -qc "drop database if exists autoscholar_restore" ; psql "$ADMIN_URL" -qc "create database autoscholar_restore" pg_restore --no-owner -d "${ADMIN_URL%/postgres}/autoscholar_restore" "$DUMP" R="${ADMIN_URL%/postgres}/autoscholar_restore" echo "papers=$(psql "$R" -Atc 'select count(*) from papers') runs=$(psql "$R" -Atc 'select count(*) from research_runs') artifacts=$(psql "$R" -Atc 'select count(*) from artifacts') events=$(psql "$R" -Atc 'select count(*) from stage_events')" FAIL=0; N=0 while IFS='|' read -r key sha; do [ -z "$key" ] && continue; N=$((N+1)) got=$(shasum -a 256 "$ARTIFACT_ROOT/$key" 2>/dev/null | cut -d' ' -f1 || true) [ "$got" = "$sha" ] || { echo "DIGEST MISMATCH $key"; FAIL=$((FAIL+1)); } done < <(psql "$R" -Atc "select storage_key, sha256 from artifacts order by random() limit 20") psql "$ADMIN_URL" -qc "drop database autoscholar_restore" echo "verified $N artifacts, $FAIL mismatches"; [ "$FAIL" = 0 ]