#!/bin/bash # Script de test pour valider le fonctionnement du script generate.sh # Teste les différentes options et fonctionnalités # Couleurs RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Compteurs TESTS_PASSED=0 TESTS_FAILED=0 TOTAL_TESTS=0 # Fonction pour afficher les résultats print_result() { local test_name="$1" local status="$2" local message="$3" TOTAL_TESTS=$((TOTAL_TESTS + 1)) if [ "$status" = "PASS" ]; then echo -e "${GREEN}✅ PASS${NC}: $test_name - $message" TESTS_PASSED=$((TESTS_PASSED + 1)) else echo -e "${RED}❌ FAIL${NC}: $test_name - $message" TESTS_FAILED=$((TESTS_FAILED + 1)) fi } echo -e "${BLUE}🧪 TEST DU SCRIPT GÉNÉRATEUR PRINCIPAL${NC}" echo -e "${BLUE}======================================${NC}" # Test 1: Vérifier l'existence du script if [ -f "generate.sh" ]; then print_result "Script existe" "PASS" "generate.sh présent" else print_result "Script existe" "FAIL" "generate.sh manquant" exit 1 fi # Test 2: Vérifier que le script est exécutable if [ -x "generate.sh" ]; then print_result "Script exécutable" "PASS" "generate.sh exécutable" else print_result "Script exécutable" "FAIL" "generate.sh non exécutable" fi # Test 3: Test de l'aide echo -e "\n${YELLOW}🔍 Test de l'aide...${NC}" if ./generate.sh --help >/dev/null 2>&1; then print_result "Aide fonctionne" "PASS" "Option --help fonctionne" else print_result "Aide fonctionne" "FAIL" "Option --help échoue" fi # Test 4: Vérifier les scripts requis REQUIRED_SCRIPTS=( "generate_variables.sh" "generate_grafana_dashboards.sh" "generate_nginx_configs.sh" ) for script in "${REQUIRED_SCRIPTS[@]}"; do if [ -f "$script" ]; then print_result "Script requis" "PASS" "$script présent" else print_result "Script requis" "FAIL" "$script manquant" fi done # Test 5: Test avec variables d'environnement minimales echo -e "\n${YELLOW}🔍 Test avec variables minimales...${NC}" # Exporter des variables minimales export HOST="test.example.com" export SERVICES=(TEST_SERVICE) export DOMAIN="test.example.com" export CERT_PATH="/tmp/certs" export NGINX_LOGS_DIR="/tmp/logs" export NGINX_CONFS_DIR="/tmp/conf" export DOCKER_GLOBAL_NAME="test" # Test d'exécution (sans --verbose pour éviter trop de sortie) echo -e "${YELLOW}Exécution du script generate.sh...${NC}" if timeout 30 ./generate.sh >/dev/null 2>&1; then print_result "Exécution script" "PASS" "Script s'exécute sans erreur fatale" else exit_code=$? if [ $exit_code -eq 124 ]; then print_result "Exécution script" "PASS" "Script s'exécute (timeout après 30s)" else print_result "Exécution script" "FAIL" "Script échoue avec code $exit_code" fi fi # Test 6: Vérifier les fichiers générés echo -e "\n${YELLOW}🔍 Vérification des fichiers générés...${NC}" # Vérifier si des fichiers ont été générés GENERATED_FILES=( "_4NK_modules/grafana/dashboards" "_4NK_modules/promtail/promtail.yml" "nginx/upstreams.conf" "nginx/app-internal-ports.conf" "nginx/proxy_headers.conf" ) for file in "${GENERATED_FILES[@]}"; do if [ -e "$file" ]; then print_result "Fichier généré" "PASS" "$file créé" else print_result "Fichier généré" "FAIL" "$file non créé" fi done # Test 7: Test des options echo -e "\n${YELLOW}🔍 Test des options...${NC}" # Test exécution normale (mode verbeux par défaut) if timeout 10 ./generate.sh >/dev/null 2>&1; then print_result "Exécution normale" "PASS" "Script fonctionne en mode verbeux par défaut" else exit_code=$? if [ $exit_code -eq 124 ]; then print_result "Exécution normale" "PASS" "Script fonctionne (timeout)" else print_result "Exécution normale" "FAIL" "Script échoue" fi fi # Test option invalide if ./generate.sh --invalid-option >/dev/null 2>&1; then print_result "Option invalide" "FAIL" "Option invalide acceptée" else print_result "Option invalide" "PASS" "Option invalide rejetée" fi # Test 8: Vérifier la structure des fichiers générés echo -e "\n${YELLOW}🔍 Vérification du contenu des fichiers...${NC}" # Vérifier upstreams.conf if [ -f "nginx/upstreams.conf" ]; then if grep -q "upstream" nginx/upstreams.conf; then print_result "Contenu upstreams" "PASS" "upstreams.conf contient des upstreams" else print_result "Contenu upstreams" "FAIL" "upstreams.conf vide ou invalide" fi if grep -q "log_format app_json" nginx/upstreams.conf; then print_result "Format log JSON" "PASS" "Format de log JSON présent" else print_result "Format log JSON" "FAIL" "Format de log JSON manquant" fi fi # Vérifier proxy_headers.conf if [ -f "nginx/proxy_headers.conf" ]; then if grep -q "proxy_set_header Host" nginx/proxy_headers.conf; then print_result "Headers proxy" "PASS" "Headers de proxy configurés" else print_result "Headers proxy" "FAIL" "Headers de proxy manquants" fi fi # Vérifier les dashboards Grafana if [ -d "_4NK_modules/grafana/dashboards" ]; then dashboard_count=$(find _4NK_modules/grafana/dashboards -name "*.json" | wc -l) if [ $dashboard_count -gt 0 ]; then print_result "Dashboards Grafana" "PASS" "$dashboard_count dashboards générés" else print_result "Dashboards Grafana" "FAIL" "Aucun dashboard généré" fi fi # Test 9: Nettoyage des fichiers de test echo -e "\n${YELLOW}🧹 Nettoyage des fichiers de test...${NC}" # Supprimer les fichiers générés par les tests rm -rf nginx/ 2>/dev/null rm -rf _4NK_modules/ 2>/dev/null rm -rf logrotade/ 2>/dev/null rm -f docker-compose.yml.auto 2>/dev/null rm -f .env.auto 2>/dev/null print_result "Nettoyage" "PASS" "Fichiers de test nettoyés" # Résumé final echo -e "\n${BLUE}📊 RÉSUMÉ DES TESTS${NC}" echo -e "${BLUE}==================${NC}" echo -e "Total des tests: ${BLUE}$TOTAL_TESTS${NC}" echo -e "Tests réussis: ${GREEN}$TESTS_PASSED${NC}" echo -e "Tests échoués: ${RED}$TESTS_FAILED${NC}" if [ $TESTS_FAILED -eq 0 ]; then echo -e "\n${GREEN}🎉 TOUS LES TESTS SONT PASSÉS !${NC}" echo "Le script generate.sh fonctionne correctement." exit 0 else echo -e "\n${RED}⚠️ CERTAINS TESTS ONT ÉCHOUÉ${NC}" echo "Vérifiez les erreurs ci-dessus." exit 1 fi