#!/bin/bash # E2E Test: Complete Trading Flow # Tests: Order submission → Risk checks → Execution → Position update → Audit trail 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' NC='\033[0m' # Configuration TRADING_SERVICE_HOST="${TRADING_SERVICE_HOST:-localhost}" TRADING_SERVICE_PORT="${TRADING_SERVICE_PORT:-50051}" DATABASE_URL="${DATABASE_URL:-postgresql://postgres:postgres@localhost:5433/foxhunt}" echo -e "${BLUE}=== E2E Test: Complete Trading Flow ===${NC}" echo "" # Load authentication token from previous test if [ -f "/tmp/foxhunt_test_env_$$" ]; then source "/tmp/foxhunt_test_env_$$" elif [ -n "$FOXHUNT_JWT_TOKEN" ]; then TOKEN="$FOXHUNT_JWT_TOKEN" else echo -e "${YELLOW}⚠ No authentication token found${NC}" echo "Run auth_flow_test.sh first or set FOXHUNT_JWT_TOKEN" TOKEN="mock_token_for_testing" fi TEST_USER="test_trader" TEST_SYMBOL="AAPL" TEST_QUANTITY=100 ORDER_ID="test_order_$(date +%s)_$$" echo -e "${YELLOW}Step 1: Verify trading service is ready...${NC}" if ! nc -z "$TRADING_SERVICE_HOST" "$TRADING_SERVICE_PORT" 2>/dev/null; then echo -e "${RED}✗ Trading service is not accessible${NC}" exit 1 fi echo -e "${GREEN}✓ Trading service is ready${NC}" echo -e "\n${YELLOW}Step 2: Setup test data in database...${NC}" psql "$DATABASE_URL" > /dev/null 2>&1 < /dev/null 2>&1 < /dev/null 2>&1 < /dev/null 2>&1 < /dev/null 2>&1 <= $TEST_QUANTITY" | bc -l) )); then echo -e "${GREEN}✓ Position quantity: $POSITION_QTY${NC}" echo -e "${GREEN}✓ Average price: $POSITION_AVG${NC}" else echo -e "${RED}✗ Position not updated correctly${NC}" exit 1 fi echo -e "\n${YELLOW}Step 10: Verify audit trail completeness...${NC}" AUDIT_COUNT=$(psql "$DATABASE_URL" -t -c " SELECT COUNT(*) FROM transaction_audit_events WHERE order_id = '$ORDER_ID'; " | tr -d ' ') if [ "$AUDIT_COUNT" -ge 3 ]; then echo -e "${GREEN}✓ Audit trail complete ($AUDIT_COUNT events)${NC}" # Show audit trail echo -e "${BLUE}Audit events:${NC}" psql "$DATABASE_URL" -c " SELECT event_type, created_at, details->>'quantity' as quantity, details->>'price' as price FROM transaction_audit_events WHERE order_id = '$ORDER_ID' ORDER BY created_at; " else echo -e "${RED}✗ Audit trail incomplete (only $AUDIT_COUNT events)${NC}" exit 1 fi echo -e "\n${YELLOW}Step 11: Verify regulatory compliance...${NC}" # Check SOX compliance - all events must be immutable and timestamped AUDIT_INTEGRITY=$(psql "$DATABASE_URL" -t -c " SELECT COUNT(*) FROM transaction_audit_events WHERE order_id = '$ORDER_ID' AND created_at IS NOT NULL AND details IS NOT NULL; " | tr -d ' ') if [ "$AUDIT_INTEGRITY" = "$AUDIT_COUNT" ]; then echo -e "${GREEN}✓ SOX compliance: All audit events are timestamped and detailed${NC}" else echo -e "${RED}✗ SOX compliance failed: Missing timestamps or details${NC}" exit 1 fi echo -e "\n${GREEN}========================================${NC}" echo -e "${GREEN}=== Trading Flow Test PASSED ===${NC}" echo -e "${GREEN}========================================${NC}" echo -e "\nSummary:" echo "✓ Trading service is operational" echo "✓ Risk limits validated ($MAX_ORDER_SIZE max order size)" echo "✓ Order submitted successfully ($ORDER_ID)" echo "✓ Risk checks passed" echo "✓ Order executed at price $EXECUTION_PRICE" echo "✓ Position updated (quantity: $POSITION_QTY, avg price: $POSITION_AVG)" echo "✓ Audit trail complete ($AUDIT_COUNT events)" echo "✓ SOX compliance validated" echo "" echo "Order ID: $ORDER_ID" echo "Execution ID: $EXECUTION_ID" echo ""