Files
lislgosms/docs/testing-execution-step-7.md

103 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 测试实施第七步执行记录
## 执行时间
- 日期:2026-07-01
- 总步骤数:8
- 当前步骤:第 7 步,执行客户/通道 CMPP 连接状态、连接数量、Gateway 契约和通道路由测试
## 第七步目标
验证第一版中通道 CMPP 连接相关的可观测能力,包括 Gateway 队列契约、Go Gateway health/重连/SEQID-MSGID 追踪/gocmpp 模拟器测试、通道创建、通道路由、通道 health metrics、Send Worker 创建 CMPP submit session、连接数量展示、运营监控按通道聚合,以及 Gateway submit event 回写 trace。
客户级 CMPP 连接状态和连接数量当前没有独立模型/API,本步记录为功能缺口。
## 执行环境
| 项目 | 结果 |
| --- | --- |
| PostgreSQL | 可连接,使用真实数据库。 |
| Redis | 可连接,Send Worker 使用真实 BullMQ/Redis。 |
| MinIO | 可连接,本步未执行文件上传。 |
| API | 使用 `API_PORT=3101 API_ENABLE_SEND_WORKER=true npm --prefix api run start:dev` 启动,执行完成后已停止。 |
| Go Gateway | 使用 Go 原生 `go test ./...`,不连接真实运营商 SMSC。 |
## 已执行命令
```bash
npm run spike:contracts
npm run test:gateway
$env:API_PORT='3101'; $env:API_ENABLE_SEND_WORKER='true'; npm --prefix api run start:dev
node <inline step7 channel/cmpp status smoke>
```
## 本步执行过的测试用例
| 用例编号 | 用例名称 | 执行范围 | 结果 |
| --- | --- | --- | --- |
| TC-GW-CONTRACT-001 | Gateway 队列契约 | 校验 `SubmitCommand``SubmitResult``ReceiptEvent``UplinkEvent` 4 个 JSON 示例。 | 通过 |
| TC-GW-001 | Gateway health | Go `gateway/internal/health` 测试 `/health` 返回 `ok``cmpp-gateway`。 | 通过 |
| TC-GW-002 | SEQID/MSGID/GatewayMessageID 追踪 | Go `gateway/internal/tracker` 测试 messageId、sequenceId、gatewayMessageId 映射。 | 通过 |
| TC-GW-003 | 断线重连 | Go `gateway/internal/connection` 测试重试后成功和最终失败返回。 | 通过 |
| TC-GW-004 | gocmpp submit/resp 模拟器 | Go `gateway/internal/cmpp` 测试本地 TCP connect、submit、submit resp、active test 和 deliver receipt pack/unpack。 | 通过 |
| TC-CMPP-STATUS-001 / TC-CHANNEL-001 | 通道创建和状态展示 | 创建 CMPP 通道,验证通道列表展示 `active`、协议 `CMPP``maxConnections=3` 配置。 | 通过 |
| TC-CHANNEL-ROUTE-001 | 通道路由规则 | 创建通道组、通道组项、租户/应用路由规则,验证运营端路由列表。 | 通过 |
| TC-CHANNEL-METRIC-001 | 通道 health metrics 展示 | 写入一条 `ChannelHealthMetric`,验证 `GET /api/admin/channels/:id/metrics` 返回 submit/receipt/unknown 指标。 | 通过 |
| TC-CMPP-SESSION-001 / TC-CONNECTION-COUNT-001 | CMPP submit session 和连接数量 | 启动 Send Worker 创建发送任务,验证生成 open `CmppSubmitSession` 和 2 条 submit records。 | 通过 |
| TC-CMPP-STATUS-002 / TC-OPERATIONS-MONITOR-001 | 运营端按通道监控 | 验证运营 monitor/messages 可按 `channelId` 查询 `submit_queued=2`。 | 通过 |
| TC-GATEWAY-EVENT-001 | Gateway submit event 回写 trace | 模拟 submit result,验证 `sequenceId/gatewayMessageId` 写入并可在 operations trace 查询。 | 通过 |
| TC-CUSTOMER-CONNECTION-001 | 客户连接状态展示探测 | 验证客户维度可查租户、任务进度和消息,但没有独立客户 CMPP 连接状态/连接数模型。 | 部分通过,记录缺口 |
## 本步创建的数据
| 数据类型 | ID |
| --- | --- |
| 测试运行编号 | `step7-1782900995654` |
| Tenant | `cmr1x99p0000avkyunz75tapj` |
| SmsApplication | `cmr1x99se000bvkyu34n45hld` |
| SmsChannel | `cmr1x99t7000cvkyuvn0e027f` |
| ChannelRouteRule | `cmr1x99uj000fvkyum6zz05qi` |
| SmsBatchTask | `cmr1x9acr000hvkyuhh4e5o2c` |
| open CmppSubmitSession | `OPEN-cmr1x99t7000cvkyuvn0e027f` |
## 通过项
- Gateway 队列契约示例全部通过校验。
- Go Gateway health、重连、tracker、gocmpp submit/resp、本地 receipt pack/unpack 测试全部通过。
- 运营端可以创建 CMPP 通道并展示通道状态、协议、配置。
- 通道路由规则可以按租户/应用绑定到指定通道。
- 通道 health metrics 可被查询和展示。
- Send Worker 会为通道创建 open `CmppSubmitSession`submit records 会关联 `sessionId`
- 可通过 `CmppSubmitSession` 间接统计通道 open 连接数量。
- 运营 monitor/messages 可按通道查询消息状态。
- Gateway submit result 可回写 sequenceId/gatewayMessageId,并在 trace 中展示。
## 本步发现的问题
| 问题 | 影响 | 证据 |
| --- | --- | --- |
| 客户级 CMPP 连接状态无独立模型/API | 客户端和运营端无法直接看到“某客户当前 CMPP 连接状态、连接数量、最近连接时间”等客户维度状态,只能通过通道、任务和消息间接判断。 | Prisma schema 未发现客户连接状态模型;控制器无客户连接状态 endpoint。 |
| 通道连接数量没有一等接口 | 当前只能通过 `CmppSubmitSession` 直接查库或 trace/session 关联间接推断,运营端没有 `GET /channels/:id/connections` 之类接口。 | API 只有 `/admin/channels/:id/metrics`,无 connections endpoint。 |
| Gateway health 未接入 API dashboard | Go Gateway `/health` 独立存在,但 NestJS 运营 dashboard 不聚合 Gateway 实例健康状态。 | dashboard 只聚合任务、消息、上行、计费和交易。 |
| 通道测试接口仍是 placeholder | `POST /api/admin/channels/:id/test` 返回 queued placeholder,不会实际连接 Gateway 或 SMSC。 | `ChannelsService.testChannel` 返回固定占位响应。 |
## 未执行或阻塞项
| 用例编号 | 用例名称 | 原因 |
| --- | --- | --- |
| TC-CUSTOMER-CONNECTION-002 | 客户连接数量管理 | 当前无客户连接模型、连接上限字段和连接数量 API。 |
| TC-CUSTOMER-CONNECTION-003 | 客户连接状态展示 | 当前客户端/运营端无客户连接状态 endpoint。 |
| TC-CHANNEL-CONNECTION-002 | 通道连接列表和连接数量接口 | 当前无通道 connections endpoint。 |
| TC-CHANNEL-CONNECTION-003 | 通道断连/重连状态同步到运营端 | Go reconnect 测试通过,但状态未回写 NestJS。 |
| TC-GATEWAY-REAL-CMPP-001 | 真实运营商 CMPP 联调 | 第一版测试不依赖真实运营商网关,本步使用 gocmpp 本地模拟器。 |
## 本步结论
第七步中 Gateway 契约、Go Gateway 单元/集成测试、通道创建、路由、通道 metrics、submit session、通道维度运营监控和 Gateway submit event trace 均通过。
主要缺口集中在“客户/通道 CMPP 连接状态和连接数量的一等管理展示”尚未产品化:当前有 `CmppSubmitSession``ChannelHealthMetric` 数据基础,但缺少面向运营端/客户端的连接状态接口、连接数量接口、Gateway health 聚合和断连重连状态回写。
## 下一步
进入第 8 步:执行最终回归、完整验证和报告归档。重点运行 `npm run verify:phase8`、API 测试、Gateway 测试,并汇总 1-7 步通过项和遗留缺口。