#!/bin/bash # E2E test: Complete deployment workflow set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")" ENV_FILE="$PROJECT_ROOT/demo.env" set -a; source "$ENV_FILE"; set +a PASS=0 FAIL=0 pass() { echo "PASS: $1"; ((PASS++)); } fail() { echo "FAIL: $1"; ((FAIL++)); } test_complete_deployment() { echo "Testing complete deployment workflow..." # Step 1: Run deployment script if "$PROJECT_ROOT/scripts/demo-stack.sh" deploy; then pass "Deployment script execution" else fail "Deployment script execution" return 1 fi # Step 2: Wait for services to stabilize echo "Waiting 90 seconds for services to stabilize..." sleep 90 # Step 3: Validate no exited/unhealthy services local unhealthy unhealthy=$(docker compose -f "$PROJECT_ROOT/docker-compose.yml" ps --format json 2>/dev/null | \ grep -c '"unhealthy\|exited\|dead"' || echo "0") if [[ "$unhealthy" -eq 0 ]]; then pass "All services healthy/running" else fail "$unhealthy services unhealthy/exited" fi # Step 4: Validate all ports accessible local ports=( "$HOMEPAGE_PORT" "$DOCKHAND_PORT" "$PIHOLE_PORT" "$INFLUXDB_PORT" "$GRAFANA_PORT" "$DRAWIO_PORT" "$KROKI_PORT" "$ATOMIC_TRACKER_PORT" "$ARCHIVEBOX_PORT" "$TUBE_ARCHIVIST_PORT" "$WAKAPI_PORT" "$MAILHOG_PORT" "$ATUIN_PORT" ) local failed_ports=0 for port in "${ports[@]}"; do if curl -f -s --max-time 10 "http://localhost:$port" >/dev/null 2>&1; then pass "Port $port accessible" else fail "Port $port not accessible" ((failed_ports++)) fi done echo "" echo "====================================" echo "E2E Test Results: $PASS passed, $FAIL failed" echo "====================================" [[ $FAIL -eq 0 ]] } test_complete_deployment