#!/bin/bash # Script: Exécution des tests unitaires # Description: Lance les tests unitaires 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/unit_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 unitaires $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 unitaires..." # Vérifier Docker if ! command -v docker &> /dev/null; then log "ERROR" "Docker n'est pas installé" exit 1 fi # Vérifier les répertoires mkdir -p "$LOG_DIR" # Vérifier que l'image sdk_relay existe if ! docker images | grep -q "lecoffre_node_sdk_relay"; then log "WARNING" "Image sdk_relay non trouvée, les tests peuvent échouer" fi log "SUCCESS" "Prérequis vérifiés" } # Exécuter les tests unitaires run_unit_tests() { log "INFO" "Début des tests unitaires..." cd "$SCRIPT_DIR/unit" local unit_tests=( "test_healthcheck.sh" "test_docker.sh" "test_simple.sh" "test_final.sh" ) local unit_results=() local total_tests=0 local successful_tests=0 local failed_tests=0 for test in "${unit_tests[@]}"; do if [ -f "$test" ]; then total_tests=$((total_tests + 1)) log "INFO" "Exécution de $test" if [ "$VERBOSE" = true ]; then if ./"$test" 2>&1 | tee -a "$LOG_FILE"; then unit_results+=("$test:SUCCESS") successful_tests=$((successful_tests + 1)) log "SUCCESS" "$test terminé avec succès" else unit_results+=("$test:FAILED") failed_tests=$((failed_tests + 1)) log "ERROR" "$test a échoué" fi else if ./"$test" >> "$LOG_FILE" 2>&1; then unit_results+=("$test:SUCCESS") successful_tests=$((successful_tests + 1)) log "SUCCESS" "$test terminé avec succès" else unit_results+=("$test:FAILED") failed_tests=$((failed_tests + 1)) log "ERROR" "$test a échoué" fi fi else log "WARNING" "Test $test non trouvé" fi done # Afficher le résumé des tests unitaires log "INFO" "=== Résumé des tests unitaires ===" log "INFO" "Total: $total_tests, Succès: $successful_tests, Échecs: $failed_tests" for result in "${unit_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 unitaires terminés avec $failed_tests échec(s)" return 1 else log "SUCCESS" "Tous les tests unitaires ont réussi" return 0 fi } # Fonction principale main() { log "INFO" "=== Début des tests unitaires 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 unitaires run_unit_tests log "SUCCESS" "=== Tests unitaires 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 "$@"