Skip to content
bitzorcas
中EN

Reference

Tool Connectors 测试、运维与商业 GA

给出连接器测试金字塔、故障演练、数据治理、发布门禁、GA 缺口与验收证据。

Last updated

当前仓库没有 Tool Connectors 专属测试。Contracts/Infrastructure 可编译不等于连接器满足商业交付;GA 需要从组合、输入安全、供应商合同、业务流程和运维恢复逐层给证据。

1. 测试金字塔

少量端到端:真实 Host + sandbox

供应商合同:SDK / emulator / sandbox

集成:owner + Port + persistence

单元/属性/模糊:策略、映射、状态

单元测试不能证明 SDK 行为;真实 sandbox 测试昂贵且不稳定。四层各自锁定不同风险。

2. 组合合同

三连接器都要覆盖 Disabled、非法值、Enabled+SDK 缺失、Enabled+SDK 存在、预注册覆盖和注册顺序。测试应断言真实类型和调用结果,而不是只断言 GetService 非 null。

Host 测试还必须证明 API Host 实际引用 Infrastructure、注册 SDK、执行 Adapter 扩展,并按租户 Feature/权限关闭请求。当前这些证据不存在。

3. Unavailable 合同

所有异步方法应返回各自 ProviderUnavailable,不接触网络或磁盘;OCR Captcha 目前应断言抛 InvalidOperationException。若未来统一为 Result,测试与迁移说明必须同步。

错误码、HTTP 映射、可重试标识和日志级别要稳定。禁用是预期配置状态,不应造成错误风暴。

4. Crawler 安全门禁

必须自动化验证 SSRF 地址族、重定向、DNS rebinding、端口/scheme、任意脚本拒绝、输出上限、租户会话隔离、Cookie 清理、超时后 driver 废弃和资源配额。

使用受控 DNS/HTTP 测试服务器,不能让 CI 扫描真实内网。浏览器/driver 版本升级要跑固定网站夹具,而非依赖公网页面。

5. OCR 安全门禁

验证路径逃逸、符号链接、URL SSRF、巨大/畸形/Base64 输入、图像炸弹、区域溢出、取消、内存预算、低置信度和敏感文本不入日志。

质量回归按语言/文档类型维护许可金丝雀数据,记录期望文本或业务字段阈值。引擎/语言包升级必须产出差异报告。

6. iManage 合同门禁

在供应商 sandbox 或可信 emulator 中验证上传元数据、下载 stream 所有权、大小限制、签出冲突、签入 null/空流真实语义、历史时区、Custom 字段与供应商错误映射。

超时注入应覆盖“供应商已完成但客户端未收到结果”。测试必须证明对账能收敛,不能只测立即失败。

7. 业务 owner 集成

连接器没有自己的 Endpoint,因此每个 consumer 都需要独立合同测试:

  • TenantId/ActorId 来自可信上下文;
  • 对象归属、状态、审批与扫描已执行;
  • Feature 和权限实际拒绝;
  • 输入策略先于 Port;
  • 状态变更有 idempotency/operation record;
  • 输出脱敏、审计与保留生效;
  • Provider failure 映射为稳定业务错误。

这是“独立 Consumer Contract Tests”的核心,而非给 Adapter 增加一条 happy path。

8. 故障演练

至少演练:DNS 失败、TLS 证书错误、401/403、429、慢响应、连接重置、半完成上传、浏览器崩溃、OCR 内存压力、secret 轮换和供应商区域不可用。

每次演练记录触发方法、预期 SLO、告警、用户表现、恢复步骤和数据对账。未知结果必须有人工与自动处置路径。

未知结果故障注入骨架
// ① sandbox 完成远端写入后,让传输层在响应到达前中断。
provider.CompleteThenDropResponse(operationId);
// ② consumer 不得立即重试,而应保存 UnknownOutcome。
Result result = await useCase.ExecuteAsync(command, ct);
Assert.Equal(OperationStatus.UnknownOutcome, await operations.GetStatus(operationId));
// ③ 对账任务读取远端事实,并把同一 operation 收敛到 Succeeded。
await reconciler.RunOnceAsync(ct);
Assert.Equal(OperationStatus.Succeeded, await operations.GetStatus(operationId));

9. 可观测性合同

统一 trace 属性建议包含 connector、operation、outcome、retryable、provider status category 和 correlation ID。TenantId 仅使用受控低基数哈希/分区标签;文档名、URL、OCR 文本禁止作为标签。

核心 SLI:可用率、p50/p95/p99 延迟、超时/限流率、输入拒绝率、队列等待、活动会话、处理字节、未知结果和对账年龄。

10. Runbook

每个连接器需要独立 Runbook:

  1. 如何判断是未组合、配置错误还是供应商故障;
  2. 如何安全禁用并告知 consumer;
  3. 如何轮换凭据/证书;
  4. 如何排空队列、回收浏览器或释放锁;
  5. 如何识别未知结果并对账;
  6. 如何回滚 SDK/语言包/driver;
  7. 哪些日志可给供应商,哪些含客户数据;
  8. 谁拥有升级与事故响应。

11. 数据与合规

为三个连接器建立数据流清单:来源、目的、分类、处理位置、第三方、传输/静态加密、保留、删除、数据主体请求和跨境要求。

Crawler 页面、OCR 文本与法律文档天然可能高敏。默认不在应用日志、指标或 trace 记录正文;测试样本也必须脱敏并有许可。

12. 商业 GA 阻断项

优先级阻断
P0Host 未组合;没有 consumer/Endpoint;权限与 Feature 未执行
P0Crawler SSRF、脚本和跨租户会话隔离缺失
P0OCR 路径/URL/大小/图像安全边界缺失
P0iManage 状态变更无幂等、未知结果对账与审计
P1下载全量内存、动态错误码、异常边界不完整
P1治理重复声明、注册顺序、健康与指标缺失
P1无模块、consumer、sandbox 和故障演练测试

13. GA 证据包

发布评审应附:源码/包版本、依赖 SBOM、配置矩阵、权限/Feature 自动化结果、威胁模型、数据流、测试报告、性能容量、故障演练、供应商兼容报告、Runbook、告警面板、回滚和已知限制。

没有证据的能力写成 Preview/Not delivered;不可用 Adapter 只是安全默认,不是供应商就绪证明。

14. 当前可执行验证

Terminal window
dotnet build src/Platform/ToolConnectors/BitzOrcas.Platform.ToolConnectors.Contracts/\
BitzOrcas.Platform.ToolConnectors.Contracts.csproj --no-restore
dotnet build src/Platform/ToolConnectors/BitzOrcas.Platform.ToolConnectors.Infrastructure/\
BitzOrcas.Platform.ToolConnectors.Infrastructure.csproj --no-restore
# 当前预期没有 Tool Connectors 专属测试命中。
rg -n "CrawlingAdapter|OcrAdapter|IManageAdapter|UnavailableOcrPort" tests -g '*.cs'

15. 完成定义

只有 Host 组合、consumer 用例、安全策略、授权/Feature、供应商合同、幂等对账、可观测性、Runbook 与独立测试同时通过,才能把某一个连接器标为 GA。三个连接器应独立评级,不因其中一个完成而整体宣称就绪。

返回 Tool Connectors 总览

100%

滚轮或按钮缩放 · 放大后拖动画面 · 双击切换 100% / 200%