Skip to content

[Testcase 征集] 请提交各厂商模组的 AT fixture 测试用例 #236

Description

@FUjr

为什么需要你的帮助

QModem 已加入 AT fixture 回放框架,但开发者无法持有所有厂商和型号的真实模组。我们希望收集 Quectel、Fibocom、Foxconn、Gosuncn、Huawei、Meig、Neoway、Sierra、SIMCom、Telit 等 vendor 的真实 AT 输入与原始输出,用于:

长期目标:摆脱 Shell 实现的限制。 这些 fixture 不是只为当前 Shell 脚本服务,而是作为与实现语言无关的行为契约。未来将 vendor、拨号和解析逻辑迁移到其它语言时,新旧实现必须对同一 AT 输入和原始输出得到一致结果,从而量化验证迁移兼容性,而不是依赖真机人工回归。

  • 在没有对应硬件时回归 vendor 解析逻辑;
  • 防止修改 AT 指令或解析代码时引入兼容性回退;
  • 逐步覆盖拨号、SIM、网络信息、信号、频段、锁频/锁小区等路径。

采集内容使用 xxd 保存为十六进制 response_hex,能够无损保留 CR/LF、空行、尾部换行和其它原始字节。默认打包会脱敏 IMEI、IMSI、ICCID、电话号码等长数字串。

如何采集

请使用包含 fixture 框架的最新 main 构建,并在设备上执行:

# 开启采集
uci set qmodem.main.testcase_collect=1
uci commit qmodem

# 通过 LuCI / ubus / CLI 操作你希望覆盖的功能
# 建议至少操作:基本信息、SIM 信息、网络信息、信号、拨号模式、网络偏好

qmodem_collect status
qmodem_collect pack

# 采集完成后关闭开关
uci set qmodem.main.testcase_collect=0
uci commit qmodem

默认编译选项会安装 qmodem-sealqmodem_collect pack 默认脱敏并生成:

/tmp/qmodem_feedback_<时间戳>.tar

这个外层 tar 可以直接解压查看,包含公开的 manifest.json 和加密的 payload.enc。命令会同时显示本次反馈专用的 review password/key 和验证命令。请先用它解密得到 .tar.gz,检查实际响应和脱敏结果,确认只包含你愿意提交的信息,再把加密 .tar 上传到本 Issue。

加密用于保护公开上传和存储过程,不能代替提交者自己的内容检查。不要把 review key 和反馈包一起公开提交。

如果构建时没有选择可选组件 qmodem-seal,默认打包会醒目警告并降级为未加密 .tar.gz。也可使用 qmodem_collect pack --unencrypted 主动生成明文包。无论哪种情况,上传前都必须自行检查内容。

完整格式和开发机导入方式见 testcases/README.md

请优先提交默认脱敏包。只有确认内容不包含隐私且确有排查需要时才使用 qmodem_collect pack --raw。不要公开提交包含真实 IMEI、IMSI、ICCID、手机号、账号密码或其它敏感信息的文件。

数据可能进入 testcase

提交反馈即表示其中合适的 AT 输入和响应可能被选入 QModem 仓库的 testcases/<vendor>/,用于公开的自动回归测试。

  • 反馈者提交前必须解密并确认脱敏结果;
  • 维护者选入 testcase 时会再次人工审阅并脱敏;
  • 二次审阅是额外保护,不能替代反馈者提交前的检查;
  • 不适合公开或无法可靠脱敏的内容不会加入 testcase。

建议覆盖范围

一次不需要覆盖全部功能,任何真实模组样本都有价值。尤其欢迎:

  • 当前 fixture 覆盖为空的 vendor;
  • 同一 vendor 的不同芯片平台、固件版本和拨号模式;
  • modem_dialmodem_util 使用的 SIM/PDP/CFUN/DNS 指令;
  • 锁频、锁小区、双 SIM、5G LAN、流量统计等差异较大的功能;
  • 已知解析异常或不同固件返回格式不一致的模组。

评论提交模板

GitHub 评论暂不支持自动回复模板。请复制下面内容填写,并将反馈包作为评论附件上传:

### 模组信息

- Vendor:
- 模组型号:
- 芯片平台:
- 固件版本:
- USB / PCIe:
- QModem 版本或 commit:
- OpenWrt 版本与设备型号:

### 本次覆盖

- 操作过的功能:
- 拨号模式(QMI/MBIM/ECM/NCM/RNDIS/其他):
- SIM 卡槽:
- 是否包含成功与失败响应:

### 数据说明

- 打包方式:默认加密并脱敏 / `--unencrypted` / `--raw`
- 已使用 review key 解密检查:是 / 不适用(未加密包)
- 已确认脱敏结果和附件内容:是 / 否
- 同意合适数据经再次审阅、脱敏后加入公开 testcase:是 / 否
- 附件:请拖拽上传 `qmodem_feedback_*.tar` 或明确检查过的未加密 `.tar.gz`

### 补充说明

- 返回格式异常、复现步骤或其它注意事项:

维护者处理流程

维护者会检查附件结构和脱敏状态。其他维护者如需处理加密反馈,只需从外层 tar 提取 manifest.json 并私下发给 identity token 持有者;token 持有者无需下载较大的 payload.enc,即可恢复该包的 review key 并通过私密渠道返回。

解密后,维护者使用 scripts/import_testcases.sh 导入,再次审阅和脱敏,运行 fixture/golden 测试,并通过 PR 合入 testcases/<vendor>/。如仍含敏感内容,会放弃样本或要求重新提交。

感谢每一份真实硬件数据。它会直接改善不同厂商、型号和固件之间的回归覆盖,也会为未来迁移到其它实现语言提供可验证的兼容性基线。

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    testcaseAT fixture and modem testcase contribution

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions