ai_qc/scripts/test-system.sh

167 lines
No EOL
4.7 KiB
Bash
Executable file

#!/bin/bash
# Script to test the Visual AI QC system before deployment
set -e # Exit on any error
echo "==========================================="
echo " Visual AI QC - System Testing"
echo "==========================================="
# Get the script directory and app root
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
APP_DIR="$(dirname "$SCRIPT_DIR")"
echo "Testing directory: $APP_DIR"
# Change to app directory
cd "$APP_DIR"
# Determine Python command
if command -v python3 &> /dev/null; then
PYTHON_CMD=python3
elif command -v python &> /dev/null; then
PYTHON_CMD=python
else
echo "ERROR: Python not found!"
exit 1
fi
echo "Using Python: $PYTHON_CMD"
# Test 1: Python syntax check
echo ""
echo "Test 1: Python syntax validation"
echo "================================"
find . -name "*.py" -not -path "./venv/*" | while read -r file; do
echo "Checking: $file"
$PYTHON_CMD -m py_compile "$file" || {
echo "ERROR: Syntax error in $file"
exit 1
}
done
echo "✅ All Python files have valid syntax"
# Test 2: Core module imports
echo ""
echo "Test 2: Core module imports"
echo "=========================="
$PYTHON_CMD -c "
try:
import api_server
import llm_config
import profile_config
import jwt_validator
import auth_middleware
print('✅ All core modules imported successfully')
except Exception as e:
print(f'ERROR: Core module import failed: {e}')
exit(1)
"
# Test 3: Profile system validation
echo ""
echo "Test 3: Profile system validation"
echo "================================="
$PYTHON_CMD -c "
from profile_config import get_profile
profiles = ['general_check', 'unilever_key_visual', 'unilever_packaging', 'diageo_key_visual', 'diageo_packaging', 'inclusive_accessibility']
for p in profiles:
try:
profile = get_profile(p)
enabled_checks = profile.get_enabled_checks()
print(f'✅ {profile.name} ({len(enabled_checks)} checks)')
except Exception as e:
print(f'ERROR: Profile {p} failed to load: {e}')
exit(1)
"
# Test 4: QC module validation
echo ""
echo "Test 4: QC module validation"
echo "============================"
$PYTHON_CMD -c "
import os
import importlib.util
import sys
qc_apps_dir = 'visual_qc_apps'
error_count = 0
for item in os.listdir(qc_apps_dir):
item_path = os.path.join(qc_apps_dir, item)
if os.path.isdir(item_path) and not item.startswith('__'):
app_file = os.path.join(item_path, 'app.py')
if os.path.exists(app_file):
try:
spec = importlib.util.spec_from_file_location(f'{item}.app', app_file)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
print(f'✅ {item}/app.py')
except Exception as e:
print(f'ERROR: {item}/app.py - {e}')
error_count += 1
if error_count > 0:
print(f'ERROR: {error_count} QC modules failed to load')
sys.exit(1)
else:
print(f'✅ All QC modules loaded successfully')
"
# Test 5: Configuration validation
echo ""
echo "Test 5: Configuration validation"
echo "==============================="
if [ ! -f "config.env" ] && [ ! -f "config/production.env" ] && [ ! -f "config/development.env" ]; then
echo "ERROR: No configuration files found!"
exit 1
fi
# Check for required environment variables
$PYTHON_CMD -c "
import os
from dotenv import load_dotenv
# Try to load any available config
if os.path.exists('config/development.env'):
load_dotenv('config/development.env')
elif os.path.exists('config/production.env'):
load_dotenv('config/production.env')
elif os.path.exists('config.env'):
load_dotenv('config.env')
required_vars = ['OPENAI_API_KEY', 'GOOGLE_API_KEY', 'AZURE_TENANT_ID', 'AZURE_CLIENT_ID']
missing_vars = []
for var in required_vars:
if not os.environ.get(var):
missing_vars.append(var)
if missing_vars:
print(f'ERROR: Missing required environment variables: {missing_vars}')
exit(1)
else:
print('✅ All required environment variables are set')
"
# Test 6: Brand guidelines database
echo ""
echo "Test 6: Brand guidelines database"
echo "================================"
$PYTHON_CMD -c "
try:
from brand_guidelines_db import BrandGuidelinesDB
brand_db = BrandGuidelinesDB()
brands = brand_db.get_all_brands()
print(f'✅ Brand guidelines database loaded ({len(brands)} brands)')
except Exception as e:
print(f'ERROR: Brand guidelines database failed: {e}')
exit(1)
"
# Final summary
echo ""
echo "==========================================="
echo "🎉 ALL TESTS PASSED!"
echo "The system is ready for deployment."
echo "==========================================="