#!/bin/bash # ============================================================================= # Tests pour le Script de Gestion des Services 4NK Node # ============================================================================= set -e # ============================================================================= # CONFIGURATION # ============================================================================= # 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 # Configuration des tests SCRIPT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../scripts" && pwd)/manage_services.sh" TEST_DIR="/tmp/.4nk/test_manage_services_$(date +%s)" PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" # ============================================================================= # FONCTIONS UTILITAIRES # ============================================================================= print_header() { echo -e "${BLUE}=============================================================================${NC}" echo -e "${BLUE}$1${NC}" echo -e "${BLUE}=============================================================================${NC}" } print_test() { echo -e "${YELLOW}đŸ§Ș Test: $1${NC}" } print_success() { echo -e "${GREEN}✅ $1${NC}" } print_error() { echo -e "${RED}❌ $1${NC}" } print_info() { echo -e "${BLUE}â„č $1${NC}" } # ============================================================================= # FONCTIONS DE TEST # ============================================================================= test_script_exists() { print_test "VĂ©rification de l'existence du script" if [ -f "$SCRIPT_PATH" ]; then print_success "Le script existe" return 0 else print_error "Le script n'existe pas: $SCRIPT_PATH" return 1 fi } test_script_executable() { print_test "VĂ©rification des permissions d'exĂ©cution" if [ -x "$SCRIPT_PATH" ]; then print_success "Le script est exĂ©cutable" return 0 else print_error "Le script n'est pas exĂ©cutable" return 1 fi } test_help_command() { print_test "Test de la commande help" if output=$(bash "$SCRIPT_PATH" help 2>&1); then if echo "$output" | grep -q "Usage:"; then print_success "Commande help fonctionne" return 0 else print_error "Commande help ne retourne pas l'usage attendu" return 1 fi else print_error "Commande help Ă©choue" return 1 fi } test_invalid_command() { print_test "Test d'une commande invalide" if output=$(bash "$SCRIPT_PATH" invalid_command 2>&1); then print_error "Commande invalide devrait Ă©chouer" return 1 else if echo "$output" | grep -q "Commande inconnue"; then print_success "Commande invalide correctement rejetĂ©e" return 0 else print_error "Message d'erreur inattendu pour commande invalide" return 1 fi fi } test_docker_requirements() { print_test "VĂ©rification des prĂ©requis Docker" # Test Docker if ! command -v docker &> /dev/null; then print_error "Docker n'est pas installĂ©" return 1 fi # Test Docker daemon if ! docker info &> /dev/null; then print_error "Docker daemon n'est pas en cours d'exĂ©cution" return 1 fi # Test Docker Compose if ! docker compose version &> /dev/null; then print_error "Docker Compose n'est pas disponible" return 1 fi print_success "Tous les prĂ©requis Docker sont satisfaits" return 0 } test_compose_file_exists() { print_test "VĂ©rification de l'existence du fichier docker-compose.yml" local compose_file="$PROJECT_DIR/docker-compose.yml" if [ -f "$compose_file" ]; then print_success "Fichier docker-compose.yml trouvĂ©" return 0 else print_error "Fichier docker-compose.yml manquant: $compose_file" return 1 fi } test_status_command() { print_test "Test de la commande status" if output=$(bash "$SCRIPT_PATH" status 2>&1); then if echo "$output" | grep -q "STATUT DES SERVICES"; then print_success "Commande status fonctionne" return 0 else print_error "Commande status ne retourne pas le format attendu" return 1 fi else print_error "Commande status Ă©choue" return 1 fi } test_stop_command() { print_test "Test de la commande stop" # VĂ©rifier d'abord s'il y a des services en cours if ! docker compose -f "$PROJECT_DIR/docker-compose.yml" ps | grep -q "Up"; then print_info "Aucun service en cours, test de stop ignorĂ©" return 0 fi if output=$(bash "$SCRIPT_PATH" stop 2>&1); then if echo "$output" | grep -q "Services Docker Compose arrĂȘtĂ©s"; then print_success "Commande stop fonctionne" return 0 else print_error "Commande stop ne retourne pas le message attendu" return 1 fi else print_error "Commande stop Ă©choue" return 1 fi } test_clean_command() { print_test "Test de la commande clean" if output=$(bash "$SCRIPT_PATH" clean 2>&1); then if echo "$output" | grep -q "Nettoyage des conteneurs"; then print_success "Commande clean fonctionne" return 0 else print_error "Commande clean ne retourne pas le message attendu" return 1 fi else print_error "Commande clean Ă©choue" return 1 fi } # ============================================================================= # FONCTION PRINCIPALE # ============================================================================= run_tests() { print_header "TESTS DU SCRIPT DE GESTION DES SERVICES 4NK NODE" print_info "Script: $SCRIPT_PATH" print_info "Projet: $PROJECT_DIR" print_info "Date: $(date)" local total_tests=0 local passed_tests=0 local failed_tests=0 # CrĂ©er le rĂ©pertoire de test mkdir -p "$TEST_DIR" # Tests de base ((total_tests++)) if test_script_exists; then ((passed_tests++)) else ((failed_tests++)) fi ((total_tests++)) if test_script_executable; then ((passed_tests++)) else ((failed_tests++)) fi ((total_tests++)) if test_help_command; then ((passed_tests++)) else ((failed_tests++)) fi ((total_tests++)) if test_invalid_command; then ((passed_tests++)) else ((failed_tests++)) fi # Tests des prĂ©requis ((total_tests++)) if test_docker_requirements; then ((passed_tests++)) else ((failed_tests++)) fi ((total_tests++)) if test_compose_file_exists; then ((passed_tests++)) else ((failed_tests++)) fi # Tests des commandes (si Docker est disponible) if command -v docker &> /dev/null && docker info &> /dev/null; then ((total_tests++)) if test_status_command; then ((passed_tests++)) else ((failed_tests++)) fi ((total_tests++)) if test_stop_command; then ((passed_tests++)) else ((failed_tests++)) fi ((total_tests++)) if test_clean_command; then ((passed_tests++)) else ((failed_tests++)) fi else print_info "Tests des commandes Docker ignorĂ©s (Docker non disponible)" fi # RĂ©sumĂ© print_header "RÉSUMÉ DES TESTS" echo -e "${GREEN}Tests rĂ©ussis: $passed_tests${NC}" echo -e "${RED}Tests Ă©chouĂ©s: $failed_tests${NC}" echo -e "${BLUE}Total: $total_tests${NC}" # Nettoyage rm -rf "$TEST_DIR" if [ $failed_tests -eq 0 ]; then print_success "Tous les tests sont passĂ©s !" exit 0 else print_error "$failed_tests test(s) ont Ă©chouĂ©" exit 1 fi } # ============================================================================= # EXÉCUTION # ============================================================================= if [ "${1:-}" = "help" ] || [ "${1:-}" = "-h" ] || [ "${1:-}" = "--help" ]; then echo "Usage: $0 [help]" echo "" echo "Tests pour le script de gestion des services 4NK Node" echo "" echo "Options:" echo " help, -h, --help Afficher cette aide" exit 0 fi run_tests