Files
danyang-match/tests
WorkBuddy 797b1c46cf refactor(storage): 对象存储从 MinIO 换成 SeaweedFS(钉 4.47)
动机:MinIO 的 GitHub 仓库已于 2026-02 归档,不再产出安全补丁,已累积多个
CVE 且不修;本项目存身份证 / 实名材料 / 用户照片,无人修 CVE 才是真正驱动因素
(Docker Hub 下架只是表象,quay.io 仍在提供)。

变更:
- 三套 compose(dev / staging / prod)的 minio 服务替换为 seaweedfs 4.47:
  覆盖 entrypoint 渲染 -s3.config 注入 identity(S3 网关默认不鉴权,必须显式开启),
  -volume.max=100 解除第二个 bucket 写入时的 InternalError。
- 新增一次性 storage-init 容器,经 filer 接口预建 public / private 桶
  (SeaweedFS PutObject 到不存在的 bucket 直接失败;全仓库原无任何 createBucket)。
- S3Config 显式开启 path-style:AWS SDK v1 默认 virtual-host 会把 bucket 拼进
  主机名,容器名在 DNS 中不存在必然失败(本机有 http_proxy 时易误判为 502 拒绝)。
- ci.yml:镜像校验与起栈步骤改为 seaweedfs + storage-init。
- 运维脚本 health-check.sh / run-uat.sh 的 MinIO 探针改为 SeaweedFS
  (S3 网关开启鉴权后匿名根请求返回 403,200/403 均算存活)。

注:path-style 与建桶属换存储的必要项;presigned URL 的 host 须对外可达这一
既有缺陷(原 minio:9000 直发客户端不可达)留待下一轮「改缺陷」处理。
2026-09-22 14:26:48 +08:00
..

测试基础设施

测试目录结构

tests/
├── invariants/       # 核心不变量测试(每次CI必跑)
│   ├── INV-001_Required不可自动放宽.test.ts
│   ├── INV-002_未Mutual不可聊天.test.ts
│   ├── INV-003_Block后双方不可互动.test.ts
│   ├── INV-004_双向并发Like只创建一个Match.test.ts
│   ├── INV-005_Activity最后一个名额不可超卖.test.ts
│   ├── INV-006_单向活动意向不可泄露.test.ts
│   ├── INV-007_红娘不能替用户Like.test.ts
│   ├── INV-008_非授权Operator不能读取身份证.test.ts
│   ├── INV-009_非案件上下文不能读取聊天.test.ts
│   └── INV-010_跨Organization不能越权.test.ts
├── unit/             # 单元测试
├── integration/      # 集成测试
├── api/              # API 测试
├── permission/       # 权限测试
├── concurrency/      # 并发测试
└── e2e/              # 端到端测试

Phase 01 测试骨架

每个测试文件至少包含:

  • 测试描述
  • 前置条件
  • 操作步骤
  • 预期结果
  • 断言

运行测试

# Backend 单元测试
cd backend
./mvnw test

# Backend 集成测试
./mvnw verify

# Admin Web 构建检查
cd admin-web
pnpm build

# Miniapp 编译检查
cd miniapp
npx tsc --noEmit