NAC_Blockchain/nac-integration-tests/docs/ARCHITECTURE.md

407 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# NAC公链集成测试系统架构设计
## 1. 概述
NAC公链集成测试系统是一个全面的测试框架用于验证NAC公链各个核心模块之间的集成正确性、性能表现和稳定性。该系统基于Rust的测试框架构建支持单元测试、集成测试、端到端测试和性能测试。
## 2. 测试架构
### 2.1 测试层次
```
┌─────────────────────────────────────────────────────────┐
│ E2E测试层 │
│ (完整业务流程测试交易、跨链、RWA交易、合规验证) │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ 集成测试层 │
│ (模块间交互测试CBPP+NVM, ACC+宪法, 网络+共识) │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ 性能测试层 │
│ (TPS测试、并发测试、压力测试、稳定性测试) │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ CI/CD自动化层 │
│ (自动化测试、报告生成、覆盖率统计、失败告警) │
└─────────────────────────────────────────────────────────┘
```
### 2.2 测试模块组织
```
nac-integration-tests/
├── src/
│ ├── lib.rs # 库入口,导出测试工具
│ ├── common/ # 公共测试工具
│ │ ├── mod.rs
│ │ ├── setup.rs # 测试环境搭建
│ │ ├── fixtures.rs # 测试数据固件
│ │ ├── helpers.rs # 测试辅助函数
│ │ └── assertions.rs # 自定义断言
│ └── utils/ # 测试工具类
│ ├── mod.rs
│ ├── mock_node.rs # 模拟节点
│ ├── mock_network.rs # 模拟网络
│ └── test_data.rs # 测试数据生成
├── tests/ # 集成测试
│ ├── integration/ # 核心模块集成测试
│ │ ├── cbpp_tests.rs # CBPP共识测试
│ │ ├── nvm_tests.rs # NVM虚拟机测试
│ │ ├── acc_tests.rs # ACC协议测试
│ │ ├── csnp_tests.rs # CSNP网络测试
│ │ └── constitution_tests.rs # 宪法系统测试
│ ├── e2e/ # 端到端测试
│ │ ├── transaction_flow.rs # 交易流程测试
│ │ ├── bridge_flow.rs # 跨链桥接测试
│ │ ├── rwa_exchange_flow.rs # RWA交易测试
│ │ └── compliance_flow.rs # 合规验证测试
│ └── performance/ # 性能测试
│ ├── tps_test.rs # TPS性能测试
│ ├── concurrent_test.rs # 并发测试
│ ├── stress_test.rs # 压力测试
│ └── stability_test.rs # 稳定性测试
├── benches/ # 基准测试
│ └── benchmarks.rs
├── scripts/ # 测试脚本
│ ├── run_all_tests.sh # 运行所有测试
│ ├── run_integration.sh # 运行集成测试
│ ├── run_e2e.sh # 运行E2E测试
│ ├── run_performance.sh # 运行性能测试
│ └── generate_report.sh # 生成测试报告
├── config/ # 测试配置
│ ├── test_config.toml # 测试配置
│ └── ci_config.yml # CI配置
├── docs/ # 文档
│ ├── ARCHITECTURE.md # 本文件
│ ├── TEST_GUIDE.md # 测试指南
│ └── API.md # API文档
└── Cargo.toml # 项目配置
```
## 3. 核心测试场景
### 3.1 CBPP共识集成测试
测试CBPP共识协议在多节点环境下的正确性
- **测试场景1**: 正常共识流程
- 3个节点正常提案和投票
- 验证区块生成和确认
- 验证状态一致性
- **测试场景2**: 拜占庭容错
- 1个节点故障
- 1个节点作恶发送冲突提案
- 验证系统仍能达成共识
- **测试场景3**: 网络分区
- 模拟网络分区
- 验证分区恢复后的状态同步
### 3.2 NVM虚拟机集成测试
测试NVM虚拟机执行Charter智能合约的正确性
- **测试场景1**: ACC-20代币合约
- 部署ACC-20合约
- 执行转账、授权、查询余额
- 验证状态变更
- **测试场景2**: 复杂合约交互
- 部署多个合约
- 合约间相互调用
- 验证调用栈和状态
- **测试场景3**: Gas计量
- 执行不同复杂度的合约
- 验证Gas消耗计算
- 验证Gas限制
### 3.3 ACC协议集成测试
测试ACC-20、ACC-721、ACC-1400等协议的正确性
- **测试场景1**: ACC-20代币协议
- 创建代币
- 转账、授权、销毁
- 验证余额和事件
- **测试场景2**: ACC-721 NFT协议
- 铸造NFT
- 转移、授权、查询
- 验证所有权
- **测试场景3**: ACC-1400证券协议
- 发行证券
- 合规验证
- 分红和投票
### 3.4 CSNP网络集成测试
测试CSNP网络协议的正确性
- **测试场景1**: 节点发现
- 启动多个节点
- 验证节点相互发现
- 验证节点连接
- **测试场景2**: 消息传播
- 发送交易
- 验证消息传播到所有节点
- 验证消息顺序
- **测试场景3**: 网络分区恢复
- 模拟网络分区
- 验证分区恢复后的同步
### 3.5 宪法系统集成测试
测试NAC宪法系统的正确性
- **测试场景1**: 宪法条款验证
- 提交交易
- 验证宪法条款检查
- 验证不合规交易被拒绝
- **测试场景2**: 宪法修正案
- 提交修正案
- 投票流程
- 验证修正案生效
- **测试场景3**: 宪法状态管理
- 查询宪法状态
- 验证状态一致性
## 4. 端到端测试场景
### 4.1 完整交易流程
```
用户 → 创建交易 → 签名 → 提交到节点 → 进入交易池
→ 打包到区块 → CBPP共识 → 区块确认 → NVM执行
→ 状态更新 → 事件发出 → 用户收到确认
```
### 4.2 跨链桥接流程
```
源链锁定资产 → 生成证明 → 提交到目标链 → 验证证明
→ 铸造映射资产 → 用户收到资产
```
### 4.3 RWA资产交易流程
```
资产上架 → KYC验证 → 挂单 → 订单撮合 → 资产锁定
→ 清算结算 → 资产交割 → 交易完成
```
### 4.4 合规验证流程
```
提交交易 → 宪法条款检查 → KYC验证 → 限额检查
→ 黑名单检查 → AI合规分析 → 审批决策 → 交易执行
```
## 5. 性能测试指标
### 5.1 TPS性能测试
- **目标**: 测试系统的交易处理能力
- **指标**:
- 峰值TPS
- 平均TPS
- 延迟分布P50, P95, P99
### 5.2 并发测试
- **目标**: 测试系统在高并发下的表现
- **指标**:
- 并发用户数
- 成功率
- 响应时间
### 5.3 压力测试
- **目标**: 测试系统的极限承载能力
- **指标**:
- 最大并发数
- 崩溃点
- 恢复时间
### 5.4 稳定性测试
- **目标**: 测试系统长时间运行的稳定性
- **指标**:
- 运行时长24小时+
- 内存泄漏
- 错误率
## 6. 测试环境
### 6.1 本地测试环境
- **节点数量**: 3-5个节点
- **网络**: 本地模拟网络
- **数据库**: 内存数据库或临时文件
- **配置**: 快速出块1秒
### 6.2 CI测试环境
- **节点数量**: 3个节点
- **网络**: Docker网络
- **数据库**: 临时数据库
- **配置**: 快速测试模式
### 6.3 性能测试环境
- **节点数量**: 10+个节点
- **网络**: 真实网络延迟模拟
- **数据库**: 持久化数据库
- **配置**: 生产环境配置
## 7. 测试数据管理
### 7.1 测试数据生成
- 使用固件Fixtures生成可重复的测试数据
- 使用随机数据生成器生成大量测试数据
- 使用真实数据样本进行测试
### 7.2 测试数据隔离
- 每个测试使用独立的数据库
- 测试结束后自动清理数据
- 避免测试间相互影响
## 8. CI/CD集成
### 8.1 自动化测试流程
```
代码提交 → 触发CI → 编译代码 → 运行单元测试
→ 运行集成测试 → 运行E2E测试 → 生成报告
→ 计算覆盖率 → 发送通知
```
### 8.2 测试报告
- **格式**: HTML、JSON、JUnit XML
- **内容**:
- 测试通过率
- 测试覆盖率
- 失败测试详情
- 性能指标
### 8.3 失败告警
- **触发条件**:
- 测试失败
- 覆盖率下降
- 性能退化
- **通知方式**:
- Email
- Slack/钉钉
- Git Issue
## 9. 测试工具
### 9.1 Rust测试框架
- **cargo test**: Rust内置测试框架
- **tokio-test**: 异步测试支持
- **proptest**: 属性测试
- **criterion**: 基准测试
### 9.2 模拟工具
- **mockall**: Mock对象生成
- **wiremock**: HTTP Mock服务器
- **testcontainers**: Docker容器测试
### 9.3 断言库
- **assert_matches**: 模式匹配断言
- **pretty_assertions**: 美化断言输出
- **approx**: 浮点数比较
## 10. 测试最佳实践
### 10.1 测试命名
- 使用描述性的测试名称
- 格式: `test_<模块>_<场景>_<预期结果>`
- 示例: `test_cbpp_consensus_with_byzantine_node_should_reach_consensus`
### 10.2 测试组织
- 每个模块一个测试文件
- 相关测试放在同一个mod中
- 使用#[test]标记测试函数
### 10.3 测试隔离
- 每个测试独立运行
- 不依赖测试执行顺序
- 清理测试产生的副作用
### 10.4 测试可维护性
- 使用辅助函数减少重复代码
- 使用固件管理测试数据
- 保持测试代码简洁
## 11. 性能基准
### 11.1 目标指标
| 指标 | 目标值 | 说明 |
|-----|--------|------|
| TPS | > 10,000 | 峰值交易处理能力 |
| 区块确认时间 | < 5秒 | 3个区块确认 |
| 交易延迟 | < 100ms | P95延迟 |
| 并发用户 | > 10,000 | 同时在线用户 |
| 稳定运行 | > 24小时 | 无崩溃 |
### 11.2 性能优化
- 识别性能瓶颈
- 优化关键路径
- 减少不必要的计算
- 使用缓存
## 12. 未来扩展
### 12.1 混沌工程
- 随机注入故障
- 测试系统韧性
- 验证容错能力
### 12.2 安全测试
- 模糊测试
- 渗透测试
- 漏洞扫描
### 12.3 兼容性测试
- 不同版本兼容性
- 不同平台兼容性
- 协议升级测试
## 13. 总结
NAC公链集成测试系统是确保系统质量的关键基础设施。通过全面的测试覆盖、自动化的CI/CD流程和详细的测试报告我们可以及时发现和修复问题保证NAC公链的稳定性和可靠性。
---
**文档版本**: v1.0
**最后更新**: 2026-02-18
**维护者**: NAC开发团队