1.2节点管理
节点能由管理者操作加入或者退出区块链网络,而不影响业务的正常运行,以及扩容新增节点。长期使用的软件,一般都会迭代更新,区块链节点也应能够进行升级,包括灰度升级能力,升级后业务正常运行。
1.2连接
通常在环境条件正常时,以上连接都能顺利进行,并且通过网络连接命令和日志信息能查询对应结果。
而真正考验连接的健壮性是在异常环境下系统的应对能力,以及环境恢复正常之后,连接能否也恢复正常,而不用去重启进程。
影响连接的因素包括区块链系统本身和外部环境对连接的影响:
区块链系统本身:节点(SDK)证书合法性、黑白名单等
外部环境对连接的影响:节点所在的服务器断连、网络的闪断或者带宽偏低、端口及网卡故障,以及CPU、内存的使用过高,甚至是机器重启导致进程重启。
1.3共识
我们需要验证的是,这种共识机制能否按预期算法完成从交易触发到数据落盘,以及在容错和容灾范围内依然正常工作。实际上就是在共识的某个阶段遇到问题,它的应对机制是否可行,而不是卡在那或者直接系统崩溃。区块链平台上线前,对其使用的共识算法需要做严格的测试验证,涉及功能、安全、易用性等各方面。
功能方面,在系统正常运行,无故障、无欺诈节点时,能正确共识,各节点数据能一致。
在测试共识算法前,需要清楚共识内部主要流程,才能对每一步骤构造场景进行相应测试。
安全方面,平台也要有相应处理机制,比如:共识过程某节点把交易篡改了,网络中其他节点能识别该欺诈节点信息并做相应处理。共识算法在应对这类故障时,应具备容错能力,保证故障节点数少于理论值区块链系统还能正常共识。
在复杂的多群组架构中,一个记账节点可能会同时属于多个群组,系统需要保证节点在不同群组能独立共识独立存储。
1.4智能合约
平台支持的合约语言丰富:通用的solidity合约、预编译合约
合约的使用和管理:
包括合约的部署方式是否简便,即能提供哪些语言支持的客户端或者中间件工具部署合约,以及发送交易。 合约是否支持升级,升级后如何管理版本。
除了合约本身的升级,区块链节点升级后,已经部署的老合约也应当能继续调用,兼容性都没问题,正常发送交易。
合约的功能点验证(solidity语言):
需要验证提供的各种变量类型、语法表达式、控制接口等合约结构,在区块链平台是否都能跑通。
某些安全场景下,能否冻结或者销毁合约,使之不能再被调用执行,在需要使用时,又能解冻
1.5同步
交易同步:连接正常时,客户端发送到节点的交易,应当能同步到网络中其他节点。
状态同步:在没有交易处理时,节点间也会保持状态的同步。
区块同步:区块同步涉及场景较多,新入网节点、进程停止一段时间在重启、节点遭遇故障导致数据丢失等,都会触发区块同步逻辑。
1.6存储
可以从账户状态和存储介质对区块链的存储进行功能正确性和稳定性测试。可以将账户状态模型和存储介质引擎进行组合测试。
账户状态对应着合约局部变量的状态存储形式,根据平台提供的选择,配置成默克尔树结构或者分布式存储的世界状态模型,来进行相应的测试验证。
而对于存储介质的选择,主要看区块链平台提供了哪些存储驱动,常见的leveldb、rocksdb、mysql。 可采用混沌模型测试,各场景进行组合,验证每个节点存储稳定且数据正确,在落盘成功的基础上还要保证节点间数据都一致。
1.7兼容
在区块链系统中,兼容性主要考虑两大块,自身兼容和周边兼容。
自身兼容:在完成一次区块链版本升级后,链上历史数据是否还能正常使用,包括各种业务操作以及历史功能特性都能正常运行;
周边兼容:需要考虑周边组件和工具等配套,甚至一些版本的对应关系。
还需考虑灰度升级的情况,即节点有新老版本共存这种模式下需要测试验证的场景会较多,所有的功能特性在新老节点上都应操作验证一遍。
1.8接口
接口的测试重点在输入稳定输出正确,多关注边界,外部对节点的访问能持续不断连。
接口测试采用自动化是比较简单的,同时模拟接口在一定压力访问下,客户端对节点发送交易,链上共识能否保持正常。
1.9数据治理
常见的治理方式有数据导出、数据导入、数据裁剪等。
数据导出:整个过程主要关注导出数据的正确性,是否和链上的数据一致,以及数据缺失、重复和覆盖等现象
数据导入:对数据导入特性的验证,重点是数据被导入后新节点功能的完整性,也就是网络中老节点具有的特性,新节点也完全一致,打包、执行交易、同步等功能都正常。
数据裁剪:数据裁剪后所有上层业务需保证继续正常运行,包括已部署的合约业务和新部署的合约,都能正常调用,同时节点自身的退网、入网、同步、兼容性等各种特性都不受影响。
被裁剪的数据虽然不在链上,但链上业务运行过程还是可能会用到,因此涉及到这部分数据的测试场景也需要全覆盖验证。