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

12 KiB
Raw Permalink Blame History

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开发团队