# Plan Global - Tests d'Intégration GroveEngine

## 🎯 Objectif

Implémenter une suite complète de tests d'intégration end-to-end pour valider la robustesse du système de hot-reload et de gestion de modules du GroveEngine.

**Contraintes:**
- ✅ 100% automatique (zéro interaction utilisateur)
- ✅ Reproductible (seed fixe pour aléatoire)
- ✅ Métriques automatiques (temps, mémoire, CPU)
- ✅ Pass/Fail clair (exit code 0/1)
- ✅ CI/CD ready

---

## 📋 Scénarios de Test (Priorité)

### Phase 1: MUST HAVE (~2-3 jours)
| Scénario | Description | Durée | Criticité |
|----------|-------------|-------|-----------|
| **1. Production Hot-Reload** | Hot-reload avec state complexe en conditions réelles | ~30s | ⭐⭐⭐ |
| **2. Chaos Monkey** | Failures aléatoires (crashes, corruptions) | ~5min | ⭐⭐⭐ |
| **3. Stress Test** | Long-running avec reloads répétés | ~10min | ⭐⭐⭐ |

### Phase 2: SHOULD HAVE (~1-2 jours)
| Scénario | Description | Durée | Criticité |
|----------|-------------|-------|-----------|
| **4. Race Condition Hunter** | Compilation concurrente + reload | ~10min | ⭐⭐ |
| **5. Multi-Module Orchestration** | Interactions entre modules | ~1min | ⭐⭐ |

### Phase 3: NICE TO HAVE (~1 jour)
| Scénario | Description | Durée | Criticité |
|----------|-------------|-------|-----------|
| **6. Error Recovery** | Crash detection + auto-recovery | ~2min | ⭐ |
| **7. Limite Tests** | Large state, long init, timeouts | ~3min | ⭐ |
| **8. Config Hot-Reload** | Changement config à la volée | ~1min | ⭐ |

---

## 🏗️ Architecture des Tests

### Structure de Fichiers
```
tests/
  ├─ integration/
  │   ├─ test_01_production_hotreload.cpp
  │   ├─ test_02_chaos_monkey.cpp
  │   ├─ test_03_stress_test.cpp
  │   ├─ test_04_race_condition.cpp
  │   ├─ test_05_multimodule.cpp
  │   ├─ test_06_error_recovery.cpp
  │   ├─ test_07_limits.cpp
  │   └─ test_08_config_hotreload.cpp
  │
  ├─ modules/
  │   ├─ TankModule.cpp          # Module réaliste avec state complexe
  │   ├─ ProductionModule.cpp    # Auto-spawn entities
  │   ├─ MapModule.cpp           # Gestion carte/terrain
  │   ├─ CrashModule.cpp         # Crash contrôlé pour tests
  │   └─ HeavyStateModule.cpp    # State 100MB
  │
  └─ helpers/
      ├─ TestMetrics.h/.cpp      # Collecte métriques (memory, CPU, FPS)
      ├─ TestAssertions.h        # Macros ASSERT_*
      ├─ AutoCompiler.h/.cpp     # Trigger compilation automatique
      └─ TestReporter.h/.cpp     # Génération rapports pass/fail
```

### Composants Communs

#### 1. TestMetrics
```cpp
class TestMetrics {
public:
    void recordReloadTime(float ms);
    void recordMemoryUsage(size_t bytes);
    void recordFPS(float fps);
    void recordCrash(const std::string& reason);

    // Rapport final
    void printReport();
    bool meetsThresholds(const Thresholds& t);
};
```

#### 2. TestAssertions
```cpp
#define ASSERT_TRUE(cond, msg)
#define ASSERT_EQ(actual, expected)
#define ASSERT_WITHIN(actual, expected, tolerance)
#define ASSERT_LT(value, max)
#define ASSERT_GT(value, min)
```

#### 3. AutoCompiler
```cpp
class AutoCompiler {
public:
    void compileModuleAsync(const std::string& moduleName);
    void compileModuleSync(const std::string& moduleName);
    bool isCompiling() const;
    void waitForCompletion();
};
```

#### 4. TestReporter
```cpp
class TestReporter {
public:
    void setScenarioName(const std::string& name);
    void addMetric(const std::string& key, float value);
    void addAssertion(const std::string& name, bool passed);

    void printFinalReport();
    int getExitCode(); // 0 = pass, 1 = fail
};
```

---

## 📊 Métriques Collectées

### Toutes les Tests
- ✅ **Temps de reload** (avg, min, max, p99)
- ✅ **Memory usage** (initial, final, growth, peak)
- ✅ **FPS** (min, avg, max, stddev)
- ✅ **Nombre de crashes** (expected vs unexpected)
- ✅ **File descriptors** (détection leaks)

### Spécifiques
- **Chaos Monkey**: Taux de recovery (%)
- **Stress Test**: Durée totale exécution
- **Race Condition**: Taux de succès compilation (%)
- **Multi-Module**: Temps isolation (impact reload d'un module sur autres)

---

## 🎯 Seuils de Succès (Thresholds)

### Production Hot-Reload
```yaml
reload_time_avg: < 500ms
reload_time_max: < 1000ms
memory_growth: < 5MB
fps_min: > 30
state_preservation: 100%
```

### Chaos Monkey
```yaml
engine_alive: true
memory_growth: < 10MB
recovery_rate: > 95%
no_deadlocks: true
```

### Stress Test
```yaml
duration: 10 minutes
reload_count: ~120 (toutes les 5s)
memory_growth: < 20MB
reload_time_p99: < 1000ms
fd_leaks: 0
```

### Race Condition
```yaml
compilation_cycles: 1000
crash_count: 0
corrupted_loads: 0
reload_success_rate: > 99%
```

### Multi-Module
```yaml
isolated_reload: true (autres modules non affectés)
execution_order_preserved: true
state_sync: 100%
```

---

## 🚀 Plan d'Exécution

### Semaine 1: Fondations + Phase 1
**Jour 1-2:**
- Créer architecture helpers (TestMetrics, Assertions, etc.)
- Implémenter TankModule (module réaliste)
- Scénario 1: Production Hot-Reload

**Jour 3:**
- Scénario 2: Chaos Monkey

**Jour 4:**
- Scénario 3: Stress Test

**Jour 5:**
- Tests + corrections Phase 1

### Semaine 2: Phase 2 + Phase 3
**Jour 6-7:**
- Scénario 4: Race Condition Hunter
- Scénario 5: Multi-Module Orchestration

**Jour 8-9:**
- Scénarios 6, 7, 8 (error recovery, limites, config)

**Jour 10:**
- Documentation finale
- CI/CD integration (GitHub Actions)

---

## 📝 Format des Rapports

### Exemple de sortie attendue
```
================================================================================
TEST: Production Hot-Reload
================================================================================

Setup:
  - Module: TankModule
  - Entities: 50 tanks
  - Duration: 30 seconds
  - Reload trigger: After 15s

Metrics:
  ✓ Reload time: 487ms (threshold: < 1000ms)
  ✓ Memory growth: 2.3MB (threshold: < 5MB)
  ✓ FPS min: 58 (threshold: > 30)
  ✓ FPS avg: 60
  ✓ State preservation: 50/50 tanks (100%)

Assertions:
  ✓ All tanks present after reload
  ✓ Positions preserved (error < 0.01)
  ✓ Velocities preserved
  ✓ No crashes

Result: ✅ PASSED

================================================================================
```

---

## 🔧 Commandes d'Exécution

### Compilation
```bash
cd build
cmake -DBUILD_INTEGRATION_TESTS=ON ..
cmake --build . --target integration_tests
```

### Exécution
```bash
# Tous les tests
ctest --output-on-failure

# Test individuel
./test_01_production_hotreload
./test_02_chaos_monkey --duration 300  # 5 minutes

# Avec verbosité
./test_03_stress_test --verbose

# CI mode (pas de couleurs)
./test_04_race_condition --ci
```

### Analyse
```bash
# Génération rapport JSON
./test_01_production_hotreload --output report.json

# Agrégation tous les rapports
python3 scripts/aggregate_test_reports.py
```

---

## 📌 Notes Importantes

1. **Seeds fixes**: Tous les tests avec aléatoire utilisent un seed fixe (reproductibilité)
2. **Timeouts**: Chaque test a un timeout max (évite tests infinis)
3. **Cleanup**: Tous les tests nettoient leurs ressources (fichiers temporaires, etc.)
4. **Isolation**: Chaque test peut tourner indépendamment
5. **Logs**: Niveau de log configurable (DEBUG pour dev, ERROR pour CI)

---

## 📚 Détails par Scénario

Pour les détails complets de chaque scénario, voir:
- `scenario_01_production_hotreload.md`
- `scenario_02_chaos_monkey.md`
- `scenario_03_stress_test.md`
- `scenario_04_race_condition.md`
- `scenario_05_multimodule.md`
- `scenario_06_error_recovery.md` (Phase 3)
- `scenario_07_limits.md` (Phase 3)
- `scenario_08_config_hotreload.md` (Phase 3)

---

**Dernière mise à jour**: 2025-11-13
**Statut**: Planning phase
