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,280 @@
#!/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