Smail/docs/配置系统重构测试基线.md
smail f60d3b0880
Some checks are pending
Security Checks / security (push) Waiting to run
整理前后端与测试构建目录并完善配置和安全引导
统一 frontend、backend、test、test-log 和 out 目录,更新构建、部署及测试入口;纳入配置管理兼容与首次安全引导修复;排除本机配置、密钥和测试产物。
2026-09-05 19:19:52 +08:00

95 lines
5.0 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.

# Smail 配置系统重构测试基线
## 1. 基线信息
- **记录日期**:2026-08-27
- **工作目录**:`D:\Desktop\Smail`
- **当前验证平台**:Windows 开发环境
- **后端模块**:`server`
- **前端模块**:`frontend`
- **测试原则**:只使用临时目录、内存数据或测试数据库;不读取、不提交、不打印真实密码、私钥、数据库连接串、SMTP 凭据或配置主密钥。
本文件记录当前可重复执行的自动化基线,不代表 Ubuntu、Windows 生产服务、真实 SMTP、真实 MySQL、真实 PostgreSQL、多实例部署或最终发布验收已经完成。
## 2. 后端基线命令
在 PowerShell 中执行:
```powershell
Set-Location D:\Desktop\Smail\backend
go test ./... -count=1
go vet ./...
go test ./db/migration ./db -count=1
```
三数据库迁移集成测试使用环境变量提供测试 DSN,禁止把凭据写入命令行历史、文档、代码或远程地址:
```powershell
$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 中执行:
```powershell
Set-Location D:\Desktop\Smail\frontend
yarn.cmd build
```
如需只读执行代码检查,不使用项目中带有 `--fix` 的快捷脚本:
```powershell
yarn.cmd eslint . --ext .vue,.js,.jsx,.cjs,.mjs --ignore-path .gitignore
```
前端构建产生的 `frontend/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 文件和临时目录,不操作项目配置目录。
- 真实的 `backend/config/dkim/dkim.priv`、`backend/config/ssl/private.key` 和已有可执行文件不属于测试输入,不得被测试覆盖、删除或提交。
- MySQL/PostgreSQL 集成测试必须使用一次性测试数据库或测试 schema,并在独立环境中清理;清理动作不得指向生产数据库。
## 7. 当前未完成项
1. `CG-004` 仍需复审本基线的跨平台可重复性和责任边界。
2. MySQL、PostgreSQL 的真实集成测试需要安全提供 DSN 后执行,当前不能以跳过替代验收。
3. Ubuntu 22.04、Ubuntu 24.04、Windows 服务、systemd、Named Pipe 和 Unix Domain Socket 需要真实平台测试。
4. 前端仍需独立浏览器实例完成页面、权限、恢复流程和敏感数据泄露检查。
5. 真实 SMTP、多实例、生产日志/指标/追踪/缓存/队列/错误报告哨兵和发布流程仍需单独验收。