Files
cnc_wams/wasm-port/tests/browser/verify_real_simulation_browser.sh
2026-07-10 21:26:42 -04:00

84 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
CHROMIUM="${CHROMIUM:-$(command -v chromium || command -v chromium-browser || command -v google-chrome || command -v google-chrome-stable || true)}"
BROWSER_SMOKE_HOST="${BROWSER_SMOKE_HOST:-127.0.0.1}"
BROWSER_SMOKE_SERVER_READY_ATTEMPTS="${BROWSER_SMOKE_SERVER_READY_ATTEMPTS:-100}"
BROWSER_SMOKE_SERVER_READY_SLEEP="${BROWSER_SMOKE_SERVER_READY_SLEEP:-0.05}"
BROWSER_SMOKE_VIRTUAL_TIME_BUDGET="${BROWSER_SMOKE_VIRTUAL_TIME_BUDGET:-10000}"
if [[ -z "$CHROMIUM" ]]; then
echo "missing Chromium-compatible browser; set CHROMIUM=/path/to/browser" >&2
exit 1
fi
if [[ "${SKIP_INTERP_BUILD:-0}" != "1" ]]; then
"$ROOT_DIR/tools/build_wasm_core.sh"
fi
TMP_DIR="$(mktemp -d)"
PORT_FILE="$TMP_DIR/port"
SERVER_LOG="$TMP_DIR/server.log"
CHROME_PROFILE="$TMP_DIR/chrome-profile"
mkdir -p "$CHROME_PROFILE"
cleanup() {
if [[ -n "${SERVER_PID:-}" ]]; then
kill "$SERVER_PID" 2>/dev/null || true
wait "$SERVER_PID" 2>/dev/null || true
fi
rm -rf "$TMP_DIR"
}
trap cleanup EXIT
python3 - <<'PY' "$ROOT_DIR" "$PORT_FILE" "$BROWSER_SMOKE_HOST" >"$SERVER_LOG" 2>&1 &
import functools
import http.server
import pathlib
import socketserver
import sys
root = pathlib.Path(sys.argv[1])
port_file = pathlib.Path(sys.argv[2])
host = sys.argv[3]
handler = functools.partial(http.server.SimpleHTTPRequestHandler, directory=str(root))
with socketserver.TCPServer((host, 0), handler) as httpd:
port_file.write_text(str(httpd.server_address[1]), encoding="ascii")
httpd.serve_forever()
PY
SERVER_PID=$!
for _ in $(seq 1 "$BROWSER_SMOKE_SERVER_READY_ATTEMPTS"); do
[[ -s "$PORT_FILE" ]] && break
sleep "$BROWSER_SMOKE_SERVER_READY_SLEEP"
done
if [[ ! -s "$PORT_FILE" ]]; then
echo "real simulation browser smoke HTTP server did not start" >&2
cat "$SERVER_LOG" >&2 || true
exit 1
fi
PORT="$(cat "$PORT_FILE")"
URL="http://$BROWSER_SMOKE_HOST:$PORT/tests/browser/real_simulation_page_smoke.html"
OUT="$TMP_DIR/chromium-real-simulation.out"
"$CHROMIUM" \
--headless=new \
--disable-gpu \
--no-sandbox \
--user-data-dir="$CHROME_PROFILE" \
--virtual-time-budget="$BROWSER_SMOKE_VIRTUAL_TIME_BUDGET" \
--dump-dom \
"$URL" >"$OUT" 2>&1
if ! grep -Fq "browser_real_simulation_page_smoke=ok" "$OUT"; then
echo "browser real simulation page smoke failed" >&2
sed -n '1,260p' "$OUT" >&2
exit 1
fi
echo "browser_real_simulation_page_smoke=ok"