Skip to content

test(device-link): 恢复拆仓后的连接集成测试并接入 CI - #3943

Open
dashhuang wants to merge 2 commits into
mainfrom
dash/device-link-integration-tests
Open

test(device-link): 恢复拆仓后的连接集成测试并接入 CI#3943
dashhuang wants to merge 2 commits into
mainfrom
dash/device-link-integration-tests

Conversation

@dashhuang

Copy link
Copy Markdown
Member

这次改了什么

摘要

拆仓后,远程重连 smoke 仍调用已移除的 dev:server 和开发登录接口;旧测试还用手工重建 WebSocket 代替正式客户端的自动恢复,无法拦截恢复链路回归。

新增 pnpm test:device-link:运行正式 DeviceLinkClient、Mobile 恢复核心与 Desktop 订阅重试器,在真实 loopback WebSocket 上注入断链、丢帧和 1013。保留原 Mobile 命令,并接入 client-ci 的阻断门禁。

变更类型

  • feat 新功能
  • fix 缺陷修复
  • refactor / perf 重构或性能优化
  • docs / test / chore 文档、测试或工程维护
  • 其他:

范围

  • 关联 Issue / 需求:远程连接审计第 4 项——恢复拆仓后的连接集成测试与 CI 入口。
  • 本 PR 包含:本仓 WS contract fixture、9 项集成测试、显式外部测试 relay 互操作入口、旧命令兼容、CI 与覆盖说明。
  • 明确不包含:生产客户端行为修改、独立服务端实现、原生网络/AppState 接线与三端 GUI 测试修复。
  • 用户可见变化:开发者可一条命令验证连接恢复;产品运行行为无变化。
  • 是否存在 breaking change:无产品或 wire protocol 变化。旧 test:e2e:reconnect:local 命令可继续使用;废弃的 dev-login 参数明确报错。

UI 变化

不涉及。

  • 引用的设计规范:不涉及。

怎么验证的

自动验证

pnpm test:device-link
结果:9/9 通过。

pnpm --filter mobile test:e2e:reconnect:local
结果:同一套 9/9 测试通过。

pnpm --filter desktop exec tsc --project ../../scripts/device-link/tsconfig.json
pnpm --filter mobile run --if-present typecheck
pnpm --filter mobile test:scope
pnpm check:endpoints
结果:均通过。

pnpm test:unit:related
结果:通过;根依赖与 CI 改动触发全量模式,Desktop、Mobile 与共享包均通过。

覆盖自动重连与消息/输入状态补齐、前台恢复核心、半开网络心跳、故障 peer 对其他控制端的影响、丢失结果可靠重放、host 实例重启、1013 冷却和 Desktop 订阅重试。额外通过子进程把 --interop 接到已启动的 fixture,验证指定地址、自动恢复及输出不含测试 token/URL。

手工验证

完成独立代码复查;修正冷却时间与 host 下线断言,避免把快照完成耗时或已有握手记录误当恢复证据。

未执行的验证

  • 真实独立服务端互操作:未提供专用隔离 relay 与测试身份;仅验证其入口接入本地 fixture,不记为真实服务端验收。
  • iOS/Android 实机、Electron GUI、真实 Agent/SQLite、原生网络切换与 OS 休眠:本 PR 只运行恢复核心,未启动 Metro/模拟器,不提供 build label 证据。
  • 服务端 JWT/JWKS、Redis/数据库、多实例路由与聚合背压:由独立服务端测试覆盖,本仓 fixture 不替代。

风险

风险分类

  • 无已知风险
  • SQLite / migration
  • system prompt
  • 协议兼容
  • 权限 / 安全 / 用户数据
  • 存量插件兼容(批准状态 / 指纹 / manifest 校验 / 安装布局 / 包格式)
  • 原生层 / fingerprint / OTA
  • 跨平台差异
  • 其他:真实定时器集成测试在极端繁忙的 runner 上可能超时。

影响与回滚

  • 影响范围:测试脚本、root 开发依赖、CI 与文档。未改生产代码或 Mobile 原生依赖;不需要私有仓 checkout、真实凭据或服务端变更。
  • fixture 仅监听随机 loopback 端口,清理 socket 与恢复定时器;外部互操作必须显式配置,缺配置直接失败。
  • 回滚 / 降级方式:回退本 PR 即移除新增测试与 CI 步骤;无数据迁移或产品状态回滚。

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名(git commit -s,见 DCO
  • UI 改动已在「UI 变化」注明引用的设计规范章节(不涉及 UI 则跳过)
  • 未提交凭证、令牌或授权文件
  • 已补充必要文档
  • 已确认测试结果或说明未执行原因

Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
@dashhuang
dashhuang requested a review from a team as a code owner September 5, 2026 01:24
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 5, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-06T10:43:03.343174Z 65911f6 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@greptile-apps

greptile-apps Bot commented Sep 5, 2026

Copy link
Copy Markdown

Greptile Summary

此 PR 将拆仓后失效的 Device Link 重连 smoke 替换为基于正式客户端和 loopback WebSocket contract fixture 的集成测试,并将其加入 CI 阻断门禁。

  • 新增覆盖自动重连、Mobile 恢复核心、可靠重放、1013 冷却及 Desktop 订阅重试的真实 socket 测试。
  • 保留原 Mobile 命令入口,并提供需要显式测试 relay 与隔离身份的外部互操作模式。
  • 新增测试依赖、独立 TypeScript/Vitest 配置以及覆盖边界和运行方式文档。
  • 未发现由本次变更引入的可操作正确性、安全性或工程质量问题。

Confidence Score: 5/5

该 PR 看起来可以安全合并,新增测试与 CI 入口没有发现会破坏现有构建、命令兼容性或测试契约的问题。

变更限定在测试、CI 和文档路径;启动入口、共享协议 fixture、恢复场景、外部互操作约束及依赖锁定彼此一致,没有留下需要修复的具体失败路径。

Important Files Changed

Filename Overview
apps/mobile/scripts/device-link-reconnect-smoke.mjs 将旧 server/dev-login smoke 改为可兼容 Mobile 入口的 Vitest 启动器,并明确区分 contract 与 interop 模式。
scripts/device-link/clientHarness.ts 使用正式 DeviceLinkClient 接入内存 host、Mobile 恢复核心和受控测试时序。
scripts/device-link/relayFixture.ts 提供仅监听 loopback、采用共享协议常量并支持定向故障注入的测试 relay fixture。
scripts/device-link/reconnect.test.ts 新增八类连接恢复与可靠传输场景,并验证外部互操作命令不会静默回退或泄露凭据。
scripts/device-link/interop.test.ts 对显式提供的隔离 relay 执行正式客户端握手、恢复和重连验证。
.github/workflows/ci.yml 在 verify-checks 中加入新增套件的 TypeScript 检查和阻断执行。
packages/device-link/TESTING.md 更新拆仓后的测试分层、互操作前置条件、覆盖范围和明确非目标。

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  A["pnpm test:device-link"] --> B["Mobile 兼容启动脚本"]
  B --> C{"测试模式"}
  C -->|contract| D["Loopback WebSocket fixture"]
  C -->|interop| E["显式配置的独立测试 relay"]
  D --> F["正式 DeviceLinkClient"]
  E --> F
  F --> G["Mobile rehydrate / PeerRecoveryScheduler"]
  F --> H["Desktop subscription replay scheduler"]
  G --> I["断链、丢帧、心跳与快照恢复断言"]
  H --> J["订阅失败重试断言"]
  I --> K["CI verify 阻断门禁"]
  J --> K
Loading

Reviews (1): Last reviewed commit: "test(device-link): 恢复拆仓后的连接集成测试并接入 CI" | Re-trigger Greptile

@MagicLizi

Copy link
Copy Markdown
Contributor

@dashhuang 👋 这个 PR 改动了受保护的路径(.github/workflows/ci.yml),auto-review 因此不合并、也不会自动审查。

这些路径的改动需要人工处理。如果执意要改,请联系 Lizi。

@MagicLizi MagicLizi added touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:new-dependency 新增第三方依赖(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) touches:security 改动碰到安全边界(review-pr 自动维护,仅展示) labels Sep 5, 2026
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
@dashhuang

Copy link
Copy Markdown
Member Author

已推送 65911f6:同步主干后,将集成测试的 Desktop 订阅恢复回调适配为 getPresenceAvailability,修复主干接口重命名造成的类型错误。PR 范围仍为原来的 13 个测试、CI 与文档文件。

验证通过:

  • pnpm test:unit:related(自动退回全量,Desktop、Mobile、maker-core 及其他适用 workspace 全部通过)。测试子进程清除了宿主继承的 CINDY_AUTH_REGION / VITE_CINDY_AUTH_REGION,避免默认 Global 用例受当前客户端的 cn 环境影响。
  • pnpm test:device-link:9/9。
  • Device Link 集成套件 TypeScript 检查、Mobile typecheck。

真实独立 relay 与原生实机仍未验收;loopback fixture 结果不代表生产服务端互操作已通过。未引入服务端改动或 Mobile package.json 的 PR 差异。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:new-dependency 新增第三方依赖(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) touches:security 改动碰到安全边界(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants