#!/bin/bash # Integration Test 99: Final Integration Validation # Verifica finale end-to-end di tutta l'architettura 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 "Final Integration Validation" echo "Verifica completa: Laboratori Cloud" echo "==========================================" echo "" echo "Questo test verifica che TUTTI i lab siano:" echo " ✓ Completati e funzionanti" echo " ✓ Conformi ai requisiti INF-01/02/03/04" echo " ✓ Integrati in architettura coerente" echo "" # Verifica struttura lab echo "=== VERIFICA STRUTTURA LAB ===" labs=("lab-01-iam" "lab-02-network" "lab-03-compute" "lab-04-storage" "lab-05-database") for lab in "${labs[@]}"; do echo -n "[CHECK] $lab esiste... " if [ -d "labs/$lab" ]; then echo -e "${GREEN}OK${NC}" inc_pass else echo -e "${RED}FAIL${NC}" inc_fail fi # Verifica docker-compose echo -n "[CHECK] $lab/docker-compose.yml... " if [ -f "labs/$lab/docker-compose.yml" ]; then echo -e "${GREEN}OK${NC}" inc_pass else echo -e "${YELLOW}WARN${NC}" inc_skip fi # Verifica test echo -n "[CHECK] $lab/tests/... " if [ -d "labs/$lab/tests" ] && [ "$(ls labs/$lab/tests/*.sh 2>/dev/null | wc -l)" -gt 0 ]; then echo -e "${GREEN}OK${NC}" inc_pass else echo -e "${YELLOW}WARN${NC}" inc_skip fi # Verifica documentazione echo -n "[CHECK] $lab documentazione Diátaxis... " doc_ok=true for doc_type in tutorial how-to-guides reference explanation; do if [ ! -d "labs/$lab/$doc_type" ]; then doc_ok=false break fi done if $doc_ok; then echo -e "${GREEN}OK${NC}" inc_pass else echo -e "${YELLOW}WARN${NC}" inc_skip fi done echo "" echo "=== VERIFICA INF REQUISITS ===" echo "" echo "INF-01: Nessun container gira come root" echo "---------------------------------------" labs_with_containers=("lab-03-compute" "lab-04-storage" "lab-05-database") inf01_pass=true for lab in "${labs_with_containers[@]}"; do compose_file="labs/$lab/docker-compose.yml" if [ ! -f "$compose_file" ]; then continue fi echo -n "[CHECK] $lab... " # Verifica image ufficiali che non girano come root if grep -q "image: postgres" "$compose_file"; then echo -e "${GREEN}OK${NC} (PostgreSQL non gira come root)" inc_pass elif grep -q "user:" "$compose_file" && ! grep -q "user: root" "$compose_file"; then echo -e "${GREEN}OK${NC} (utente configurato)" inc_pass else echo -e "${YELLOW}WARN${NC} (impossibile verificare automaticamente)" inc_skip inf01_pass=false fi done echo "" echo "INF-02: Reti private non espongono porte" echo "---------------------------------------" labs_private=("lab-02-network" "lab-05-database") inf02_pass=true for lab in "${labs_private[@]}"; do compose_file="labs/$lab/docker-compose.yml" if [ ! -f "$compose_file" ]; then continue fi echo -n "[CHECK] $lab... " if grep -A 20 "db:" "$compose_file" | grep -q "ports:"; then if grep -A 20 "db:" "$compose_file" | grep -A 5 "ports:" | grep -q "127.0.0.1"; then echo -e "${YELLOW}WARN${NC} (127.0.0.1 - RDS non expone porte)" inc_skip else echo -e "${RED}FAIL${NC}" inc_fail inf02_pass=false fi else echo -e "${GREEN}OK${NC}" inc_pass fi done echo "" echo "INF-03: Tutti i container hanno limiti risorse" echo "----------------------------------------------" inf03_pass=true for lab in "${labs_with_containers[@]}"; do compose_file="labs/$lab/docker-compose.yml" if [ ! -f "$compose_file" ]; then continue fi echo -n "[CHECK] $lab... " # Verifica che ci siano deploy.resources if grep -q "deploy:" "$compose_file" && \ grep -A 100 "deploy:" "$compose_file" | grep -q "cpus:" && \ grep -A 100 "deploy:" "$compose_file" | grep -q "memory:"; then echo -e "${GREEN}OK${NC}" inc_pass else echo -e "${RED}FAIL${NC}" inc_fail inf03_pass=false fi done echo "" echo "INF-04: Dati persistenti in volumi nominativi" echo "---------------------------------------------" labs_volumes=("lab-04-storage" "lab-05-database") inf04_pass=true for lab in "${labs_volumes[@]}"; do compose_file="labs/$lab/docker-compose.yml" if [ ! -f "$compose_file" ]; then continue fi echo -n "[CHECK] $lab... " if grep -q "^volumes:" "$compose_file" && \ grep -q "driver: local" "$compose_file"; then echo -e "${GREEN}OK${NC}" inc_pass else echo -e "${RED}FAIL${NC}" inc_fail inf04_pass=false fi done echo "" echo "=== VERIFICA INTEGRAZIONE ===" # Verifica che Lab 05 rappresenti l'integrazione completa if [ -f "labs/lab-05-database/docker-compose.yml" ]; then echo "[CHECK] Verifica architettura Lab 05..." cd labs/lab-05-database echo -n " Multi-tier configurata... " if grep -q "^ app:" docker-compose.yml && grep -q "^ db:" docker-compose.yml; then echo -e "${GREEN}OK${NC}" inc_pass else echo -e "${RED}FAIL${NC}" inc_fail fi echo -n " Networking corretto... " if grep -A 15 "^ app:" docker-compose.yml | grep -q "vpc-public" && \ grep -A 15 "^ app:" docker-compose.yml | grep -q "vpc-private" && \ grep -A 15 "^ db:" docker-compose.yml | grep -q "vpc-private"; then echo -e "${GREEN}OK${NC}" inc_pass else echo -e "${RED}FAIL${NC}" inc_fail fi cd - > /dev/null fi echo "" echo "==========================================" echo "RISULTATO FINALE INTEGRAZIONE" echo "==========================================" echo "Test PASS: $pass_count" echo "Test FAIL: $fail_count" echo "Test SKIP: $skip_count" echo "==========================================" # Verifica globale INF compliance echo "" echo "INF Compliance Summary:" echo " INF-01 (Non-root): $([ "$inf01_pass" = true ] && echo "✓ PASS" || echo "⊘ UNKNOWN")" echo " INF-02 (No host ports): $([ "$inf02_pass" = true ] && echo "✓ PASS" || echo "✗ FAIL")" echo " INF-03 (Resource limits): $([ "$inf03_pass" = true ] && echo "✓ PASS" || echo "✗ FAIL")" echo " INF-04 (Named volumes): $([ "$inf04_pass" = true ] && echo "✓ PASS" || echo "✗ FAIL")" echo "" if [ $fail_count -eq 0 ]; then echo -e "${GREEN}==========================================${NC}" echo -e "${GREEN}✓ INTEGRAZIONE COMPLETATA CON SUCCESSO${NC}" echo -e "${GREEN}==========================================${NC}" echo "" echo "Tutti i lab sono:" echo " ✓ Completati" echo " ✓ Documentati" echo " ✓ Testati" echo " ✓ Integrati" echo "" echo "Parallelismi con AWS Cloud:" echo " Lab 01 (IAM) → AWS IAM" echo " Lab 02 (Network) → VPC/Subnets" echo " Lab 03 (Compute) → EC2" echo " Lab 04 (Storage) → S3/EBS" echo " Lab 05 (Database) → RDS" echo "" exit 0 else echo -e "${RED}==========================================${NC}" echo -e "${RED}✗ INTEGRAZIONE CON ERRORI${NC}" echo -e "${RED}==========================================${NC}" echo "" echo "Risolvere i problemi e ripetere" exit 1 fi