Smail/test
smail 079ebee495
Some checks are pending
Security Checks / security (push) Waiting to run
补充SQL切换联合故障验收工具并校准系统调用边界
2026-09-22 00:58:02 +08:00
..
backend 统一单数据库部署并完成三种数据库云端验证 2026-09-20 22:05:52 +08:00
deployment 补充SQL切换联合故障验收工具并校准系统调用边界 2026-09-22 00:58:02 +08:00
frontend 完善插件独立密钥保存权限与加密回归 2026-09-20 08:12:06 +08:00
manual/smtp 修复生产审查凭据泄露风险并增加持久投递队列 2026-09-17 10:17:09 +08:00
plugins/spam_block 整理前后端与测试构建目录并完善配置和安全引导 2026-09-05 19:19:52 +08:00
review 补全项目托管证书的根域名与泛域名覆盖 2026-09-20 01:38:32 +08:00
tools 补充SQL切换联合故障验收工具并校准系统调用边界 2026-09-22 00:58:02 +08:00
generate_files.py 开始任务:超级管理员支持安全中心通过外部邮箱验证码修改密码 2026-09-15 17:25:53 +08:00
README.md 修复通行密钥默认配置启动并补齐迁移校验 2026-09-06 22:39:07 +08:00
run_deploy.py 修复生产审查凭据泄露风险并增加持久投递队列 2026-09-17 10:17:09 +08:00
run.mjs 限制系统邮件记录仅超管可见并校验唯一超级管理员 2026-09-15 21:00:31 +08:00
runtime_data_check.py 分离五项配置与运行数据并实现无损目录迁移 2026-09-08 17:16:09 +08:00
ssl-runtime-check.py 修复自定义证书导入与配置应用流程 2026-09-08 14:03:41 +08:00
write_helper.py 开始任务:超级管理员支持安全中心通过外部邮箱验证码修改密码 2026-09-15 17:25:53 +08:00

测试目录

目录用途

  • frontend/:前端自动测试及其构建路径约束测试,直接复用 frontend/node_modules。
  • backend/:集中保存邮件监听、账号协议隔离、凭据竞态及 WebAuthn 站点配置和启动回归,通过默认入口的 Go overlay 注入相应业务包;不复制测试文件到源码目录。
  • tools/password-check/:离线密码哈希校验工具,只通过环境变量接收输入,不输出密码和哈希。
  • manual/smtp/:人工 SMTP 发信脚本,可能向外部发送真实邮件,不包含在自动测试中。运行前需自行检查收发件人和服务器配置。
  • plugins/spam_block/:垃圾邮件模型测试,需要额外安装 TensorFlow 并准备相应模型;不包含在默认测试中。
  • archive/:历史测试脚本和补丁,仅留作检查证据,路径和运行环境可能已失效,不应直接执行,也不提交其中的本机配置。
  • run.mjs:统一自动测试入口。

执行方法

在项目根目录运行:

node test/run.mjs all
node test/run.mjs frontend
node test/run.mjs backend
node test/run.mjs backend -count=1 ./...
node test/run.mjs backend -race ./...

首次执行 Go 测试前,需要在 frontend/ 安装依赖并运行 npm run build,为 go:embed 提供前端文件。默认命令不会启动开发服务、清空真实数据库或发送真实邮件。

每次运行自动创建 test-log/run-时间-进程号/,保存前后端日志及临时文件。子进程的 SMAIL_ROOT 和临时目录指向该次测试目录,不继承开发后端的真实配置根目录。MySQL/PostgreSQL 集成测试仍需单独准备专用数据库,不能指向业务数据库。

Windows 密码检查工具的构建命令:

Set-Location test/tools/password-check
go build -o ../../../out/test-tools/password-check.exe .

三种数据库迁移验收

node test/run.mjs backend -count=1 -v ./services/dbmigration -run TestPortableSQLIntegration

网络数据库实测必须先配置专用测试服务的环境变量:

  • SMAIL_TEST_MIGRATION_MYSQL:结构化连接,type 为 mysql。
  • SMAIL_TEST_MIGRATION_POSTGRES:结构化连接,type 为 postgresql,服务必须支持 TLS。
  • 两个变量的内容均为 JSON,字段为 type、host、port、username、password,其中 password 是包含 plaintext 字段的对象;不填写 name 或 localRef,不把真实凭据写入仓库。
  • 使用拥有创建数据库权限的专用账号。测试仅创建 smail_migration_test_ 前缀的随机新库,不访问现有业务库,不自动删除网络测试库。
  • 单个服务执行 SQLite → 网络库 → 同类型新库 → SQLite;同时提供两种服务时,额外执行 SQLite → MySQL → PostgreSQL → MySQL → SQLite。
  • 逐表校验内容,并检查中文主题、二进制会话、日期、布尔值和新增记录主键。配置切换使用测试回调,不代表完整部署重启验收。
  • 未提供连接时显示跳过,不能作为 MySQL/PostgreSQL 实库迁移通过的证据。

Go 测试源码的必要例外

backend/ 中的同包 *_test.go 保持原位,其中许多测试使用包内私有函数或相对路径。将其机械移动到独立目录会破坏 Go 测试语义,因此只集中运行入口,不改变业务包的可见性和 API。后续跨模块、浏览器和独立协议测试应放到本目录。

截图、测试生成的 Logo 检查图、浏览器配置、测试数据库、报告和日志都放到 test-log/;测试工具二进制放到 out/test-tools/。运行用 Logo、文档演示图、模型训练脚本及数据不是临时测试产物,不作清理。