Files
CloudSSH/tests
TanXinandTanXin 52fec4e00f release: 发布 v1.12.0 分享审计保留与清理完善版本 (#103)
## 版本内容

### 分享审计保留与清理
- 审计记录保留与清理能力:终态会话由所有者整体清空(写入墓碑事件保留追责线索)或导出完整 JSON 归档;终态满默认 90 天由 alarm
自动清理
- 审计保留期创建时自定义(7–365 天,白名单校验,默认 90)
-
清理留痕集中展示:清理时间与方式(手动/自动)同步用户库(`audit_purged_at`/`audit_purge_type`),折叠面板展示;已清理分享等同删除效果,不再提供查看审计入口
- 手动清空后取消已排期的自动清理闹钟;保留期服务端校验统一为 7–365 天;修复闹钟设置失败导致"有排期无闹钟"的幽灵状态

### 工程与质量
- 新增审计清理回归测试 8 用例(墓碑隔离、归属/终态校验、同步失败容错、排期回滚、留痕接缝、迁移幂等)
- UserDBDO SQL 查询类型化封装(`query<T>`/`one<T>`),消除 22 处 `as unknown as`
- 测试类型检查纳入门禁:`tests/` 拆分
`tsconfig.worker`/`tsconfig.frontend`(workers-types 与 DOM lib 的 Element
接口冲突无法单配置共存)
- 弱随机数加固(会话名 `crypto.randomUUID`);pnpm
供应链策略(`blockExoticSubdeps`/`minimumReleaseAge` 7 天/`no-downgrade`);CI
权限收敛 `contents: read`;`.gitleaks.toml` 误报豁免
- pi-lens 项目策略口径(AGENTS.md #31):XSS 类规则刻意不做项目级禁用,仅行内逐处豁免

## 提交列表

- 1c38c7a `release: 发布 v1.12.0 分享审计保留与清理完善版本`
- 4dd7c63 `feat: 审计清理回归测试、UserDBDO 类型化查询与测试类型门禁`
- 50389f3 `fix: 消除 pi-lens 剩余告警——SAFETY 注释/测试类型/XSS 抑制/空 catch 说明`
- 23a3e8e `chore: 代码质量审查整改——弱随机数/测试类型检查/供应链加固等 7 项`
- 1cf0ef9 `chore: 配置 pi-lens 项目策略降低风格类噪音并清理用户库遗留项`
- 0f27a50 `fix: 审计清理后完全隐藏分享卡片,仅保留集中式清理记录`
- 7c42e8e `feat: 审计清理改为删除效果并新增集中式清理记录留痕区`
- a3847ee `fix: 审计清理后改用折叠面板展示清理记录并补齐中英文词条`
- b730219 `fix: 审计保留期服务端校验统一为 7–365 天并修复清理闹钟静默失败`
- a68a6c8 `feat: 分享审计保留期支持创建时自定义(7–365 天)`
- 158b205 `fix: 手动清空审计后取消已排期的自动清理唤醒`
- 618f63c `feat: 分享审计记录保留与清理能力(清空/导出/自动保留期)`

## 验证结果

- typecheck 全绿(src + tests.worker + tests.frontend + frontend 四段)
- 全量测试 644/644(54 文件)
- build:frontend 构建成功并内联
- 关联 Issue/PR:无(基于 v1.11.0 #102)

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-26 12:35:58 +08:00
..

CloudSSH 测试套件

本目录包含 CloudSSH 的单元测试、协议集成测试、构建回归和浏览器 E2E。测试框架以 Vitest 和 Playwright 为主。

目录结构

tests/
├── build/                         # 生产构建、可复现性和原生弹窗回归
├── e2e/                           # Chromium 浏览器交互与 axe 无障碍检查
├── ssh/                           # SSH 算法、认证、加密、KEX、Packet 与测试密钥夹具
├── worker/                        # Worker 路由、安全、DNS、UserDB 与标签测试
├── agent-code-actions.test.ts # Agent 代码块复制/填入规则
├── agent-terminal-selection.test.ts # 终端选区附件和非授权安全边界
├── auth-challenge-dialog.test.ts # RFC 4256 认证挑战对话框交互
├── clipboard.test.ts              # Clipboard API 与旧版复制回退
├── frontend-ux.test.ts            # 前端关键交互源码回归(标签栏/状态栏渲染等)
├── host-display.test.ts           # IPv4/IPv6 掩码与完整地址复制
├── i18n.test.ts                   # 中英文词条和语言解析
├── known-hosts.test.ts            # 已知主机指纹 TOFU 信任与变更流程
├── mobile-input.test.ts           # iOS IME diff 与一次性修饰键帮助函数
├── share-session.test.ts          # 分享会话确认/领取幂等与页面状态
├── sftp-selection.test.ts         # SFTP 单选、多选、连选和全选模型
├── snippet-local-store.test.ts    # 匿名命令片段 localStorage 存储与限额
├── snippet-schema.test.ts         # 片段名称/命令/数量校验与规范化
├── terminal-status.test.ts        # SSH 状态事件翻译
├── terminal-text.test.ts          # 终端文本处理
├── theme.test.ts                  # 内置/自定义主题
├── types.test.ts                  # 共享类型和终端尺寸边界
└── README.md

tests/ssh/fixtures/ 中的私钥只用于公开的协议测试,不得用于生产服务器或真实账号。

运行命令

# 运行全部 Vitest 单元与集成测试
pnpm test

# 运行指定测试文件
pnpm test tests/ssh/auth.test.ts

# 生成覆盖率报告(输出到 coverage/)
pnpm run test:coverage

# 监听模式
pnpm test --watch

# 安装并运行 Chromium E2E 与 axe 无障碍检查
pnpm exec playwright install chromium
pnpm run test:e2e

# 类型检查、测试、可复现构建和 E2E 完整门禁
pnpm run verify

测试类型检查:pnpm run typecheck 的 worker 阶段会依次执行 tsc --noEmit(src)、tsc -p tests/tsconfig.worker.json(tests/worker|ssh|build, workers-types 环境)与 tsc -p tests/tsconfig.frontend.json(tests 根目录 *.test.ts + e2e, DOM 环境)。两个测试配置分开的原因:@cloudflare/workers-types 声明的基础 DOM 接口 (如 Element.append)与 DOM lib 合并冲突,不能在同一项目里同时加载。

当前覆盖范围

SSH 协议

  • 算法协商列表与兼容性
  • 密码认证
  • Ed25519、ECDSA P-256/P-384/P-521、RSA-SHA2 私钥认证
  • OpenSSH 私钥解析、DER/SSH 签名转换
  • AES-GCM/CTR、HMAC、Packet、KEX 辅助和二进制工具

Worker 与安全边界

  • Turnstile 验证 token 的结构、过期时间和 HMAC
  • Origin 检查、端口范围、连接令牌和错误信息边界
  • IPv4/IPv6 保留地址、DoH 解析与 DNS rebinding 防护
  • Agent 危险命令拦截、确认规则和 SSRF URL 校验
  • 主机密钥信任:首见指纹确认、更换指纹阻断与路由作用域隔离
  • 键盘交互认证、OS 检测、跳板链、SFTP 上传冲突、分享会话策略
  • UserDB 服务器标签/片段迁移、规范化、序列化、更新与隔离

前端与构建

  • 服务器搜索、标签筛选和响应式分页(桌面 9 / 平板 6 / 移动 3)
  • SFTP 单选、Cmd/Ctrl 多选、Shift 连选和全选
  • Agent 终端选区附件、问题组合和非授权安全边界
  • 终端选区自动复制、指针取消和旧版复制回退
  • i18n、主题、终端状态/文本、已知主机与片段本地存储
  • 构建可复现性、xterm 生产构建兼容和原生弹窗禁用

浏览器 E2E

  • 匿名连接表单 axe 检查
  • 服务器弹窗的基本对话框语义、初始焦点和 Escape 关闭
  • 服务器标签筛选与分页
  • Agent 终端选区附件
  • 终端选区复制与焦点恢复
  • 认证挑战对话框、iOS 输入法、移动端后台连接恢复与分享会话领取
  • SFTP 覆盖确认、主题样式与 UI 回归

当前限制

  • Playwright 的完整界面与无障碍回归主要运行 Chromium;认证挑战、iOS 输入法和移动端后台连接恢复另在 WebKit 设备项目中执行。Firefox 尚未纳入当前质量门禁。
  • 浏览器 E2E 主要通过 mock API 验证前端行为,尚未连接真实 OpenSSH/Dropbear 和 SFTP 服务。
  • SSHSessionDO、SSH 会话状态机、SFTP 数据流和 AgentCore 等运行态模块的覆盖率仍偏低。
  • 新增协议状态、WebSocket 消息或安全边界时,应优先补充运行时错误、取消、超时和畸形输入测试,而不仅验证成功路径。