Files
web-Iot/docs/越权-冲突-超时测试记录.md
2026-08-10 13:33:06 +08:00

81 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 越权 / 冲突 / 超时测试记录
| 项目 | 内容 |
|------|------|
| 文档编号 | TR-02 |
| 文档名称 | 越权 / 冲突 / 超时测试记录 |
| 版本 | V1.0 |
| 测试阶段 | Alpha 安全与边界测试 |
| 测试日期 | 2026-08-10 |
| 被测系统 | 设备接入服务 Alpha、状态服务 Alpha、命令服务 Alpha |
| 关联文档 | DOC-08、DOC-09、控制会话状态机、命令状态机 |
---
## 1. 测试说明
本记录覆盖三类边界场景:
| 类别 | 说明 | 关注点 |
|------|------|--------|
| 越权(AUTH) | 未授权/越权访问设备与命令资源 | RBAC、设备归属、会话抢占权限 |
| 冲突(CONFLICT) | 并发命令、重复回传、状态非法流转 | 互斥规则、幂等性、状态机守卫 |
| 超时(TIMEOUT) | 心跳/命令/会话/握手超时 | 超时判定、自动重试、资源释放 |
## 2. 越权测试记录(AUTH-*)
| 用例 | 前置 | 步骤 | 预期 | 实际 | 结果 |
|------|------|------|------|------|------|
| AUTH-01 未登录访问设备列表 | 无 token | GET /api/devices | 401 拒绝 | 401 拒绝 | ✅ |
| AUTH-02 viewer 下发控制命令 | viewer 角色会话 | POST /api/commands (move) | 403 无控制权限 | 403 拒绝 | ✅ |
| AUTH-03 操作员控制非本场站设备 | 操作员 A,设备属场站 B | 下发命令至场站 B 设备 | 403 越权拒绝 | 403 拒绝 | ✅ |
| AUTH-04 普通用户抢占已有会话 | 设备已被操作员 B 控制 | 普通用户申请控制权 | 403 设备被占用 | 403 拒绝 | ✅ |
| AUTH-05 admin 抢占已有会话 | 设备被操作员 B 控制 | admin 申请控制权 | 抢占成功,原会话收到 PRECEDED 关闭 | 抢占成功,原会话关闭 | ✅ |
| AUTH-06 伪造设备心跳 | 设备 A 的 secret 未知 | 用错误 secret 上报心跳 | 401 拒绝 | 401 拒绝(校验 secret) | ✅ |
| AUTH-07 查询他人创建的命令 | 命令属用户 B | 用户 A GET /api/commands/:id | 403 无权查看 | 403 拒绝 | ✅ |
## 3. 冲突测试记录(CONFLICT-*)
| 用例 | 前置 | 步骤 | 预期 | 实际 | 结果 |
|------|------|------|------|------|------|
| CONFLICT-01 同设备并发互斥命令 | 设备执行 move(EXECUTING) | 再下发 task_start | 40902 设备忙 | 40902 拒绝 | ✅ |
| CONFLICT-02 终态命令重复回传结果 | 命令已 SUCCEEDED | 再次 POST result | 409 终态不可回传 | 409 拒绝 | ✅ |
| CONFLICT-03 终态命令重复 ACK | 命令已 SUCCEEDED | 再次 POST ack | 409 终态不可 ACK | 409 拒绝 | ✅ |
| CONFLICT-04 取消执行中命令 | 命令 EXECUTING | POST cancel | 409 执行态不可取消 | 409 拒绝 | ✅ |
| CONFLICT-05 重复注册设备 | 设备已注册 | 再次 register | 409 已注册 | 409 拒绝 | ✅ |
| CONFLICT-06 双操作员同时申请控制权 | 无会话 | 同时 AUTH(非 admin) | 仅 1 人成功,另一人 403 | 1 成功 1 拒绝 | ✅ |
| CONFLICT-07 重试与超时竞态 | 命令即将超时 | 超时瞬间手动 retry | 状态机保证不双写;以先到者为准 | 未出现状态错乱 | ✅ |
## 4. 超时测试记录(TIMEOUT-*)
| 用例 | 前置 | 步骤 | 预期 | 实际 | 结果 |
|------|------|------|------|------|------|
| TIMEOUT-01 心跳超时离线 | 设备心跳周期 30s | 停止心跳 70s | 设备自动置 offline | 70s 后 offline | ✅ |
| TIMEOUT-02 命令 ACK 超时 | 下发命令(30s 超时) | 设备不 ACK | 自动重试 1 次后 TIMEOUT | TIMEOUT(events 含 auto_retry) | ✅ |
| TIMEOUT-03 命令执行超时 | 命令已 ACK | 设备不回传结果 | 30s 后 TIMEOUT | TIMEOUT | ✅ |
| TIMEOUT-04 超时命令手动重试 | 命令 TIMEOUT | POST retry | 重新 SENT 并重新计时 | SENT,定时器重置 | ✅ |
| TIMEOUT-05 会话握手超时 | 客户端 AUTH 后不响应 | 等待 5s | 会话回 IDLE 并释放 | 回 IDLE | ✅ |
| TIMEOUT-06 会话保活超时 | 会话 ESTABLISHED | 停止保活帧 30s | 会话 SUSPENDED→CLOSED | CLOSED(closedReason=timeout) | ✅ |
| TIMEOUT-07 挂起会话恢复超时 | 会话 SUSPENDED | 等待 30s 不恢复 | CLOSED,未终态命令 CANCELLED | CLOSED,命令取消 | ✅ |
## 5. 回归结论
| 类别 | 用例数 | 通过 | 失败 | 通过率 |
|------|:---:|:---:|:---:|:---:|
| 越权 | 7 | 7 | 0 | 100% |
| 冲突 | 7 | 7 | 0 | 100% |
| 超时 | 7 | 7 | 0 | 100% |
| **合计** | **21** | **21** | **0** | **100%** |
**遗留说明:**
- 越权类用例中 RBAC 会话抢占、设备归属校验由控制会话层执行,Alpha 三服务以 token 占位校验实现,Beta 需接入统一认证网关(SSO)。
- TIMEOUT-02/03 的自动重试次数可配置(maxRetries),测试按默认 1 次执行。
---
**变更记录**
| 版本 | 日期 | 变更内容 | 作者 |
|------|------|----------|------|
| V1.0 | 2026-08-10 | 初稿:越权/冲突/超时三类 21 用例全量通过 | 测试组 |