#!/usr/bin/env bash # Linux 被控端冒烟测试一键脚本:自建 Xvfb 虚拟显示 → 跑端到端测试 → 收摊。 # # 用法(容器内或任意有 Xvfb 的 Linux): # bash scripts/linux-smoke.sh # 可用环境变量覆盖: # SMOKE_SCREEN=1920x1080 虚拟屏分辨率(默认 1280x720) # SMOKE_DISPLAY=:99 X display 编号(默认 :99) set -euo pipefail SCREEN="${SMOKE_SCREEN:-1280x720}" DISPLAY_NUM="${SMOKE_DISPLAY:-:99}" export DISPLAY="$DISPLAY_NUM" export SMOKE_SCREEN="$SCREEN" XVFB_PID="" cleanup() { if [ -n "$XVFB_PID" ]; then kill "$XVFB_PID" 2>/dev/null || true wait "$XVFB_PID" 2>/dev/null || true fi } trap cleanup EXIT echo "[smoke] 启动 Xvfb $DISPLAY_NUM (${SCREEN}x24)" Xvfb "$DISPLAY_NUM" -screen 0 "${SCREEN}x24" -nolisten tcp >/tmp/xvfb.log 2>&1 & XVFB_PID=$! ready=0 for _ in $(seq 1 50); do if xdpyinfo -display "$DISPLAY_NUM" >/dev/null 2>&1; then ready=1 break fi sleep 0.2 done if [ "$ready" -ne 1 ]; then echo "[smoke] Xvfb 启动失败,日志:" cat /tmp/xvfb.log 2>/dev/null || true exit 1 fi echo "[smoke] X server 就绪:$(xdpyinfo -display "$DISPLAY_NUM" | grep -E 'dimensions' | head -1)" # 先跑纯逻辑单测(键码映射 / 坐标换算),不需要 X server cargo test -p linux-agent --bins # 再跑端到端用例:两个用例共用同一块虚拟屏与指针,必须串行 cargo test -p linux-agent --test smoke -- --nocapture --test-threads=1 echo "[smoke] 通过"