mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-03 11:57:43 +00:00
c5264f9703
* improve code for metrics and switch tokio-tar to astral-tokio-tar * remove log * fix
KMS End-to-End Tests
本目录包含 RustFS KMS (Key Management Service) 的端到端集成测试,用于验证完整的 KMS 功能流程。
📁 测试文件说明
kms_local_test.rs
本地KMS后端的端到端测试,包含:
- 自动启动和配置本地KMS后端
- 通过动态配置API配置KMS服务
- 测试SSE-C(客户端提供密钥)加密流程
- 验证S3兼容的对象加密/解密操作
- 密钥生命周期管理测试
kms_vault_test.rs
Vault KMS后端的端到端测试,包含:
- 自动启动Vault开发服务器
- 配置Vault transit engine和密钥
- 通过动态配置API配置KMS服务
- 测试完整的Vault KMS集成
- 验证Token认证和加密操作
kms_comprehensive_test.rs
完整的KMS功能测试套件(当前因AWS SDK API兼容性问题暂时禁用),包含:
- Bucket加密配置: SSE-S3和SSE-KMS默认加密设置
- 完整的SSE加密模式测试:
- SSE-S3: S3管理的服务端加密
- SSE-KMS: KMS管理的服务端加密
- SSE-C: 客户端提供密钥的服务端加密
- 对象操作测试: 上传、下载、验证三种SSE模式
- 分片上传测试: 多部分上传支持所有SSE模式
- 对象复制测试: 不同SSE模式间的复制操作
- 完整KMS API管理:
- 密钥生命周期管理(创建、列表、描述、删除、取消删除)
- 直接加密/解密操作
- 数据密钥生成和操作
- KMS服务管理(启动、停止、状态查询)
kms_integration_test.rs
综合性KMS集成测试,包含:
- 多后端兼容性测试
- KMS服务生命周期测试
- 错误处理和恢复测试
- 注意: 当前因AWS SDK API兼容性问题暂时禁用
🚀 如何运行测试
前提条件
-
系统依赖:
# macOS brew install vault awscurl # Ubuntu/Debian apt-get install vault pip install awscurl -
构建RustFS:
# 在项目根目录 cargo build
运行单个测试
本地KMS测试
cd crates/e2e_test
cargo test test_local_kms_end_to_end -- --nocapture
Vault KMS测试
cd crates/e2e_test
cargo test test_vault_kms_end_to_end -- --nocapture
高可用性测试
cd crates/e2e_test
cargo test test_vault_kms_high_availability -- --nocapture
完整功能测试(开发中)
cd crates/e2e_test
# 注意:以下测试因AWS SDK API兼容性问题暂时禁用
# cargo test test_comprehensive_kms_functionality -- --nocapture
# cargo test test_sse_modes_compatibility -- --nocapture
# cargo test test_kms_api_comprehensive -- --nocapture
运行所有KMS测试
cd crates/e2e_test
cargo test kms -- --nocapture
串行运行(避免端口冲突)
cd crates/e2e_test
cargo test kms -- --nocapture --test-threads=1
🔧 测试配置
环境变量
# 可选:自定义端口(默认使用9050)
export RUSTFS_TEST_PORT=9050
# 可选:自定义Vault端口(默认使用8200)
export VAULT_TEST_PORT=8200
# 可选:启用详细日志
export RUST_LOG=debug
依赖的二进制文件路径
测试会自动查找以下二进制文件:
../../target/debug/rustfs- RustFS服务器vault- Vault (需要在PATH中)/Users/dandan/Library/Python/3.9/bin/awscurl- AWS签名工具
📋 测试流程说明
Local KMS测试流程
- 环境准备:创建临时目录,设置KMS密钥存储路径
- 启动服务:启动RustFS服务器,启用KMS功能
- 等待就绪:检查端口监听和S3 API响应
- 配置KMS:通过awscurl发送配置请求到admin API
- 启动KMS:激活KMS服务
- 功能测试:
- 创建测试存储桶
- 测试SSE-C加密(客户端提供密钥)
- 验证对象加密/解密
- 清理:终止进程,清理临时文件
Vault KMS测试流程
- 启动Vault:使用开发模式启动Vault服务器
- 配置Vault:
- 启用transit secrets engine
- 创建加密密钥(rustfs-master-key)
- 启动RustFS:启用KMS功能的RustFS服务器
- 配置KMS:通过API配置Vault后端,包含:
- Vault地址和Token认证
- Transit engine配置
- 密钥路径设置
- 功能测试:完整的加密/解密流程测试
- 清理:终止所有进程
🛠️ 故障排除
常见问题
Q: 测试失败 "RustFS server failed to become ready"
A: 检查端口是否被占用:
lsof -i :9050
kill -9 <PID> # 如果有进程占用端口
Q: Vault服务启动失败
A: 确保Vault已安装且在PATH中:
which vault
vault version
Q: awscurl认证失败
A: 检查awscurl路径是否正确:
ls /Users/dandan/Library/Python/3.9/bin/awscurl
# 或安装到不同路径:
pip install awscurl
which awscurl # 然后更新测试中的路径
Q: 测试超时
A: 增加等待时间或检查日志:
RUST_LOG=debug cargo test test_local_kms_end_to_end -- --nocapture
调试技巧
-
查看详细日志:
RUST_LOG=rustfs_kms=debug,rustfs=info cargo test -- --nocapture -
保留临时文件: 修改测试代码,注释掉清理部分,检查生成的配置文件
-
单步调试: 在测试中添加
std::thread::sleep来暂停执行,手动检查服务状态 -
端口检查:
# 测试运行时检查端口状态 netstat -an | grep 9050 curl http://127.0.0.1:9050/minio/health/ready
📊 测试覆盖范围
功能覆盖
- ✅ KMS服务动态配置
- ✅ 本地和Vault后端支持
- ✅ AWS S3兼容加密接口
- ✅ 密钥管理和生命周期
- ✅ 错误处理和恢复
- ✅ 高可用性场景
加密模式覆盖
- ✅ SSE-C (Server-Side Encryption with Customer-Provided Keys)
- ✅ SSE-S3 (Server-Side Encryption with S3-Managed Keys)
- ✅ SSE-KMS (Server-Side Encryption with KMS-Managed Keys)
S3操作覆盖
- ✅ 对象上传/下载 (SSE-C模式)
- 🚧 分片上传 (需要AWS SDK兼容性修复)
- 🚧 对象复制 (需要AWS SDK兼容性修复)
- 🚧 Bucket加密配置 (需要AWS SDK兼容性修复)
KMS API覆盖
- ✅ 基础密钥管理 (创建、列表)
- 🚧 完整密钥生命周期 (需要AWS SDK兼容性修复)
- 🚧 直接加密/解密操作 (需要AWS SDK兼容性修复)
- 🚧 数据密钥生成和解密 (需要AWS SDK兼容性修复)
- ✅ KMS服务管理 (配置、启动、停止、状态)
认证方式覆盖
- ✅ Vault Token认证
- 🚧 Vault AppRole认证
🔄 持续集成
这些测试设计为可在CI/CD环境中运行:
# GitHub Actions 示例
- name: Run KMS E2E Tests
run: |
# 安装依赖
sudo apt-get update
sudo apt-get install -y vault
pip install awscurl
# 构建并测试
cargo build
cd crates/e2e_test
cargo test kms -- --nocapture --test-threads=1
📚 相关文档
这些测试确保KMS功能的稳定性和可靠性,为生产环境部署提供信心。