#!/usr/bin/env python3 """ Test Docker setup for Know Foolery project Validates Docker Compose configuration and tests basic functionality """ import subprocess import sys from pathlib import Path def run_command(cmd, description=""): """Run a command and return success status""" try: result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=30) if result.returncode == 0: print(f"āœ… {description or cmd}") return True, result.stdout else: print(f"āŒ {description or cmd}") print(f" Error: {result.stderr.strip()}") return False, result.stderr except subprocess.TimeoutExpired: print(f"ā° {description or cmd} - TIMEOUT") return False, "Timeout" except Exception as e: print(f"šŸ’„ {description or cmd} - EXCEPTION: {e}") return False, str(e) def test_docker_setup(): """Test the complete Docker setup""" print("🐳 Testing Know Foolery Docker Setup...") print("=" * 50) issues = [] # Test Docker availability print("\nšŸ”§ Docker Environment:") success, output = run_command("docker --version", "Docker is installed") if not success: issues.append("Docker not available") return False success, output = run_command("docker compose version", "Docker Compose is available") if not success: issues.append("Docker Compose not available") return False # Test Docker Compose configuration print("\nšŸ“‹ Docker Compose Configuration:") success, output = run_command("docker compose config --quiet", "Docker Compose configuration is valid") if not success: issues.append("Invalid Docker Compose configuration") # Test building (dry run - just validate Dockerfiles) print("\nšŸ—ļø Docker Build Validation:") success, output = run_command("docker compose config --services", "Services are properly defined") if success: services = output.strip().split('\n') print(f" Found {len(services)} services: {', '.join(services)}") else: issues.append("Cannot list services") # Test specific service configurations print("\nšŸ” Service Configuration Details:") test_commands = [ ("docker compose config --service-ports api-gateway", "API Gateway ports configured"), ("docker compose config --service-ports frontend", "Frontend ports configured"), ("docker compose config --service-ports game-service", "Game Service ports configured"), ] for cmd, desc in test_commands: run_command(cmd, desc) # Summary print("\n" + "=" * 50) if issues: print(f"āŒ Docker setup has {len(issues)} issues:") for issue in issues: print(f" • {issue}") return False else: print("āœ… Docker setup is READY!") print("\nšŸš€ Ready to run:") print(" make build # Build all containers") print(" make up # Start all services") print(" make status # Check service status") return True if __name__ == "__main__": success = test_docker_setup() exit(0 if success else 1)