4.9 KiB
4.9 KiB
注册 INTERNAL(标准角色缺失)测试报告
一、 测试背景 (Background)
test 环境(:8081)注册新用户返回 INTERNAL / 「请求无法完成」。dev(:8080)新用户名可成功,但重复用户名同样是 INTERNAL。根因是 test 库缺 role-guest(FK 23503),以及用户名唯一冲突被当成基础设施错误。
二、 测试目标 (Test Objectives)
- test 补种标准角色后,新用户名注册返回 200
- 重复用户名在新代码下返回 400,
error为「用户名已存在」 - 既有注册成功路径(审核中)不回归
- 不替换 rc 制品
bin/agent-server-test
三、 测试方案与环境 (Test Plan & Environment)
- OS: Linux;worktree
fix/auth-register-internal-2026-09-28,基线4ba60c2c9d7eaf3e3e824475c0f3a44e10641190 - 单测:
go test内存库与冲突分类(不连 5433/5434) - 实库:test localpg
:5434/agent_system_test。合入前手工执行 00077 Up(当时 goose 仍为 76);合入9141741b后./scripts/launch-single.sh test(未--build)重启,日志goose: successfully migrated database to version: 77 - 运行中的
:8081仍是 rc 单二进制,不含本次 Go 改动 - NOT REQUIRED:产品 PI 全链路。依据:IAM 注册与迁移,不改工作流模板或提示词
证据目录:assets/2026-09-28-auth-register-internal/
四、 预期结果 (Expected Results)
| 用例 | 预期 |
|---|---|
| test 缺 role-guest 时注册 | 修复前 INTERNAL;补种后 200 |
| 新代码重复用户名 | 400,error 含「已存在」,code=VALIDATION |
| 当前 rc 二进制重复用户名 | 仍 INTERNAL(制品未换) |
| dev 新用户名 | 200 |
五、 实际测试结果与判定 (Actual Results & Evaluation)
1. 修复前复现
- 输入:
POST /api/v1/auth/register用户名diag_user_0928 - 实际输出:dev
{"status":"active",...,"user_id":75};test{"code":"INTERNAL","message":"请求无法完成","request_id":"req_diag_repro_002","error":"INTERNAL"}。dev 重复同一用户名:request_id=req_f0a8c723ed8e6c4a,同样 INTERNAL - 评价:PASS(复现)
- 耗时:约 150ms
2. 补种后 test 注册
- 输入:00077 Up(
INSERT 0 4角色);POST :8081/api/v1/auth/register用户名regfix_0928a,X-Request-ID: req_regfix_fresh_0928 - 实际输出:HTTP 200
{"status":"active","message":"注册成功,已激活,请返回登录","user_id":43}。role-guest/director/engineer/tech-lead的is_system=t。探测用户与 dev 上的diag_user_0928、regfix_dev_0928a已删除 - 评价:PASS
- 耗时:注册请求 < 1s
3. 当前 test 二进制的重复用户名
- 输入:再次注册
regfix_0928a,X-Request-ID: req_regfix_dup_0928 - 实际输出:
{"code":"INTERNAL","message":"请求无法完成","request_id":"req_regfix_dup_0928","error":"INTERNAL"} - 评价:符合预期(rc 制品尚无
ErrUsernameExists)。400 行为由单测覆盖,随下次含本提交的 test 制品生效 - 耗时:< 1s
4. dev 新用户名对照
- 输入:
POST :8080用户名regfix_dev_0928a - 实际输出:
{"status":"active","message":"注册成功,已激活,请返回登录","user_id":79}(随后删除) - 评价:PASS
六、 自动化测试套件汇总 (Test Suite Execution)
ok chat-agent-system/internal/auth 0.087s
TestIsUsernameConflict PASS(23505 用户名约束为真,23503 与其它唯一约束为假)
TestErrUsernameExistsIsNotInfrastructureShaped PASS
ok chat-agent-system/internal/server 0.349s
TestAuthHandlers_RegisterAndApproval PASS
TestAuthHandlers_RegisterDuplicateUsername PASS(400 / VALIDATION / error 含「已存在」)
TestPgStore_CreateUserDuplicateUsername 在未设置 TEST_DATABASE_URL 时 Skip,不连共享库。
5. 合入后重启 test
- 输入:
./scripts/launch-single.sh test(不--build,沿用 rc 二进制);再POST :8081/api/v1/auth/register用户名regfix_0928b,X-Request-ID: req_regfix_after_restart - 实际输出:
.tmp/launch/server-test.log含OK 00077_2026-09-28-reseed-standard-roles.sql与goose: successfully migrated database to version: 77。goose_db_version最新为 77。HTTP 200{"status":"active","message":"注册成功,已激活,请返回登录","user_id":45}。该用户已删除 - 评价:PASS
- 耗时:重启至健康检查约 12s
七、 测试结论与后续优化建议 (Conclusion & Next Steps)
test 注册失败已解除:标准角色已补种,goose 77,重启后的 :8081 注册返回 200。重复用户名的 400 在本提交单测通过;正在运行的 rc 二进制仍会把重复用户名报成 INTERNAL,随下次包含本提交的 test 制品生效。不要为这条 400 替换当前 rc 二进制。