remote/scripts/linux-smoke.sh
yu 0f3f1cf7f7 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 12:46:25 +08:00

49 lines
1.3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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] 通过"