Some checks are pending
Security Checks / security (push) Waiting to run
统一 frontend、backend、test、test-log 和 out 目录,更新构建、部署及测试入口;纳入配置管理兼容与首次安全引导修复;排除本机配置、密钥和测试产物。
95 lines
5.0 KiB
Markdown
95 lines
5.0 KiB
Markdown
# 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、多实例、生产日志/指标/追踪/缓存/队列/错误报告哨兵和发布流程仍需单独验收。
|