test: verify production proxy form routing
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
#!/bin/sh
|
||||
# Verify the actual production Caddy routes against an already running local stack.
|
||||
# Invalid form submissions exercise Astro redirects without creating database rows.
|
||||
set -eu
|
||||
repo=$(CDPATH= cd -- "$(dirname "$0")/.." && pwd)
|
||||
cd "$repo"
|
||||
web_id=$(docker compose ps -q web)
|
||||
test -n "$web_id" || { echo "Start the local Compose stack first" >&2; exit 1; }
|
||||
network=$(docker inspect --format '{{range $name, $_ := .NetworkSettings.Networks}}{{$name}}{{println}}{{end}}' "$web_id")
|
||||
test "$(printf '%s\n' "$network" | wc -l)" -eq 1 || {
|
||||
echo "Routing test requires a local web container with exactly one network" >&2; exit 1;
|
||||
}
|
||||
container="rf4-proxy-routing-$$"
|
||||
cleanup() { docker stop "$container" >/dev/null 2>&1 || true; }
|
||||
trap cleanup EXIT INT TERM
|
||||
# Test-only Basic Auth hash from the Caddy documentation. No production secrets.
|
||||
docker run --rm -d --name "$container" --network "$network" \
|
||||
-p 127.0.0.1::8080 \
|
||||
-e SITE_DOMAIN=http://localhost:8080 \
|
||||
-e FILES_DOMAIN=http://localhost:8081 \
|
||||
-e ACME_EMAIL=routing-test@example.com \
|
||||
-e ADMIN_BASIC_USER=route-test \
|
||||
-e 'ADMIN_BASIC_PASSWORD_HASH=$2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG' \
|
||||
-v "$repo/deploy/Caddyfile:/etc/caddy/Caddyfile:ro" \
|
||||
caddy:2.10.2-alpine >/dev/null
|
||||
port=$(docker inspect --format '{{(index (index .NetworkSettings.Ports "8080/tcp") 0).HostPort}}' "$container")
|
||||
base="http://127.0.0.1:$port"
|
||||
attempt=0
|
||||
until curl -fsS --max-time 2 -H 'Host: localhost:8080' "$base/health" >/dev/null 2>&1; do
|
||||
attempt=$((attempt + 1))
|
||||
if [ "$attempt" -ge 20 ]; then docker logs "$container" >&2; exit 1; fi
|
||||
sleep 1
|
||||
done
|
||||
check_redirect() {
|
||||
headers=$(curl -sS --max-time 15 -D - -o /dev/null \
|
||||
-H 'Host: localhost:8080' -H 'Origin: http://localhost:8080' --data '' "$base$1")
|
||||
if ! printf '%s\n' "$headers" | grep -Eq '^HTTP/[0-9.]+ 303 ' ||
|
||||
! printf '%s\n' "$headers" | grep -Fi "location: $2" >/dev/null; then
|
||||
printf 'Unexpected response for %s:\n%s\n' "$1" "$headers" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
check_redirect /api/report '/report?state=create_error'
|
||||
check_redirect /api/report-screenshot '/report?state=screenshot_error&report_id='
|
||||
curl -fsS --max-time 15 -H 'Host: localhost:8080' "$base/api/v1/fishes?limit=1" >/dev/null
|
||||
curl -fsS --max-time 15 -H 'Host: localhost:8080' "$base/ready" >/dev/null
|
||||
echo "Proxy routing passed: Astro form redirects, FastAPI catalog and health/readiness"
|
||||
Reference in New Issue
Block a user