fix phase2 gateway matching and release artifact

This commit is contained in:
hectorzhao
2026-06-28 22:16:49 +08:00
parent a86de6545f
commit 175166a5dc
17 changed files with 2670 additions and 35 deletions
@@ -146,12 +146,25 @@ sudo systemctl restart opensips
sudo systemctl is-active opensips
```
## Release Artifact 规范
发布包必须由固定脚本生成,禁止临时手工复制目录作为 release:
```bash
pnpm release:artifact -- --release-id sXX-name-YYYYMMDDHHmmss
```
脚本会执行构建、校验发布必需目录、生成 `RELEASE_MANIFEST.json`,并输出 `dist/releases/<release-id>.tar.gz``.sha256`。正式给 B 机使用的 artifact 必须在 Linux 环境生成;在本地 Windows 仅允许使用 `--check` 或带 `--allow-non-linux` 生成检查包,不能作为服务器最终发布包。
## A/B/T 验收清单
至少验证以下呼叫:
- 命中业务前缀:例如客户送 `67118822190000`,话单 `callee=18822190000``raw_callee=67118822190000``business_prefix=671`
- 任意被叫规则:客户网关 `calleeMatchMode=ANY` 时,旧无业务前缀呼叫仍可路由。
- 匹配优先级:业务前缀优先于主叫前缀,精确规则优先于空业务前缀兜底;命中业务前缀但主叫不通过时,不应退回裸号兜底网关。
- 唯一性约束:同一 IP + 同一业务前缀组合只能归属一个客户网关;同一 IP 下主叫前缀不能互相覆盖;IP 可跨客户复用但最终匹配必须唯一。
- 计费口径:客户网关决定客户侧计费,落地网关决定供应商侧成本,业务前缀不参与计费产品、报表维度或权限隔离。
- 主叫前缀命中:配置 `callerPrefixes` 后,命中前缀允许呼叫。
- 主叫前缀不命中:返回 `CALLER_PREFIX_NOT_MATCHED`
- 业务前缀不命中:返回 `BUSINESS_PREFIX_NOT_MATCHED`
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,184 @@
# 第 1 步测试结果:本地静态与自动化基线
执行时间:2026-06-28 18:44:25 +08:00
执行范围:
- ESLint 静态检查
- TypeScript 项目引用类型检查
- 全量 Vitest
- Monorepo 构建
- Prisma schema 校验
## 1. 结果总览
| 检查项 | 命令 | 结果 |
| --- | --- | --- |
| Lint | `corepack pnpm@10.33.0 lint` | 通过 |
| Typecheck | `corepack pnpm@10.33.0 typecheck` | 通过 |
| Test | `corepack pnpm@10.33.0 test` | 未通过 |
| Build | `corepack pnpm@10.33.0 build` | 通过 |
| Prisma validate | `corepack pnpm@10.33.0 prisma:validate` | 通过 |
整体结论:首次执行第 1 步基线未完全通过,阻断项为全量 Vitest 中 7 个 API e2e suite 的 `beforeAll` hook 默认 10 秒超时。其余静态检查、类型检查、构建和 Prisma schema 校验均通过。
复测结论:已在 `vitest.config.ts` 显式设置 `hookTimeout: 60000`,随后重新执行裸 `corepack pnpm@10.33.0 test`,25 个测试文件、88 个测试用例全部通过。该结果说明首次失败是全 AppModule e2e 初始化超过默认 hook timeout 导致,不是业务断言失败。
## 2. 详细结果
### 2.1 Lint
命令:
```powershell
corepack pnpm@10.33.0 lint
```
结果:通过。
摘要:
- 执行 `eslint .`
- 未发现 ESLint 报错。
### 2.2 Typecheck
命令:
```powershell
corepack pnpm@10.33.0 typecheck
```
结果:通过。
摘要:
- 执行 `tsc -b tsconfig.build.json --pretty`
- TypeScript 项目引用检查通过。
### 2.3 Test
命令:
```powershell
corepack pnpm@10.33.0 test
```
结果:未通过。
Vitest 汇总:
- Test Files7 failed18 passed,共 25。
- Tests68 passed20 skipped,共 88。
- Duration45.57s。
失败原因:
7 个 API e2e suite 在 `beforeAll` 阶段触发默认 10000ms hook timeout
| 失败文件 | 失败位置 | 摘要 |
| --- | --- | --- |
| `apps/api/src/app.e2e.spec.ts` | `beforeAll` line 10 | API health e2e 初始化超时 |
| `apps/api/src/modules/auth/auth.e2e.spec.ts` | `beforeAll` line 85 | Auth API e2e 初始化超时 |
| `apps/api/src/modules/customers/customers.e2e.spec.ts` | `beforeAll` line 161 | Customers API e2e 初始化超时 |
| `apps/api/src/modules/landing-line-groups/landing-line-groups.e2e.spec.ts` | `beforeAll` line 228 | Landing line groups API e2e 初始化超时 |
| `apps/api/src/modules/recharges/recharges.e2e.spec.ts` | `beforeAll` line 124 | Recharges API e2e 初始化超时 |
| `apps/api/src/modules/security/security-rbac-audit.e2e.spec.ts` | `beforeAll` line 172 | Security/RBAC/Audit API e2e 初始化超时 |
| `apps/api/src/modules/vendor-gateways/vendor-gateways.e2e.spec.ts` | `beforeAll` line 184 | Vendor gateways API e2e 初始化超时 |
已通过的测试文件包括:
- `apps/api/src/modules/active-calls/active-calls.service.spec.ts`
- `apps/api/src/modules/auth/auth.service.spec.ts`
- `apps/worker-recording/src/transfer.spec.ts`
- `packages/auth/src/index.spec.ts`
- `apps/api/src/modules/customer-gateway-policies/customer-gateway-policies.e2e.spec.ts`
- `apps/api/src/modules/customer-gateways/customer-gateways.e2e.spec.ts`
- `apps/api/src/modules/vendors/vendors.e2e.spec.ts`
- `apps/api/src/modules/users-roles-delete.e2e.spec.ts`
- `apps/api/src/modules/number-library/number-library.e2e.spec.ts`
- `apps/worker-cdr/src/rating.spec.ts`
- `packages/database/src/schema-contract.spec.ts`
- `apps/api/src/modules/dashboard/dashboard.service.spec.ts`
- `packages/redis/src/cdr-stream.spec.ts`
- `apps/api/src/modules/cdrs/cdrs.service.spec.ts`
- `apps/worker-config-publisher/src/publisher.spec.ts`
- `apps/api/src/modules/recordings/recordings.service.spec.ts`
- `apps/api/src/modules/quality/sampling.spec.ts`
- `apps/api/src/modules/health/health.service.spec.ts`
初步判断:
- 失败集中在 API e2e `beforeAll` 初始化阶段,错误均为默认 10 秒 hook timeout。
- 结合历史执行记录,本项目 e2e 曾使用 `--hookTimeout=60000 --maxWorkers=1` 通过;本次按第 1 步基线命令执行裸 `pnpm test`,因此更可能是本地 e2e 初始化耗时或并发资源争用导致的基线命令超时,而不是业务断言失败。
- 仍需在下一轮复测中用扩展 hook timeout 和单 worker 复跑,确认是否存在真实数据库/Redis/API 初始化问题。
### 2.4 Build
命令:
```powershell
corepack pnpm@10.33.0 build
```
结果:通过。
摘要:
- `packages/auth``packages/contracts``packages/database``packages/domain``packages/observability``packages/redis` 构建通过。
- `apps/api``apps/worker-cdr``apps/worker-config-publisher``apps/worker-recording` 构建通过。
- `apps/web` Vite 构建通过,生成产物:
- `dist/index.html`
- `dist/assets/index-B2uYBtS3.css`
- `dist/assets/index-BK00zN_M.js`
### 2.5 Prisma Validate
命令:
```powershell
corepack pnpm@10.33.0 prisma:validate
```
结果:通过。
摘要:
- Prisma config`prisma.config.ts`
- Schema`prisma/schema.prisma`
- 结果:schema valid。
## 3. 当前风险
- 首次 `pnpm test` 失败集中在 e2e 初始化超时,不应直接按业务缺陷处理。
- 已通过配置层修复验证:`vitest.config.ts` 增加 `hookTimeout: 60000` 后,`pnpm test` 通过。
- 若后续在低性能 CI 或数据库连接较慢环境中再次出现初始化超时,可再考虑降低 e2e 并发,例如使用 `--maxWorkers=1`
## 4. 复测记录
执行时间:2026-06-28 18:53:16 +08:00
变更:
```typescript
// vitest.config.ts
hookTimeout: 60000
```
复测命令:
```powershell
corepack pnpm@10.33.0 test
```
复测结果:
- Test Files25 passed,共 25。
- Tests88 passed,共 88。
- Duration12.56s。
## 5. 建议下一步
1. 保留 `vitest.config.ts` 中的 `hookTimeout: 60000`
2. 如要继续第 1 步完整闭环,可再次执行 `lint``typecheck``test``build``prisma:validate` 全套命令并更新最终状态。
3. 进入第 2 步定向单元/API e2e 回归时,可直接使用当前 Vitest 配置。