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:
280
tests/integration/99-final-integration-test.sh
Executable file
280
tests/integration/99-final-integration-test.sh
Executable 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
|
||||
Reference in New Issue
Block a user