""" Quick test to verify the complete integration workflow. Run this after starting both services to test end-to-end. """ import requests import json import time def test_complete_workflow(): """Test the complete workflow from raw telemetry to strategy generation.""" print("đŸ§Ē Testing Complete Integration Workflow\n") print("=" * 70) # Test 1: Check services are running print("\n1ī¸âƒŖ Checking service health...") try: enrichment_health = requests.get("http://localhost:8000/healthz", timeout=2) print(f" ✅ Enrichment service: {enrichment_health.json()}") except Exception as e: print(f" ❌ Enrichment service not responding: {e}") print(" → Start with: uvicorn hpcsim.api:app --port 8000") return False try: ai_health = requests.get("http://localhost:9000/api/health", timeout=2) print(f" ✅ AI Intelligence Layer: {ai_health.json()}") except Exception as e: print(f" ❌ AI Intelligence Layer not responding: {e}") print(" → Start with: cd ai_intelligence_layer && uvicorn main:app --port 9000") return False # Test 2: Send telemetry with race context print("\n2ī¸âƒŖ Sending telemetry with race context...") telemetry_samples = [] for lap in range(1, 6): sample = { 'lap_number': lap, 'total_laps': 51, 'speed': 280.0 + (lap * 2), 'throttle': 0.85 + (lap * 0.01), 'brake': 0.05, 'tire_compound': 'MEDIUM', 'tire_life_laps': lap, 'track_temperature': 42.5, 'rainfall': False, 'track_name': 'Monza', 'driver_name': 'Alonso', 'current_position': 5, 'fuel_level': 0.9 - (lap * 0.02), } telemetry_samples.append(sample) responses = [] for i, sample in enumerate(telemetry_samples, 1): try: response = requests.post( "http://localhost:8000/ingest/telemetry", json=sample, timeout=5 ) if response.status_code == 200: result = response.json() responses.append(result) print(f" Lap {sample['lap_number']}: ✅ Enriched") # Check if we got enriched_telemetry and race_context if 'enriched_telemetry' in result and 'race_context' in result: print(f" └─ Enriched telemetry + race context included") if i == len(telemetry_samples): # Show last response details enriched = result['enriched_telemetry'] context = result['race_context'] print(f"\n 📊 Final Enriched Metrics:") print(f" - Aero Efficiency: {enriched['aero_efficiency']:.3f}") print(f" - Tire Degradation: {enriched['tire_degradation_index']:.3f}") print(f" - Driver Consistency: {enriched['driver_consistency']:.3f}") print(f"\n đŸŽī¸ Race Context:") print(f" - Track: {context['race_context']['race_info']['track_name']}") print(f" - Lap: {context['race_context']['race_info']['current_lap']}/{context['race_context']['race_info']['total_laps']}") print(f" - Position: P{context['race_context']['driver_state']['current_position']}") print(f" - Fuel: {context['race_context']['driver_state']['fuel_remaining_percent']:.1f}%") print(f" - Competitors: {len(context['race_context']['competitors'])} shown") else: print(f" âš ī¸ Legacy format (no race context)") else: print(f" Lap {sample['lap_number']}: ❌ Failed ({response.status_code})") except Exception as e: print(f" Lap {sample['lap_number']}: ❌ Error: {e}") time.sleep(0.5) # Small delay between requests # Test 3: Check AI layer buffer print("\n3ī¸âƒŖ Checking AI layer webhook processing...") # The AI layer should have received webhooks and auto-generated strategies # Let's verify by checking if we can call brainstorm manually # (The auto-brainstorm happens in the webhook, but we can verify the buffer) print(" â„šī¸ Auto-brainstorming triggers when buffer has â‰Ĩ3 laps") print(" â„šī¸ Strategies are returned in the webhook response to enrichment service") print(" â„šī¸ Check the AI Intelligence Layer logs for auto-generated strategies") # Test 4: Manual brainstorm call (to verify the endpoint still works) print("\n4ī¸âƒŖ Testing manual brainstorm endpoint...") try: brainstorm_request = { "race_context": { "race_info": { "track_name": "Monza", "total_laps": 51, "current_lap": 5, "weather_condition": "Dry", "track_temp_celsius": 42.5 }, "driver_state": { "driver_name": "Alonso", "current_position": 5, "current_tire_compound": "medium", "tire_age_laps": 5, "fuel_remaining_percent": 82.0 }, "competitors": [] } } response = requests.post( "http://localhost:9000/api/strategy/brainstorm", json=brainstorm_request, timeout=30 ) if response.status_code == 200: result = response.json() print(f" ✅ Generated {len(result['strategies'])} strategies") if result['strategies']: strategy = result['strategies'][0] print(f"\n đŸŽ¯ Sample Strategy:") print(f" - Name: {strategy['strategy_name']}") print(f" - Stops: {strategy['stop_count']}") print(f" - Pit Laps: {strategy['pit_laps']}") print(f" - Tires: {' → '.join(strategy['tire_sequence'])}") print(f" - Risk: {strategy['risk_level']}") else: print(f" âš ī¸ Brainstorm returned {response.status_code}") print(f" (This might be expected if Gemini API is not configured)") except Exception as e: print(f" â„šī¸ Manual brainstorm skipped: {e}") print("\n" + "=" * 70) print("✅ Integration test complete!\n") return True if __name__ == '__main__': test_complete_workflow()