bash .ai-workbench/chaos-test.sh 一键复现;下面是本次执行的真实结果。
| 用例 | 注入方式 | 预期表现 | 方式 | 结果 |
|---|---|---|---|---|
| 伪造 access token | 构造一个假签名 token 请求受保护接口 | 干净 401,不 500、不泄漏堆栈 | 自动 | PASS |
| 垃圾 token | Authorization 带一段乱字符串 | 401 | 自动 | PASS |
| 篡改 token payload | 改 payload 里的 sub 但不改签名 | 签名校验失败 → 401 | 自动 | PASS |
| 限流豁免:健康检查 | /actuator/health 连打 30 次 | 始终 200,不被限流误伤 | 自动 | PASS |
| 限流豁免:webhooks | 猛打 /webhooks/** | 不返回 429(三方回调不能被限流挡掉) | 自动 | PASS |
| 设备层限流 | 固定一个设备 ID 1 分钟猛打 | 到设备阈值(测试 60/分钟)开始 429 | 自动 | PASS |
| 伪造设备绕过限流 | 每个请求换一个假设备 ID 猛打 | 设备层限不住,但 IP 总闸兜住 | 自动 | PASS |
SESSION_REPLACED、旧 refresh token 续期被拒、B 正常;②三方超时——已确认部署包内 spring.http.client.read-timeout=10s 生效(用户侧接口),Xendit/报表类单独 30s。这些需要故障注入工具或在服务器上操作,不适合放进对公网打的脚本,列成清单逐条执行、打勾。
| 类别 | 用例 | 注入方式 | 预期表现 | 状态 |
|---|---|---|---|---|
| 三方依赖 | 三方变慢 | 用代理/防火墙把 Shopee/TikTok/Lazada 接口拖慢到 >15s | 转链接/查详情 10s 快速失败;登录、查钱包、首页等无关接口不受影响、不变慢 | 待执行 |
| 三方挂掉 | 把三方地址解析到黑洞/拒绝连接 | 对应接口报错,不重试到死、不占死线程 | 待执行 | |
| 三方返垃圾 | 代理返回截断 JSON / 超大响应 | 解析失败被捕获,不写脏数据、不抛未处理异常 | 待执行 | |
| 认证/单设备 | Redis 抖动时登录 | 临时切断到 Redis 的连接后登录 | 单设备检查 fail-open 放行,用户仍能正常用,不集体登录失败 | 待执行 |
| 限流器依赖故障 | 制造限流内部异常 | fail-open 放行,不因限流器坏了把用户全拦住 | 待执行 | |
| 基础设施 | 杀进程 | 手动 kill 某个服务进程 | 自愈看门狗(self-heal)几分钟内自动拉起并报警飞书 | 待执行 |
| DB/Redis 短暂断连 | 安全组临时封端口再恢复 | 连接池重连,请求短暂失败后自动恢复,无需重启 | 待执行 | |
| 资源打高 | 压 CPU/内存/磁盘 | CloudMonitor 按阈值告警飞书 | 待执行 | |
| 数据/并发 (资金只读观察) | 重复回调/重复同步 | 同一支付回调、同一订单同步发两次 | 幂等键/唯一约束天然去重,不重复入账 | 待执行 |
| 并发抢同一钱包 | 同一用户钱包并发操作 | 行锁保证不算错钱 | 待执行 | |
| 消息乱序/重复 | 往 outbox 灌重复/乱序事件 | 消费者幂等,结果不变 | 待执行 |