接续上一轮:推进浏览器验证与M428配置收拢
结论:已完成浏览器侧真实加载验证,M428/M429/M430 的配置入口进一步从 LinuxCNC INI/HALFILE/REMAP 来源生成,native 与 source-link 验证通过。
This commit is contained in:
110
test-web-wasm-browser-smoke.sh
Executable file
110
test-web-wasm-browser-smoke.sh
Executable file
@@ -0,0 +1,110 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user