501 lines
12 KiB
Markdown
501 lines
12 KiB
Markdown
# Guide de Tests - sdk_common
|
||
|
||
Ce guide documente l'ensemble des tests disponibles pour l'infrastructure sdk_common, leur organisation et leur utilisation.
|
||
|
||
## Vue d'Ensemble
|
||
|
||
L'infrastructure sdk_common dispose d'une suite de tests complète organisée en plusieurs catégories :
|
||
|
||
- **Tests Unitaires** : Tests individuels des composants
|
||
- **Tests d'Intégration** : Tests d'interaction entre services
|
||
- **Tests de Connectivité** : Tests réseau et WebSocket
|
||
- **Tests Externes** : Tests avec des nœuds externes
|
||
- **Tests de Performance** : Tests de charge et performance (à venir)
|
||
|
||
## Structure des Tests
|
||
|
||
```
|
||
tests/
|
||
├── README.md # Documentation principale des tests
|
||
├── run_all_tests.sh # Exécution de tous les tests
|
||
├── run_unit_tests.sh # Tests unitaires uniquement
|
||
├── run_integration_tests.sh # Tests d'intégration uniquement
|
||
├── run_connectivity_tests.sh # Tests de connectivité uniquement
|
||
├── run_external_tests.sh # Tests externes uniquement
|
||
├── cleanup.sh # Nettoyage des logs et rapports
|
||
├── logs/ # Logs des tests
|
||
├── reports/ # Rapports de tests
|
||
├── unit/ # Tests unitaires
|
||
│ ├── test_healthcheck.sh
|
||
│ ├── test_docker.sh
|
||
│ ├── test_simple.sh
|
||
│ └── test_final.sh
|
||
├── integration/ # Tests d'intégration
|
||
│ ├── test_3_relays.sh
|
||
│ ├── test_final_sync.sh
|
||
│ ├── test_sync_logs.sh
|
||
│ └── test_messages.sh
|
||
├── connectivity/ # Tests de connectivité
|
||
│ ├── test_connectivity.sh
|
||
│ └── test_websocket_messages.py
|
||
├── external/ # Tests externes
|
||
│ ├── test_dev3_simple.py
|
||
│ ├── test_dev3_connectivity.py
|
||
│ └── test_integration_dev3.sh
|
||
└── performance/ # Tests de performance (à créer)
|
||
```
|
||
|
||
## Exécution des Tests
|
||
|
||
### Test Complet
|
||
|
||
Pour exécuter tous les tests :
|
||
|
||
```bash
|
||
cd tests/
|
||
./run_all_tests.sh
|
||
```
|
||
|
||
Options disponibles :
|
||
- `--verbose` : Mode verbose avec affichage détaillé
|
||
- `--debug` : Mode debug complet
|
||
- `--skip-unit` : Ignorer les tests unitaires
|
||
- `--skip-integration` : Ignorer les tests d'intégration
|
||
- `--skip-connectivity` : Ignorer les tests de connectivité
|
||
- `--skip-external` : Ignorer les tests externes
|
||
|
||
### Tests par Catégorie
|
||
|
||
#### Tests Unitaires
|
||
```bash
|
||
./tests/run_unit_tests.sh [--verbose] [--debug]
|
||
```
|
||
|
||
**Tests inclus :**
|
||
- `test_healthcheck.sh` : Test du healthcheck de sdk_relay
|
||
- `test_docker.sh` : Test de la configuration Docker
|
||
- `test_simple.sh` : Test simple de sdk_relay
|
||
- `test_final.sh` : Test final de sdk_relay
|
||
|
||
**Prérequis :**
|
||
- Docker installé et fonctionnel
|
||
- Image sdk_relay disponible
|
||
|
||
#### Tests d'Intégration
|
||
```bash
|
||
./tests/run_integration_tests.sh [--verbose] [--debug]
|
||
```
|
||
|
||
**Tests inclus :**
|
||
- `test_3_relays.sh` : Test de 3 instances sdk_relay
|
||
- `test_final_sync.sh` : Test complet de synchronisation
|
||
- `test_sync_logs.sh` : Test des logs de synchronisation
|
||
- `test_messages.sh` : Test des messages entre relais
|
||
|
||
**Prérequis :**
|
||
- Tous les services Docker démarrés (bitcoin, blindbit, sdk_relay)
|
||
- Infrastructure complète opérationnelle
|
||
|
||
#### Tests de Connectivité
|
||
```bash
|
||
./tests/run_connectivity_tests.sh [--verbose] [--debug]
|
||
```
|
||
|
||
**Tests inclus :**
|
||
- `test_connectivity.sh` : Test de connectivité des services
|
||
- `test_websocket_messages.py` : Test des messages WebSocket
|
||
|
||
**Prérequis :**
|
||
- Services Docker démarrés
|
||
- Python3 avec websockets installé
|
||
|
||
#### Tests Externes
|
||
```bash
|
||
./tests/run_external_tests.sh [--verbose] [--debug]
|
||
```
|
||
|
||
**Tests inclus :**
|
||
- `test_dev3_simple.py` : Test simple de dev3.4nkweb.com
|
||
- `test_dev3_connectivity.py` : Test de connectivité dev3
|
||
- `test_integration_dev3.sh` : Test d'intégration dev3
|
||
|
||
**Prérequis :**
|
||
- Connectivité internet
|
||
- Python3 avec websockets installé
|
||
- Services locaux optionnels
|
||
|
||
### Test Individuel
|
||
|
||
Pour exécuter un test spécifique :
|
||
|
||
```bash
|
||
# Test shell
|
||
./tests/integration/test_3_relays.sh
|
||
|
||
# Test Python
|
||
python3 tests/external/test_dev3_simple.py
|
||
```
|
||
|
||
## Interprétation des Résultats
|
||
|
||
### Codes de Sortie
|
||
|
||
- `0` : Test réussi
|
||
- `1` : Test échoué
|
||
- `2` : Test ignoré (prérequis non satisfaits)
|
||
|
||
### Logs
|
||
|
||
Les logs détaillés sont écrits dans `tests/logs/` avec le format :
|
||
```
|
||
YYYY-MM-DD_HH-MM-SS_category_tests.log
|
||
```
|
||
|
||
Exemples :
|
||
- `2024-12-19_14-30-25_unit_tests.log`
|
||
- `2024-12-19_14-35-12_integration_tests.log`
|
||
|
||
### Rapports
|
||
|
||
Les rapports JSON sont générés dans `tests/reports/` avec le format :
|
||
```
|
||
test_report_YYYY-MM-DD_HH-MM-SS.json
|
||
```
|
||
|
||
Structure du rapport :
|
||
```json
|
||
{
|
||
"timestamp": "2024-12-19_14-30-25",
|
||
"summary": {
|
||
"total_tests": 10,
|
||
"successful_tests": 8,
|
||
"failed_tests": 2,
|
||
"success_rate": 80.0
|
||
},
|
||
"log_file": "tests/logs/test_run_2024-12-19_14-30-25.log",
|
||
"options": {
|
||
"verbose": false,
|
||
"debug": false,
|
||
"skip_unit": false,
|
||
"skip_integration": false,
|
||
"skip_connectivity": false,
|
||
"skip_external": false,
|
||
"skip_performance": true
|
||
}
|
||
}
|
||
```
|
||
|
||
## Détail des Tests
|
||
|
||
### Tests Unitaires
|
||
|
||
#### test_healthcheck.sh
|
||
- **Objectif** : Vérifier le fonctionnement du healthcheck de sdk_relay
|
||
- **Méthode** : Test du script healthcheck.sh dans un conteneur
|
||
- **Critères de succès** : Healthcheck retourne un code de sortie approprié
|
||
|
||
#### test_docker.sh
|
||
- **Objectif** : Vérifier la configuration Docker de sdk_relay
|
||
- **Méthode** : Test de la construction et du démarrage du conteneur
|
||
- **Critères de succès** : Conteneur démarre correctement
|
||
|
||
#### test_simple.sh
|
||
- **Objectif** : Test simple de sdk_relay
|
||
- **Méthode** : Démarrage et test basique de sdk_relay
|
||
- **Critères de succès** : Service répond aux requêtes de base
|
||
|
||
#### test_final.sh
|
||
- **Objectif** : Test final complet de sdk_relay
|
||
- **Méthode** : Test complet avec toutes les fonctionnalités
|
||
- **Critères de succès** : Toutes les fonctionnalités opérationnelles
|
||
|
||
### Tests d'Intégration
|
||
|
||
#### test_3_relays.sh
|
||
- **Objectif** : Tester 3 instances sdk_relay en parallèle
|
||
- **Méthode** : Démarrage de 3 relais et vérification de leur interaction
|
||
- **Critères de succès** : Les 3 relais communiquent correctement
|
||
|
||
#### test_final_sync.sh
|
||
- **Objectif** : Test complet de la synchronisation
|
||
- **Méthode** : Test de tous les types de synchronisation
|
||
- **Critères de succès** : Synchronisation fonctionnelle entre tous les relais
|
||
|
||
#### test_sync_logs.sh
|
||
- **Objectif** : Vérifier les logs de synchronisation
|
||
- **Méthode** : Analyse des logs de synchronisation
|
||
- **Critères de succès** : Logs cohérents et sans erreurs
|
||
|
||
#### test_messages.sh
|
||
- **Objectif** : Tester l'échange de messages entre relais
|
||
- **Méthode** : Envoi et réception de messages de test
|
||
- **Critères de succès** : Messages correctement transmis
|
||
|
||
### Tests de Connectivité
|
||
|
||
#### test_connectivity.sh
|
||
- **Objectif** : Vérifier la connectivité entre services
|
||
- **Méthode** : Test de connectivité réseau entre conteneurs
|
||
- **Critères de succès** : Tous les services accessibles
|
||
|
||
#### test_websocket_messages.py
|
||
- **Objectif** : Tester les messages WebSocket
|
||
- **Méthode** : Connexion WebSocket et échange de messages
|
||
- **Critères de succès** : Communication WebSocket fonctionnelle
|
||
|
||
### Tests Externes
|
||
|
||
#### test_dev3_simple.py
|
||
- **Objectif** : Test simple de dev3.4nkweb.com
|
||
- **Méthode** : Connexion WebSocket simple
|
||
- **Critères de succès** : Connexion établie
|
||
|
||
#### test_dev3_connectivity.py
|
||
- **Objectif** : Test complet de connectivité dev3
|
||
- **Méthode** : Tests de protocole et handshake
|
||
- **Critères de succès** : Tous les protocoles supportés
|
||
|
||
#### test_integration_dev3.sh
|
||
- **Objectif** : Test d'intégration avec dev3
|
||
- **Méthode** : Test complet d'intégration
|
||
- **Critères de succès** : Intégration fonctionnelle
|
||
|
||
## Dépannage
|
||
|
||
### Problèmes Courants
|
||
|
||
#### Services non démarrés
|
||
**Symptôme** : Erreur "Service non trouvé"
|
||
**Solution** : Démarrer les services avec `./restart_4nk_node.sh`
|
||
|
||
#### Connectivité réseau
|
||
**Symptôme** : Timeout ou erreur de connexion
|
||
**Solution** : Vérifier les ports et pare-feu
|
||
|
||
#### Certificats SSL
|
||
**Symptôme** : Erreur SSL dans les tests externes
|
||
**Solution** : Vérifier les certificats et la configuration SSL
|
||
|
||
#### Dépendances Python
|
||
**Symptôme** : ModuleNotFoundError
|
||
**Solution** : Installer les dépendances avec `pip install websockets`
|
||
|
||
### Debug
|
||
|
||
#### Mode Verbose
|
||
```bash
|
||
./tests/run_all_tests.sh --verbose
|
||
```
|
||
|
||
#### Mode Debug
|
||
```bash
|
||
./tests/run_all_tests.sh --debug
|
||
```
|
||
|
||
#### Test spécifique avec debug
|
||
```bash
|
||
./tests/integration/test_3_relays.sh --debug
|
||
```
|
||
|
||
## Maintenance
|
||
|
||
### Nettoyage Automatique
|
||
|
||
#### Nettoyer les logs anciens
|
||
```bash
|
||
./tests/cleanup.sh --days 7
|
||
```
|
||
|
||
#### Nettoyer les rapports anciens
|
||
```bash
|
||
./tests/cleanup.sh --reports --days 30
|
||
```
|
||
|
||
#### Nettoyage complet
|
||
```bash
|
||
./tests/cleanup.sh --all --days 7
|
||
```
|
||
|
||
#### Simulation de nettoyage
|
||
```bash
|
||
./tests/cleanup.sh --all --dry-run
|
||
```
|
||
|
||
### Surveillance
|
||
|
||
#### Vérifier l'espace disque
|
||
```bash
|
||
du -sh tests/logs tests/reports
|
||
```
|
||
|
||
#### Lister les fichiers récents
|
||
```bash
|
||
find tests/logs -name "*.log" -mtime -1
|
||
```
|
||
|
||
#### Analyser les échecs
|
||
```bash
|
||
grep -r "ERROR\|FAILED" tests/logs/
|
||
```
|
||
|
||
## Ajout de Nouveaux Tests
|
||
|
||
### Structure Recommandée
|
||
|
||
Pour ajouter un nouveau test :
|
||
|
||
1. **Créer le fichier de test** dans le répertoire approprié
|
||
2. **Ajouter le test** au script d'exécution correspondant
|
||
3. **Documenter le test** dans ce guide
|
||
4. **Tester le test** pour s'assurer qu'il fonctionne
|
||
|
||
### Template de Test Shell
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
# Test: Description du test
|
||
# Auteur: Nom
|
||
# Date: YYYY-MM-DD
|
||
|
||
set -e
|
||
|
||
# Configuration
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
LOG_FILE="tests/logs/$(date +%Y-%m-%d_%H-%M-%S)_test_name.log"
|
||
|
||
# Fonctions
|
||
log() {
|
||
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] $1" | tee -a "$LOG_FILE"
|
||
}
|
||
|
||
# Test principal
|
||
main() {
|
||
log "Début du test"
|
||
|
||
# Vérifications préliminaires
|
||
check_prerequisites
|
||
|
||
# Exécution du test
|
||
run_test
|
||
|
||
# Vérification des résultats
|
||
verify_results
|
||
|
||
log "Test terminé avec succès"
|
||
}
|
||
|
||
# Exécution
|
||
main "$@"
|
||
```
|
||
|
||
### Template de Test Python
|
||
|
||
```python
|
||
#!/usr/bin/env python3
|
||
"""
|
||
Test: Description du test
|
||
Auteur: Nom
|
||
Date: YYYY-MM-DD
|
||
"""
|
||
|
||
import asyncio
|
||
import json
|
||
import logging
|
||
from datetime import datetime
|
||
|
||
# Configuration du logging
|
||
logging.basicConfig(level=logging.INFO)
|
||
logger = logging.getLogger(__name__)
|
||
|
||
async def test_function():
|
||
"""Fonction de test principale"""
|
||
logger.info("Début du test")
|
||
|
||
try:
|
||
# Logique de test
|
||
result = await run_test()
|
||
|
||
# Vérification
|
||
if result:
|
||
logger.info("Test réussi")
|
||
return True
|
||
else:
|
||
logger.error("Test échoué")
|
||
return False
|
||
|
||
except Exception as e:
|
||
logger.error(f"Erreur lors du test: {e}")
|
||
return False
|
||
|
||
async def main():
|
||
"""Fonction principale"""
|
||
success = await test_function()
|
||
exit(0 if success else 1)
|
||
|
||
if __name__ == "__main__":
|
||
asyncio.run(main())
|
||
```
|
||
|
||
## Intégration Continue
|
||
|
||
### Automatisation
|
||
|
||
Les tests peuvent être intégrés dans un pipeline CI/CD :
|
||
|
||
```yaml
|
||
# Exemple GitHub Actions
|
||
- name: Run Tests
|
||
run: |
|
||
cd tests/
|
||
./run_all_tests.sh --verbose
|
||
```
|
||
|
||
### Surveillance Continue
|
||
|
||
Pour une surveillance continue :
|
||
|
||
```bash
|
||
# Cron job pour tests quotidiens
|
||
0 2 * * * cd /path/to/4NK_node/tests && ./run_all_tests.sh >> /var/log/4nk_tests.log 2>&1
|
||
```
|
||
|
||
## Support
|
||
|
||
Pour obtenir de l'aide :
|
||
|
||
1. **Consulter les logs** : `tests/logs/`
|
||
2. **Vérifier la documentation** : `tests/README.md`
|
||
3. **Utiliser le mode debug** : `--debug`
|
||
4. **Consulter les rapports** : `tests/reports/`
|
||
|
||
## Évolution
|
||
|
||
### Tests de Performance (À venir)
|
||
|
||
- Tests de charge
|
||
- Tests de latence
|
||
- Tests de débit
|
||
- Tests de stress
|
||
|
||
### Tests de Sécurité (À venir)
|
||
|
||
- Tests de vulnérabilités
|
||
- Tests de pénétration
|
||
- Tests de configuration
|
||
|
||
### Tests d'Interface (À venir)
|
||
|
||
- Tests d'API REST
|
||
- Tests d'interface WebSocket
|
||
- Tests de compatibilité
|
||
|
||
---
|
||
|
||
## Tests Rust (sdk_common)
|
||
|
||
- Emplacement: `tests/*.rs` (tests d’intégration Rust)
|
||
- Exécution: `cargo test --all`
|
||
- Journaux: `tests/logs/` (si redirection souhaitée)
|
||
- Objectifs actuels: tests de fumée, mapping d’erreurs, conversions d’énumérations publiques
|
||
|