Files
attune/scripts/verify-schema-cleanup.sh
2026-02-04 17:46:30 -06:00

101 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
set -e
# Verification script to demonstrate automatic schema cleanup in tests
# This script runs a test and verifies the schema is cleaned up automatically
echo "============================================="
echo "Schema Cleanup Verification Script"
echo "============================================="
echo ""
DATABASE_URL="${DATABASE_URL:-postgresql://postgres:postgres@localhost:5432/attune_test}"
# Check if psql is available
if ! command -v psql &> /dev/null; then
echo "ERROR: psql command not found. Please install PostgreSQL client."
exit 1
fi
# Check if database is accessible
if ! psql "$DATABASE_URL" -c "SELECT 1" > /dev/null 2>&1; then
echo "ERROR: Cannot connect to database: $DATABASE_URL"
exit 1
fi
echo "✓ Database connection verified"
echo ""
# Count schemas before test
BEFORE_COUNT=$(psql "$DATABASE_URL" -t -c "SELECT COUNT(*) FROM pg_namespace WHERE nspname LIKE 'test_%';" 2>/dev/null | xargs)
echo "Test schemas before test: $BEFORE_COUNT"
# Get list of schemas before
SCHEMAS_BEFORE=$(psql "$DATABASE_URL" -t -c "SELECT nspname FROM pg_namespace WHERE nspname LIKE 'test_%' ORDER BY nspname;" 2>/dev/null | xargs)
echo ""
echo "Running a single test to verify cleanup..."
echo ""
# Run a single test (health check is fast and simple)
cd "$(dirname "$0")/.."
cargo test --package attune-api --test health_and_auth_tests test_health_check -- --test-threads=1 2>&1 | grep -E "(running|test result)" || true
echo ""
echo "Test completed. Checking cleanup..."
echo ""
# Give a moment for cleanup to complete
sleep 2
# Count schemas after test
AFTER_COUNT=$(psql "$DATABASE_URL" -t -c "SELECT COUNT(*) FROM pg_namespace WHERE nspname LIKE 'test_%';" 2>/dev/null | xargs)
echo "Test schemas after test: $AFTER_COUNT"
# Get list of schemas after
SCHEMAS_AFTER=$(psql "$DATABASE_URL" -t -c "SELECT nspname FROM pg_namespace WHERE nspname LIKE 'test_%' ORDER BY nspname;" 2>/dev/null | xargs)
echo ""
echo "============================================="
echo "Verification Results"
echo "============================================="
if [ "$BEFORE_COUNT" -eq "$AFTER_COUNT" ]; then
echo "✓ SUCCESS: Schema count unchanged ($BEFORE_COUNT$AFTER_COUNT)"
echo "✓ Test schemas were automatically cleaned up via Drop trait"
echo ""
echo "This demonstrates that:"
echo " 1. Each test creates a unique schema (test_<uuid>)"
echo " 2. Schema is automatically dropped when TestContext goes out of scope"
echo " 3. No manual cleanup needed in test code"
echo " 4. No schemas accumulate during normal test execution"
echo ""
exit 0
else
echo "⚠ WARNING: Schema count changed ($BEFORE_COUNT$AFTER_COUNT)"
echo ""
if [ "$AFTER_COUNT" -gt "$BEFORE_COUNT" ]; then
echo "New schemas detected (cleanup may have failed):"
# Show new schemas
for schema in $SCHEMAS_AFTER; do
if [[ ! " $SCHEMAS_BEFORE " =~ " $schema " ]]; then
echo " - $schema (NEW)"
fi
done
echo ""
echo "This could indicate:"
echo " 1. Test was interrupted (Ctrl+C, crash, panic)"
echo " 2. Drop trait not executing properly"
echo " 3. Async cleanup not completing"
echo ""
echo "Run cleanup script to remove orphaned schemas:"
echo " ./scripts/cleanup-test-schemas.sh --force"
exit 1
else
echo "Schemas were cleaned up (count decreased)"
echo "This is actually good - leftover schemas were removed!"
exit 0
fi
fi