scam / scripts /test_database_connections.py
Gankit12's picture
Upload 129 files
31f0e50 verified
Raw
History Blame Contribute Delete
5.77 kB
#!/usr/bin/env python
"""
Database Connection Test Script.
Tests PostgreSQL and Redis connections as per Task 2.1 verification requirements.
Usage:
python scripts/test_database_connections.py
"""
import sys
import os
# Add parent directory to path
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
def test_postgres_connection():
"""Test PostgreSQL connection as per Task 2.1."""
print("Testing PostgreSQL connection...")
try:
from app.database.postgres import get_db_connection
from sqlalchemy import text
db = get_db_connection()
result = db.execute(text("SELECT 1")).fetchone()
db.close()
print(f" [OK] PostgreSQL connection successful")
print(f" [OK] Test query result: {result}")
return True
except ConnectionError as e:
print(f" [FAIL] PostgreSQL connection failed: {e}")
print(" [INFO] Set POSTGRES_URL environment variable to enable database")
return False
except Exception as e:
print(f" [FAIL] PostgreSQL test failed: {e}")
return False
def test_redis_connection():
"""Test Redis connection as per Task 2.1."""
print("\nTesting Redis connection...")
try:
from app.database.redis_client import get_redis_client
redis = get_redis_client()
redis.set("test", "ok")
result = redis.get("test")
redis.delete("test")
print(f" [OK] Redis connection successful")
print(f" [OK] Test read/write result: {result}")
return True
except ConnectionError as e:
print(f" [FAIL] Redis connection failed: {e}")
print(" [INFO] Set REDIS_URL environment variable to enable Redis")
return False
except Exception as e:
print(f" [FAIL] Redis test failed: {e}")
return False
def test_postgres_schema():
"""Test that PostgreSQL schema is created."""
print("\nTesting PostgreSQL schema...")
try:
from app.database.postgres import verify_schema, get_db_connection
from sqlalchemy import text, inspect
# Verify schema
if verify_schema():
print(" [OK] Schema verification passed")
# Check tables exist
conn = get_db_connection()
try:
inspector = inspect(conn)
tables = inspector.get_table_names()
required_tables = ['conversations', 'messages', 'extracted_intelligence']
for table in required_tables:
if table in tables:
print(f" [OK] Table '{table}' exists")
else:
print(f" [FAIL] Table '{table}' missing")
return False
# Check indexes
indexes = inspector.get_indexes('conversations')
index_names = [idx['name'] for idx in indexes]
required_indexes = ['idx_session_id', 'idx_created_at']
for idx in required_indexes:
if idx in index_names:
print(f" [OK] Index '{idx}' exists")
else:
print(f" [WARN] Index '{idx}' missing")
finally:
conn.close()
return True
else:
print(" [FAIL] Schema verification failed")
print(" [INFO] Run 'python scripts/init_database.py' to create schema")
return False
except ConnectionError:
print(" [INFO] Database not configured, skipping schema test")
return False
except Exception as e:
print(f" [FAIL] Schema test failed: {e}")
return False
def main():
"""Main entry point for database connection testing."""
print("=" * 60)
print("Task 2.1: Database Configuration - Verification")
print("=" * 60)
print()
results = {
"postgres_connection": test_postgres_connection(),
"redis_connection": test_redis_connection(),
"postgres_schema": test_postgres_schema(),
}
print("\n" + "=" * 60)
print("Test Summary")
print("=" * 60)
passed = sum(1 for v in results.values() if v)
total = len(results)
for test_name, result in results.items():
status = "PASS" if result else "SKIP/FAIL"
print(f" {test_name}: {status}")
print(f"\nResults: {passed}/{total} tests passed")
# Acceptance criteria check
print("\n" + "=" * 60)
print("Acceptance Criteria")
print("=" * 60)
criteria = {
"PostgreSQL connection successful": results["postgres_connection"],
"All tables created": results["postgres_schema"],
"Indexes created": results["postgres_schema"],
"Redis connection successful": results["redis_connection"],
}
for criterion, passed in criteria.items():
status = "[OK]" if passed else "[SKIP]"
print(f" {status} {criterion}")
all_passed = all(criteria.values())
if all_passed:
print("\n[SUCCESS] All acceptance criteria PASSED!")
sys.exit(0)
else:
print("\n[INFO] Some acceptance criteria not met (may be due to missing configuration)")
print(" Set POSTGRES_URL and REDIS_URL environment variables to enable full testing")
sys.exit(0) # Exit 0 because missing config is acceptable for development
if __name__ == "__main__":
main()