🐛 e2e: do not fail a scenario on a single slow response

The new -m 1 is right for the polling helpers, where a timed out request is
just another attempt, but the assertions and the mock control plane have no
retry: one request that takes over a second on a loaded runner fails the
scenario, and since common.sh runs under set -euo pipefail a timed out
lapi_add_decision aborts it before the decision even exists.

Bound the connect at 1s instead and give the whole request 5s in the seven
places that get a single attempt. Nothing waits longer on the happy path.
This commit is contained in:
mhx
2026-08-03 13:56:04 +02:00
parent 99673b1087
commit 3f78887e3a
+9 -7
View File
@@ -76,6 +76,8 @@ ensure_mock() {
} }
# Poll a URL until it returns the expected status code, or fail. # Poll a URL until it returns the expected status code, or fail.
# The tight -m is free here: a timed out request is just another attempt. The one shot
# assertions below use a larger one, where a single slow response fails the test.
# Usage: wait_for_status URL CODE [TIMEOUT_SECONDS] [curl args...] # Usage: wait_for_status URL CODE [TIMEOUT_SECONDS] [curl args...]
wait_for_status() { wait_for_status() {
local url="$1" expected="$2" timeout="${3:-15}" local url="$1" expected="$2" timeout="${3:-15}"
@@ -119,7 +121,7 @@ assert_status() {
local url="$1" expected="$2" local url="$1" expected="$2"
shift 2 || true shift 2 || true
local got local got
got=$(curl -s -m 1 -o /dev/null -w '%{http_code}' "$@" "$url") got=$(curl -s --connect-timeout 1 -m 5 -o /dev/null -w '%{http_code}' "$@" "$url")
if [[ "$got" != "$expected" ]]; then if [[ "$got" != "$expected" ]]; then
echo "assert_status: $url expected $expected, got $got" >&2 echo "assert_status: $url expected $expected, got $got" >&2
return 1 return 1
@@ -132,7 +134,7 @@ assert_header() {
local url="$1" header="$2" expected="$3" local url="$1" header="$2" expected="$3"
shift 3 || true shift 3 || true
local got local got
got=$(curl -s -m 1 -D - -o /dev/null "$@" "$url" | tr -d '\r' \ got=$(curl -s --connect-timeout 1 -m 5 -D - -o /dev/null "$@" "$url" | tr -d '\r' \
| awk -v h="${header,,}" -F': ' 'tolower($1) == h { print $2; exit }') | awk -v h="${header,,}" -F': ' 'tolower($1) == h { print $2; exit }')
if [[ "$got" != "$expected" ]]; then if [[ "$got" != "$expected" ]]; then
echo "assert_header: $url header $header expected \"$expected\", got \"$got\"" >&2 echo "assert_header: $url header $header expected \"$expected\", got \"$got\"" >&2
@@ -146,7 +148,7 @@ assert_body_contains() {
local url="$1" needle="$2" local url="$1" needle="$2"
shift 2 || true shift 2 || true
local body local body
body=$(curl -s -m 1 "$@" "$url") body=$(curl -s --connect-timeout 1 -m 5 "$@" "$url")
if ! grep -q "$needle" <<<"$body"; then if ! grep -q "$needle" <<<"$body"; then
echo "assert_body_contains: $url expected to contain \"$needle\", got:" >&2 echo "assert_body_contains: $url expected to contain \"$needle\", got:" >&2
echo "$body" >&2 echo "$body" >&2
@@ -158,20 +160,20 @@ assert_body_contains() {
lapi_add_decision() { lapi_add_decision() {
local ip="$1" type="${2:-ban}" duration="${3:-4h}" local ip="$1" type="${2:-ban}" duration="${3:-4h}"
curl -sS -m 1 -X POST "http://127.0.0.1:${LAPI_PORT}/admin/decisions?ip=${ip}&type=${type}&duration=${duration}" >/dev/null curl -sS --connect-timeout 1 -m 5 -X POST "http://127.0.0.1:${LAPI_PORT}/admin/decisions?ip=${ip}&type=${type}&duration=${duration}" >/dev/null
} }
lapi_delete_decision() { lapi_delete_decision() {
local ip="$1" local ip="$1"
curl -sS -m 1 -X DELETE "http://127.0.0.1:${LAPI_PORT}/admin/decisions?ip=${ip}" >/dev/null curl -sS --connect-timeout 1 -m 5 -X DELETE "http://127.0.0.1:${LAPI_PORT}/admin/decisions?ip=${ip}" >/dev/null
} }
lapi_set_stream_fail() { lapi_set_stream_fail() {
curl -sS -m 1 -X POST "http://127.0.0.1:${LAPI_PORT}/admin/stream-fail" >/dev/null curl -sS --connect-timeout 1 -m 5 -X POST "http://127.0.0.1:${LAPI_PORT}/admin/stream-fail" >/dev/null
} }
lapi_clear_stream_fail() { lapi_clear_stream_fail() {
curl -sS -m 1 -X DELETE "http://127.0.0.1:${LAPI_PORT}/admin/stream-fail" >/dev/null curl -sS --connect-timeout 1 -m 5 -X DELETE "http://127.0.0.1:${LAPI_PORT}/admin/stream-fail" >/dev/null
} }
# --- stack lifecycle --------------------------------------------------------- # --- stack lifecycle ---------------------------------------------------------