本期只在新增文件里做,**未改动 Windows agent/ 一个字节**(与 NVENC 线并行,避免争抢)。
- 新增 agent-core:平台无关会话层 —— QUIC/TLS 握手、传输调优(沿用 512KB 发送窗口
结论)、验证码认证、会话/select 循环、latest-wins 单槽、输入分发,以及软件编码
视频管线(openh264)。同步跟进协议新增的 Pong{lost,sent} 下行丢包统计字段
- 新增 linux-agent:X11 GetImage 采集 + 整帧变更检测;XTest 注入 + 扫描码→X11
keycode 映射(主键区 = scancode+8,E0 扩展键必须查表,含单元测试)
- 协议零改动:复用 Set-1 扫描码与虚拟桌面归一化坐标,viewer 无需任何修改
- 新增端到端冒烟测试 tests/smoke.rs 与 scripts/linux-smoke.sh(自建 Xvfb,无需
图形桌面):采集→编码→QUIC 解帧、认证(含错误码拒绝)、Ping/Pong(含丢包字段)、
静止桌面关键帧恢复、输入注入实证(注入后从另一条 X11 连接读回指针真实坐标)
- 该关键帧用例做过变异测试:把修复退回会失败、恢复后通过,确认断言有效
- .gitattributes:shell 脚本强制 LF(Windows checkout 成 CRLF 会导致容器内无法执行)
- 手册:修正已失效的工具链路径;补充 cargo 镜像;新增第 8 节(Linux)与 6.1 节
(三条待修问题,含两条 Windows 侧仍存在的关键帧缺陷)
验证:
- Linux(容器, USTC 源 + Xvfb): cargo test -p linux-agent 通过,2 passed
- Windows: 本期未改 agent/,default-members 未变,`cargo build --release` 行为不变
49 lines
1.3 KiB
Bash
49 lines
1.3 KiB
Bash
#!/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] 通过"
|