4NK_vault/storage/dev/test_generate.sh
4NK Dev 4834c40503 ci: docker_tag=dev-test
Séparation des scripts de génération et amélioration de l'architecture

- Séparé generate_grafana_dashboards.sh en 3 scripts distincts :
  * generate_grafana_dashboards.sh (dashboards uniquement)
  * generate_promtail_config.sh (configuration Promtail)
  * generate_logrotate_configs.sh (configurations Logrotate)

- Supprimé generate_docker_compose.sh et generate_docker_variables.sh
- Centralisé la génération des variables dans generate_variables.sh
- Mis à jour generate.sh pour une architecture en 5 étapes
- Corrigé les chemins de sortie et les références de variables
- Ajouté la gestion d'erreurs pour les fichiers .env problématiques
- Généré toutes les configurations Nginx, Grafana, Promtail et Logrotate
- Amélioré la modularité et la maintenabilité du code
2025-10-03 17:13:19 +00:00

208 lines
6.3 KiB
Bash
Executable File

#!/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