# 构建与测试 源码构建需要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、代理、证书及防火墙需要在实际部署环境验收。