chore: docs 结构整改 + compose 双目录对齐(合并重建提交)
本提交为 .git 对象库损坏后的重建提交,内容等价于原先三个本地提交 (5e2fd4c2 / 57a53c98 / 5d7e1873)的累积结果,未做任何额外改动。 一、docs 结构整改(整改 #14) 根因:重构时新结构为 untracked 文件,执行 git stash(未带 -u)未纳入, 随后 git reset 拉回 HEAD 旧 tracked 树,导致旧树复活、新旧两棵目录 树并存于 docs/,共 791 文件、双分类体系冲突。 修复动作: - b2 同名异主题文件改名迁移保全 9 个 - C 类 39 个孤立文件按主题正确归类 - A/B1 类 222 个重复文件删除(新结构已有内容副本) - 9 个旧独有空目录删除 - 270 处内部引用按 verified 映射改写 - 整改记录 #14 登记于 04-运维文档/部署运维 结果:docs 791 → 569 文件,顶层仅规范 8 类 + 治理文件,单树恢复。 残留:约 20 处指向从未存在文件的陈旧死链,归入独立文档卫生任务。 二、compose 双目录对齐(消除踩坑 A) - docker-compose.yml:nginx 前端挂载全部由根目录 frontend-*/dist 改为 src/frontend-*/dist(h5 / agent / admin / terminal) - docker-compose.dev.yml:dev 服务 build context 与卷同步改 src/ - 效果:本地 docker compose up 不再把根目录 stale dist 挂回, 与线上一致,分叉隐患消除(已 docker compose config 校验通过) 防复发铁律: - 重构须提交;仓库修复须 git stash -u 或先 commit - 新结构须 git add 并提交,避免再次 untracked 复活 - H5 改动只动 src/frontend-h5/,禁改根目录遗留 frontend-*/
This commit is contained in:
@@ -0,0 +1,219 @@
|
||||
# Token多IP异常检测 - 测试用例
|
||||
|
||||
> **任务ID**: 待分配
|
||||
> **关联文档**: 技术设计-Token多IP异常检测.md
|
||||
> **测试环境**: 开发环境 / 测试环境
|
||||
|
||||
---
|
||||
|
||||
## 1. 测试概述
|
||||
|
||||
### 1.1 测试目标
|
||||
|
||||
验证Token多IP异常检测功能的正确性,确保:
|
||||
- 正常多设备使用不触发误报
|
||||
- 异常多IP使用能正确触发告警
|
||||
- 告警内容准确
|
||||
|
||||
### 1.2 测试范围
|
||||
|
||||
| 模块 | 测试内容 |
|
||||
|------|----------|
|
||||
| record_token_ip | IP记录逻辑 |
|
||||
| detect_anomaly | 异常检测逻辑 |
|
||||
| 告警发送 | 企微消息格式 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 测试用例
|
||||
|
||||
### 2.1 单元测试
|
||||
|
||||
#### T001: 单IP使用Token
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 用例ID | T001 |
|
||||
| 场景 | 同一IP多次使用Token |
|
||||
| 预置条件 | Redis中无数据 |
|
||||
| 测试步骤 | 1. 调用 record_token_ip(token="test", ip="10.0.0.1") <br> 2. 获取 token_ips:* key的SCARD值 |
|
||||
| 预期结果 | IP数量=1,不触发告警 |
|
||||
| 实际结果 | |
|
||||
| 状态 | ☐ |
|
||||
|
||||
#### T002: 3个IP使用Token (阈值)
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 用例ID | T002 |
|
||||
| 场景 | 3个不同IP使用同一Token |
|
||||
| 预置条件 | Redis中已有token_ips:test包含2个IP |
|
||||
| 测试步骤 | 1. 调用 record_token_ip(token="test", ip="10.0.0.3") <br> 2. 执行 detect_token_anomaly() <br> 3. 检查告警是否发送 |
|
||||
| 预期结果 | IP数量=3,触发告警 |
|
||||
| 实际结果 | |
|
||||
| 状态 | ☐ |
|
||||
|
||||
#### T003: 5个IP使用Token (严重)
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 用例ID | T003 |
|
||||
| 场景 | 5个不同IP使用同一Token |
|
||||
| 预置条件 | Redis中已有token_ips:test包含4个IP |
|
||||
| 测试步骤 | 1. 调用 record_token_ip(token="test", ip="10.0.0.5") <br> 2. 执行 detect_token_anomaly() |
|
||||
| 预期结果 | IP数量=5,触发告警(严重) |
|
||||
| 实际结果 | |
|
||||
| 状态 | ☐ |
|
||||
|
||||
#### T004: 同一IP多次使用
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 用例ID | T004 |
|
||||
| 场景 | 同一IP多次调用record_token_ip |
|
||||
| 预置条件 | Redis中已有token_ips:test包含1个IP |
|
||||
| 测试步骤 | 1. 调用 record_token_ip(token="test", ip="10.0.0.1") 3次 <br> 2. 获取 token_ips:test 的SCARD值 |
|
||||
| 预期结果 | IP数量仍为1(Set自动去重) |
|
||||
| 实际结果 | |
|
||||
| 状态 | ☐ |
|
||||
|
||||
#### T005: Token过期后IP清空
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 用例ID | T005 |
|
||||
| 场景 | Token过期后IP记录清空 |
|
||||
| 预置条件 | Redis中token_ips:test存在,TTL=60秒 |
|
||||
| 测试步骤 | 1. 等待TTL过期 <br> 2. 检查key是否存在 |
|
||||
| 预期结果 | key不存在(自动过期) |
|
||||
| 实际结果 | |
|
||||
| 状态 | ☐ |
|
||||
|
||||
#### T006: 重复告警抑制
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 用例ID | T006 |
|
||||
| 场景 | 同一异常Token在告警周期内再次触发 |
|
||||
| 预置条件 | 已触发过告警,alerted_key存在 |
|
||||
| 测试步骤 | 1. 执行 detect_token_anomaly() <br> 2. 检查告警发送次数 |
|
||||
| 预期结果 | 不重复发送告警 |
|
||||
| 实际结果 | |
|
||||
| 状态 | ☐ |
|
||||
|
||||
---
|
||||
|
||||
### 2.2 集成测试
|
||||
|
||||
#### I001: 真实API请求IP记录
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 用例ID | I001 |
|
||||
| 场景 | 通过API请求触发IP记录 |
|
||||
| 预置条件 | 后端服务运行中 |
|
||||
| 测试步骤 | 1. 发送HTTP请求(带X-Forwarded-For) <br> 2. 检查Redis中IP是否记录 |
|
||||
| 预期结果 | X-Forwarded-For的IP被记录 |
|
||||
| 实际结果 | |
|
||||
| 状态 | ☐ |
|
||||
|
||||
#### I002: 定时任务完整流程
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 用例ID | I002 |
|
||||
| 场景 | 定时任务触发完整检测流程 |
|
||||
| 预置条件 | 3个异常Token存在 |
|
||||
| 测试步骤 | 1. 等待定时任务执行(60秒) <br> 2. 检查告警记录 |
|
||||
| 预期结果 | 3条告警发送 |
|
||||
| 实际结果 | |
|
||||
| 状态 | ☐ |
|
||||
|
||||
#### I003: 企微消息格式
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 用例ID | I003 |
|
||||
| 场景 | 告警消息格式正确 |
|
||||
| 预置条件 | webhook配置正确 |
|
||||
| 测试步骤 | 1. 触发告警 <br> 2. 检查企微收到的消息 |
|
||||
| 预期结果 | markdown格式,包含employee_id、ip_count、token_hash |
|
||||
| 实际结果 | |
|
||||
| 状态 | ☐ |
|
||||
|
||||
---
|
||||
|
||||
## 3. 测试数据
|
||||
|
||||
### 3.1 测试Token
|
||||
|
||||
| Token | employee_id | 说明 |
|
||||
|-------|-------------|------|
|
||||
| test-token-001 | user001 | 单IP测试 |
|
||||
| test-token-002 | user002 | 3IP阈值测试 |
|
||||
| test-token-003 | user003 | 5IP严重测试 |
|
||||
| test-token-004 | user004 | 重复告警测试 |
|
||||
|
||||
### 3.2 测试IP
|
||||
|
||||
| IP | 类型 | 说明 |
|
||||
|----|------|------|
|
||||
| 10.0.0.1 | 内网 | 正常IP |
|
||||
| 10.0.0.2 | 内网 | 正常IP |
|
||||
| 10.0.0.3 | 内网 | 异常IP |
|
||||
| 218.75.34.87 | 公网 | 外部IP |
|
||||
| 117.147.35.138 | 公网 | 外部IP |
|
||||
|
||||
---
|
||||
|
||||
## 4. 测试环境配置
|
||||
|
||||
### 4.1 环境变量
|
||||
|
||||
```bash
|
||||
# 测试环境配置
|
||||
TOKEN_ANOMALY_THRESHOLD=3
|
||||
TOKEN_ANOMALY_WINDOW=3600
|
||||
TOKEN_ANOMALY_AUTO_DISABLE=false
|
||||
CONTENT_AUDIT_WEBHOOK=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx
|
||||
```
|
||||
|
||||
### 4.2 Redis预置
|
||||
|
||||
```bash
|
||||
# 预置测试数据
|
||||
redis-cli SET "user:token:test-token-001" '{"employee_id":"user001",...}'
|
||||
redis-cli SADD "token_ips:hash001" "10.0.0.1"
|
||||
redis-cli EXPIRE "token_ips:hash001" 3600
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 测试结果
|
||||
|
||||
| 用例ID | 预期 | 实际 | 状态 | 备注 |
|
||||
|--------|------|------|------|------|
|
||||
| T001 | 通过 | | ☐ | |
|
||||
| T002 | 通过 | | ☐ | |
|
||||
| T003 | 通过 | | ☐ | |
|
||||
| T004 | 通过 | | ☐ | |
|
||||
| T005 | 通过 | | ☐ | |
|
||||
| T006 | 通过 | | ☐ | |
|
||||
| I001 | 通过 | | ☐ | |
|
||||
| I002 | 通过 | | ☐ | |
|
||||
| I003 | 通过 | | ☐ | |
|
||||
|
||||
---
|
||||
|
||||
## 6. 测试签收
|
||||
|
||||
| 角色 | 姓名 | 日期 | 签名 |
|
||||
|------|------|------|------|
|
||||
| 开发 | | | |
|
||||
| 测试 | | | |
|
||||
| 审核 | | | |
|
||||
|
||||
---
|
||||
|
||||
> **编制人**: 威胁检测工程师
|
||||
> **日期**: 2026-07-14
|
||||
Reference in New Issue
Block a user