#!/bin/bash # Script: Exécution des tests externes # Description: Lance les tests externes de l'infrastructure 4NK Node # Auteur: Assistant IA # Date: 2024-12-19 set -e # Configuration SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" LOG_DIR="$SCRIPT_DIR/logs" TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S) LOG_FILE="$LOG_DIR/external_tests_$TIMESTAMP.log" # Couleurs pour l'affichage RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Variables globales VERBOSE=false DEBUG=false # Fonctions utilitaires log() { local level="$1" shift local message="$*" local timestamp=$(date +%Y-%m-%d\ %H:%M:%S) case "$level" in "INFO") echo -e "${BLUE}[$timestamp] INFO:${NC} $message" | tee -a "$LOG_FILE" ;; "SUCCESS") echo -e "${GREEN}[$timestamp] SUCCESS:${NC} $message" | tee -a "$LOG_FILE" ;; "WARNING") echo -e "${YELLOW}[$timestamp] WARNING:${NC} $message" | tee -a "$LOG_FILE" ;; "ERROR") echo -e "${RED}[$timestamp] ERROR:${NC} $message" | tee -a "$LOG_FILE" ;; "DEBUG") if [ "$DEBUG" = true ]; then echo -e "${YELLOW}[$timestamp] DEBUG:${NC} $message" | tee -a "$LOG_FILE" fi ;; esac } # Afficher l'aide show_help() { cat << EOF Usage: $0 [OPTIONS] Options: -h, --help Afficher cette aide -v, --verbose Mode verbose -d, --debug Mode debug Exemples: $0 # Exécuter les tests externes $0 --verbose # Mode verbose $0 --debug # Mode debug complet EOF } # Vérifier les prérequis check_prerequisites() { log "INFO" "Vérification des prérequis pour les tests externes..." # Vérifier Python if ! command -v python3 &> /dev/null; then log "ERROR" "Python3 n'est pas installé" exit 1 fi # Vérifier les répertoires mkdir -p "$LOG_DIR" # Vérifier la connectivité internet if ! ping -c 1 8.8.8.8 &> /dev/null; then log "WARNING" "Pas de connectivité internet, les tests externes peuvent échouer" fi # Vérifier que les services locaux sont démarrés (optionnel pour les tests externes) if ! docker ps | grep -q "sdk_relay"; then log "WARNING" "sdk_relay local n'est pas démarré, certains tests peuvent échouer" fi log "SUCCESS" "Prérequis vérifiés" } # Exécuter les tests externes run_external_tests() { log "INFO" "Début des tests externes..." cd "$SCRIPT_DIR/external" local external_results=() local total_tests=0 local successful_tests=0 local failed_tests=0 # Test simple dev3 if [ -f "test_dev3_simple.py" ]; then total_tests=$((total_tests + 1)) log "INFO" "Exécution de test_dev3_simple.py" if [ "$VERBOSE" = true ]; then if python3 test_dev3_simple.py 2>&1 | tee -a "$LOG_FILE"; then external_results+=("test_dev3_simple.py:SUCCESS") successful_tests=$((successful_tests + 1)) log "SUCCESS" "test_dev3_simple.py terminé avec succès" else external_results+=("test_dev3_simple.py:FAILED") failed_tests=$((failed_tests + 1)) log "ERROR" "test_dev3_simple.py a échoué" fi else if python3 test_dev3_simple.py >> "$LOG_FILE" 2>&1; then external_results+=("test_dev3_simple.py:SUCCESS") successful_tests=$((successful_tests + 1)) log "SUCCESS" "test_dev3_simple.py terminé avec succès" else external_results+=("test_dev3_simple.py:FAILED") failed_tests=$((failed_tests + 1)) log "ERROR" "test_dev3_simple.py a échoué" fi fi else log "WARNING" "Test test_dev3_simple.py non trouvé" fi # Test de connectivité dev3 if [ -f "test_dev3_connectivity.py" ]; then total_tests=$((total_tests + 1)) log "INFO" "Exécution de test_dev3_connectivity.py" if [ "$VERBOSE" = true ]; then if python3 test_dev3_connectivity.py 2>&1 | tee -a "$LOG_FILE"; then external_results+=("test_dev3_connectivity.py:SUCCESS") successful_tests=$((successful_tests + 1)) log "SUCCESS" "test_dev3_connectivity.py terminé avec succès" else external_results+=("test_dev3_connectivity.py:FAILED") failed_tests=$((failed_tests + 1)) log "ERROR" "test_dev3_connectivity.py a échoué" fi else if python3 test_dev3_connectivity.py >> "$LOG_FILE" 2>&1; then external_results+=("test_dev3_connectivity.py:SUCCESS") successful_tests=$((successful_tests + 1)) log "SUCCESS" "test_dev3_connectivity.py terminé avec succès" else external_results+=("test_dev3_connectivity.py:FAILED") failed_tests=$((failed_tests + 1)) log "ERROR" "test_dev3_connectivity.py a échoué" fi fi else log "WARNING" "Test test_dev3_connectivity.py non trouvé" fi # Test d'intégration dev3 if [ -f "test_integration_dev3.sh" ]; then total_tests=$((total_tests + 1)) log "INFO" "Exécution de test_integration_dev3.sh" if [ "$VERBOSE" = true ]; then if ./test_integration_dev3.sh 2>&1 | tee -a "$LOG_FILE"; then external_results+=("test_integration_dev3.sh:SUCCESS") successful_tests=$((successful_tests + 1)) log "SUCCESS" "test_integration_dev3.sh terminé avec succès" else external_results+=("test_integration_dev3.sh:FAILED") failed_tests=$((failed_tests + 1)) log "ERROR" "test_integration_dev3.sh a échoué" fi else if ./test_integration_dev3.sh >> "$LOG_FILE" 2>&1; then external_results+=("test_integration_dev3.sh:SUCCESS") successful_tests=$((successful_tests + 1)) log "SUCCESS" "test_integration_dev3.sh terminé avec succès" else external_results+=("test_integration_dev3.sh:FAILED") failed_tests=$((failed_tests + 1)) log "ERROR" "test_integration_dev3.sh a échoué" fi fi else log "WARNING" "Test test_integration_dev3.sh non trouvé" fi # Afficher le résumé des tests externes log "INFO" "=== Résumé des tests externes ===" log "INFO" "Total: $total_tests, Succès: $successful_tests, Échecs: $failed_tests" for result in "${external_results[@]}"; do if [[ "$result" == *":SUCCESS" ]]; then log "SUCCESS" " ✅ ${result%:SUCCESS}" else log "ERROR" " ❌ ${result%:FAILED}" fi done # Retourner le code de sortie approprié if [ $failed_tests -gt 0 ]; then log "ERROR" "Tests externes terminés avec $failed_tests échec(s)" return 1 else log "SUCCESS" "Tous les tests externes ont réussi" return 0 fi } # Fonction principale main() { log "INFO" "=== Début des tests externes 4NK Node ===" log "INFO" "Timestamp: $TIMESTAMP" log "INFO" "Répertoire de travail: $PROJECT_ROOT" # Vérifier les prérequis check_prerequisites # Exécuter les tests externes run_external_tests log "SUCCESS" "=== Tests externes terminés ===" log "INFO" "Logs: $LOG_FILE" } # Traitement des arguments while [[ $# -gt 0 ]]; do case $1 in -h|--help) show_help exit 0 ;; -v|--verbose) VERBOSE=true shift ;; -d|--debug) DEBUG=true VERBOSE=true shift ;; *) log "ERROR" "Option inconnue: $1" show_help exit 1 ;; esac done # Exécution principale main "$@"