#!/bin/bash # Foxhunt HFT System - Automated Smoke Test Suite # Version: 1.0.0 # Purpose: Validate complete system functionality after deployment # # Usage: # ./run_smoke_tests.sh # Run all smoke tests # ./run_smoke_tests.sh --fast # Run only critical tests # ./run_smoke_tests.sh --verbose # Run with detailed logging # ./run_smoke_tests.sh --category infrastructure # Run specific category set -e # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Configuration VERBOSE=false FAST_MODE=false CATEGORY="" RUST_LOG="${RUST_LOG:-info}" # Parse command line arguments while [[ $# -gt 0 ]]; do case $1 in --verbose|-v) VERBOSE=true RUST_LOG="debug" shift ;; --fast|-f) FAST_MODE=true shift ;; --category|-c) CATEGORY="$2" shift 2 ;; --help|-h) echo "Foxhunt HFT System - Smoke Test Runner" echo "" echo "Usage: $0 [OPTIONS]" echo "" echo "Options:" echo " --verbose, -v Enable verbose logging (RUST_LOG=debug)" echo " --fast, -f Run only critical tests (faster execution)" echo " --category, -c CAT Run specific category only" echo " Categories: infrastructure, service, authentication, order_flow" echo " --help, -h Show this help message" echo "" echo "Examples:" echo " $0 # Run all smoke tests" echo " $0 --fast # Run only critical tests" echo " $0 --verbose # Run with debug logging" echo " $0 --category infrastructure # Run infrastructure tests only" exit 0 ;; *) echo -e "${RED}Unknown option: $1${NC}" echo "Use --help for usage information" exit 1 ;; esac done # Export environment variables export RUST_LOG export DATABASE_URL="${DATABASE_URL:-postgresql://foxhunt:foxhunt_dev_password@localhost:5432/foxhunt}" export REDIS_URL="${REDIS_URL:-redis://localhost:6379}" export VAULT_ADDR="${VAULT_ADDR:-http://localhost:8200}" export INFLUXDB_URL="${INFLUXDB_URL:-http://localhost:8086}" export API_GATEWAY_URL="${API_GATEWAY_URL:-http://localhost:50051}" export TRADING_SERVICE_URL="${TRADING_SERVICE_URL:-http://localhost:50052}" export BACKTESTING_SERVICE_URL="${BACKTESTING_SERVICE_URL:-http://localhost:50053}" export ML_TRAINING_SERVICE_URL="${ML_TRAINING_SERVICE_URL:-http://localhost:50054}" export PROMETHEUS_URL="${PROMETHEUS_URL:-http://localhost:9090}" export GRAFANA_URL="${GRAFANA_URL:-http://localhost:3000}" export JWT_SECRET="${JWT_SECRET:-dev_secret_key_change_in_production}" # Print banner echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" echo -e "${BLUE} Foxhunt HFT System - Smoke Test Suite${NC}" echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" echo "" # Environment info echo -e "${YELLOW}Environment Configuration:${NC}" echo " Database: ${DATABASE_URL}" echo " Redis: ${REDIS_URL}" echo " Vault: ${VAULT_ADDR}" echo " API Gateway: ${API_GATEWAY_URL}" echo " Trading Service: ${TRADING_SERVICE_URL}" echo " Log Level: ${RUST_LOG}" if [ "$FAST_MODE" = true ]; then echo -e " ${GREEN}Mode: FAST (critical tests only)${NC}" fi if [ "$CATEGORY" != "" ]; then echo -e " ${GREEN}Category: ${CATEGORY}${NC}" fi echo "" # Test execution flags TEST_FLAGS="" if [ "$VERBOSE" = true ]; then TEST_FLAGS="-- --nocapture --test-threads=1" fi # Function to run a test category run_test_category() { local category=$1 local test_name=$2 local description=$3 echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" echo -e "${BLUE}Testing: ${description}${NC}" echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" echo "" if cargo test --test smoke_tests ${test_name} ${TEST_FLAGS}; then echo "" echo -e "${GREEN}✅ ${description} - PASSED${NC}" return 0 else echo "" echo -e "${RED}❌ ${description} - FAILED${NC}" return 1 fi } # Track results TOTAL_CATEGORIES=0 PASSED_CATEGORIES=0 FAILED_CATEGORIES=0 # Main test execution echo -e "${YELLOW}🔍 Starting smoke test execution...${NC}" echo "" # Category 1: Infrastructure Health (CRITICAL) if [ -z "$CATEGORY" ] || [ "$CATEGORY" = "infrastructure" ]; then TOTAL_CATEGORIES=$((TOTAL_CATEGORIES + 1)) if run_test_category "infrastructure" "infrastructure_health" "Infrastructure Health"; then PASSED_CATEGORIES=$((PASSED_CATEGORIES + 1)) else FAILED_CATEGORIES=$((FAILED_CATEGORIES + 1)) fi echo "" fi # Category 2: Service Health (CRITICAL) if [ -z "$CATEGORY" ] || [ "$CATEGORY" = "service" ]; then TOTAL_CATEGORIES=$((TOTAL_CATEGORIES + 1)) if run_test_category "service" "service_health" "Service Health"; then PASSED_CATEGORIES=$((PASSED_CATEGORIES + 1)) else FAILED_CATEGORIES=$((FAILED_CATEGORIES + 1)) echo -e "${YELLOW}⚠️ Note: Some services may not be available due to configuration issues${NC}" fi echo "" fi # Category 3: Authentication Flow (skip in fast mode) if [ "$FAST_MODE" = false ] && ([ -z "$CATEGORY" ] || [ "$CATEGORY" = "authentication" ]); then TOTAL_CATEGORIES=$((TOTAL_CATEGORIES + 1)) if run_test_category "authentication" "authentication_flow" "Authentication Flow"; then PASSED_CATEGORIES=$((PASSED_CATEGORIES + 1)) else FAILED_CATEGORIES=$((FAILED_CATEGORIES + 1)) fi echo "" fi # Category 4: Basic Order Flow (skip in fast mode) if [ "$FAST_MODE" = false ] && ([ -z "$CATEGORY" ] || [ "$CATEGORY" = "order_flow" ]); then TOTAL_CATEGORIES=$((TOTAL_CATEGORIES + 1)) if run_test_category "order_flow" "basic_order_flow" "Basic Order Flow"; then PASSED_CATEGORIES=$((PASSED_CATEGORIES + 1)) else FAILED_CATEGORIES=$((FAILED_CATEGORIES + 1)) fi echo "" fi # Print summary echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" echo -e "${BLUE} Smoke Test Summary${NC}" echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" echo "" echo " Total Categories: ${TOTAL_CATEGORIES}" echo -e " ${GREEN}Passed: ${PASSED_CATEGORIES}${NC}" if [ $FAILED_CATEGORIES -gt 0 ]; then echo -e " ${RED}Failed: ${FAILED_CATEGORIES}${NC}" else echo " Failed: ${FAILED_CATEGORIES}" fi echo "" # Calculate percentage if [ $TOTAL_CATEGORIES -gt 0 ]; then PASS_PERCENTAGE=$((PASSED_CATEGORIES * 100 / TOTAL_CATEGORIES)) echo " Pass Rate: ${PASS_PERCENTAGE}%" echo "" fi # Exit with appropriate code if [ $FAILED_CATEGORIES -eq 0 ]; then echo -e "${GREEN}✅ All smoke tests passed!${NC}" echo -e "${GREEN} System is ready for deployment.${NC}" exit 0 else echo -e "${YELLOW}⚠️ Some smoke tests failed${NC}" echo -e "${YELLOW} Review the failures above before deploying.${NC}" exit 1 fi