148 lines
6.6 KiB
Bash
Executable File
148 lines
6.6 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)}"
|
|
BOUNDARY_PROOF_GATES="$ROOT_DIR/build/wasm/sim-configs-inventory/boundary-proof-gates.tsv"
|
|
BOUNDARY_SUMMARY="$ROOT_DIR/build/wasm/sim-configs-inventory/boundary-summary.tsv"
|
|
INI_BOUNDARY_SUMMARY="$ROOT_DIR/build/wasm/sim-configs-inventory/ini-boundary-summary.tsv"
|
|
NATIVE_PROOF_ALIGNMENT_SUMMARY="$ROOT_DIR/build/wasm/sim-configs-inventory/native-proof-alignment-summary.tsv"
|
|
NATIVE_RUNTIME_PROBE_SUMMARY="$ROOT_DIR/build/wasm/sim-configs-inventory/native-runtime-probe-summary.tsv"
|
|
RUNTIME_BOUNDARY_NATIVE_ALIGNMENT_SUMMARY="$ROOT_DIR/build/wasm/sim-configs-inventory/runtime-boundary-native-alignment-summary.tsv"
|
|
RUNTIME_BOUNDARY_CONTRACT_SUMMARY="$ROOT_DIR/build/wasm/sim-configs-inventory/runtime-boundary-contract-summary.tsv"
|
|
USER_M_PROCESS_NATIVE_STATE_ALIGNMENT="$ROOT_DIR/build/wasm/sim-configs-inventory/user-m-process-native-state-alignment.tsv"
|
|
USER_M_PROCESS_NATIVE_TRANSITION_ALIGNMENT="$ROOT_DIR/build/wasm/sim-configs-inventory/user-m-process-native-transition-alignment.tsv"
|
|
USER_M_PROCESS_NATIVE_RUNTIME_STATE_PLAN="$ROOT_DIR/build/wasm/sim-configs-inventory/user-m-process-native-runtime-state-plan.tsv"
|
|
USER_M_PROCESS_NATIVE_RUNTIME_READINESS="$ROOT_DIR/build/wasm/sim-configs-inventory/user-m-process-native-runtime-readiness.tsv"
|
|
USER_M_PROCESS_NATIVE_RUNTIME_PROBE_GATE="$ROOT_DIR/build/wasm/sim-configs-inventory/user-m-process-native-runtime-probe-gate.tsv"
|
|
USER_M_PROCESS_TRANSITION_PLAN="$ROOT_DIR/build/wasm/sim-configs-inventory/user-m-process-transition-plan.tsv"
|
|
TOOL_DB_PROCESS_NATIVE_PROTOCOL_ALIGNMENT="$ROOT_DIR/build/wasm/sim-configs-inventory/tool-db-process-native-protocol-alignment.tsv"
|
|
TOOL_DB_PROCESS_NATIVE_RUNTIME_READINESS="$ROOT_DIR/build/wasm/sim-configs-inventory/tool-db-process-native-runtime-readiness.tsv"
|
|
TOOL_DB_PROCESS_TRANSACTION_PLAN="$ROOT_DIR/build/wasm/sim-configs-inventory/tool-db-process-transaction-plan.tsv"
|
|
PYTHON_REMAP_NATIVE_RUNTIME_ALIGNMENT="$ROOT_DIR/build/wasm/sim-configs-inventory/python-remap-native-runtime-alignment.tsv"
|
|
PYTHON_REMAP_NATIVE_RUNTIME_READINESS="$ROOT_DIR/build/wasm/sim-configs-inventory/python-remap-native-runtime-readiness.tsv"
|
|
PYTHON_REMAP_NATIVE_RUNTIME_STATE_PLAN="$ROOT_DIR/build/wasm/sim-configs-inventory/python-remap-native-runtime-state-plan.tsv"
|
|
PYTHON_REMAP_NATIVE_RUNTIME_FIXTURE_PLAN="$ROOT_DIR/build/wasm/sim-configs-inventory/python-remap-native-runtime-fixture-plan.tsv"
|
|
PYTHON_REMAP_RUNTIME_CONTRACT="$ROOT_DIR/build/wasm/sim-configs-inventory/python-remap-runtime-contract.tsv"
|
|
BLOCKED_RUNTIME_PROMOTION_LOCK="$ROOT_DIR/build/wasm/sim-configs-inventory/blocked-runtime-promotion-lock.tsv"
|
|
BOUNDARY_PHASE_COMPLETION_SUMMARY="$ROOT_DIR/build/wasm/sim-configs-inventory/boundary-phase-completion-summary.tsv"
|
|
NEXT_BOUNDARY_RECOMMENDATIONS="$ROOT_DIR/build/wasm/sim-configs-inventory/next-boundary-recommendations.tsv"
|
|
INVENTORY_SCRIPT="$ROOT_DIR/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs"
|
|
NATIVE_SOURCE_PROOF_SUMMARY="$ROOT_DIR/build/native/native-source-proof-summary.tsv"
|
|
NATIVE_RUNTIME_PROBE_SOURCE_SUMMARY="$ROOT_DIR/build/native/native-runtime-probe-summary.tsv"
|
|
|
|
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
|
|
if [[ "${SKIP_INI_BUILD:-0}" != "1" ]]; then
|
|
"$ROOT_DIR/tools/build_ini_panel.sh"
|
|
fi
|
|
INVENTORY_REQUIRED=0
|
|
for artifact in \
|
|
"$BOUNDARY_PROOF_GATES" \
|
|
"$BOUNDARY_SUMMARY" \
|
|
"$INI_BOUNDARY_SUMMARY" \
|
|
"$NATIVE_PROOF_ALIGNMENT_SUMMARY" \
|
|
"$RUNTIME_BOUNDARY_NATIVE_ALIGNMENT_SUMMARY" \
|
|
"$RUNTIME_BOUNDARY_CONTRACT_SUMMARY" \
|
|
"$USER_M_PROCESS_NATIVE_STATE_ALIGNMENT" \
|
|
"$USER_M_PROCESS_NATIVE_TRANSITION_ALIGNMENT" \
|
|
"$USER_M_PROCESS_NATIVE_RUNTIME_STATE_PLAN" \
|
|
"$USER_M_PROCESS_NATIVE_RUNTIME_READINESS" \
|
|
"$USER_M_PROCESS_NATIVE_RUNTIME_PROBE_GATE" \
|
|
"$USER_M_PROCESS_TRANSITION_PLAN" \
|
|
"$TOOL_DB_PROCESS_NATIVE_PROTOCOL_ALIGNMENT" \
|
|
"$TOOL_DB_PROCESS_NATIVE_RUNTIME_READINESS" \
|
|
"$TOOL_DB_PROCESS_TRANSACTION_PLAN" \
|
|
"$PYTHON_REMAP_NATIVE_RUNTIME_ALIGNMENT" \
|
|
"$PYTHON_REMAP_NATIVE_RUNTIME_READINESS" \
|
|
"$PYTHON_REMAP_NATIVE_RUNTIME_STATE_PLAN" \
|
|
"$PYTHON_REMAP_NATIVE_RUNTIME_FIXTURE_PLAN" \
|
|
"$PYTHON_REMAP_RUNTIME_CONTRACT" \
|
|
"$NATIVE_RUNTIME_PROBE_SUMMARY" \
|
|
"$BLOCKED_RUNTIME_PROMOTION_LOCK" \
|
|
"$BOUNDARY_PHASE_COMPLETION_SUMMARY" \
|
|
"$NEXT_BOUNDARY_RECOMMENDATIONS"; do
|
|
if [[ ! -f "$artifact" || "$INVENTORY_SCRIPT" -nt "$artifact" ]]; then
|
|
INVENTORY_REQUIRED=1
|
|
fi
|
|
done
|
|
if [[ -f "$NATIVE_SOURCE_PROOF_SUMMARY" && "$NATIVE_SOURCE_PROOF_SUMMARY" -nt "$NATIVE_PROOF_ALIGNMENT_SUMMARY" ]]; then
|
|
INVENTORY_REQUIRED=1
|
|
fi
|
|
if [[ -f "$NATIVE_RUNTIME_PROBE_SOURCE_SUMMARY" && "$NATIVE_RUNTIME_PROBE_SOURCE_SUMMARY" -nt "$NATIVE_RUNTIME_PROBE_SUMMARY" ]]; then
|
|
INVENTORY_REQUIRED=1
|
|
fi
|
|
if [[ "$INVENTORY_REQUIRED" == "1" ]]; then
|
|
SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/wasm/node/verify_sim_configs_inventory_wasm.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" >"$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])
|
|
|
|
handler = functools.partial(http.server.SimpleHTTPRequestHandler, directory=str(root))
|
|
with socketserver.TCPServer(("127.0.0.1", 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 100); do
|
|
[[ -s "$PORT_FILE" ]] && break
|
|
sleep 0.05
|
|
done
|
|
|
|
if [[ ! -s "$PORT_FILE" ]]; then
|
|
echo "browser interpreter smoke HTTP server did not start" >&2
|
|
cat "$SERVER_LOG" >&2 || true
|
|
exit 1
|
|
fi
|
|
|
|
PORT="$(cat "$PORT_FILE")"
|
|
URL="http://127.0.0.1:$PORT/tests/browser/interp_smoke.html"
|
|
OUT="$TMP_DIR/chromium.out"
|
|
|
|
"$CHROMIUM" \
|
|
--headless=new \
|
|
--disable-gpu \
|
|
--no-sandbox \
|
|
--user-data-dir="$CHROME_PROFILE" \
|
|
--virtual-time-budget=10000 \
|
|
--dump-dom \
|
|
"$URL" >"$OUT" 2>&1
|
|
|
|
if ! grep -Fq "browser_interp_smoke=ok" "$OUT"; then
|
|
echo "browser interpreter smoke failed" >&2
|
|
sed -n '1,220p' "$OUT" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "browser_interp_smoke=ok"
|