#!/bin/bash # Integration Test 01: Cross-Lab Functionality # Verifica che tutti i lab lavorino insieme correttamente set -euo pipefail # Colori RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' pass_count=0 fail_count=0 skip_count=0 inc_pass() { ((pass_count++)) || true; } inc_fail() { ((fail_count++)) || true; } inc_skip() { ((skip_count++)) || true; } echo "==========================================" echo "Integration Test 01: Cross-Lab Functionality" echo "==========================================" echo "" # Verifica che tutti i lab esistano echo "[TEST] Verifica esistenza lab directories..." labs=("lab-01-iam" "lab-02-network" "lab-03-compute" "lab-04-storage" "lab-05-database") for lab in "${labs[@]}"; do if [ -d "labs/$lab" ]; then echo -e " ${GREEN}✓${NC} $lab" inc_pass else echo -e " ${RED}✗${NC} $lab NON TROVATO" inc_fail fi done echo "" # Verifica docker-compose.yml per ogni lab echo "[TEST] Verifica docker-compose.yml per ogni lab..." for lab in "${labs[@]}"; do compose_file="labs/$lab/docker-compose.yml" if [ -f "$compose_file" ]; then echo -e " ${GREEN}✓${NC} $lab/docker-compose.yml" inc_pass else echo -e " ${YELLOW}⊘${NC} $lab/docker-compose.yml (opzionale)" inc_skip fi done echo "" # Verifica che i test esistano per ogni lab echo "[TEST] Verifica test scripts per ogni lab..." for lab in "${labs[@]}"; do test_dir="labs/$lab/tests" if [ -d "$test_dir" ]; then test_count=$(ls "$test_dir"/*.sh 2>/dev/null | wc -l) if [ $test_count -gt 0 ]; then echo -e " ${GREEN}✓${NC} $lab/tests ($test_count scripts)" inc_pass else echo -e " ${YELLOW}⊘${NC} $lab/tests (vuoto)" inc_skip fi else echo -e " ${RED}✗${NC} $lab/tests NON TROVATO" inc_fail fi done echo "" # Verifica documentazione per ogni lab echo "[TEST] Verifica documentazione Diátaxis per ogni lab..." for lab in "${labs[@]}"; do doc_types=("tutorial" "how-to-guides" "reference" "explanation") all_docs=true for doc_type in "${doc_types[@]}"; do if [ ! -d "labs/$lab/$doc_type" ]; then all_docs=false break fi done if $all_docs; then echo -e " ${GREEN}✓${NC} $lab (Diátaxis completo)" inc_pass else echo -e " ${YELLOW}⊘${NC} $lab (documentazione parziale)" inc_skip fi done echo "" # Test deploy multi-tier (usando Lab 05 come reference) echo "[TEST] Verifica architettura multi-tier..." if [ -f "labs/lab-05-database/docker-compose.yml" ]; then cd labs/lab-05-database # Verifica servizi multi-tier if grep -q "app:" docker-compose.yml && grep -q "db:" docker-compose.yml; then echo -e " ${GREEN}✓${NC} Architettura multi-tier configurata (app → db)" inc_pass # Verifica app può connettersi al database if docker ps --format '{{{{Names}}}}' | grep -q "lab05-app" && \ docker ps --format '{{{{Names}}}}' | grep -q "lab05-db"; then echo -n " [TEST] Verifica connessione app → database... " if docker exec lab05-app psql -h db -U lab05_user -d lab05_db -c "SELECT 1;" &>/dev/null; then echo -e "${GREEN}PASS${NC}" inc_pass else echo -e "${YELLOW}SKIP${NC} (database non pronto)" inc_skip fi else echo -e " ${YELLOW}⊘${NC} Container non in esecuzione" inc_skip fi else echo -e " ${RED}✗${NC} Architettura multi-tier NON configurata" inc_fail fi cd - > /dev/null else echo -e " ${YELLOW}⊘${NC} Lab 05 non trovato" inc_skip fi echo "" # Verifica integrità volumi (Lab 04 e 05) echo "[TEST] Verifica integrità volumi (Lab 04 + 05)..." volume_count=$(docker volume ls --format '{{{{.Name}}}}' | grep -E "lab04|minio|lab05|db-data" | wc -l) if [ $volume_count -gt 0 ]; then echo -e " ${GREEN}✓${NC} Trovati $volume_count volumi persistenti" inc_pass else echo -e " ${YELLOW}⊘${NC} Nessun volume trovato (lab non avviati)" inc_skip fi echo "" # Verifica reti isolate (Lab 02 e 05) echo "[TEST] Verifica reti private isolate..." private_networks=$(docker network ls --format '{{{{.Name}}}}' | grep -E "private|vpc-private" | wc -l) if [ $private_networks -gt 0 ]; then echo -e " ${GREEN}✓${NC} Trovate $private_networks reti private" inc_pass else echo -e " ${YELLOW}⊘${NC} Nessuna rete privata trovata" inc_skip fi echo "" echo "==========================================" echo "Risultato: $pass_count PASS, $fail_count FAIL, $skip_count SKIP" echo "==========================================" if [ $fail_count -gt 0 ]; then exit 1 fi exit 0