#!/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"