test: record step7 cmpp status coverage

This commit is contained in:
hectorzhao
2026-07-01 18:19:10 +08:00
parent 118a4179e8
commit df3df3a771
2 changed files with 111 additions and 0 deletions
+102
View File
@@ -0,0 +1,102 @@
# 测试实施第七步执行记录
## 执行时间
- 日期: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 步通过项和遗留缺口。
+9
View File
@@ -55,6 +55,10 @@ node <inline step5 schedule probe>
$env:API_PORT='3101'; npm --prefix api run start:dev $env:API_PORT='3101'; npm --prefix api run start:dev
node <inline step6 billing/reconciliation smoke> node <inline step6 billing/reconciliation smoke>
node <inline step6 auto-billing probe> node <inline step6 auto-billing probe>
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>
``` ```
### 当前结果 ### 当前结果
@@ -81,6 +85,10 @@ node <inline step6 auto-billing probe>
- `TC-BILLING-001``TC-BILLING-002 / TC-RECHARGE-001``TC-BILLING-003``TC-BILLING-004 / TC-BILLING-005 / TC-BILLING-006 / TC-BILLING-007``TC-BILLING-008 / TC-RECON-001 seed``TC-RECON-001``TC-DASHBOARD-001 / TC-STAT-001``TC-TRACE-001``TC-BILLING-009` 均通过。 - `TC-BILLING-001``TC-BILLING-002 / TC-RECHARGE-001``TC-BILLING-003``TC-BILLING-004 / TC-BILLING-005 / TC-BILLING-006 / TC-BILLING-007``TC-BILLING-008 / TC-RECON-001 seed``TC-RECON-001``TC-DASHBOARD-001 / TC-STAT-001``TC-TRACE-001``TC-BILLING-009` 均通过。
- 验证了费用预估、人工充值、余额检查、冻结、扣费、释放、退款、短信计费记录、账务流水、dashboard/statistics、trace 和 reconciliation。 - 验证了费用预估、人工充值、余额检查、冻结、扣费、释放、退款、短信计费记录、账务流水、dashboard/statistics、trace 和 reconciliation。
- 自动计费探测发现发送任务不会自动生成短信计费记录、账户交易流水,消息金额默认为 0,已在 `docs/testing-execution-step-6.md` 记录为发送计费集成缺口。 - 自动计费探测发现发送任务不会自动生成短信计费记录、账户交易流水,消息金额默认为 0,已在 `docs/testing-execution-step-6.md` 记录为发送计费集成缺口。
- 第 7 步客户/通道 CMPP 连接状态和 Gateway smoke 通过:
- `TC-GW-CONTRACT-001``TC-GW-001``TC-GW-002``TC-GW-003``TC-GW-004``TC-CMPP-STATUS-001 / TC-CHANNEL-001``TC-CHANNEL-ROUTE-001``TC-CHANNEL-METRIC-001``TC-CMPP-SESSION-001 / TC-CONNECTION-COUNT-001``TC-CMPP-STATUS-002 / TC-OPERATIONS-MONITOR-001``TC-GATEWAY-EVENT-001` 均通过。
- 验证了 Gateway 队列契约、Go Gateway health/重连/tracker/gocmpp 模拟器、通道创建、路由、metrics、submit session、通道维度监控和 Gateway submit event trace。
- 客户级 CMPP 连接状态、客户连接数量、通道连接列表和 Gateway health 聚合到运营 dashboard 尚缺少一等 API,已在 `docs/testing-execution-step-7.md` 记录。
### 已知缺口 ### 已知缺口
@@ -90,3 +98,4 @@ node <inline step6 auto-billing probe>
- 客户侧导入发送、短信内容非法字符展示和敏感词发送前拦截尚未形成完整业务入口。 - 客户侧导入发送、短信内容非法字符展示和敏感词发送前拦截尚未形成完整业务入口。
- 定时短信发送缺少计划发送时间字段、scheduled 状态、到点触发和取消接口。 - 定时短信发送缺少计划发送时间字段、scheduled 状态、到点触发和取消接口。
- 发送链路尚未自动接入计费闭环,发送任务不会自动冻结/扣费/生成短信计费记录。 - 发送链路尚未自动接入计费闭环,发送任务不会自动冻结/扣费/生成短信计费记录。
- 客户/通道 CMPP 连接状态和连接数量尚未形成运营端/客户端一等接口,Gateway health 未聚合到 NestJS dashboard。