结论:已完成浏览器侧真实加载验证,M428/M429/M430 的配置入口进一步从 LinuxCNC INI/HALFILE/REMAP 来源生成,native 与 source-link 验证通过。
111 lines
2.9 KiB
Bash
Executable File
111 lines
2.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "$0")"
|
|
|
|
chromium_bin=${CHROMIUM:-}
|
|
if [[ -z "$chromium_bin" ]]; then
|
|
for candidate in chromium chromium-browser google-chrome; do
|
|
if command -v "$candidate" >/dev/null 2>&1; then
|
|
chromium_bin=$(command -v "$candidate")
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
missing=()
|
|
if [[ -z "$chromium_bin" ]]; then
|
|
missing+=("chromium")
|
|
fi
|
|
for required in python3 web/public/cnc_sim.js web/public/cnc_sim.wasm web/test-browser-wasm-smoke.html; do
|
|
if [[ "$required" == python3 ]]; then
|
|
if ! command -v python3 >/dev/null 2>&1; then
|
|
missing+=("python3")
|
|
fi
|
|
elif [[ ! -f "$required" ]]; then
|
|
missing+=("$required")
|
|
fi
|
|
done
|
|
|
|
if ((${#missing[@]} > 0)); then
|
|
echo "WASM browser smoke prerequisites are missing: ${missing[*]}." >&2
|
|
echo "Run ./build-wasm.sh after activating emsdk to generate web/public/cnc_sim.js and web/public/cnc_sim.wasm." >&2
|
|
exit 1
|
|
fi
|
|
|
|
server_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_browser_smoke_server.XXXXXX.log")
|
|
dom_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_browser_smoke_dom.XXXXXX.html")
|
|
profile_dir=$(mktemp -d "${TMPDIR:-/tmp}/cnc_sim_browser_smoke_profile.XXXXXX")
|
|
cleanup() {
|
|
if [[ -n "${server_pid:-}" ]]; then
|
|
kill "$server_pid" >/dev/null 2>&1 || true
|
|
wait "$server_pid" >/dev/null 2>&1 || true
|
|
fi
|
|
rm -f "$server_log" "$dom_log"
|
|
rm -rf "$profile_dir"
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
port=$(python3 - <<'PY'
|
|
import socket
|
|
|
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
|
|
sock.bind(("127.0.0.1", 0))
|
|
print(sock.getsockname()[1])
|
|
PY
|
|
)
|
|
|
|
python3 -m http.server "$port" --bind 127.0.0.1 --directory web >"$server_log" 2>&1 &
|
|
server_pid=$!
|
|
|
|
for _ in {1..50}; do
|
|
if ! kill -0 "$server_pid" >/dev/null 2>&1; then
|
|
echo "browser smoke HTTP server exited early" >&2
|
|
sed -n '1,40p' "$server_log" >&2
|
|
exit 1
|
|
fi
|
|
if python3 - "$port" <<'PY'
|
|
import socket
|
|
import sys
|
|
|
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
|
|
sock.settimeout(0.1)
|
|
sys.exit(0 if sock.connect_ex(("127.0.0.1", int(sys.argv[1]))) == 0 else 1)
|
|
PY
|
|
then
|
|
break
|
|
fi
|
|
sleep 0.1
|
|
done
|
|
|
|
if ! python3 - "$port" <<'PY'
|
|
import socket
|
|
import sys
|
|
|
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
|
|
sock.settimeout(0.1)
|
|
sys.exit(0 if sock.connect_ex(("127.0.0.1", int(sys.argv[1]))) == 0 else 1)
|
|
PY
|
|
then
|
|
echo "browser smoke HTTP server did not start on port $port" >&2
|
|
sed -n '1,40p' "$server_log" >&2
|
|
exit 1
|
|
fi
|
|
|
|
"$chromium_bin" \
|
|
--headless=new \
|
|
--disable-gpu \
|
|
--no-sandbox \
|
|
--user-data-dir="$profile_dir" \
|
|
--virtual-time-budget=5000 \
|
|
--dump-dom \
|
|
"http://127.0.0.1:$port/test-browser-wasm-smoke.html" >"$dom_log" 2>&1
|
|
|
|
if ! grep -F "browser wasm smoke passed" "$dom_log" >/dev/null; then
|
|
echo "browser WASM smoke did not pass" >&2
|
|
sed -n '1,120p' "$dom_log" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "browser wasm smoke passed"
|