remote/scripts/linux-smoke.sh

49 lines
1.3 KiB
Bash
Raw Permalink Normal View History

feat(agent): 抽出 agent-core 并新增 Linux 被控端(X11 + XTest) - 新增 agent-core:平台无关会话层(QUIC/TLS 握手、验证码认证、H.264 编码下行、 latest-wins 丢帧、输入分发),平台差异经 ScreenCapturer / InputInjector 两个 trait 注入;Windows agent 一并改接过来,避免两端各写一份握手/认证造成协议漂移 - 新增 linux-agent:X11 GetImage 采集 + 整帧变更检测;XTest 注入 + 扫描码→X11 keycode 映射(主键区 = scancode+8,E0 扩展键必须查表,含单元测试) - 协议零改动:复用 Set-1 扫描码与虚拟桌面归一化坐标,viewer 无需任何修改 - 修复:静止桌面下关键帧请求无人响应——解码端一旦出错将永远无法恢复。 现在保留最近一帧裸像素,收到 KeyFrameReq 时重编一个真关键帧 - 修复:错误验证码时 AuthFail 送不达——进程退出会带走 QUIC 缓冲区内尚未发出的 数据,客户端只能看到 connection lost;现等对端挂断再退出 - 新增端到端冒烟测试 tests/smoke.rs 与 scripts/linux-smoke.sh(自建 Xvfb,无需 图形桌面):覆盖采集→编码→QUIC 解帧、认证(含错误码拒绝)、Ping/Pong、 静止桌面关键帧恢复,以及输入注入实证(注入后从另一条 X11 连接读回指针坐标) - 该关键帧用例已做变异测试:退回修复会红,恢复后转绿,确认断言有效 - 手册:修正已失效的工具链路径,补充 cargo 镜像说明与 Linux 章节 验证: - Windows: cargo build --release 通过,产物 agent.exe 9.32MB / viewer.exe 8.73MB - Linux(容器): cargo test -p linux-agent 通过,2 passed
2026-10-23 00:46:25 -04:00
#!/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)"
# 两个测试共用同一块虚拟屏与指针,必须串行
cargo test -p linux-agent --test smoke -- --nocapture --test-threads=1
echo "[smoke] 通过"