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,191 @@
#!/bin/bash
# Integration Test 03: Architecture Validation
# Verifica architettura multi-tier corretta
set -euo pipefail
# Colori
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
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 03: Architecture Validation"
echo "=========================================="
echo ""
# Verifica architettura Lab 05 (multi-tier completa)
echo "[TEST] Verifica architettura Lab 05 (multi-tier)..."
if [ -f "labs/lab-05-database/docker-compose.yml" ]; then
cd labs/lab-05-database
# Verifica presenza servizi key
echo -n " Servizio 'app' presente... "
if grep -q "^ app:" docker-compose.yml; then
echo -e "${GREEN}PASS${NC}"
inc_pass
else
echo -e "${RED}FAIL${NC}"
inc_fail
fi
echo -n " Servizio 'db' presente... "
if grep -q "^ db:" docker-compose.yml; then
echo -e "${GREEN}PASS${NC}"
inc_pass
else
echo -e "${RED}FAIL${NC}"
inc_fail
fi
# Verifica networking corretto
echo ""
echo "[TEST] Verifica networking multi-tier..."
echo -n " App in multi-home (public + private)... "
if grep -A 15 "^ app:" docker-compose.yml | grep -q "vpc-public" && \
grep -A 15 "^ app:" docker-compose.yml | grep -q "vpc-private"; then
echo -e "${GREEN}PASS${NC}"
inc_pass
else
echo -e "${RED}FAIL${NC}"
inc_fail
fi
echo -n " Database solo in private network... "
if grep -A 15 "^ db:" docker-compose.yml | grep -q "vpc-private" && \
! grep -A 15 "^ db:" docker-compose.yml | grep -q "vpc-public"; then
echo -e "${GREEN}PASS${NC}"
inc_pass
else
echo -e "${RED}FAIL${NC}"
inc_fail
fi
# Verifica dipendenze
echo ""
echo "[TEST] Verifica dipendenze servizi..."
echo -n " App depends on db... "
if grep -A 20 "^ app:" docker-compose.yml | grep -q "depends_on:" && \
grep -A 25 "^ app:" docker-compose.yml | grep -A 5 "depends_on:" | grep -q "db:"; then
echo -e "${GREEN}PASS${NC}"
inc_pass
else
echo -e "${YELLOW}WARN${NC} (nessuna dipendenza configurata)"
inc_skip
fi
# Verifica resource allocation per tier
echo ""
echo "[TEST] Verifica allocazione risorse per tier..."
echo -n " Database ha più risorse di app... "
app_mem=$(grep -A 30 "^ app:" docker-compose.yml | grep "memory:" | sed 's/.*memory: //' | sed 's/[^0-9MG]//g')
db_mem=$(grep -A 30 "^ db:" docker-compose.yml | grep "memory:" | sed 's/.*memory: //' | sed 's/[^0-9MG]//g')
if [ -n "$app_mem" ] && [ -n "$db_mem" ]; then
# Confronta (semplificato - assumes G)
if [ "${db_mem%G}" -ge "${app_mem%G}" ]; then
echo -e "${GREEN}PASS${NC} (app: ${app_mem}, db: ${db_mem})"
inc_pass
else
echo -e "${RED}FAIL${NC} (db dovrebbe avere più risorse)"
inc_fail
fi
else
echo -e "${YELLOW}SKIP${NC} (impossibile confrontare)"
inc_skip
fi
cd - > /dev/null
else
echo -e "${YELLOW}SKIP${NC} (Lab 05 non trovato)"
inc_skip
fi
echo ""
echo "=== Verifica segregazione rete ==="
# Verifica che reti private siano isolate
private_networks=$(docker network ls --format '{{{{.Name}}}}' | grep "private" | grep -v "bridge" || true)
if [ -n "$private_networks" ]; then
echo -n "[TEST] Reti private hanno flag internal... "
internal_count=0
for network in $private_networks; do
if docker network inspect "$network" --format '{{.Internal}}' | grep -q "true"; then
((internal_count++)) || true
fi
done
if [ $internal_count -gt 0 ]; then
echo -e "${GREEN}PASS${NC} ($internal_count/$(
echo "$private_networks" | wc -w
) reti isolate)"
inc_pass
else
echo -e "${YELLOW}WARN${NC} (nessuna rete isolata)"
inc_skip
fi
else
echo -e "${YELLOW}SKIP${NC} (nessuna rete privata trovata)"
inc_skip
fi
echo ""
echo "=== Verifica data flow ==="
# Verifica che i dati possano fluire attraverso i tier
if docker ps --format '{{{{Names}}}}' | grep -q "lab05-app" && \
docker ps --format '{{{{Names}}}}' | grep -q "lab05-db"; then
echo "[TEST] Verifica flusso dati app → db..."
echo -n " App può scrivere nel database... "
if docker exec lab05-app psql -h db -U lab05_user -d lab05_db -c "
CREATE TABLE IF NOT EXISTS flow_test (id SERIAL, data TEXT);
INSERT INTO flow_test (data) VALUES ('test');
" &>/dev/null; then
echo -e "${GREEN}PASS${NC}"
inc_pass
echo -n " App può leggere dal database... "
if docker exec lab05-app psql -h db -U lab05_user -d lab05_db -t -c "
SELECT COUNT(*) FROM flow_test;
" &>/dev/null | grep -q "[1-9]"; then
echo -e "${GREEN}PASS${NC}"
inc_pass
else
echo -e "${RED}FAIL${NC}"
inc_fail
fi
else
echo -e "${RED}FAIL${NC}"
inc_fail
fi
else
echo -e "${YELLOW}SKIP${NC} (container non in esecuzione)"
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