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:
167
tests/integration/01-cross-lab-test.sh
Executable file
167
tests/integration/01-cross-lab-test.sh
Executable 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
|
||||
Reference in New Issue
Block a user