5.0 KiB
5.0 KiB
Smail 配置系统重构测试基线
1. 基线信息
- 记录日期:2026-08-27
- 工作目录:
D:\Desktop\Smail - 当前验证平台:Windows 开发环境
- 后端模块:
server - 前端模块:
fe - 测试原则:只使用临时目录、内存数据或测试数据库;不读取、不提交、不打印真实密码、私钥、数据库连接串、SMTP 凭据或配置主密钥。
本文件记录当前可重复执行的自动化基线,不代表 Ubuntu、Windows 生产服务、真实 SMTP、真实 MySQL、真实 PostgreSQL、多实例部署或最终发布验收已经完成。
2. 后端基线命令
在 PowerShell 中执行:
Set-Location D:\Desktop\Smail\server
go test ./... -count=1
go vet ./...
go test ./db/migration ./db -count=1
三数据库迁移集成测试使用环境变量提供测试 DSN,禁止把凭据写入命令行历史、文档、代码或远程地址:
$env:SMAIL_TEST_MYSQL_DSN = '<测试环境提供的 MySQL DSN>'
$env:SMAIL_TEST_POSTGRES_DSN = '<测试环境提供的 PostgreSQL DSN>'
go test ./db/migration -run 'Test(MySQL|Postgres)Integration' -count=1
未设置上述变量时,集成测试会安全跳过;跳过结果必须记录为“未验证”,不能写成测试通过。
3. 前端基线命令
在 PowerShell 中执行:
Set-Location D:\Desktop\Smail\fe
yarn.cmd build
如需只读执行代码检查,不使用项目中带有 --fix 的快捷脚本:
yarn.cmd eslint . --ext .vue,.js,.jsx,.cjs,.mjs --ignore-path .gitignore
前端构建产生的 fe/dist 属于忽略目录,不应据此覆盖、提交或删除用户已有的配置、密钥和可执行文件。
4. 测试分类
| 分类 | 主要范围 | 基线命令或测试入口 |
|---|---|---|
| 单元测试 | 配置、授权、认证、恢复、协议和工具函数 | go test ./... -count=1 |
| 数据库迁移 | 版本连续性、方言覆盖、首次执行、重复执行、并发锁、校验和冲突和失败回滚 | go test ./db/migration ./db -count=1 |
| 数据库集成 | MySQL、PostgreSQL 测试数据库的建表、重复执行、并发和失败恢复 | TestMySQLIntegration、TestPostgresIntegration |
| 静态检查 | Go 编译器和潜在错误检查 | go vet ./... |
| 前端构建 | Vue、Vite、依赖解析和生产构建 | yarn.cmd build |
| 安全回归 | 敏感字段脱敏、能力默认拒绝、恢复码边界和错误响应 | 对应 *_test.go 安全测试 |
| 浏览器验收 | 页面布局、登录恢复、配置页面和响应数据泄露 | 需使用独立浏览器实例和独立端口,当前基线不替代真实浏览器验收 |
| 跨平台验收 | Windows 开发模式、Ubuntu 22.04、Ubuntu 24.04、systemd、Named Pipe 和 Unix Domain Socket | 需在对应真实环境执行,当前未完成 |
5. 2026-08-27 执行结果
| 检查项 | 结果 | 说明 |
|---|---|---|
go test ./... -count=1 |
通过 | 后端全部测试包通过,无失败项 |
go vet ./... |
通过 | 未发现 vet 问题 |
go test ./db/migration ./db -count=1 |
通过 | SQLite 迁移和数据库初始化测试通过 |
| 默认迁移注册表覆盖测试 | 通过 | 版本连续、名称非空、三种数据库方言均有 SQL 或自定义 Apply |
| MySQL 集成测试 | 未验证 | 未配置 SMAIL_TEST_MYSQL_DSN,测试按设计跳过 |
| PostgreSQL 集成测试 | 未验证 | 未配置 SMAIL_TEST_POSTGRES_DSN,测试按设计跳过 |
yarn.cmd build |
通过 | Vite 生产构建通过;存在大资源分块提示,不影响本次构建结果 |
| Ubuntu 22.04/24.04 | 未验证 | 当前环境不是 Ubuntu |
| Windows 生产服务 | 未验证 | 当前仅完成 Windows 开发环境自动化检查 |
| 真实多实例、SMTP 和生产观测 | 未验证 | 需要部署环境、测试凭据和独立验收记录 |
6. 安全和脱敏检查
- 测试 DSN 只通过临时环境变量注入,文档只保留占位符。
- 测试失败信息不应包含完整 SQL、密码、私钥、密文、恢复码、验证码或数据库连接串。
- 迁移测试夹具使用临时 SQLite 文件和临时目录,不操作项目配置目录。
- 真实的
server/config/dkim/dkim.priv、server/config/ssl/private.key和已有可执行文件不属于测试输入,不得被测试覆盖、删除或提交。 - MySQL/PostgreSQL 集成测试必须使用一次性测试数据库或测试 schema,并在独立环境中清理;清理动作不得指向生产数据库。
7. 当前未完成项
CG-004仍需复审本基线的跨平台可重复性和责任边界。- MySQL、PostgreSQL 的真实集成测试需要安全提供 DSN 后执行,当前不能以跳过替代验收。
- Ubuntu 22.04、Ubuntu 24.04、Windows 服务、systemd、Named Pipe 和 Unix Domain Socket 需要真实平台测试。
- 前端仍需独立浏览器实例完成页面、权限、恢复流程和敏感数据泄露检查。
- 真实 SMTP、多实例、生产日志/指标/追踪/缓存/队列/错误报告哨兵和发布流程仍需单独验收。