diegobeyl/backtesting
2
1#!/usr/bin/env python32"""3Pruebas de Timeouts y Límites - Fase 34Verifica que los limitadores funcionan correctamente5"""6 7import sys8import time9 10sys.path.insert(0, '/Users/javier/Projects/backtesting_app_v2')11 12from backtesting_app.core.timeout_limiter import (13 ExecutionLimiter,14 TimeoutException,15 OperationTracker,16 ProgressTracker17)18 19 20def test_execution_limiter():21 """Prueba el limitador de ejecución"""22 print("=" * 70)23 print("PRUEBAS DE TIMEOUTS - FASE 3")24 print("=" * 70)25 26 # Test 1: Ejecución dentro del timeout27 print("\n✓ Test 1: Ejecución dentro del timeout (0.5s, timeout 2s)")28 limiter = ExecutionLimiter('backtest')29 limiter.timeout = 230 limiter.start()31 time.sleep(0.5)32 33 try:34 limiter.check_timeout()35 elapsed = limiter.stop()36 print(f" ✅ PASS - Completado en {elapsed:.2f}s")37 except TimeoutException:38 print(f" ❌ FAIL")39 40 # Test 2: Timeout excedido41 print("\n✓ Test 2: Timeout excedido (2s tarea, 1s timeout)")42 limiter = ExecutionLimiter('backtest')43 limiter.timeout = 144 limiter.start()45 46 timeout_occurred = False47 for i in range(3):48 time.sleep(0.5)49 try:50 limiter.check_timeout()51 except TimeoutException:52 timeout_occurred = True53 print(f" ✅ PASS - Timeout detectado en {limiter.get_elapsed():.2f}s")54 break55 56 if not timeout_occurred:57 print(" ❌ FAIL - Timeout no fue detectado")58 59 limiter.stop()60 61 # Test 3: Progress tracking62 print("\n✓ Test 3: Rastreo de progreso")63 limiter = ExecutionLimiter('analysis')64 limiter.timeout = 365 limiter.start()66 time.sleep(0.9)67 68 progress = limiter.get_progress_percent()69 print(f" Progreso: {progress:.1f}%")70 print(f" ✅ PASS")71 limiter.stop()72 73 # Test 4: Operation Tracker74 print("\n✓ Test 4: Rastreo de múltiples operaciones")75 tracker = OperationTracker()76 77 for i in range(3):78 tracker.start_operation(f"asset_{i}", "backtest")79 80 time.sleep(0.3)81 82 for i in range(3):83 tracker.complete_operation(f"asset_{i}", result={"pnl": 100})84 85 print(tracker.get_status_summary())86 print(" ✅ PASS")87 88 # Test 5: Progress Tracker89 print("\n✓ Test 5: Rastreo de progreso")90 progress = ProgressTracker(total_items=10, operation_name="Procesando")91 92 for i in range(5):93 progress.update(2)94 time.sleep(0.1)95 96 print(f" Progreso: {progress.get_progress_percent():.0f}%")97 print(f" ETA: {progress.format_eta()}")98 print(" ✅ PASS")99 100 # Test 6: Format messages101 print("\n✓ Test 6: Formato de mensajes")102 limiter = ExecutionLimiter('backtest')103 limiter.timeout = 10104 limiter.start()105 time.sleep(1)106 107 print(f" {limiter.get_status_message()}")108 print(" ✅ PASS")109 110 limiter.stop()111 112 print("\n" + "=" * 70)113 print("RESUMEN DE PRUEBAS - FASE 3")114 print("=" * 70)115 print("✅ Limitador de ejecución funciona")116 print("✅ Detección de timeouts funciona")117 print("✅ Progress tracking funciona")118 print("✅ Operation tracker funciona")119 print("✅ ETA estimation funciona")120 print("=" * 70 + "\n")121 122 123if __name__ == "__main__":124 test_execution_limiter()125 