#!/bin/bash # Test Migration Workflow Script # Automates the complete migration testing process set -e # Exit on any error # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color print_step() { echo -e "\n${BLUE}๐Ÿ“‹ Step $1: $2${NC}" } print_success() { echo -e "${GREEN}โœ… $1${NC}" } print_warning() { echo -e "${YELLOW}โš ๏ธ $1${NC}" } print_error() { echo -e "${RED}โŒ $1${NC}" } # Load environment variables from .env file if it exists if [ -f ".env" ]; then set -a # automatically export all variables source .env set +a # stop automatically exporting print_success "Environment variables loaded from .env" else print_warning "No .env file found - using defaults" fi # Activate virtual environment if it exists if [ -d "migration_env" ]; then source migration_env/bin/activate print_success "Virtual environment activated" PYTHON_CMD="python" else print_warning "No virtual environment found - using system python3" PYTHON_CMD="python3" fi # Create logs directory if it doesn't exist mkdir -p logs echo "==========================================" echo "๐Ÿงช POSTGRESQL MIGRATION TESTING WORKFLOW" echo "==========================================" # Check if Docker containers are running print_step 1 "Checking Docker containers" if docker ps | grep -q "sba_postgres"; then print_success "PostgreSQL container is running" else print_error "PostgreSQL container not found - run: docker compose up postgres -d" exit 1 fi if docker ps | grep -q "sba_db_api"; then print_success "Database API container is running" else print_warning "Database API container not running - run: docker compose up api -d" echo "Note: API testing will be skipped without this container" fi if docker ps | grep -q "sba_adminer"; then print_success "Adminer container is running" else print_warning "Adminer container not running - run: docker compose up adminer -d" fi # Test PostgreSQL connectivity print_step 2 "Testing PostgreSQL connectivity" DB_USER=${SBA_DB_USER:-sba_admin} DB_NAME=${SBA_DATABASE:-sba_master} if docker compose exec -T postgres pg_isready -U "$DB_USER" -d "$DB_NAME" > /dev/null 2>&1; then print_success "PostgreSQL connection test passed" else print_error "PostgreSQL connection test failed" echo "Check container logs: docker compose logs postgres" exit 1 fi # Reset PostgreSQL database print_step 3 "Resetting PostgreSQL database" if [ -f "reset_postgres.py" ]; then if $PYTHON_CMD reset_postgres.py > /dev/null 2>&1; then print_success "PostgreSQL database reset complete" else print_error "Database reset failed" echo "Run: $PYTHON_CMD reset_postgres.py for details" exit 1 fi else print_warning "No reset_postgres.py found - skipping database reset" fi # Check SQLite source data print_step 4 "Checking SQLite source data" if [ -f "storage/sba_master.db" ]; then SIZE=$(du -h storage/sba_master.db | cut -f1) print_success "SQLite database found (${SIZE})" else print_error "SQLite database not found at storage/sba_master.db" exit 1 fi # Run migration print_step 5 "Running data migration" echo "This may take several minutes depending on data size..." if $PYTHON_CMD migrate_to_postgres.py; then print_success "Migration completed successfully" else print_error "Migration failed" exit 1 fi # Validate migration print_step 6 "Validating migration results" echo "Running table count validation (some missing tables are expected)..." if [ -f "validate_migration.py" ]; then if SBA_DATABASE=sba_master SBA_DB_USER=sba_admin SBA_DB_USER_PASSWORD='your_production_password' POSTGRES_HOST=localhost POSTGRES_PORT=5432 $PYTHON_CMD validate_migration.py; then print_success "Migration validation passed" else print_warning "Migration validation found expected differences (missing newer tables)" echo "This is normal - some tables exist only in production" fi else print_warning "No validate_migration.py found - skipping validation" fi # API Integration Testing (if database container is running) if docker ps | grep -q "sba_db_api"; then print_step 7 "Running API integration tests" echo "Testing API endpoints to validate PostgreSQL compatibility..." # Wait for API to be ready echo "Waiting for API to be ready..." sleep 15 if [ -f "comprehensive_api_integrity_tests.py" ]; then if $PYTHON_CMD comprehensive_api_integrity_tests.py --router stratplay > logs/migration_api_test.log 2>&1; then print_success "Critical API endpoints validated (stratplay with PostgreSQL fixes)" else print_warning "Some API tests failed - check logs/migration_api_test.log" echo "Note: Many 'failures' are expected environment differences, not migration issues" fi # Test a few key routers quickly echo "Running quick validation of core routers..." for router in teams players standings; do if $PYTHON_CMD comprehensive_api_integrity_tests.py --router $router > logs/migration_${router}_test.log 2>&1; then print_success "$router router validated" else print_warning "$router router has differences - check logs/migration_${router}_test.log" fi done else print_warning "No comprehensive_api_integrity_tests.py found - skipping API tests" fi else print_warning "Skipping API tests - database container not running" fi # Final summary echo -e "\n==========================================" echo -e "${GREEN}๐ŸŽ‰ MIGRATION TEST COMPLETE${NC}" echo "==========================================" echo -e "๐Ÿ“Š View data in Adminer: ${BLUE}http://localhost:8080${NC}" echo " Server: postgres" echo " Username: sba_admin" echo " Password: sba_dev_password_2024" echo " Database: sba_master" echo "" if docker ps | grep -q "sba_db_api"; then echo -e "๐Ÿ”— Test API directly: ${BLUE}https://api.sba.manticorum.com/v3/teams?season=10${NC}" echo "" fi echo -e "๐Ÿ“‹ Check detailed logs in: ${BLUE}logs/${NC}" echo -e "๐Ÿ“Š Migration analysis: ${BLUE}logs/MIGRATION_TEST_ANALYSIS_20250819.md${NC}" echo "" echo -e "๐Ÿ”„ To test again: ${YELLOW}./test_migration_workflow.sh${NC}" echo -e "๐Ÿ—‘๏ธ To reset only: ${YELLOW}source migration_env/bin/activate && $PYTHON_CMD reset_postgres.py${NC}" echo -e "๐Ÿงช Run full API tests: ${YELLOW}source migration_env/bin/activate && $PYTHON_CMD comprehensive_api_integrity_tests.py${NC}" echo "=========================================="