3.9 KiB
3.9 KiB
T20 S2 配置/池批(B1/B4/B7)测试报告
一、 测试背景 (Background)
T20 设计 S2 批:B1 伪造 XFF 可绕过登录限流、B4 池无语句超时分级、B7 Shutdown 5s 与 AGENT_TIMEOUT 30m 错配导致滚动重启砍长任务。按 planned-tasks-closeout-plan P3 批次实施。
二、 测试目标 (Test Objectives)
- B1:伪造 XFF + 直连 RemoteAddr ∉ CIDR → key 用 RemoteAddr;∈ CIDR → 解析最右非可信跳。
- B4:池 RuntimeParams 注入 statement_timeout=30000;migrate profile 不设超时。
- B7:drain = min(AGENT_TIMEOUT,35m)+30s;环境变量覆盖与非法回落正确。
- compose 三环境语法有效。
三、 测试方案与环境 (Test Plan & Environment)
- OS:Linux 7.0.0-31-generic;Go;docker compose v2(仅 config 校验,不启动)。
- 层级:工程工具批(单元测试 + 静态 compose 校验),按验证契约不触发产品 PI 全链路。
- worktree
.worktrees/t20-s2-config-pool-2026-09-25@ dev 基线c0e556b1。
四、 预期结果 (Expected Results)
- 全部新增单测 PASS;既有登录/限流测试不回归。
五、 实际测试结果与判定 (Actual Results & Evaluation)
B1 XFF 可信代理
$ go test ./internal/server/ -run 'TestClientIP|TestParseTrusted' -v
--- PASS: TestClientIP_NoTrustedCIDR_IgnoresXFF (0.00s)
--- PASS: TestClientIP_TrustedProxy_ResolvesXFF (0.00s)
--- PASS: TestClientIP_UntrustedDirect_UsesRemoteAddr (0.00s)
--- PASS: TestClientIP_AllTrustedChain_FallsBackToFirst (0.00s)
--- PASS: TestParseTrustedProxyCIDRs_Formats (0.00s)
ok chat-agent-system/internal/server 0.007s
判定:PASS(伪造防护核心场景 UntrustedDirect_UsesRemoteAddr 覆盖)。
B4 池 profile
$ go test ./internal/db/ -v
--- PASS: TestDefaultProfile_StatementTimeout30s (0.00s)
--- PASS: TestMigrateProfile_NoStatementTimeout (0.00s)
--- PASS: TestOpenAppPool_SetsRuntimeParams (0.00s)
--- PASS: TestLongStatementTimeout_Default15m (0.00s)
(既有迁移测试不回归)
判定:PASS。
B7 drain 对齐
$ go test ./cmd/server/ -v
--- PASS: TestShutdownDrainTimeout_DefaultCapped35m (0.00s)
--- PASS: TestShutdownDrainTimeout_FollowsShortAgentTimeout (0.00s)
--- PASS: TestShutdownDrainTimeout_EnvOverride (0.00s)
--- PASS: TestShutdownDrainTimeout_InvalidEnvFallsBack (0.00s)
--- PASS: TestShutdownDrainTimeout_NilCfg (0.00s)
判定:PASS。
compose 语法
$ for f in dev test main; do docker compose -f docker-compose.$f.yml config --quiet; done
三文件 exit 0
判定:PASS(main.yml 首次插入点切在双依赖服务之间导致 YAML 错误,已修正到 depends_on 完整块后复验通过)。
登录/限流既有回归
$ go test ./internal/server/ -run 'Login|RateLimit'
--- PASS: TestLoginRateLimiter_BlocksAfterMaxAttempts
--- PASS: TestLoginRateLimiter_ResetClearsWindow
--- PASS: TestLoginRateLimiter_WindowExpiry
--- PASS: TestAuthHandlers_LoginAndMe
--- PASS: TestAuthHandlers_LoginReturnsCapabilitiesFallback
ok chat-agent-system/internal/server 0.285s
判定:PASS。
六、 自动化测试套件汇总 (Test Suite Execution)
| 套件 | 结果 | 通过率 |
|---|---|---|
| `go test ./internal/server/ -run 'TestClientIP | TestParseTrusted'` | PASS |
go test ./internal/db/ |
PASS | 新增 4/4 + 既有不回归 |
go test ./cmd/server/ |
PASS | 5/5 |
| `go test ./internal/server/ -run 'Login | RateLimit'` | PASS |
docker compose config --quiet ×3 |
PASS | 3/3 |
go build ./... |
PASS | — |
七、 测试结论与后续优化建议 (Conclusion & Next Steps)
- S2 三项全部落地:伪造 XFF 无法再分散限流桶;池有 30s 语句超时上限;drain 窗口与长任务量级对齐。
- 部署生效需 compose 变更随发布流转(P5 授权窗口);
TRUSTED_PROXY_CIDRS生产默认留空(直连安全),接入反代后由运维填网段。 - 建议 P4(B3 锁拆分)独立推进,带
-race回归。