#!/bin/bash # Master E2E Integration Test Suite # Comprehensive end-to-end testing for Foxhunt HFT Trading System set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)" # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' BOLD='\033[1m' NC='\033[0m' # Test results tracking TOTAL_TESTS=0 PASSED_TESTS=0 FAILED_TESTS=0 SKIPPED_TESTS=0 declare -a FAILED_TEST_NAMES # Configuration export TRADING_SERVICE_HOST="${TRADING_SERVICE_HOST:-localhost}" export TRADING_SERVICE_PORT="${TRADING_SERVICE_PORT:-50051}" export DATABASE_URL="${DATABASE_URL:-postgresql://postgres:postgres@localhost:5433/foxhunt}" export REDIS_URL="${REDIS_URL:-redis://localhost:6379}" echo -e "${BOLD}${BLUE}╔════════════════════════════════════════════════════════════════╗${NC}" echo -e "${BOLD}${BLUE}║ Foxhunt HFT E2E Integration Test Suite ║${NC}" echo -e "${BOLD}${BLUE}║ Wave 75 Agent 11 ║${NC}" echo -e "${BOLD}${BLUE}╚════════════════════════════════════════════════════════════════╝${NC}" echo "" # Display configuration echo -e "${YELLOW}Configuration:${NC}" echo " Trading Service: $TRADING_SERVICE_HOST:$TRADING_SERVICE_PORT" echo " Database: ${DATABASE_URL%@*}@***" echo " Redis: $REDIS_URL" echo " Test Directory: $SCRIPT_DIR" echo "" # Function to run a test and track results run_test() { local test_name="$1" local test_script="$2" local test_required="${3:-true}" # Default: test is required TOTAL_TESTS=$((TOTAL_TESTS + 1)) echo -e "${BOLD}${BLUE}[Test $TOTAL_TESTS] $test_name${NC}" echo -e "${BLUE}═══════════════════════════════════════════════════════${NC}" # Check if test script exists if [ ! -f "$test_script" ]; then echo -e "${RED}✗ Test script not found: $test_script${NC}" SKIPPED_TESTS=$((SKIPPED_TESTS + 1)) echo "" return 1 fi # Make script executable chmod +x "$test_script" # Run the test local start_time=$(date +%s) if bash "$test_script"; then local end_time=$(date +%s) local duration=$((end_time - start_time)) echo "" echo -e "${GREEN}✅ $test_name PASSED${NC} (${duration}s)" echo "" PASSED_TESTS=$((PASSED_TESTS + 1)) return 0 else local end_time=$(date +%s) local duration=$((end_time - start_time)) echo "" if [ "$test_required" = "true" ]; then echo -e "${RED}❌ $test_name FAILED${NC} (${duration}s)" FAILED_TESTS=$((FAILED_TESTS + 1)) FAILED_TEST_NAMES+=("$test_name") else echo -e "${YELLOW}⚠️ $test_name SKIPPED (optional)${NC} (${duration}s)" SKIPPED_TESTS=$((SKIPPED_TESTS + 1)) fi echo "" return 1 fi } # Pre-flight checks echo -e "${YELLOW}Running pre-flight checks...${NC}" # Check database connectivity if psql "$DATABASE_URL" -c "SELECT 1;" > /dev/null 2>&1; then echo -e "${GREEN}✓ Database connection successful${NC}" else echo -e "${RED}✗ Database connection failed${NC}" echo "Please ensure PostgreSQL is running and DATABASE_URL is correct" exit 1 fi # Check required tools REQUIRED_TOOLS=("psql" "bc" "jq" "nc") MISSING_TOOLS=() for tool in "${REQUIRED_TOOLS[@]}"; do if ! command -v "$tool" &> /dev/null; then MISSING_TOOLS+=("$tool") fi done if [ ${#MISSING_TOOLS[@]} -gt 0 ]; then echo -e "${YELLOW}⚠️ Missing optional tools: ${MISSING_TOOLS[*]}${NC}" echo "Some tests may be skipped. Install with:" echo " sudo apt-get install postgresql-client bc jq netcat-openbsd" else echo -e "${GREEN}✓ All required tools available${NC}" fi echo "" echo -e "${BOLD}${BLUE}Starting E2E Test Suite...${NC}" echo "" # Test Suite Execution # Each test builds upon the previous one # Test 1: Full Authentication Flow # CRITICAL: This must pass first as it generates tokens for other tests run_test \ "Full Authentication Flow" \ "$SCRIPT_DIR/auth_flow_test.sh" \ "true" AUTH_TEST_PASSED=$? # Test 2: Complete Trading Flow # Requires: Authentication token from Test 1 if [ $AUTH_TEST_PASSED -eq 0 ]; then run_test \ "Complete Trading Flow" \ "$SCRIPT_DIR/trading_flow_test.sh" \ "true" else echo -e "${YELLOW}⚠️ Skipping Trading Flow test (authentication failed)${NC}" SKIPPED_TESTS=$((SKIPPED_TESTS + 1)) fi # Test 3: Configuration Hot-Reload # Independent test - doesn't require authentication run_test \ "Configuration Hot-Reload" \ "$SCRIPT_DIR/hot_reload_test.sh" \ "true" # Test 4: Backtesting Flow (if script exists) # Optional test - requires backtesting service if [ -f "$SCRIPT_DIR/backtesting_flow_test.sh" ]; then run_test \ "Backtesting Flow" \ "$SCRIPT_DIR/backtesting_flow_test.sh" \ "false" # Optional fi # Test 5: ML Training Flow (if script exists) # Optional test - requires ML training service if [ -f "$SCRIPT_DIR/ml_training_flow_test.sh" ]; then run_test \ "ML Training Flow" \ "$SCRIPT_DIR/ml_training_flow_test.sh" \ "false" # Optional fi # Generate Test Report echo "" echo -e "${BOLD}${BLUE}╔════════════════════════════════════════════════════════════════╗${NC}" echo -e "${BOLD}${BLUE}║ Test Suite Summary ║${NC}" echo -e "${BOLD}${BLUE}╚════════════════════════════════════════════════════════════════╝${NC}" echo "" # Calculate success rate if [ $TOTAL_TESTS -gt 0 ]; then SUCCESS_RATE=$(echo "scale=1; $PASSED_TESTS * 100 / $TOTAL_TESTS" | bc) else SUCCESS_RATE=0 fi echo -e "${BOLD}Total Tests:${NC} $TOTAL_TESTS" echo -e "${GREEN}${BOLD}Passed:${NC} $PASSED_TESTS" echo -e "${RED}${BOLD}Failed:${NC} $FAILED_TESTS" echo -e "${YELLOW}${BOLD}Skipped:${NC} $SKIPPED_TESTS" echo -e "${BOLD}Success Rate:${NC} ${SUCCESS_RATE}%" echo "" # List failed tests if [ $FAILED_TESTS -gt 0 ]; then echo -e "${RED}${BOLD}Failed Tests:${NC}" for test_name in "${FAILED_TEST_NAMES[@]}"; do echo -e " ${RED}✗ $test_name${NC}" done echo "" fi # Overall result if [ $FAILED_TESTS -eq 0 ]; then echo -e "${GREEN}${BOLD}╔════════════════════════════════════════════════════════════════╗${NC}" echo -e "${GREEN}${BOLD}║ ALL E2E TESTS PASSED! ✅ ║${NC}" echo -e "${GREEN}${BOLD}╚════════════════════════════════════════════════════════════════╝${NC}" echo "" echo -e "${GREEN}Production Readiness: E2E integration validated ✓${NC}" exit 0 else echo -e "${RED}${BOLD}╔════════════════════════════════════════════════════════════════╗${NC}" echo -e "${RED}${BOLD}║ E2E TEST SUITE FAILED ❌ ║${NC}" echo -e "${RED}${BOLD}╚════════════════════════════════════════════════════════════════╝${NC}" echo "" echo -e "${RED}Production Readiness: E2E integration issues detected${NC}" echo "Please review failed tests above" exit 1 fi