Team Ai
Apppublic

diegobeyl/backtesting

sourceHugging Faceupdated 9mo agoView on Hugging Face
2likes
test_phase3_timeouts.py125 linesDownload Raw Back to tests
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