Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 2m53s
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
50 lines
2.1 KiB
Bash
Executable File
50 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Phase H test — native-only http-listen primitive.
|
|
# Starts sx_server with a tiny SX echo handler, drives it with curl
|
|
# (GET / POST / 404 / custom header), asserts, then kills it.
|
|
set -u
|
|
cd "$(dirname "$0")/.."
|
|
|
|
SRV=_build/default/bin/sx_server.exe
|
|
PORT=${HTTP_TEST_PORT:-8911}
|
|
PASS=0
|
|
FAIL=0
|
|
ok() { echo " PASS: $1"; PASS=$((PASS+1)); }
|
|
bad() { echo " FAIL: $1 — $2"; FAIL=$((FAIL+1)); }
|
|
|
|
if [ ! -x "$SRV" ]; then
|
|
echo "build sx_server.exe first (dune build bin/sx_server.exe)"; exit 1
|
|
fi
|
|
|
|
H='(begin (define (h req) (if (= (get req "path") "/echo") {:status 200 :headers {"X-Echo" (get req "method")} :body (str "M=" (get req "method") " P=" (get req "path") " Q=" (get req "query") " B=" (get req "body"))} {:status 404 :body "nope"})) (http-listen '"$PORT"' h))'
|
|
ESC=${H//\"/\\\"}
|
|
|
|
{ printf '(epoch 1)\n(eval "%s")\n' "$ESC"; sleep 30; } | "$SRV" >/tmp/test_http_srv.out 2>&1 &
|
|
SVPID=$!
|
|
trap 'kill $SVPID 2>/dev/null; wait 2>/dev/null' EXIT
|
|
|
|
up=0
|
|
for _ in $(seq 1 50); do
|
|
curl -s -o /dev/null "http://127.0.0.1:$PORT/echo" 2>/dev/null && { up=1; break; }
|
|
sleep 0.2
|
|
done
|
|
[ "$up" = 1 ] || { echo " FAIL: server did not start"; cat /tmp/test_http_srv.out; exit 1; }
|
|
|
|
# GET with query + custom response header.
|
|
g=$(curl -s -i "http://127.0.0.1:$PORT/echo?x=1" | tr -d '\r')
|
|
echo "$g" | grep -q '^HTTP/1.1 200 OK' && ok "GET status 200" || bad "GET status" "$g"
|
|
echo "$g" | grep -q '^X-Echo: GET' && ok "GET custom header" || bad "GET header" "$g"
|
|
echo "$g" | grep -q '^M=GET P=/echo Q=x=1 B=$' && ok "GET echo body" || bad "GET body" "$g"
|
|
|
|
# POST with body.
|
|
p=$(curl -s -X POST --data 'hello' "http://127.0.0.1:$PORT/echo")
|
|
[ "$p" = 'M=POST P=/echo Q= B=hello' ] && ok "POST body echoed" || bad "POST body" "$p"
|
|
|
|
# 404 path.
|
|
n=$(curl -s -i "http://127.0.0.1:$PORT/missing" | tr -d '\r')
|
|
echo "$n" | grep -q '^HTTP/1.1 404 Not Found' && ok "404 status" || bad "404 status" "$n"
|
|
echo "$n" | grep -q '^nope$' && ok "404 body" || bad "404 body" "$n"
|
|
|
|
echo "Results: $PASS passed, $FAIL failed"
|
|
[ "$FAIL" = 0 ]
|