From e6bfde2419d7e700b845509980125edc7fd14736 Mon Sep 17 00:00:00 2001 From: smail Date: Sun, 20 Sep 2026 07:09:30 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=B0=E5=BD=95=E4=BA=91=E7=AB=AF=E7=BD=91?= =?UTF-8?q?=E9=A1=B5=E6=94=B6=E5=8F=91=E4=B8=8E=E9=82=AE=E4=BB=B6=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E4=BF=AE=E5=A4=8D=E5=AE=9E=E6=B5=8B=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/云端全项目测试报告.md | 56 ++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 9 deletions(-) diff --git a/docs/云端全项目测试报告.md b/docs/云端全项目测试报告.md index 05411339..e03f82b2 100644 --- a/docs/云端全项目测试报告.md +++ b/docs/云端全项目测试报告.md @@ -4,11 +4,11 @@ ## 结论与任务状态 -已完成全项目自动化测试、发现问题的修复、Linux 构建和云端部署,并完成核心账号安全及公网邮件协议实机验证。接续补齐了内置 AliDNS 挑战、生产续期入口和 Nginx 自动换证同步,包含这些修改的源码重新完成 66 包云端全量。公网收发发现的 IMAP Message-ID 搜索遗漏已修复,受影响包和部署后闭环通过。当前没有未解决的自动化测试失败;指定外部邮箱收件、自然到期长期调度等仍未验收,不能宣布整个项目最终验收通过。 +已完成全项目自动化测试、发现问题的修复、Linux 构建和云端部署,并完成核心账号安全、公网邮件协议和浏览器网页收发实机验证。接续补齐了内置 AliDNS 挑战、生产续期入口和 Nginx 自动换证同步,包含这些修改的源码重新完成 66 包云端全量。公网收发发现的 IMAP Message-ID 搜索遗漏已修复,受影响包和部署后闭环通过。网页实测发现邮件读取失败仍显示空模板,已修复并部署,前端 206 项及云端页面回归通过。当前没有未解决的自动化测试失败;指定外部邮箱收件、自然到期长期调度等仍未验收,不能宣布整个项目最终验收通过。 - [✓] 已按授权备份、清理 Smail 相关环境,重新初始化测试数据库。接续测试复用本轮数据库,没有重复清库。 - [✓] 修复测试发现的问题,相关包完成复测;最新程序已部署,云端和本地摘要一致。 -- [✓] 含续期及配置校验修复的源码 `88649c8` 完成独立 Linux 后端全量,66 包成功、1971 个 PASS 标记、0 FAIL、5 SKIP。后续仅 IMAP 搜索修改,另行完成 list、IMAP 两包本地及云端回归和公网收发闭环。 +- [✓] 含续期及配置校验修复的源码 `88649c8` 完成独立 Linux 后端全量,66 包成功、1971 个 PASS 标记、0 FAIL、5 SKIP。后续 IMAP 搜索修改另行完成 list、IMAP 两包本地及云端回归和公网收发闭环;最新 `ff13d39` 只修改邮件详情前端及其测试,没有重新宣称后端全量。 - [✓] 三类账号登录、TOTP 选择、提醒行为、邮件验证码跨场景消费、密码重置和客户端凭据撤销完成相应实机验证。 - [✓] 项目部署包只包含三个程序与四个运行目录,没有加入 Python、部署或续期脚本。 - [✓] 本轮临时 TOTP、外部邮箱绑定均已停用,账号密码保持用户指定值。 @@ -16,6 +16,7 @@ - [✓] Web 及已启用邮件 TLS、STARTTLS 入口返回同一张覆盖根域名的泛域名证书。 - [!] 三个指定的 163 邮箱尚未完成真实收件和绑定验证。 - [✓] 本机 Node 客户端通过公网域名完成 SMTP 认证发信、IMAP 按 Message-ID 查询及读取、POP3 读取同一邮件正文;三个入口均正常校验 TLS 信任链与域名。 +- [✓] 真实浏览器完成写信、发送成功、发件及收件阅读、中文附件内容校验;跨账号访问拒绝、失败重试和返回列表通过。系统文件选择器受工具限制未验收,具体边界见末节。 - [✓] 内置 AliDNS 在真实 staging CA 完成根域名及泛域名挑战、签发、记录清理;生产续期入口成功,配置变化自动触发 Nginx 同步与平滑重载。 - [!] 尚未等待证书自然进入续期窗口,未完成内置定时调度的长期运行验收。 - [!] Windows 提权 Named Pipe、依赖外部服务的插件业务等不在本轮 Linux 实机通过范围内。 @@ -36,6 +37,7 @@ | `87cd28f` | DNS 清理改用受限凭据已有授权的记录列表接口,分页后精确核对 ID、名称、类型和值,只删除本轮创建的记录。 | | `6920bff` | 续期后上一张证书的引用格式校验不再依赖当前工作目录权限,实际证书路径、权限及密钥匹配校验保留。 | | `eb5063a` | 修复 IMAP `SEARCH HEADER Message-ID` 总是返回空的问题;支持完整标识、子串、大小写及旧邮件备用标识,回归验证用户隔离。 | +| `ff13d39` | 邮件详情增加加载、业务错误、网络失败及重试状态,失败时隐藏空元数据和删除按钮;切换邮件清除旧内容,并阻止旧请求覆盖当前页面。 | 每轮代码修改前均保存中文 Git 基线并推送。一次文档基线推送出现认证失败,重试后成功。没有使用宽泛暂存或提交测试凭据。 @@ -48,7 +50,7 @@ | Linux 后端最新单次全量 | 66 个包均退出成功,1971 个 PASS 标记、0 个 FAIL 标记、5 个 SKIP 标记 | `/var/tmp/scl20/results/summary.json`、`results.json` 及逐包日志 | | 续期修复前单次全量 | 66 包成功,1955 PASS、0 FAIL、5 SKIP,作为历史结果保留 | `/var/tmp/scf20/final-results/` | | 公网搜索修复后的 Linux 回归 | list 9 个 PASS 标记、IMAP 40 个 PASS 标记,两包退出码 0、无失败或跳过 | `/var/tmp/smail-public-fix20/list.log`、`imap.log` | -| 最新前端 | 200 项通过,0 失败、0 跳过 | 本地 `test-log/run-2026-09-19T21-11-24-986Z-25484/frontend.log` | +| 最新前端 | 206 项通过,0 失败、0 跳过;含 6 项邮件详情新增回归 | 本地 `test-log/run-2026-09-19T22-56-17-711Z-31272/frontend.log` | | Windows 构建互斥与测试入口 | 4 项通过;Linux 专用项在 Windows 跳过 | 本地 `test-log/run-2026-09-19T16-13-15-667Z-3920/deployment.log` | | Linux 资源策略 | 15 项通过 | 云端 `resource-policy.log` | | 实际服务资源只读预检 | 通过,无失败项;不替代业务验收 | 云端 `final-resource-check.json` | @@ -196,7 +198,7 @@ DKIM 公钥 DER SHA-256:`df9958f7e8c20c7d7f8735bb062f7bd7485bbee3bbd254930d7ae ## 最新交付与运行状态 -最新部署源码:`eb5063a57522ea4a62524cbc529b2c298c88533a`。运行版本:`test-59ee0bb94881`。06:19:47 完成 IMAP 搜索修复的云端安装;此前 `6920bff`、`test-222651378aff` 为续期修复部署版本。 +最新部署源码:`ff13d39bd5b72dc295b3ac87b8b68ae83eff30c2`。运行版本:`test-ed82dfd9e632`。06:59:54 完成邮件详情前端修复的云端安装。此前 `eb5063a`、`test-59ee0bb94881` 为 06:19:47 的 IMAP 搜索修复版本;`6920bff`、`test-222651378aff` 为续期修复部署版本。 发布包:`out/release/Smail_linux_amd64.tar.gz`。文件结构: @@ -213,16 +215,16 @@ smail/ | 文件 | SHA-256 | | --- | --- | -| 发布包 | `375ea33ee460c80214c3277b9aee83d6992942ee5880f0ef5609951cf53749bc` | -| smail | `ce8b903866ee0fe3953998538fde267a3ee8327d4e36d1618cdd76d3cac97073` | -| smail-admin | `eb00f28595b699408c832887bda5076a7cbe805fa60e9117c5f510ae38e5b4cb` | -| smail-config | `5049e4c8d1c5a882850f5ed88a53b891151c4b470dba48ec889a8a12d620a42b` | +| 发布包 | `28d9a90eb54b3d733ec3eb8f101f00f36d321ebc379266e43bb0d58447a0bf4c` | +| smail | `4f6cdb0390007dadda12c13844b39f21a4d07e9d5d7c5d0d5f612978fc84c038` | +| smail-admin | `ef25801c19b32c801919667f82a9074bc9578358a9a47e916ac88c87635aee53` | +| smail-config | `c22df08b3ab97badd3a1818ee7a896564ecaf9b2961201a89b81e9c4427d25da` | 本地构建收据:`out/release-receipts/Smail_linux_amd64.json`。三个云端文件均与收据一致。前端和内置插件构建完成;编辑器分块大于 500 KB 的既有构建提示仍存在,没有构建失败。 05:27:58 的续期修复安装后,05:32 复核 Smail PID 为 `719778`,自动重启次数为 0,Nginx PID `578671`、active。回环 443(Web 和主域名 SNI)、8002、465、993、995 六次连接均通过系统信任链与主机名校验,使用 TLS 1.3,证书指纹一致。两个数据库 `integrity_check` 均为 `ok`;启用的 TOTP 数量为 0,未停用的外部邮箱绑定数量为 0。该次启动后的 systemd warning 级日志查询无记录。本机恢复 socket 保持 `0600 smail:smail`。06:19 的更新部署及其最终复核见末节。 -最新部署前备份:`/var/backups/smail-full-test-20260920/pre-public-search/`,含三个旧程序及停服时的配置、数据、证书归档。同级 `pre-cwd-fix/`、`pre-auto-dns/`、`pre-renewal/`、`pre-rebind/` 保留前序状态。测试日志和测试二进制保留在各轮 `/var/tmp/` 测试目录,不属于运行依赖;没有擅自删除验收证据。FDM、Scert、MySQL 和 PostgreSQL 未因最后一次 Smail 更新而停启;Nginx 在真实换证时平滑重载,最终程序更新没有再次重载。 +最新部署前备份:`/var/backups/smail-full-test-20260920/pre-detail-fix/`,含三个旧程序及停服时的配置、数据、证书归档。同级 `pre-public-search/`、`pre-cwd-fix/`、`pre-auto-dns/`、`pre-renewal/`、`pre-rebind/` 保留前序状态。测试日志和测试二进制保留在各轮 `/var/tmp/` 测试目录,不属于运行依赖;没有擅自删除验收证据。FDM、Scert、MySQL 和 PostgreSQL 未因最后一次 Smail 更新而停启;Nginx 在真实换证时平滑重载,最终程序更新没有再次重载。 公网恢复入口已通过正式配置流程设置 `http.publicHttpsPort=443`;`/public-password-recovery` 跳转到 `https://web.solit.cn/rest/`,不再暴露内部 8002 端口,恢复页面返回 200。 @@ -281,3 +283,39 @@ smail/ 06:22:51 实际浏览器页面 HTTPS 安全上下文正常,ping 200、301 毫秒,强制安全设置提示可见,无横向溢出。06:24:59 在同一正式浏览器会话中注销后,用用户指定的超级管理员账号密码重新登录:注销 146 毫秒,登录 317 毫秒,HTTP 200、业务错误码 0、角色 `super_admin`。未修改账号密码。06:29:45 清理该页 Cache Storage 并重新加载后,ping 200、290 毫秒,强制提示仍可见,无横向溢出,浏览器可见资源状态没有 4xx/5xx。 仍需另行完成:三个指定 163 邮箱真实收件及绑定、自然进入证书续期窗口后的长期调度、Windows 提权 Named Pipe、依赖外部服务的插件业务。本轮没有把这些项目标记为通过。 + +## 06:31—07:06 浏览器网页收发与详情修复 + +本次沿用同一轮已经清理和初始化的云端数据库,没有重复清库。实际桌面浏览器始终复用独立上下文内的 Smail 页面,测试前检查云端服务;部署后清理该页 Cache Storage 并重新加载,实际加载了新版 `EmailDetail-ecbfb4cc.js` 和对应样式。 + +### 写信、投递与附件 + +普通测试账号 `testuser` 在真实写信页面向自己的 `testuser@solit.cn` 发送中文邮件,主题为“云端网页收发验收 20260920-0638”,正文标识 `web-mail-20260920-0638`。发送请求 HTTP 200、85 毫秒,页面先显示“邮件已提交,正在投递”,发件箱刷新后显示“发送成功”。发件 ID 14、收件 ID 15,共用 Message-ID `6994a5f544999fbf9711ac26d88e637b.1789857759152323508@solit.cn`,数据库归属均为 `testuser`;发送创建于 06:42:39,收件创建于 06:42:43。唯一投递队列项为 `accepted`、尝试 1 次、无错误,不能仅用发送 API 的 200 代替投递成功。 + +中文正文及附件名称在发件、收件详情均正常显示。附件 `中文附件.txt` 为 139 字节,SHA-256 为 `0d94d22e10ea07cb478932fec4e8ec701646574911a08c1f637c2ccab2a372ff`;本地原件、两份数据库附件及下载内容一致。首次发件、收件下载分别为 66 和 67 毫秒,均 HTTP 200;部署后 07:02 再次下载仍匹配,响应头保留 UTF-8 中文文件名。测试邮件保留,没有删除。 + +工具边界:MCP 上传工具拒绝项目目录路径,未能操作系统文件选择器。随后在页面创建相同内容的 `File`,通过现有文件输入框的 `change` 事件进入产品 FileReader 和发送流程。因此附件处理、投递和下载已经验证,系统文件选择器仍未验证。编辑器初次 `fill` 没有正确更新内容,刷新后用键盘输入并确认正文再发送,没有把辅助工具错误视为产品缺陷。 + +### 账号隔离与错误页 + +正式注销普通用户后登录 `testadmin`。对 ID 14、15 的邮件详情均返回 HTTP 200、业务码 500、“读取邮件失败”;对应附件均返回 HTTP 200、业务码 100、“附件不可用”。四个响应数据为空,没有邮件正文或附件内容,跨账号隔离通过。补采证据首次遗漏 CSRF 头,被来源校验拒绝;补齐后得到上述业务拒绝结果,前者没有作为隔离验收依据。 + +此时页面仍显示 `?`、`<>`、空收件人模板。原因是详情逻辑没有检查业务错误码,也没有加载和错误视图。`ff13d39` 补齐中文状态、重试及明确返回邮件列表,错误状态不显示邮件元数据和删除按钮;切换路由立即清空旧内容,旧请求完成或失败不会覆盖新邮件,离开页面后也不会继续更新状态。后台权限逻辑没有修改。 + +前端新增六项回归覆盖业务拒绝后重试成功、网络失败、无效编号及异常响应、异常地址与附件字段、切换路由后的迟到响应、离开页面的未完成请求。全量前端为 206 项通过、0 失败、0 跳过。本次没有后端源码改动,后端全量与 IMAP 回归范围仍以前述记录为准。 + +06:59:54 部署后实际浏览器验证:管理员看到“邮件暂时无法查看/读取邮件失败”;点击重试仍正确拒绝,点击返回进入 `#/list`。普通用户从收件箱打开 ID 15,可见完整中文正文和附件,下载摘要匹配。随后同一详情组件切到 ID 14,附件地址同步变为 `/attachments/download/14/0`;切到不存在的 ID 999999999,显示失败且旧正文和删除按钮消失;再回 ID 15,正文正常恢复。没有横向溢出,控制台无 error 或 warning。云端页面验证的是实际业务拒绝和正常恢复;网络异常由自动化回归覆盖,没有人为中断线上服务。 + +### 最终运行与证据 + +07:05:01 只读核对:两个 SQLite 数据库完整性均为 `ok`;Smail PID `725122`、active、自动重启 0;Nginx PID `578671`、active;证书同步监听 active。三个程序 SHA-256 与最新发布收据完全一致,本机恢复 socket 仍为 `0600 smail:smail`,此次启动后的 warning 级日志无记录。 + +普通测试用户正式注销后,通过页面使用用户指定密码恢复 `xuans` 登录,登录请求耗时 358 毫秒;正式用户信息接口业务码 0、角色 `super_admin`。07:05:51 确认可见“请至少启用一种安全验证后继续”强制弹窗。页面 ping 147 毫秒、业务码 0,没有可见 HTTP 4xx/5xx 资源。这些时延仅为本次观测,不是负载保证。 + +本地证据目录:`test-log/web-mail-20260920/`,含 `browser-evidence.json`、`isolation-before.json`、`detail-after.json`、部署收据 `install-result.json`、构建日志 `build.log`、更新前后的 `server-before-detail-fix.json` 与 `server-evidence.json`。临时 SSH 辅助文件仅用于本次测试,不进入发布包,也未安装为服务依赖。首次辅助断言误将队列状态写为 `delivered`,核对产品实现后改为真实的 `accepted` 并复核,没有改动产品投递状态。 + +- [✓] 网页写信、投递状态、收发详情及中文附件校验。 +- [✓] 跨账号邮件和附件隔离、详情失败展示、重试和返回列表。 +- [✓] 最新前端回归、Linux 打包、备份部署、程序摘要与数据库核对。 +- [✓] 恢复超级管理员登录及强制安全设置提示。 +- [!] 三个外部邮箱真实收件和绑定、证书自然续期长期调度、Windows 提权 IPC、外部插件业务、系统文件选择器仍未纳入通过范围。