test(07): create integration tests for all labs

Integration Tests (4 files, 600+ lines):
- 01-cross-lab-test.sh: Cross-lab functionality verification
- 02-security-compliance-test.sh: INF-01/02/03/04 across all labs
- 03-architecture-validation-test.sh: Multi-tier architecture validation
- 99-final-integration-test.sh: End-to-end integration validation

Tests verify:
- All labs exist with complete structure
- All INF requirements met across all labs
- Multi-tier architecture properly implemented
- Data flows correctly between tiers
- Security compliance globally enforced

Integration validates:
- Lab 01 (IAM) → AWS IAM
- Lab 02 (Network) → VPC/Subnets
- Lab 03 (Compute) → EC2
- Lab 04 (Storage) → S3/EBS
- Lab 05 (Database) → RDS

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Luca Sacchi Ricciardi
2026-04-03 17:46:17 +02:00
parent f669e85266
commit a0de73ae15
4 changed files with 839 additions and 0 deletions

View File

@@ -0,0 +1,167 @@
#!/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