分三层:JVM 自动化(agent 必须自己跑绿)、模拟器 / sim 传输(agent 必须自己跑)、真机 BLE(需要人工,agent 只准备脚本与记录模板)。
打勾 = 有一个跑绿的自动化测试盯着它,测试名写在条目后面。没打勾的要么还没做到那个阶段,
要么需要真机 / 模拟器(这类在 docs/agent/STATUS.md 的「已知问题」里有对应编号)。
- A1 每种消息类型编解码 round-trip(含边界:空文本、500 B 文本、120 B 附言、6 段语音、点数 1 与 3600 的轨迹段)。 —
PayloadCodecTest - A2 签名:正确签名通过;改动 payload / sender / timestamp 任一字节失败;改动 ttl 仍通过。 —
PacketCodecTest - A3 校验顺序:坏签名的包不进入去重表、不转发;
ttl=0的坏签名包同样被拒。 —ValidationOrderTest - A4 去重:同 msg_id 第二次到达被丢;1001 条后最早的被淘汰;300 s 后过期。 —
DedupCacheTest - A5 泛洪:5 节点线形拓扑 A-B-C-D-E,A 广播,E 在 ttl=4 时收到、ttl=3 时收不到;TTL 钳制在 6 邻居星形拓扑生效。 —
FloodingTest - A6 抖动与抑制:B 与 C 同为 A 的邻居且互连,A 广播后 B、C 只有一个转发给对方(另一个因抑制取消)。 —
FloodingTest - A7 分片:45 KB 图片在 MTU 185 / 247 / 512 三种情况下分片数正确,乱序 + 30% 丢包 + 重传后重组成功且 sha256 一致。 —
FragmentRetransmitTest+FragmentResumeTest(整网) - A8 优先级:队列里同时有 P3 分片 100 片与 1 条 P0,P0 先出;P3 每 8 片让出。 —
SendQueuePriorityTest - A9 发件箱:目标离线时入 outbox,目标 ANNOUNCE 到达后按序补发;24 h 后清除。 —
OutboxTest - A10 信使:A—C 不可达,B 先与 A 相邻再与 C 相邻,群消息经 B 到 C;copies 递减到 0 后不再复制。 —
OutboxTest - A11 群加密:错误 key_version 解密失败;nonce 与 msg_id 绑定。 —
NoiseXXTest - A12 Noise XX:三步握手后双向传输;重放握手消息被拒。 —
NoiseXXTest/NoiseUnicastTest - A13 轨迹段:DP 抽稀后点数下降且最大偏差 ≤ 5 m;增量编码 2,880 点 ≤ 60 KB;解码坐标误差 ≤ 1e-7。 —
TrackTest(增量编码无损,坐标完全相等) - A14 距离 / 方位:与已知点对(如北京—上海)误差 < 0.1%;8 方位边界值正确。 —
GeoTest(参考值由另一份独立写的 Vincenty 算出,两边到米一致) - A15 坐标转换:WGS-84 ↔ GCJ-02 往返误差 < 1 m。 —
GeoTest(七个城市往返 < 1 m,并反证偏移量确实在几百米量级)。与高德CoordinateConverter的对比要真机,见 field-test.md G1 - A16 SYNC:两节点各有对方缺失的 3 条历史与 2 个轨迹段,一次 digest/request 后对齐。 —
SyncTest(含「补发保持原 msg_id 与签名」「不重复索取」「经中间人也能对齐」)
- B1
SimHarness能在 JVM 里起 N 个WildLinkNode并按邻接矩阵连线,打印每节点收发日志。 —SimNetworkTest - B2 两个模拟器通过 TCP sim 传输互发文本,UI 状态正确(已送达 / 中继中 / 待转发)。 — 两台 API 35 模拟器 +
adb forward/reverse,debug 构建按files/sim.conf把承载换成TcpTransport(app/src/debug/SimTransportSetup)。这一跑揪出了群消息不请回执的缺陷(K27):修之前「已送达」永远不亮。符号 / 图片 / 语音 / 轨迹段的传输侧由SimMediaTest等覆盖,UI 侧同一条路径 - B3 SOS:A 发 SOS,B 收到后进入告警页、自动搜救档、自动转发;A 侧「已收到节点列表」出现 B。 — 同上两台模拟器实跑(截图
screens/)。三个节点的链式转发由ThreeNodeRelayTest覆盖。这一跑还揪出了没定位时把 0,0 当真坐标显示(K26) - B4 语音:录 10 s → Codec2 编码 ≈ 4 KB → 2 段 → 对端收齐第 1 段即可播放,完整播放与原音可懂。 — 传输侧已绿(
SimMediaTest/VoiceSegmentsTest:4000 B、2 段、收齐第 0 段即可播、拼回逐字节一致);「原音可懂」要真跑一遍 Codec2,待设备(STATUS K16) - B5 图片:缩略图先到(≤ 3 s),全图进度条走完,取消后释放分片状态。 — 传输侧已绿(
SimMediaTest:缩略图排在全图前、200+ 片 sha256 一致、取消后收发两端状态归零);「≤ 3 s」是墙钟指标,待真机(见 C3) - B6 记录:轨迹记录 10 分钟(可用模拟位置)→ 时间线与海拔曲线正确 → 导出 GPX 可被第三方软件打开。 — 模拟器上用
adb emu geo fix跑通了:轨迹、海拔曲线、时间线、GPX 导出都正确(截图与导出的 GPX 见docs/agent/screens/)。「可被第三方软件打开」要拿别的软件试一次,见 field-test.md G2 - B7 主题与语言:切换深浅、中英,每一屏与设计稿逐项比对。 — 12 屏 × 4 态 = 48 张截图(
screens/preview/)+ 28 张真机状态截图,比对表在screens/diff.md;ScreenRenderTest在模拟器上把这 48 种组合各组一遍,任何一种崩了测试就红 - B8 无高德 Key:编译运行、地图页显示占位地图与全部覆盖物;有 Key:显示高德底图。 — 占位地图那一半已验(模拟器没有高德
.so,走的就是这条路:轨迹、标记点、我的位置全画出来了)。有 Key 的高德底图要真机,见 field-test.md G3
agent 需产出 docs/agent/field-test.md:设备准备(关闭电池优化、权限)、测试步骤、记录表(机型 / 距离 / 丢包 / 延迟 / 耗电)。目标值:
- C1 两台设备互见 ≤ 10 s;开阔地 50 m 可用。
- C2 4 台成链 3 跳文本延迟 ≤ 3 s(P90)。
- C3 10 s 语音单跳 ≤ 8 s;30 KB 图片单跳 ≤ 12 s,缩略图 ≤ 3 s。
- C4 息屏 30 min 后仍在网 ≥ 95%(记录品牌)。
- C5 SOS 在接收方后台、息屏时 ≤ 10 s 告警。
- C6 行进档 8 h 耗电 ≤ 25%。
- C7 杀进程后由系统重启前台服务并恢复链路。