12 KiB
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 :
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
./tests/run_unit_tests.sh [--verbose] [--debug]
Tests inclus :
test_healthcheck.sh
: Test du healthcheck de sdk_relaytest_docker.sh
: Test de la configuration Dockertest_simple.sh
: Test simple de sdk_relaytest_final.sh
: Test final de sdk_relay
Prérequis :
- Docker installé et fonctionnel
- Image sdk_relay disponible
Tests d'Intégration
./tests/run_integration_tests.sh [--verbose] [--debug]
Tests inclus :
test_3_relays.sh
: Test de 3 instances sdk_relaytest_final_sync.sh
: Test complet de synchronisationtest_sync_logs.sh
: Test des logs de synchronisationtest_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é
./tests/run_connectivity_tests.sh [--verbose] [--debug]
Tests inclus :
test_connectivity.sh
: Test de connectivité des servicestest_websocket_messages.py
: Test des messages WebSocket
Prérequis :
- Services Docker démarrés
- Python3 avec websockets installé
Tests Externes
./tests/run_external_tests.sh [--verbose] [--debug]
Tests inclus :
test_dev3_simple.py
: Test simple de dev3.4nkweb.comtest_dev3_connectivity.py
: Test de connectivité dev3test_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 :
# 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éussi1
: 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 :
{
"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
./tests/run_all_tests.sh --verbose
Mode Debug
./tests/run_all_tests.sh --debug
Test spécifique avec debug
./tests/integration/test_3_relays.sh --debug
Maintenance
Nettoyage Automatique
Nettoyer les logs anciens
./tests/cleanup.sh --days 7
Nettoyer les rapports anciens
./tests/cleanup.sh --reports --days 30
Nettoyage complet
./tests/cleanup.sh --all --days 7
Simulation de nettoyage
./tests/cleanup.sh --all --dry-run
Surveillance
Vérifier l'espace disque
du -sh tests/logs tests/reports
Lister les fichiers récents
find tests/logs -name "*.log" -mtime -1
Analyser les échecs
grep -r "ERROR\|FAILED" tests/logs/
Ajout de Nouveaux Tests
Structure Recommandée
Pour ajouter un nouveau test :
- Créer le fichier de test dans le répertoire approprié
- Ajouter le test au script d'exécution correspondant
- Documenter le test dans ce guide
- Tester le test pour s'assurer qu'il fonctionne
Template de Test Shell
#!/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
#!/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 :
# Exemple GitHub Actions
- name: Run Tests
run: |
cd tests/
./run_all_tests.sh --verbose
Surveillance Continue
Pour une surveillance continue :
# 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 :
- Consulter les logs :
tests/logs/
- Vérifier la documentation :
tests/README.md
- Utiliser le mode debug :
--debug
- 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