4.4 KiB
4.4 KiB
F08 本地 Mock:唯一最终结果与恢复证据
范围:单节点、单 Dispatcher、单 Agent、单 Cell、单租户的项目内隔离 Mock。除任务发现按 v0.2 外,其余本地 SaaS 对接协议仍按 v0.1;新增录音失败事实仅在 Agent↔Dispatcher 的 Mock 路径使用。未访问真实 SaaS、management、OSS、SIP、云或生产环境;不修改 contracts/upstream/v1/。
已验证的本地行为
| 场景 | 本地结论与证据 |
|---|---|
| 通话确认终结与额度 | local_call_terminals 保留已确认终态并立即释放执行额度,不等待 OSS/MQ;通话未知继续占额。internal/store/local_call_terminal_test.go、internal/dispatcher/local_mock_pending_result_test.go。 |
| 唯一结果与无录音 | 已接纳但未拨号的拒绝/期限用执行关联 ID 收口,不伪称 SIP dialog;无应答/忙线等录音为 not_created。已终结录音等待完成、明确失败或 15 分钟期限,结果不可变、只入队一个 call.result。internal/dispatcher/local_mock_refusal_pending_test.go、local_mock_dispatcher_deadline_test.go、local_mock_pending_result_test.go。 |
| 上传成功与明确失败 | 录音 manifest、授权上传 ID、checksum、完成事实必须与唯一执行绑定;结果持久化后不再签新 PUT 授权。uploaded 与 unavailable(授权/PUT 明确失败、期限)均在隔离 Mock 测试中用合成录音事实验证;未知 PUT(传输异常、HTTP 408/429/5xx)不伪报失败、不重 PUT。internal/agent/upload_failure_report_test.go、internal/store/local_v3_upload_state_test.go、internal/rpc/dispatcher_upload_local_v3_test.go。 |
| Agent 失败事实与重启 | 已知失败先写 Agent 文件日志;经原 AgentControl listener 的 ReportExecutionEvent、当前会话元数据上报。模拟 Dispatcher 已持久签收但回执丢失,Agent 重启/boot 更新/超过录音期限后仍重送原 fact ID、原摘要与观察时间;Dispatcher 幂等,事实仅一份,不发第二次 PUT 或呼叫。无当前激活会话则保留事实而不冒用旧会话。internal/dispatcher/local_mock_pending_result_test.go、internal/agent/upload_failure_report_test.go、cmd/sip-go-agent/upload_failure_recovery_test.go。 |
| 可靠 MQ 与受控边界 | 最终消息经 outbox 保留原 event ID,publisher confirm、mandatory、durable 路由确认后才将相应上传标记完成;confirm 不等于 SaaS 已处理。MQ 失败/确认丢失重发原消息,不重新 originate/PUT;超过 8,388,608 字节持久阻塞并记录 ID、字节数与 SHA-256,不截断或拆分。RabbitMQ 隔离集成验证了单份 call.result、重启补投及无 configure 权限的发布路径。V3 Mock 拒绝旧拆分执行事件;V3 mixed/real 启动拒绝,现行真实 09:00–20:00 门禁未放宽。internal/dispatcher/outbox_payload_limit_test.go、local_v01_integration_test.go、internal/rpc/dispatcher_events_local_v3_test.go、scripts/mq-integration-local.sh。 |
新增内部失败事实的字段、4 份正反例、独立 SHA-256 清单和 Agent 嵌入 Schema 的一致性见 docs/contracts/local-mock-recording-failure-v0.1.md、同目录 Schema/manifest 与 scripts/validate-local-contracts.py。不将此事实当成 SaaS v0.1 扩展,也不启用 mixed/real。
验证记录
go test ./... -count=1:通过。./scripts/check-proto.sh、./scripts/check-contracts.sh:通过,包含新事实正反例、来源/hash 与嵌入 Schema 一致性。./scripts/acceptance-local.sh:通过,内含 gofmt、go mod verify、go test -race ./... -count=1、go vet ./...、构建,以及本地 RabbitMQ 有界权限集成测试。- 本次普通测试覆盖率:
internal/agent71.1%、internal/dispatcher69.7%、internal/rpc69.9%、internal/store67.1%、internal/contract74.0%;internal/mq普通测试仅 1.7%,主要逻辑需带 RabbitMQ 的集成测试覆盖,F09 的 ≥65% 门禁尚未签收。
默认 Mock originator 只模拟无应答,不生成真实录音;本地上传成功/失败场景由测试注入严格绑定的合成 manifest/回执,并非真实录音文件、OSS PUT 或真实供应商闭环。录音事实已就绪时的结果/失败恢复可验证,不据此宣称实际媒体采集或真实 SaaS 应用签收已完成。F09 完整本地矩阵、覆盖率及本地发布准备仍另行验证;F06 真实部署/切换没有授权,未执行。