Files
go-sip/docs/evidence/local-mock-saas-c-v0.1.md
T

2.7 KiB
Raw Blame History

本地 Mock SaaS C 门禁证据(v0.1)

范围

本证据只证明项目内 F01/F07 契约与本地 Mock 的端到端交互。未访问真实 SaaS、management、云资源、供应商或 SIP 线路;未发起通话、未上传录音,也未验证外部兼容性。contracts/upstream/v1/ 仍是当前外部运行基线。本地通过不代表外部签收或生产验收。

Mock 交互

TestLocalDispatcherMockSaaSEndToEndWithOutboxRecovery 使用本地 HTTP Mock、临时 SQLite 和本地 RabbitMQ:

  1. Dispatcher 使用 X-DISPATCHER-id 与 X-DISPATCHER-SECRET-KEY 请求四个只读资源:
    • GET /internal/v1/dispatcher/sip
    • GET /internal/v1/dispatcher/tasks
    • GET /internal/v1/dispatcher/task/task-mock
    • GET /internal/v1/dispatcher/tenant/tenant-id-mock/quota
  2. SaaS Mock 预先创建并绑定其所有的 task/result 队列。测试发布 persistent call.execute;Dispatcher 消费后持久化命令与 command.result outbox。
  3. 测试暂时删除 SaaS-owned result queue,确认发布失败并保留 outbox;恢复队列后,Dispatcher 重试并将相同回执送达 Mock。
  4. 测试使用本地示例构造 synthetic call.result,并核对它引用已接纳的 command_id、execution_id、task 和租户;Mock 收到完整事件。重复相同事件幂等,执行 ID 不匹配时拒绝。

当前 C 切片只验证配置读取、命令收件/回执及最终结果的持久化交付;不会启动真实执行,也不调用 Asterisk。call.result 中的转写和 OSS 对象均为示例数据,不对应真实录音或上传。pause/resume/stop 的项目内 Schema 与正反例由合同验证器检查;其运行时控制和队列排空属于后续 F03,不计入本次运行时 E2E。

契约与验证结果

  • python3 scripts/validate-local-contracts.py:4 个项目内 Schema 有效;正例分别为 config-read 17、task-discovery 13、command-next 6、call-result 4;每类 Schema 的负例均按预期拒绝;source 与 18 项产物共 19 个 SHA-256 文件通过。
  • bash scripts/check-contracts.sh:上游 v1 契约基线、项目内 Schema/示例及 Go 合同测试通过。
  • go test ./internal/configread ./internal/dispatcher ./internal/store ./internal/mq:通过,覆盖配置读取失败清除旧快照、命令过期/白名单拒绝/窗口拒绝、重复命令和最终结果关联。
  • bash scripts/mq-integration-local.sh:通过;本地 RabbitMQ 集成测试覆盖 Mock 消息发布、result queue 暂不可用后的 outbox 恢复以及最终事件交付。
  • git diff --check:通过。

go vet、go test -race、完整构建、模块覆盖率及 F02–F09 的验收仍待后续工作包验证。本证据不宣称这些检查已通过。