76 lines
3.3 KiB
Markdown
76 lines
3.3 KiB
Markdown
# 构建与测试
|
|
|
|
源码构建需要go.mod指定的Go版本、Node.js及npm。生产服务器只需要发布包,不需要这些构建工具。脚本先构建Vue前端,再将其嵌入Go二进制;internal/web/dist为生成目录,不提交到源码仓库。
|
|
|
|
## 构建
|
|
|
|
```sh
|
|
./scripts/build.sh build
|
|
# Linux amd64发布包及SHA256SUMS
|
|
./scripts/build.sh release amd64
|
|
# 同时生成Linux amd64和arm64发布包
|
|
./scripts/build.sh release
|
|
```
|
|
|
|
输出位于build,包含前端内嵌的程序、配置模板、安装/升级脚本、systemd单元、运行文档及第三方许可证。node_modules、build和测试结果不纳入Git。
|
|
|
|
## 后端检查
|
|
|
|
先构建前端,保证Go嵌入的静态资源已生成:
|
|
|
|
```sh
|
|
./scripts/build.sh web
|
|
go test -race ./...
|
|
go vet ./...
|
|
```
|
|
|
|
后端用例覆盖匿名所有权、密码取件、加密和去重、空间预留、下载计数与续期、并发传输、分页搜索、审计清理、来源校验、多入口cookie、备份恢复及故障回收。可单独运行较大数据量的并发测试:
|
|
|
|
```sh
|
|
BLUEBIRD_STRESS_MIB=64 go test ./internal/app -run TestConcurrentStreamingTransfers -v -count=1
|
|
```
|
|
|
|
## 浏览器测试
|
|
|
|
```sh
|
|
./scripts/build.sh build
|
|
cd web
|
|
npx playwright install chromium
|
|
npm run test:e2e
|
|
```
|
|
|
|
仅针对隔离测试实例运行,不能指向生产数据。默认实例监听127.0.0.1:18981;多入口用例另使用19081、19082,启动本机HTTPS代理和临时自签名证书,需要openssl。测试覆盖寄件、取件、管理凭据、剪贴板、手机布局、分页筛选,以及同一域名的HTTP/HTTPS和独立IP入口。
|
|
|
|
执行前确保这些端口未被占用。浏览器依赖、失败追踪保存在本机缓存和web/test-results,不能提交到仓库。Playwright主实例的临时数据目录由测试配置创建,可在测试结束后按实际路径清理;多入口用例自动回收其进程、证书及数据。手机布局采用Chromium模拟,不等同于Safari或手机实机验证。
|
|
|
|
## 原生发布包测试
|
|
|
|
Python脚本需要Python 3.12或更新版本:
|
|
|
|
```sh
|
|
./scripts/build.sh release amd64
|
|
python3 scripts/smoke.py
|
|
```
|
|
|
|
脚本在项目中的隔离临时目录验证发布包的初始化、内嵌前端、加密去重、下载、管理员接口、完整性检查及备份恢复,结束后自动回收进程和数据。
|
|
|
|
首次安装测试需要rootless Podman,每次使用一次性Debian容器:
|
|
|
|
```sh
|
|
podman run --rm --security-opt label=disable \
|
|
-e BLUEBIRD_INSTALL_SMOKE=1 \
|
|
-v "$PWD/build/linux-amd64:/pkg:ro" \
|
|
-v "$PWD/scripts/install-smoke.sh:/test.sh:ro" \
|
|
docker.io/library/debian:bookworm-slim sh /test.sh https
|
|
```
|
|
|
|
将末尾https换成http或lan可检查单独的公网HTTP与内网HTTP配置。label=disable仅用于此一次性容器读取本机测试文件,不修改主机SELinux配置。该脚本禁止直接在普通主机运行,不注册主机systemd服务。
|
|
|
|
已有安装升级测试需要保留一份旧版amd64部署包:
|
|
|
|
```sh
|
|
python3 scripts/upgrade-smoke.py /path/to/previous-bluebird-linux-amd64.tar.gz
|
|
```
|
|
|
|
此用例在一次性容器中验证旧密码、加密文件、密钥和取件码保留,新增入口下载、配置权限、一致性备份、非法配置保护和检查失败回滚。容器使用手动停服后的--no-start模式;目标服务器的systemd启停、DNS、代理、证书及防火墙需要在实际部署环境验收。
|