mirror of
https://gitee.com/xmz7891/ykxmz.git
synced 2026-10-18 10:10:43 +00:00
同步部署脚本智能体的收尾改动 + 恢复被误删的文件
== 部署脚本(另一个智能体的收尾)==
* deploy.sh 默认两个隧道 unit 都 enable:
主 lanremote-tunnel quic + 8 条 + --metrics :20241
副本 lanremote-tunnel-h2 http2 + 2 条 + --metrics :20242
--protocol 支持 both(默认)/ quic / http2,非法值退出码 2
* metrics 端口在两个 unit 里都显式钉死 ——
实测停掉主实例再重启副实例时,副实例会抢 20241,
于是 watchdog 和所有按端口读指标的脚本全部读错实例
* MTU/MSS 收成单一出处:net-tune.sh 唯一负责 MSS 1360 + 接口 MTU 1400,
deploy-tune.sh 只管 keepalive + 开机加速并调用 net-tune.sh。
这样就不存在"谁后跑谁赢"
* 按需重启:程序和 unit 都用 cmp 比对,一样就不落盘、不重启、
不 daemon-reload(幂等重跑不再打断正在服务的连接)
* 顺手修了一个会咬人的坑:单独用 --port 9090 时原来只改 unit 不改
config.yml,隧道会回源到 8080,现象是"隧道通了但一访问就 502"
* 域名:不传 --hostname 且 config.yml 里没有 hostname 时明确停下来
要输入,不猜、不写 config、不启隧道
测试(三套全绿,实测数字):
_build/test_deploy_sh.sh 110 通过 / 0 失败(Windows 沙箱)
_build/test_zip_deploy.sh 30 通过 / 0 失败(从发布 zip 解压再跑)
_build/test_deploy_device.sh 39 通过 / 0 失败(真机 Debian aarch64)
真机那套桩掉了 systemctl/iptables/ip/sysctl/nmcli
(--prefix 只隔离写文件,不隔离命令副作用),
第 8 节专门验证线上零影响:relay/tunnel/h2 全 active、
MTU=1400、MSS 规则数、keepalive 测前测后完全一致。
== 恢复被误删的文件 ==
排查过程中有人用通配符清了 $env:TEMP\tmp.*,而 Git Bash 的 /tmp
正映射到那个 Windows 目录,导致两个被 git 跟踪的文件被删:
_build/insert_stub_checks.py
_build/inspect_pathtest.sh
已从 git 恢复。
教训:用通配符删临时文件很危险,尤其是 /tmp 在 Windows 上
映射到共享目录时。改成只删明确列出的文件名。
== 清理 ==
删掉这轮调试产生的临时输出(reg3.txt / td1.txt / td2.txt 等),
不让它们进仓库。
This commit is contained in:
@@ -1,35 +0,0 @@
|
||||
═══ 1. 默认中转地址确实是空 ═══
|
||||
[PASS] DEFAULT_RELAY_URL 是空白
|
||||
|
||||
═══ 2. RelayLink.start('') 的行为 ═══
|
||||
[PASS] start('') 返回 False
|
||||
[PASS] start('') 没有新建线程
|
||||
[PASS] start('') 之后 candidates 是空的
|
||||
|
||||
═══ 3. enable_relay 连续调用两次的返回值 ═══
|
||||
第 1 次 enable_relay() -> False
|
||||
第 2 次 enable_relay() -> False
|
||||
日志: ['没配中转地址,只走局域网(需要跨网络时在设置里填中转地址)', '没配置中转地址,跳过', '没配中转地址,只走局域网(需要跨网络时在设置里填中转地址)']
|
||||
[PASS] 第 1 次调用返回 False(没有中转可连)
|
||||
[PASS] 第 2 次调用也应返回 False
|
||||
|
||||
═══ 4. 这个返回值会影响谁 ═══
|
||||
server.py 里调用 enable_relay 的地方:
|
||||
160: # 顺序很重要:enable_relay() 会挨个试中转地址,
|
||||
185: self.enable_relay()
|
||||
|
||||
全仓库搜索 enable_relay 的调用点:
|
||||
windows\lanremote\relay.py:317: 对外给 server.enable_relay() 判断用 ——
|
||||
windows\lanremote\server.py:160: # 顺序很重要:enable_relay() 会挨个试中转地址,
|
||||
windows\lanremote\server.py:185: self.enable_relay()
|
||||
windows\lanremote\server.py:308: def enable_relay(self, url: str = "") -> bool:
|
||||
|
||||
═══ 5. 空白默认下局域网发现仍可用吗 ═══
|
||||
[PASS] discovery 模块能导入(不依赖 DEFAULT_RELAY_URL)
|
||||
[PASS] discover() 能跑完不抛异常
|
||||
[PASS] discover() 返回的是列表
|
||||
· 发现到 0 台设备(本机没有 agent 在跑,0 台是正常的)
|
||||
|
||||
==============================================================
|
||||
通过 9 项,失败 0 项
|
||||
==============================================================
|
||||
@@ -0,0 +1,45 @@
|
||||
同步部署脚本智能体的收尾改动 + 恢复被误删的文件
|
||||
|
||||
== 部署脚本(另一个智能体的收尾)==
|
||||
|
||||
* deploy.sh 默认两个隧道 unit 都 enable:
|
||||
主 lanremote-tunnel quic + 8 条 + --metrics :20241
|
||||
副本 lanremote-tunnel-h2 http2 + 2 条 + --metrics :20242
|
||||
--protocol 支持 both(默认)/ quic / http2,非法值退出码 2
|
||||
* metrics 端口在两个 unit 里都显式钉死 ——
|
||||
实测停掉主实例再重启副实例时,副实例会抢 20241,
|
||||
于是 watchdog 和所有按端口读指标的脚本全部读错实例
|
||||
* MTU/MSS 收成单一出处:net-tune.sh 唯一负责 MSS 1360 + 接口 MTU 1400,
|
||||
deploy-tune.sh 只管 keepalive + 开机加速并调用 net-tune.sh。
|
||||
这样就不存在"谁后跑谁赢"
|
||||
* 按需重启:程序和 unit 都用 cmp 比对,一样就不落盘、不重启、
|
||||
不 daemon-reload(幂等重跑不再打断正在服务的连接)
|
||||
* 顺手修了一个会咬人的坑:单独用 --port 9090 时原来只改 unit 不改
|
||||
config.yml,隧道会回源到 8080,现象是"隧道通了但一访问就 502"
|
||||
* 域名:不传 --hostname 且 config.yml 里没有 hostname 时明确停下来
|
||||
要输入,不猜、不写 config、不启隧道
|
||||
|
||||
测试(三套全绿,实测数字):
|
||||
_build/test_deploy_sh.sh 110 通过 / 0 失败(Windows 沙箱)
|
||||
_build/test_zip_deploy.sh 30 通过 / 0 失败(从发布 zip 解压再跑)
|
||||
_build/test_deploy_device.sh 39 通过 / 0 失败(真机 Debian aarch64)
|
||||
真机那套桩掉了 systemctl/iptables/ip/sysctl/nmcli
|
||||
(--prefix 只隔离写文件,不隔离命令副作用),
|
||||
第 8 节专门验证线上零影响:relay/tunnel/h2 全 active、
|
||||
MTU=1400、MSS 规则数、keepalive 测前测后完全一致。
|
||||
|
||||
== 恢复被误删的文件 ==
|
||||
|
||||
排查过程中有人用通配符清了 $env:TEMP\tmp.*,而 Git Bash 的 /tmp
|
||||
正映射到那个 Windows 目录,导致两个被 git 跟踪的文件被删:
|
||||
_build/insert_stub_checks.py
|
||||
_build/inspect_pathtest.sh
|
||||
已从 git 恢复。
|
||||
|
||||
教训:用通配符删临时文件很危险,尤其是 /tmp 在 Windows 上
|
||||
映射到共享目录时。改成只删明确列出的文件名。
|
||||
|
||||
== 清理 ==
|
||||
|
||||
删掉这轮调试产生的临时输出(reg3.txt / td1.txt / td2.txt 等),
|
||||
不让它们进仓库。
|
||||
@@ -1,55 +0,0 @@
|
||||
[PASS] 真中转起来了
|
||||
|
||||
═══ 场景 1:DEVICE_TTL 清理 + allow_new=False 的死亡组合 ═══
|
||||
[PASS] 设备首次注册成功
|
||||
[PASS] 关掉「允许新设备接入」成功
|
||||
[PASS] 【对照】设备还在 devices 里时,老设备能通过开关
|
||||
等 5 秒让设备超时…
|
||||
[PASS] 【前提】超时设备已被 snapshot 清出 devices
|
||||
[PASS] 【前提】该设备的码绑定也已被清(codes 成对清理)
|
||||
[PASS] 超时清理后老设备仍能重新上线
|
||||
[PASS] 【归因】打开开关后同一 deviceId 立刻能注册(证明是被开关挡的)
|
||||
|
||||
═══ 场景 2:改码 A->B->C 后 codes 里有没有留孤儿 ═══
|
||||
[PASS] 设备注册(码 A)
|
||||
[PASS] 改码 A->B 成功
|
||||
[PASS] 改码 B->C 成功
|
||||
[PASS] 一台设备只占一个码(codeCount 与设备数一致)
|
||||
[PASS] 设备当前码是 C
|
||||
[PASS] 旧码 A 已被释放(另一台设备能占用)
|
||||
|
||||
═══ 场景 3:改码之后重启,codes 是否还原成自洽状态 ═══
|
||||
[PASS] 再改成 B
|
||||
[PASS] state.json 里该设备只有一条码绑定
|
||||
|
||||
═══ 场景 4:deviceId 塞奇怪字符 ═══
|
||||
[PASS] 非法 deviceId(超长 200 字符)被拒绝而不是崩溃
|
||||
[PASS] 非法 deviceId(控制字符)被拒绝而不是崩溃
|
||||
[PASS] 非法 deviceId(路径分隔符)被拒绝而不是崩溃
|
||||
[PASS] 非法 deviceId(Unicode)被拒绝而不是崩溃
|
||||
[PASS] 非法 deviceId(只有空格)被拒绝而不是崩溃
|
||||
|
||||
═══ 场景 5:并发改码(两个线程同时改同一台设备)═══
|
||||
[PASS] 并发改码没抛异常
|
||||
[PASS] 并发后设备还在
|
||||
[PASS] 并发后设备当前码是 X 或 Y 之一
|
||||
[PASS] 并发改码后输掉的那个码没有变成孤儿(别的设备能占)
|
||||
|
||||
═══ 场景 6:管理接口未鉴权访问 ═══
|
||||
[PASS] 未鉴权 POST /v1/admin/allow_new 被拒(401/403)
|
||||
[PASS] 未鉴权 POST /v1/admin/set_code 被拒(401/403)
|
||||
[PASS] 未鉴权 POST /v1/admin/delete 被拒(401/403)
|
||||
[PASS] 未鉴权 POST /v1/admin/delete_all 被拒(401/403)
|
||||
|
||||
═══ 场景 7:设备列表为空时管理页是否 500 ═══
|
||||
[PASS] 设备列表为空时管理页仍正常渲染
|
||||
[PASS] 空列表页面没有 traceback
|
||||
|
||||
═══ 场景 8:关掉开关后重启中转,开关状态是否还在 ═══
|
||||
[PASS] 关掉开关
|
||||
[PASS] 重启后中转起来了
|
||||
[PASS] 重启后 allowNew 仍为 False(持久化生效)
|
||||
|
||||
==============================================================
|
||||
通过 34 项,失败 0 项
|
||||
==============================================================
|
||||
@@ -1,55 +0,0 @@
|
||||
[PASS] 真中转起来了
|
||||
|
||||
═══ 场景 1:DEVICE_TTL 清理 + allow_new=False 的死亡组合 ═══
|
||||
[PASS] 设备首次注册成功
|
||||
[PASS] 关掉「允许新设备接入」成功
|
||||
[PASS] 【对照】设备还在 devices 里时,老设备能通过开关
|
||||
等 5 秒让设备超时…
|
||||
[PASS] 【前提】超时设备已被 snapshot 清出 devices
|
||||
[PASS] 【前提】该设备的码绑定也已被清(codes 成对清理)
|
||||
[PASS] 超时清理后老设备仍能重新上线
|
||||
[PASS] 【归因】打开开关后同一 deviceId 立刻能注册(证明是被开关挡的)
|
||||
|
||||
═══ 场景 2:改码 A->B->C 后 codes 里有没有留孤儿 ═══
|
||||
[PASS] 设备注册(码 A)
|
||||
[PASS] 改码 A->B 成功
|
||||
[PASS] 改码 B->C 成功
|
||||
[PASS] 一台设备只占一个码(codeCount 与设备数一致)
|
||||
[PASS] 设备当前码是 C
|
||||
[PASS] 旧码 A 已被释放(另一台设备能占用)
|
||||
|
||||
═══ 场景 3:改码之后重启,codes 是否还原成自洽状态 ═══
|
||||
[PASS] 再改成 B
|
||||
[PASS] state.json 里该设备只有一条码绑定
|
||||
|
||||
═══ 场景 4:deviceId 塞奇怪字符 ═══
|
||||
[PASS] 非法 deviceId(超长 200 字符)被拒绝而不是崩溃
|
||||
[PASS] 非法 deviceId(控制字符)被拒绝而不是崩溃
|
||||
[FAIL] 非法 deviceId(路径分隔符)被拒绝而不是崩溃 —— {'ok': True, 'token': '64c472759d8098f2402a87a5f6d8abd19ec617c6a44ddb93', 'code': '067393', 'note': '', 'pollSeconds': 2.0}
|
||||
[PASS] 非法 deviceId(Unicode)被拒绝而不是崩溃
|
||||
[PASS] 非法 deviceId(只有空格)被拒绝而不是崩溃
|
||||
|
||||
═══ 场景 5:并发改码(两个线程同时改同一台设备)═══
|
||||
[PASS] 并发改码没抛异常
|
||||
[PASS] 并发后设备还在
|
||||
[PASS] 并发后设备当前码是 X 或 Y 之一
|
||||
[PASS] 并发改码后输掉的那个码没有变成孤儿(别的设备能占)
|
||||
|
||||
═══ 场景 6:管理接口未鉴权访问 ═══
|
||||
[PASS] 未鉴权 POST /v1/admin/allow_new 被拒(401/403)
|
||||
[PASS] 未鉴权 POST /v1/admin/set_code 被拒(401/403)
|
||||
[PASS] 未鉴权 POST /v1/admin/delete 被拒(401/403)
|
||||
[PASS] 未鉴权 POST /v1/admin/delete_all 被拒(401/403)
|
||||
|
||||
═══ 场景 7:设备列表为空时管理页是否 500 ═══
|
||||
[PASS] 设备列表为空时管理页仍正常渲染
|
||||
[PASS] 空列表页面没有 traceback
|
||||
|
||||
═══ 场景 8:关掉开关后重启中转,开关状态是否还在 ═══
|
||||
[PASS] 关掉开关
|
||||
[PASS] 重启后中转起来了
|
||||
[PASS] 重启后 allowNew 仍为 False(持久化生效)
|
||||
|
||||
==============================================================
|
||||
通过 33 项,失败 1 项
|
||||
==============================================================
|
||||
@@ -1,27 +0,0 @@
|
||||
|
||||
═══ 复现:管理员关掉「允许新设备接入」,电脑隔夜再开机 ═══
|
||||
[PASS] ① 电脑首次登记成功
|
||||
[PASS] ② 管理员关掉「允许新设备接入」
|
||||
[PASS] ③ 电脑当场重连仍然可以(开关只挡新设备)
|
||||
… 电脑关机了。等 4 秒模拟“隔夜”(真实是 6 小时)
|
||||
[PASS] ④ 中转把超时设备清掉了(设计中如此)
|
||||
磁盘 relay_state.json 里还有这台设备的码绑定: False
|
||||
内存里 codeCount=0
|
||||
[PASS] ⑤ 电脑第二天开机 —— 应该能连上
|
||||
|
||||
═══ 追问:重启中转能不能救回来? ═══
|
||||
重启后磁盘里这台设备的码绑定: False
|
||||
重启后内存 codeCount=0
|
||||
重启后 allowNew=False
|
||||
[PASS] ⑥ 重启中转后电脑能连上(说明重启能救回来)
|
||||
|
||||
═══ 追问:有没有绕过口子? ═══
|
||||
[PASS] ⑦ 换新 deviceId 重装 —— 同样被挡(符合开关语义)
|
||||
[PASS] ⑧ 新 deviceId + 老配对码 —— 也被挡
|
||||
|
||||
═══ 对照:打开开关后是否一切恢复 ═══
|
||||
[PASS] ⑨ 打开开关后原设备恢复
|
||||
|
||||
==============================================================
|
||||
通过 9 项,失败 0 项
|
||||
==============================================================
|
||||
@@ -1,9 +0,0 @@
|
||||
═══ 1. cli_relay_status()(不在 try 里)═══
|
||||
它打印的内容:
|
||||
(没有抛异常)
|
||||
|
||||
═══ 2. cli_relay(url)(在 try 里)═══
|
||||
它打印的内容:
|
||||
返回值: 1
|
||||
|
||||
═══ 3. 结论 ═══
|
||||
@@ -1,28 +0,0 @@
|
||||
中转端口 59913 被控端端口 59914
|
||||
中转就绪
|
||||
被控端登记: 成功
|
||||
|
||||
── 照 bench 的顺序:attach -> pair ──
|
||||
attach: 0ms ok=True session=223aadf1
|
||||
send pair: 1ms status=200
|
||||
poll#1: 17ms status=200 收到 102 字节
|
||||
✓ pair 回复: {"ok": true, "token": "83dbc727003b9fb32c896b4a1a6fd55b", "serverName": "基准测试电脑", "protocol": 1}
|
||||
ping#1: OK
|
||||
ping#2: OK
|
||||
ping#3: OK
|
||||
ping#4: OK
|
||||
ping#5: OK
|
||||
|
||||
════ 被控端日志(最后 25 行)════
|
||||
|
||||
════ 进程还活着吗 ════
|
||||
agent poll = None
|
||||
|
||||
════ 中转日志(最后 10 行)════
|
||||
[10-07 18:18:24] 中转服务器 v1.8.2 启动,监听 127.0.0.1:59913
|
||||
[10-07 18:18:24] 长轮询 2 秒 · 队列上限 2048 KB · 数据目录 C:\Users\shu\AppData\Local\Temp\benchdiag_v6uvedpl\r
|
||||
[10-07 18:18:24] 管理页:http://<本机>:59913/?key=lMvZ9w12vLnidllvR41PFZWg
|
||||
[10-07 18:18:24] (钥匙也在 C:\Users\shu\AppData\Local\Temp\benchdiag_v6uvedpl\r\admin_key.txt)
|
||||
[10-07 18:18:25] 被控端上线:基准测试电脑 码 975310 (基准测试电脑-f308c…)
|
||||
[10-07 18:18:25] 注册请求 -> ok=True
|
||||
[10-07 18:18:25] 手表接入:基准测试手表 (127.0.0.1) -> 基准测试电脑
|
||||
@@ -1,29 +0,0 @@
|
||||
插桩了 4 处
|
||||
插桩中转起来了
|
||||
被控端登记: 插桩电脑
|
||||
手表接入: ok=True
|
||||
1. pair OK 21ms
|
||||
2. ping OK 82ms
|
||||
3. ping OK 4ms
|
||||
4. ping OK 6ms
|
||||
|
||||
════ 插桩日志(中转侧数据流)════
|
||||
[10-07 17:59:09] [INS] agent/poll 进入,to_agent=0B,current_session=-
|
||||
[10-07 17:59:10] [INS] client/send 70B -> to_agent 现有 0B,会话 d21cd512,current_session=d21cd512
|
||||
[10-07 17:59:10] [INS] agent/poll 返回 70B,current_session=d21cd512
|
||||
[10-07 17:59:10] [INS] agent/poll 进入,to_agent=0B,current_session=d21cd512
|
||||
[10-07 17:59:10] [INS] agent/send 96B,active_session=d21cd512
|
||||
[10-07 17:59:10] [INS] client/send 16B -> to_agent 现有 0B,会话 d21cd512,current_session=d21cd512
|
||||
[10-07 17:59:10] [INS] agent/poll 返回 16B,current_session=d21cd512
|
||||
[10-07 17:59:10] [INS] agent/poll 进入,to_agent=0B,current_session=d21cd512
|
||||
[10-07 17:59:10] [INS] agent/send 49B,active_session=d21cd512
|
||||
[10-07 17:59:10] [INS] client/send 16B -> to_agent 现有 0B,会话 d21cd512,current_session=d21cd512
|
||||
[10-07 17:59:10] [INS] agent/poll 返回 16B,current_session=d21cd512
|
||||
[10-07 17:59:10] [INS] agent/poll 进入,to_agent=0B,current_session=d21cd512
|
||||
[10-07 17:59:10] [INS] agent/send 50B,active_session=d21cd512
|
||||
[10-07 17:59:10] [INS] client/send 16B -> to_agent 现有 0B,会话 d21cd512,current_session=d21cd512
|
||||
[10-07 17:59:10] [INS] agent/poll 返回 16B,current_session=d21cd512
|
||||
[10-07 17:59:10] [INS] agent/poll 进入,to_agent=0B,current_session=d21cd512
|
||||
[10-07 17:59:10] [INS] agent/send 50B,active_session=d21cd512
|
||||
|
||||
════ 被控端日志 ════
|
||||
@@ -1,19 +0,0 @@
|
||||
==================================================================
|
||||
局域网直连 vs 跨网络中转 (每种路径 40 次 cmd:ping)
|
||||
==================================================================
|
||||
一、起本地中转(端口 59763)
|
||||
中转就绪
|
||||
被控端就绪(局域网在听,中转已上线)
|
||||
|
||||
局域网 握手 16 ms 成功 40/40 (100.0%) 中位 0 P90 0 最小 0 最大 0 ms
|
||||
中转 握手 0 ms 成功 0/ 2 ( 0.0%) 中位 0 P90 0 最小 0 最大 0 ms
|
||||
连接阶段失败: timed out
|
||||
|
||||
==================================================================
|
||||
对比
|
||||
==================================================================
|
||||
有路径没跑通,无法对比
|
||||
中转 : 连接阶段失败: timed out
|
||||
|
||||
BENCH_RESULT lan_median=0 lan_p90=0 lan_ok=40/40 lan_connect=16 relay_median=0 relay_p90=0 relay_ok=0/2 relay_connect=0
|
||||
**有路径没跑通**
|
||||
@@ -1,19 +0,0 @@
|
||||
==================================================================
|
||||
局域网直连 vs 跨网络中转 (每种路径 30 次 cmd:ping)
|
||||
==================================================================
|
||||
一、起本地中转(端口 59815)
|
||||
中转就绪
|
||||
被控端就绪(局域网在听,中转已上线)
|
||||
|
||||
局域网 握手 17 ms 成功 30/30 (100.0%) 中位 0 P90 0 最小 0 最大 1 ms
|
||||
中转 握手 0 ms 成功 0/30 ( 0.0%) 中位 0 P90 0 最小 0 最大 0 ms
|
||||
连接阶段失败: timed out
|
||||
|
||||
==================================================================
|
||||
对比
|
||||
==================================================================
|
||||
有路径没跑通,无法对比
|
||||
中转 : 连接阶段失败: timed out
|
||||
|
||||
BENCH_RESULT lan_median=0 lan_p90=0 lan_ok=30/30 lan_connect=17 relay_median=0 relay_p90=0 relay_ok=0/30 relay_connect=0
|
||||
**有路径没跑通**
|
||||
@@ -1,19 +0,0 @@
|
||||
==================================================================
|
||||
局域网直连 vs 跨网络中转 (每种路径 30 次 cmd:ping)
|
||||
==================================================================
|
||||
一、起本地中转(端口 60008)
|
||||
中转就绪
|
||||
被控端就绪(局域网在听,中转已上线)
|
||||
|
||||
局域网 握手 2 ms 成功 30/30 (100.0%) 中位 0 P90 0 最小 0 最大 0 ms
|
||||
中转 握手 0 ms 成功 0/30 ( 0.0%) 中位 0 P90 0 最小 0 最大 0 ms
|
||||
连接阶段失败: timed out
|
||||
|
||||
==================================================================
|
||||
对比
|
||||
==================================================================
|
||||
有路径没跑通,无法对比
|
||||
中转 : 连接阶段失败: timed out
|
||||
|
||||
BENCH_RESULT lan_median=0 lan_p90=0 lan_ok=30/30 lan_connect=2 relay_median=0 relay_p90=0 relay_ok=0/30 relay_connect=0
|
||||
**有路径没跑通**
|
||||
@@ -1,20 +0,0 @@
|
||||
==================================================================
|
||||
局域网直连 vs 跨网络中转 (每种路径 30 次 cmd:ping)
|
||||
==================================================================
|
||||
一、起本地中转(端口 60086)
|
||||
中转就绪
|
||||
被控端就绪(局域网在听,中转已上线)
|
||||
|
||||
局域网 握手 16 ms 成功 30/30 (100.0%) 中位 0 P90 0 最小 0 最大 1 ms
|
||||
中转 握手 46 ms 成功 30/30 (100.0%) 中位 15 P90 29 最小 1 最大 32 ms
|
||||
|
||||
==================================================================
|
||||
对比
|
||||
==================================================================
|
||||
中位延迟 局域网 0.0 ms 中转 15.1 ms -> 局域网快 0.0 倍
|
||||
P90 延迟 局域网 0 ms 中转 29 ms
|
||||
握手耗时 局域网 16 ms 中转 46 ms
|
||||
成功率 局域网 100.0% 中转 100.0%
|
||||
|
||||
BENCH_RESULT lan_median=0 lan_p90=0 lan_ok=30/30 lan_connect=16 relay_median=15 relay_p90=29 relay_ok=30/30 relay_connect=46
|
||||
两条路都跑通了
|
||||
@@ -1,20 +0,0 @@
|
||||
[PASS] 基准脚本存在
|
||||
---- 一、两条路用不同的配对码 ----
|
||||
[PASS] 定义了局域网用的 code
|
||||
[PASS] 定义了中转用的 relay_code
|
||||
[PASS] 两个码不一样(否则第 2 台会被一码一机规则拒掉)
|
||||
---- 二、attach 要用 relay_code ----
|
||||
[PASS] 能定位到 relay_connect
|
||||
[PASS] relay_connect 里用的是 relay_code
|
||||
[PASS] relay_connect 里没有裸 attach(code)
|
||||
---- 三、start_agent 的判据要认码 ----
|
||||
[PASS] start_agent 接受码参数
|
||||
[PASS] 没有「只看有没有在线设备」的松判据
|
||||
[PASS] 判据里比对了配对码
|
||||
---- 四、真跑一遍短基准(两条路都要通)----
|
||||
[PASS] 基准跑完并输出了 BENCH_RESULT
|
||||
[PASS] 局域网那条路通了
|
||||
[PASS] 中转那条路通了
|
||||
|
||||
========================================================
|
||||
通过 13 项,失败 0 项
|
||||
Binary file not shown.
-294
@@ -1,294 +0,0 @@
|
||||
|
||||
======================================================================
|
||||
0/7 清理残留进程与端口
|
||||
======================================================================
|
||||
端口干净
|
||||
清掉上次测试残留的 4 个文件
|
||||
|
||||
======================================================================
|
||||
0/7 编码审计(BOM / 行尾 / 乱码)
|
||||
======================================================================
|
||||
|
||||
==========================================================================
|
||||
✓ 全部通过,没有编码问题
|
||||
|
||||
======================================================================
|
||||
1/7 Python 被控端协议回归
|
||||
======================================================================
|
||||
[PASS] 移除后仅剩 1 台
|
||||
|
||||
====================================================================
|
||||
通过 69 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
1b/7 防火墙阻止规则检测(真机连不上的根因)
|
||||
======================================================================
|
||||
====================================================================
|
||||
通过 43 项,失败 0 项
|
||||
====================================================================
|
||||
|
||||
======================================================================
|
||||
1c/7 连不上?-> 电脑打开网络自检(UDP 链路)
|
||||
======================================================================
|
||||
============================================================
|
||||
通过 5 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
1e/7 新增功能(电量/磁盘/性能/进程/剪贴板历史/安全边界)
|
||||
======================================================================
|
||||
==============================================================
|
||||
通过 22 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
1f/7 电脑功能注册表(39 个功能 + 安全边界 + 可配置)
|
||||
======================================================================
|
||||
==============================================================
|
||||
通过 29 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
1g/7 功能模糊测试(105 个功能 × 空参数 / 垃圾参数 / 越权路径)
|
||||
======================================================================
|
||||
[崩溃] hand_reset({}) -> FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\shu\\AppData\\Local\\Temp\\tmp8myil6kd\\settings.json'
|
||||
[崩溃] lesson_timer({}) -> FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\shu\\AppData\\Local\\Temp\\tmp8myil6kd\\settings.json'
|
||||
[崩溃] loop_play({}) -> FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\shu\\AppData\\Local\\Temp\\tmp8myil6kd\\settings.json'
|
||||
|
||||
======================================================================
|
||||
1h/7 端到端(打包后的 EXE:配对 / 功能列表 / 越权 / 防爆破)
|
||||
======================================================================
|
||||
|
||||
==============================================================
|
||||
通过 13 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
1i/7 静默模式(0 窗口 / 无终端 / 认证仍生效)
|
||||
======================================================================
|
||||
|
||||
==============================================================
|
||||
通过 8 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
1j/7 配一次→零窗口(令牌重连,全程无窗口)
|
||||
======================================================================
|
||||
|
||||
==============================================================
|
||||
通过 12 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
1k/7 首次安装设置窗口(出现一次,之后不再出现)
|
||||
======================================================================
|
||||
|
||||
==============================================================
|
||||
通过 14 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
1l/7 开机零窗口(照注册表里的自启命令真跑一遍)
|
||||
======================================================================
|
||||
|
||||
==============================================================
|
||||
通过 7 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
2/7 手表屏幕布局适配核算 (490x602)
|
||||
======================================================================
|
||||
|
||||
==========================================================================
|
||||
通过 40 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
1z/7 手表分页完整性(防白屏:方法定义了必须被调用)
|
||||
======================================================================
|
||||
sendMedia: 已被 media() 取代
|
||||
showInfo: 已被 feature_run 的 info 取代
|
||||
sp: 旧的字号辅助,已被 dp() 取代
|
||||
|
||||
==========================================================
|
||||
通过 13 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
2a2/7 APK 内容(诊断已合并进主程序)
|
||||
======================================================================
|
||||
通过 15 项,失败 0 项
|
||||
====================================================================
|
||||
|
||||
======================================================================
|
||||
2a/7 网络调优(MTU 修复)
|
||||
======================================================================
|
||||
[PASS] 写了接口 MTU 1400 更差的教训
|
||||
|
||||
==========================================================
|
||||
通过 21 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
2b/7 投图显示方式(屏幕中间 / 全屏 / 自定义大小)
|
||||
======================================================================
|
||||
==============================================================
|
||||
通过 19 项,失败 0 项
|
||||
截图目录: C:\Users\shu\Desktop\deepseekagent\LanRemote\_tests\shots
|
||||
|
||||
======================================================================
|
||||
3/7 屏幕共享可见提示(真实界面 + Win32 窗口枚举)
|
||||
======================================================================
|
||||
|
||||
====================================================================
|
||||
通过 13 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
2b/7 中转 chunked 请求体(防连接错位)
|
||||
======================================================================
|
||||
通过 9 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
3a/7 局域网直连路径(不经中转)
|
||||
======================================================================
|
||||
通过 29 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
3a2/7 局域网优化(网段掩码 / 发现重发 / 回切)
|
||||
======================================================================
|
||||
通过 42 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
3a3/7 手表局域网切换逻辑(源码断言)
|
||||
======================================================================
|
||||
通过 31 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
3a4/7 编码与换行(.java/.py 必须 UTF-8 无 BOM + LF)
|
||||
======================================================================
|
||||
检查 24 个文件,编码/换行全部符合约定
|
||||
|
||||
======================================================================
|
||||
3b/7 Python 静态检查(pyflakes)
|
||||
======================================================================
|
||||
✓ 没有会导致崩溃的问题
|
||||
|
||||
======================================================================
|
||||
3b3/7 安装包脚本语法(Inno 的注释陷阱)
|
||||
======================================================================
|
||||
[Code] 段落里没有违规写法 ✓
|
||||
|
||||
======================================================================
|
||||
3b4/7 卸载逻辑(不能杀自己 / 不能阻塞)
|
||||
======================================================================
|
||||
通过 11 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
3b2/7 管理页网络体检
|
||||
======================================================================
|
||||
通过 15 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
3b5/7 安装包完整周期(装 -> 验 -> 卸 -> 再验)
|
||||
======================================================================
|
||||
通过 20 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
3b6/7 网页响应头(Content-Type / HEAD)
|
||||
======================================================================
|
||||
通过 12 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
3b7/7 对外材料清洁度(不许出现管理后台)
|
||||
======================================================================
|
||||
通过 15 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
3c/7 中转管理端批量删除
|
||||
======================================================================
|
||||
通过 24 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
3d/7 管理页 JS 合法性(防幽灵按键)
|
||||
======================================================================
|
||||
结论:JS 合法,删除按钮能正常工作
|
||||
|
||||
======================================================================
|
||||
3e/7 管理页设备控制(接入开关 + 改配对码)
|
||||
======================================================================
|
||||
通过 23 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
4b/7 手表 Activity 骨架(防白屏)
|
||||
======================================================================
|
||||
通过 24 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
4c/7 编译整个手表 App(含界面代码)
|
||||
======================================================================
|
||||
App 编译通过
|
||||
|
||||
======================================================================
|
||||
5/7 编译 Java 协议层
|
||||
======================================================================
|
||||
编译通过
|
||||
|
||||
======================================================================
|
||||
6/7 Java <-> 桩服务端 跨语言联调
|
||||
======================================================================
|
||||
[PASS] 关闭后 isConnected 为 false
|
||||
|
||||
====================================================================
|
||||
通过 64 项,失败 0 项
|
||||
|
||||
======================================================================
|
||||
7/7 Java <-> 打包后的 EXE 端到端联调
|
||||
======================================================================
|
||||
EXE 配对码: 421865
|
||||
[PASS] 关闭后 isConnected 为 false
|
||||
|
||||
====================================================================
|
||||
通过 64 项,失败 0 项
|
||||
|
||||
EXE 接收到的文件:
|
||||
1,024 B broken.png
|
||||
307,207 B java_payload.bin
|
||||
202 B java_photo.png
|
||||
16,044 B java_sound.wav
|
||||
|
||||
======================================================================
|
||||
验证汇总
|
||||
======================================================================
|
||||
|
||||
项目 结果
|
||||
-- --
|
||||
编码审计 PASS
|
||||
Python 被控端协议回归 PASS
|
||||
防火墙阻止规则检测 PASS
|
||||
自检请求链路 PASS
|
||||
新增功能 PASS
|
||||
电脑功能注册表 PASS
|
||||
功能模糊测试 PASS
|
||||
端到端(打包 EXE) PASS
|
||||
静默模式 PASS
|
||||
配一次→零窗口 PASS
|
||||
首次设置窗口 PASS
|
||||
开机零窗口 PASS
|
||||
手表布局适配 PASS
|
||||
手表分页完整性 PASS
|
||||
APK 内容 PASS
|
||||
网络调优(MTU) PASS
|
||||
投图显示方式 PASS
|
||||
屏幕共享强制提示 PASS
|
||||
中转 chunked 请求体 PASS
|
||||
局域网直连路径 PASS
|
||||
局域网优化 PASS
|
||||
手表局域网切换 PASS
|
||||
编码与换行 PASS
|
||||
Python 静态检查 PASS
|
||||
安装包脚本语法 PASS
|
||||
卸载逻辑 PASS
|
||||
管理页网络体检 PASS
|
||||
安装包完整周期 PASS
|
||||
网页响应头 PASS
|
||||
对外材料清洁度 PASS
|
||||
中转批量删除 PASS
|
||||
管理页 JS 合法性 PASS
|
||||
管理页设备控制 PASS
|
||||
手表 Activity 骨架 PASS
|
||||
手表 App 整体编译 PASS
|
||||
Java 协议层编译 PASS
|
||||
Java <-> 桩服务端 PASS
|
||||
Java <-> 打包 EXE PASS
|
||||
|
||||
|
||||
全部通过
|
||||
@@ -1,294 +0,0 @@
|
||||
|
||||
======================================================================
|
||||
0/7 清理残留进程与端口
|
||||
======================================================================
|
||||
端口干净
|
||||
清掉上次测试残留的 4 个文件
|
||||
|
||||
======================================================================
|
||||
0/7 编码审计(BOM / 行尾 / 乱码)
|
||||
======================================================================
|
||||
|
||||
==========================================================================
|
||||
鉁?鍏ㄩ儴閫氳繃锛屾病鏈夌紪鐮侀棶棰?
|
||||
|
||||
======================================================================
|
||||
1/7 Python 被控端协议回归
|
||||
======================================================================
|
||||
[PASS] 绉婚櫎鍚庝粎鍓?1 鍙?
|
||||
|
||||
====================================================================
|
||||
閫氳繃 69 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
1b/7 防火墙阻止规则检测(真机连不上的根因)
|
||||
======================================================================
|
||||
====================================================================
|
||||
閫氳繃 43 椤癸紝澶辫触 0 椤?
|
||||
====================================================================
|
||||
|
||||
======================================================================
|
||||
1c/7 连不上?-> 电脑打开网络自检(UDP 链路)
|
||||
======================================================================
|
||||
============================================================
|
||||
閫氳繃 5 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
1e/7 新增功能(电量/磁盘/性能/进程/剪贴板历史/安全边界)
|
||||
======================================================================
|
||||
==============================================================
|
||||
閫氳繃 22 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
1f/7 电脑功能注册表(39 个功能 + 安全边界 + 可配置)
|
||||
======================================================================
|
||||
==============================================================
|
||||
閫氳繃 29 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
1g/7 功能模糊测试(105 个功能 × 空参数 / 垃圾参数 / 越权路径)
|
||||
======================================================================
|
||||
[宕╂簝] hand_reset({}) -> FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\shu\\AppData\\Local\\Temp\\tmp5d758dnb\\settings.json'
|
||||
[宕╂簝] lesson_timer({}) -> FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\shu\\AppData\\Local\\Temp\\tmp5d758dnb\\settings.json'
|
||||
[宕╂簝] loop_play({}) -> FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\shu\\AppData\\Local\\Temp\\tmp5d758dnb\\settings.json'
|
||||
|
||||
======================================================================
|
||||
1h/7 端到端(打包后的 EXE:配对 / 功能列表 / 越权 / 防爆破)
|
||||
======================================================================
|
||||
|
||||
==============================================================
|
||||
閫氳繃 13 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
1i/7 静默模式(0 窗口 / 无终端 / 认证仍生效)
|
||||
======================================================================
|
||||
|
||||
==============================================================
|
||||
閫氳繃 8 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
1j/7 配一次→零窗口(令牌重连,全程无窗口)
|
||||
======================================================================
|
||||
|
||||
==============================================================
|
||||
閫氳繃 12 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
1k/7 首次安装设置窗口(出现一次,之后不再出现)
|
||||
======================================================================
|
||||
|
||||
==============================================================
|
||||
閫氳繃 14 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
1l/7 开机零窗口(照注册表里的自启命令真跑一遍)
|
||||
======================================================================
|
||||
|
||||
==============================================================
|
||||
閫氳繃 7 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
2/7 手表屏幕布局适配核算 (490x602)
|
||||
======================================================================
|
||||
|
||||
==========================================================================
|
||||
閫氳繃 40 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
1z/7 手表分页完整性(防白屏:方法定义了必须被调用)
|
||||
======================================================================
|
||||
sendMedia: 宸茶� media() 鍙栦唬
|
||||
showInfo: 宸茶� feature_run 鐨?info 鍙栦唬
|
||||
sp: 鏃х殑瀛楀彿杈呭姪锛屽凡琚?dp() 鍙栦唬
|
||||
|
||||
==========================================================
|
||||
閫氳繃 13 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
2a2/7 APK 内容(诊断已合并进主程序)
|
||||
======================================================================
|
||||
閫氳繃 15 椤癸紝澶辫触 0 椤?
|
||||
====================================================================
|
||||
|
||||
======================================================================
|
||||
2a/7 网络调优(MTU 修复)
|
||||
======================================================================
|
||||
[PASS] 鍐欎簡鎺ュ彛 MTU 1400 鏇村樊鐨勬暀璁?
|
||||
|
||||
==========================================================
|
||||
閫氳繃 20 椤癸紝澶辫触 1 椤?
|
||||
|
||||
======================================================================
|
||||
2b/7 投图显示方式(屏幕中间 / 全屏 / 自定义大小)
|
||||
======================================================================
|
||||
==============================================================
|
||||
閫氳繃 19 椤癸紝澶辫触 0 椤?
|
||||
鎴�浘鐩�綍: C:\Users\shu\Desktop\deepseekagent\LanRemote\_tests\shots
|
||||
|
||||
======================================================================
|
||||
3/7 屏幕共享可见提示(真实界面 + Win32 窗口枚举)
|
||||
======================================================================
|
||||
|
||||
====================================================================
|
||||
閫氳繃 13 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
2b/7 中转 chunked 请求体(防连接错位)
|
||||
======================================================================
|
||||
閫氳繃 9 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
3a/7 局域网直连路径(不经中转)
|
||||
======================================================================
|
||||
閫氳繃 29 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
3a2/7 局域网优化(网段掩码 / 发现重发 / 回切)
|
||||
======================================================================
|
||||
閫氳繃 42 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
3a3/7 手表局域网切换逻辑(源码断言)
|
||||
======================================================================
|
||||
閫氳繃 31 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
3a4/7 编码与换行(.java/.py 必须 UTF-8 无 BOM + LF)
|
||||
======================================================================
|
||||
妫€鏌?24 涓�枃浠讹紝缂栫爜/鎹㈣�鍏ㄩ儴绗﹀悎绾﹀畾
|
||||
|
||||
======================================================================
|
||||
3b/7 Python 静态检查(pyflakes)
|
||||
======================================================================
|
||||
鉁?娌℃湁浼氬�鑷村穿婧冪殑闂��
|
||||
|
||||
======================================================================
|
||||
3b3/7 安装包脚本语法(Inno 的注释陷阱)
|
||||
======================================================================
|
||||
[Code] 娈佃惤閲屾病鏈夎繚瑙勫啓娉?鉁?
|
||||
|
||||
======================================================================
|
||||
3b4/7 卸载逻辑(不能杀自己 / 不能阻塞)
|
||||
======================================================================
|
||||
閫氳繃 11 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
3b2/7 管理页网络体检
|
||||
======================================================================
|
||||
閫氳繃 15 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
3b5/7 安装包完整周期(装 -> 验 -> 卸 -> 再验)
|
||||
======================================================================
|
||||
閫氳繃 20 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
3b6/7 网页响应头(Content-Type / HEAD)
|
||||
======================================================================
|
||||
閫氳繃 12 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
3b7/7 对外材料清洁度(不许出现管理后台)
|
||||
======================================================================
|
||||
閫氳繃 15 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
3c/7 中转管理端批量删除
|
||||
======================================================================
|
||||
閫氳繃 24 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
3d/7 管理页 JS 合法性(防幽灵按键)
|
||||
======================================================================
|
||||
缁撹�锛欽S 鍚堟硶锛屽垹闄ゆ寜閽�兘姝e父宸ヤ綔
|
||||
|
||||
======================================================================
|
||||
3e/7 管理页设备控制(接入开关 + 改配对码)
|
||||
======================================================================
|
||||
閫氳繃 23 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
4b/7 手表 Activity 骨架(防白屏)
|
||||
======================================================================
|
||||
閫氳繃 24 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
4c/7 编译整个手表 App(含界面代码)
|
||||
======================================================================
|
||||
App 编译通过
|
||||
|
||||
======================================================================
|
||||
5/7 编译 Java 协议层
|
||||
======================================================================
|
||||
编译通过
|
||||
|
||||
======================================================================
|
||||
6/7 Java <-> 桩服务端 跨语言联调
|
||||
======================================================================
|
||||
[PASS] 鍏抽棴鍚?isConnected 涓?false
|
||||
|
||||
====================================================================
|
||||
閫氳繃 64 椤癸紝澶辫触 0 椤?
|
||||
|
||||
======================================================================
|
||||
7/7 Java <-> 打包后的 EXE 端到端联调
|
||||
======================================================================
|
||||
EXE 配对码: 193406
|
||||
[PASS] 鍏抽棴鍚?isConnected 涓?false
|
||||
|
||||
====================================================================
|
||||
閫氳繃 64 椤癸紝澶辫触 0 椤?
|
||||
|
||||
EXE 接收到的文件:
|
||||
1,024 B broken.png
|
||||
307,207 B java_payload.bin
|
||||
202 B java_photo.png
|
||||
16,044 B java_sound.wav
|
||||
|
||||
======================================================================
|
||||
验证汇总
|
||||
======================================================================
|
||||
|
||||
项目 结果
|
||||
---- ----
|
||||
编码审计 PASS
|
||||
Python 被控端协议回归 PASS
|
||||
防火墙阻止规则检测 PASS
|
||||
自检请求链路 PASS
|
||||
新增功能 PASS
|
||||
电脑功能注册表 PASS
|
||||
功能模糊测试 PASS
|
||||
端到端(打包 EXE) PASS
|
||||
静默模式 PASS
|
||||
配一次→零窗口 PASS
|
||||
首次设置窗口 PASS
|
||||
开机零窗口 PASS
|
||||
手表布局适配 PASS
|
||||
手表分页完整性 PASS
|
||||
APK 内容 PASS
|
||||
网络调优(MTU) FAIL
|
||||
投图显示方式 PASS
|
||||
屏幕共享强制提示 PASS
|
||||
中转 chunked 请求体 PASS
|
||||
局域网直连路径 PASS
|
||||
局域网优化 PASS
|
||||
手表局域网切换 PASS
|
||||
编码与换行 PASS
|
||||
Python 静态检查 PASS
|
||||
安装包脚本语法 PASS
|
||||
卸载逻辑 PASS
|
||||
管理页网络体检 PASS
|
||||
安装包完整周期 PASS
|
||||
网页响应头 PASS
|
||||
对外材料清洁度 PASS
|
||||
中转批量删除 PASS
|
||||
管理页 JS 合法性 PASS
|
||||
管理页设备控制 PASS
|
||||
手表 Activity 骨架 PASS
|
||||
手表 App 整体编译 PASS
|
||||
Java 协议层编译 PASS
|
||||
Java <-> 桩服务端 PASS
|
||||
Java <-> 打包 EXE PASS
|
||||
|
||||
|
||||
项失败
|
||||
Binary file not shown.
@@ -1,35 +0,0 @@
|
||||
一、准备被控端
|
||||
[PASS] 配对码已设
|
||||
[PASS] 中转地址已设
|
||||
|
||||
二、起本地中转服务器
|
||||
[PASS] 中转已启动
|
||||
|
||||
三、起被控端(它会主动连中转)
|
||||
[PASS] 被控端登记到中转并在线
|
||||
[PASS] 中转看到的配对码正确
|
||||
[PASS] 中转看到设备名
|
||||
|
||||
四、模拟手表接入
|
||||
[PASS] 接入成功
|
||||
[PASS] 看到被控端名字
|
||||
|
||||
五、经中转发协议命令(这才是真验证)
|
||||
[PASS] 未配对时 ping 被拒(鉴权仍生效)
|
||||
[PASS] 配对成功(经中转)
|
||||
[PASS] 拿到设备令牌
|
||||
[PASS] 拿到被控端名字
|
||||
[PASS] 配对后 ping 正常
|
||||
[PASS] 功能列表经中转返回
|
||||
[PASS] 执行功能经中转成功
|
||||
[PASS] 功能真的有输出
|
||||
[PASS] info 经中转返回
|
||||
|
||||
六、换一个手表(中转应该踢掉旧的,被控端应认出新会话)
|
||||
[PASS] 第二个手表能接入
|
||||
[PASS] 新会话能用已保存的令牌直接登录
|
||||
[PASS] 新会话 ping 正常
|
||||
[PASS] 中转上只剩一个会话
|
||||
|
||||
==================================================================
|
||||
通过 21 项,失败 0 项
|
||||
@@ -173,3 +173,70 @@ time code ms
|
||||
2026-10-07 18:20:40 200 1432
|
||||
2026-10-07 18:20:56 200 1468
|
||||
2026-10-07 18:21:13 200 1462
|
||||
2026-10-07 18:21:29 200 1379
|
||||
2026-10-07 18:21:45 200 1133
|
||||
2026-10-07 18:22:02 200 1317
|
||||
2026-10-07 18:22:18 200 1444
|
||||
2026-10-07 18:22:35 200 1475
|
||||
2026-10-07 18:22:51 200 1275
|
||||
2026-10-07 18:23:07 200 1371
|
||||
2026-10-07 18:23:24 200 1401
|
||||
2026-10-07 18:23:40 200 1379
|
||||
2026-10-07 18:23:56 200 1060
|
||||
2026-10-07 18:24:12 200 1119
|
||||
2026-10-07 18:25:08 200 41240
|
||||
2026-10-07 18:25:24 200 849
|
||||
2026-10-07 18:25:41 200 1726
|
||||
2026-10-07 18:25:57 200 830
|
||||
2026-10-07 18:26:13 200 837
|
||||
2026-10-07 18:26:29 200 908
|
||||
2026-10-07 18:26:44 200 854
|
||||
2026-10-07 18:27:25 0 25396
|
||||
2026-10-07 18:27:41 200 812
|
||||
2026-10-07 18:27:57 200 903
|
||||
2026-10-07 18:28:12 200 820
|
||||
2026-10-07 18:28:28 200 884
|
||||
2026-10-07 18:28:44 200 814
|
||||
2026-10-07 18:29:00 200 951
|
||||
2026-10-07 18:29:16 200 824
|
||||
2026-10-07 18:29:32 200 823
|
||||
2026-10-07 18:29:49 200 1882
|
||||
2026-10-07 18:30:04 200 822
|
||||
2026-10-07 18:30:20 200 816
|
||||
2026-10-07 18:30:36 200 742
|
||||
2026-10-07 18:31:13 200 22350
|
||||
2026-10-07 18:31:51 200 22209
|
||||
2026-10-07 18:32:28 200 22508
|
||||
2026-10-07 18:33:05 200 22096
|
||||
2026-10-07 18:33:21 200 871
|
||||
2026-10-07 18:33:37 200 720
|
||||
2026-10-07 18:33:53 200 881
|
||||
2026-10-07 18:34:08 200 846
|
||||
2026-10-07 18:34:24 200 783
|
||||
2026-10-07 18:34:40 200 824
|
||||
2026-10-07 18:34:56 200 711
|
||||
2026-10-07 18:35:33 200 22465
|
||||
2026-10-07 18:35:50 200 1671
|
||||
2026-10-07 18:36:06 200 998
|
||||
2026-10-07 18:36:22 200 1079
|
||||
2026-10-07 18:36:38 200 1381
|
||||
2026-10-07 18:36:54 200 1097
|
||||
2026-10-07 18:37:11 200 1387
|
||||
2026-10-07 18:37:27 200 1445
|
||||
2026-10-07 18:37:43 200 1116
|
||||
2026-10-07 18:38:00 200 1408
|
||||
2026-10-07 18:38:16 200 1504
|
||||
2026-10-07 18:38:33 200 1488
|
||||
2026-10-07 18:38:49 200 1470
|
||||
2026-10-07 18:39:06 200 1309
|
||||
2026-10-07 18:39:22 200 1394
|
||||
2026-10-07 18:39:38 200 1037
|
||||
2026-10-07 18:39:55 200 1461
|
||||
2026-10-07 18:40:11 200 1001
|
||||
2026-10-07 18:40:28 200 2367
|
||||
2026-10-07 18:40:44 200 1371
|
||||
2026-10-07 18:41:01 200 1404
|
||||
2026-10-07 18:41:17 200 1669
|
||||
2026-10-07 18:41:34 200 1914
|
||||
2026-10-07 18:41:51 200 1286
|
||||
2026-10-07 18:42:07 200 1029
|
||||
|
||||
|
@@ -1,23 +0,0 @@
|
||||
════════ 场景 A:两条路用同一个配对码(复刻 bench 现状)════════
|
||||
第 1 台(跑局域网): 登记=True 设备数=1
|
||||
已停掉第 1 台
|
||||
第 2 台(跑中转): start_agent 认为登记=True
|
||||
中转上看到的设备: 验码电脑 码 246813 在线=True 空闲=1s
|
||||
场景A pair **超时**(没人回包)
|
||||
|
||||
── 中转日志里有没有『码被占用』──
|
||||
[10-07 18:18:56] 配对码 246813 已被 验码电脑-b0dd7aae76ba 占用,拒绝 验码电脑-b6bfc86f574a
|
||||
[10-07 18:19:02] 配对码 246813 已被 验码电脑-b0dd7aae76ba 占用,拒绝 验码电脑-b6bfc86f574a
|
||||
[10-07 18:19:08] 配对码 246813 已被 验码电脑-b0dd7aae76ba 占用,拒绝 验码电脑-b6bfc86f574a
|
||||
|
||||
════════ 场景 B:两条路各用不同的配对码(修法)════════
|
||||
第 1 台: 登记=True
|
||||
第 2 台: 登记=True
|
||||
场景B pair 成功: {"ok": true, "token": "0fe2d1ed61da6cd489230490d4a77a72", "serverName": "验码电脑",
|
||||
|
||||
════════ 结论 ════════
|
||||
场景 A(同一个码): **不通**
|
||||
场景 B(不同码) : 通
|
||||
→ 假设成立:bench 失败是因为两条路用了同一个配对码,
|
||||
第 2 台被「一码一机」规则拒掉,而 start_agent
|
||||
看到第 1 台还挂在线就以为成功了。**产品没问题。**
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 7.0 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 393 KiB After Width: | Height: | Size: 3.1 KiB |
Reference in New Issue
Block a user