app_util_tests
主要测试util.cpp的函数功能性。
uint128_amount_to_string_test
Test Case | RTE测试结果 |
---|---|
检查uint128_amount_to_string()转换结果 | Pass |
price_to_string_test
检查price_to_string()转换结果
Test Case | RTE测试结果 |
---|---|
计算price的base asset为-1,调用price_to_string() | Exception |
计算price的base asset为0,price_to_string()返回"0" | Pass |
计算price的base asset不为-1和0,price_to_string()参数base精度和quote精度超过19 | Exception |
2. authority_tests
simple_single_signature
测试单签功能。创建一个新账户nathan,asset_id_type为db(db为database_fixture的一个全局变量)。
Test Case | RTE测试结果 |
---|---|
构建一个转账500的交易,并用nathan私钥签名交易,发送交易,检查balance是否减少500 | Pass |
any_two_of_three
测试2-of-3多签功能。创建3个私钥,用key1对应的公钥创建一个新账户nathan,asset_id_type为db。更新账户信息,设置多签阈值为2,key1、2、3的权重分别为1。
Test Case | RTE测试结果 |
---|---|
1.构建一个转账500的交易,并用私钥key1签名交易,发送交易 | Exception |
2.再用key2签名,发送交易,检查balance是否减少500 | Pass |
3.清空交易签名字段,用key2、key3先后签名,发送交易,检查balance是否再减少500 | Pass |
4.清空交易签名字段,用key1、key3先后签名,发送交易,检查balance是否再减少500 | Pass |
5.清空交易签名字段,仅用key3签名,发送交易 | Exception |
6.检查balance是否没有减少 | Pass |
recursive_accounts
主要测试多层级账户创建、权限控制等功能。
Test Case | RTE测试结果 |
---|---|
1. 创建两个私钥parent1_key、parent2_key;创建parent1和parent2账户; 2. 创建child账户,权限策略为active和owner权限都为parent1和parent2共同控制,即阈值为2,parent1和parent2权重均为1; 3. 创建child转账500的交易,发送交易 |
Exception |
4. 仅用parent1私钥签名,发送交易 | Exception |
5. 清空交易签名字段,仅用parent2私钥签名,发送交易 | Exception |
6. 再用parent1私钥签名,发送交易,检查balance是否减少500 | Pass |
7. 为child创建一个私钥,可以重写parents的权限控制策略(?),重设child的active策略为阈值2,parent1权重1、parent2权重1、child权重2; 8. parent1签名交易、parent2签名交易,发送交易,检查child.active.num_auths是否为3 |
Pass |
9. 构造child转账500的交易,发送交易 | Exception |
10. 仅用parent1私钥签名,发送交易 | Exception |
11. 清除签名字段,仅用parent2私钥签名,发送交易 | Exception |
12. 再用parent1私钥签名,发送交易,检查是否balance减少500 | Pass |
13. 清除签名字段,仅用child私钥签名,发送交易,检查是否balance减少500 | Pass |
14. 创建grandparent账户,此时parent1需要grandparent授权; 15. 设置parent1的active和owner权限仅受grandparent控制、grandparent的active和owner权限仅受grandparent控制; 16. 用原有策略签名交易,应该失败,即parent1私钥签名、parent2私钥签名,发送交易; |
Exception |
17. 清除签名字段,用parent2私钥签名、用grandparent私钥签名,发送交易,检查是否balance减少500 | Pass |
18. 清除交易信息; 19. 更新grandparent权限策略,更新为理事会成员账户,用parent2私钥签名、grandparent私钥签名、init_account_priv_key签名,发送交易 |
Exception |
20. 清除交易签名字段; 21. 用child私钥签名,发送交易,检查是否balance减少500(why?) |
Pass |
22. 验证多层级的“循环”会失败。即,更新parent1的权限策略为child完全控制 | Exception |
23. 验证递归深度不满足时签名交易会失败。即,parent2签名交易,发送交易 | Exception |
proposed_single_account
Test Case | RTE测试结果 |
---|---|
1. 调用any_two_of_three,nathan受key1、key2、key3中任意2个同时授权控制; 2. 创建新账户moneyman,从db转账1000000到moneyman; 3. moneyman创建提案让Nathan发送100 CORE给moneyman,设置提案交易的必要属性; 4. 检查提案的active、owner授权集合; |
Pass |
5. 设置提案,检查提案需要获得Nathan授权; | Pass |
6. 获得Nathan授权,更新提案,用理事会私钥签名交易并发送交易(Nathan还未同意); | Exception |
7. 重置授权信息,让理事会签名交易并发送(理事会对这个交易没有股权); | Exception |
8. 重置授权信息,让Nathan的key2和key3签名交易并发送,balance成功减少100; | Pass |
committee_authority
验证committee_authority不能被普通交易调用。
Test Case | RTE测试结果 |
---|---|
1. 创建新账户nathan,理事会私钥设置为init_account_priv_key; 2. 产生新区块; 3. 修改理事会提案审核周期为1天; 4. 创建一个转账交易,转账100000 CORE给Nathan,用理事会私钥签署交易并发送(此时该转账交易需被纳入提案才可以被理事会签署发送成功); |
Exception |
5. Nathan签署交易交易并发送(提案审核周期还未设定); | Exception |
6. 检查设定的审核周期过短时,签署发送交易; | Exception |
7. 设定正确的值时,Nathan私钥签署发送交易,检查是否授权成功; | Exception |
8. 检查提案是否还未被授权执行; | Pass |
9. 重置交易信息,设置为理事会签署授权提案,发送交易; 10. 检查Nathan账户余额是否未增加; |
Pass |
11. 检查提案是否还已被授权执行; | Pass |
12. 清除交易签名信息,重设提案审核周期,理事会重新签署交易并发送(提案正在审核); | Exception |
13. 重新出块,检查Nathan余额是否增加100000; | Pass |
fired_committee_members
主要测试被解雇的理事会成员功能。
Test Case | RTE测试结果 |
---|---|
1. 创建新账户nathan,并从db给Nathan转账5000 CORE; 2. 创建理事会成员列表,共15个理事会成员,所有理事会成员升级为终生会员; 3. 检查Nathan账户余额为5000; |
Pass |
4. 理事会创建提案,向Nathan转账100000,检查提案是否还未被授权执行; | Pass |
5. 理事会成员授权提案,检查提案是否已经被授权执行; | Pass |
6. 在设定的提案审核期间,不断的产生区块,并检查Nathan账户余额是否还未增加100000; | Pass |
7. 持续2天的审核提案、检查Nathan账户,检查提案是否已经被授权执行; | Pass |
8. 检查Nathan账户是否还未增加100000; | Pass |
9. 理事会成员列表需要更新,Nathan需要重新投票选举新的理事会成员; 10. Nathan账户余额是否还未变化; |
Pass |
11. 持续出块、检查Nathan账户是否还未变化; 12. 到了设定的过期时间,提案过期,转账100000到Nathan账户的提案被作废。 |
Pass |
proposal_two_accounts
Test Case | RTE测试结果 |
---|---|
1. 创建账户Nathan和dan,分别从db转账100000到账户; 2. 创建一个从Nathan转账500到dan的交易,并将该交易创建成提案,费用池指向Nathan账户,提案过期时间为1天; 3. Nathan签名提案并发送; 4. 检查提案的授权信息; |
Pass |
5. 检查提案是否还未被授权执行; | Pass |
6. 更新提案,添加Nathan到提案的授权列表; 7. 添加dan到授权列表; 8. 检查需要Nathan和dan共同签名,提案才能生效; |
Pass |
proposal_delete
Test Case | RTE测试结果 |
---|---|
1. 检查删除提案后,提案内容不生效; | Pass |
proposal_owner_authority_delete
Test Case | RTE测试结果 |
---|---|
1. | Pass |
proposal_owner_authority_complete
Test Case | RTE测试结果 |
---|---|
1. | Pass |
max_authority_membership
Test Case | RTE测试结果 |
---|---|
1. 检查删除提案后,提案内容不生效; | Pass |
3. basic_tests
valid_name_test
Test Case | RTE测试结果 |
---|---|
1. 检查名字格式是否有效(遵循RFC-1035); | Pass |
valid_symbol_test
Test Case | RTE测试结果 |
---|---|
1. 检查符号是否有效; | Pass |
price_test
Test Case | RTE测试结果 |
---|---|
1. 检查各种价格换算的结果正确性; | Pass |
memo_test
Test Case | RTE测试结果 |
---|---|
1. 检查memo的填充、发送、解析的正确性(如果web socket的格式发生变化,需要更新该测试用例); | Pass |
scaled_precision
Test Case | RTE测试结果 |
---|---|
1. 检查精度换算的正确性; | Pass |
merkle_root
Test Case | RTE测试结果 |
---|---|
1. 检查merkle树计算的正确性; | Pass |
4. block_tests
block_database_test
Test Case | RTE测试结果 |
---|---|
1. 检查block_database的成员函数:open; | Pass |
2. 检查block_database的成员函数:close; | Pass |
3. 检查block_database的成员函数:store; | Pass |
4. 检查block_database的成员函数:fetch_by_number; | Pass |
5. 检查block_database的成员函数:last; | Pass |
generate_empty_blocks
Test Case | RTE测试结果 |
---|---|
1. 检查witness依次产生空块的正确性; | Pass |
undo_block
检查撤块的正确性
Test Case | RTE测试结果 |
---|---|
1. 产生5个空块; | Pass |
2. 从上往下依次撤销3个块,检查head block num的正确性; | Pass |
3. 在head block num为2时,再次产生5个空块,检查当前head block num是否为7; | Pass |
fork_blocks
检查区块链分叉、切换的正确性。database有object database和block database的概念。分叉只会出现在LIB以上的区块。
Test Case | RTE测试结果 |
---|---|
1. 创建两个db实例,制造block分叉的情况,检查区块分叉及切换回最长链的正确性; | Pass |
undo_pending
Test Case | RTE测试结果 |
---|---|
1. 创建转账交易,查询db中接收方对象的余额,检查是否转账成功; | Pass |
2. 撤销pending状态的交易(还未上链)后查询db中该对象的余额,检查是否余额按照预期变化; | Pass |
switch_forks_undo_create
Test Case | RTE测试结果 |
---|---|
1. 制造链的分叉,在db1创建新账户,检查db1上能否找到该账户; | Pass |
2. 切换分叉(db2更长);在db1上撤回创建账户的操作,检查db1上是否不能找到该账户; | Pass |
3. 同步两个分叉后,在db1和db2上查找该账户,检查是否能找到; | Pass |
duplicate_transactions
Test Case | RTE测试结果 |
---|---|
1. 打开2个db实例,创建一个转账交易,并用db1打包进block; 2. 在 |
Pass |
wallet_tests
derive_owner_keys_from_brain_key
- 检查derived keys长度为3
- 检查derived keys唯一,没有重复
- 检查public keys前三位为CYB
uia_tests
create_advanced_uia
- 发行新资产
- 验证symbol,symbol_id, rate, flag, max_supply,market_fee,current_supply, accumulated_fees,fee_pool
override_transfer
- sam发行资产,注意设置override_authority flag
- sam给dan发1000个token
- 生成override_transfer订单,from为dan, to为eric, value为100
- 没有签名,直接push应该报错
- 使用dan签名,然后push会报错
- 使用sam签名,push应该正常
- 最终结果dan 900余额, eric 100余额
override_transfer_test2
- sam发行资产
- sam给dan发1000个token
- 生成override_transfer订单,from为dan, to为eric, value为100
- 没有签名,直接push应该报错
- 使用dan签名,然后push会报错
- 使用sam签名,push失败,因为override_auth flag没设置
- 最终结果dan 1000余额, eric 0余额
issue_whitelist_uia
- 创建账户izzy并发行资产
- 创建账户nathan,vikram
- izzy issue 1000个token给nathan
- nathan balance涨了1000
- 将izzy加入发行资产whitelist_authorities
- izzy issue 1000个token给nathan
- 步骤6失败,因为izzy账号下的whitelisting_accounts没有nathan
- 将vikram加入izzy账号下的whitelisting_accounts,重复步骤6
- 步骤8应该失败,因为izzy账号下的whitelisting_accounts没有nathan
- 将nathan加入izzy账号下的whitelisting_accounts,重复步骤6
- nathan账号应该增加1000个token
transfer_whitelist_uia
- 重复issue_whitelist_uia 测试用例
- 创建dan账号, 并升级为终身会员
- 尝试nathan给dan转账
- 步骤3会失败,因为dan不在izzy的whitelisting_accounts中
- izzy将dan加入本账号的whitelisting_accounts,重复步骤3
- dan会收到nathan发送过来的token
transfer_blacklist_uia
- 类似transfer_whitelist_uia的逻辑,尝试blacklist_accounts场景
transfer_restricted_test
- sam发行资产
- alice issue sam发行的资产
- 步骤2成功
- sam调整发行资产的flag为transfer_restricted
- 重复步骤2会失败,因为资产已经被禁止transfer了
asset_name_test
- 测试发行的asset的名称
- 发行过的资产不允许重现发行
- 资产ABC与ABC.DEF为不同的资产
swan_tests
serialization_tests
序列化测试,略过
operation_tests
feed_limit_logic_test
-
喂价单测试,cybex未涉及,暂时跳过
margin_call_limit_test
-
margin call, cybex未涉及,暂时跳过
prediction_market
-
PMA, cybex未涉及,暂时跳过
create_account_test
- 测试创建账号时账号的限制, 源码
- 验证账号长度限制,账号包含特殊符号(!.-)等
update_account
- 更新memo_key, 验证是否更新正确
- 更新active/owner key threshold, 验证更新是否正确
- 投票,验证更新是否正确
- 升级会员,验证更新是否正确
transfer_core_asset
- committee_account给某账户转账,验证转账金额已经fee是否对的上
- nathan给某账户转账,验证转账金额已经fee是否对的上
create_committee_member
- 创建董事会成员,验证是否创建成功
create_mia, update_mia
- 创建MIA, cybex未涉及,暂时跳过
create_uia
- 用户发行资产,验证发行的资产是否和当初发行时参数一直
- 需要验证issuer, fee, symbol, max_supply, precision, market_fee_percent, issuer_permissions, flags, core_exchange_rate, current_supply, accumulated_fees, fee_pool
update_uia
- 更新core exchange rate
- 更新设置flag
- 更新设置黑白名单
issue_uia
- issue的asset不能不存在
- fee不能为负数
- asset to accout必须存在
- 转账后current_supply不能变
- accumulated_fees和fee_pool均为0
transfer_uia
- nathan创建uia, 给committee转账
- 双方账对的上
create_buy_uia_multiple_match_new
- 创建UIA token
- 创建账号nathan, seller, buyer
- buyer挂三笔限价单 100UIA - 100CYB, 100UIA - 200CYB, 100UIA - 300 CYB, 此时seller的UIA balance应该减少300
- seller挂一笔限价单 300CYB - 150 UIA, 此时seller CYB balance减少300
- 最终结果seller 有200 UIA, buyer有297个CYB, 手续费3CYB
create_buy_exact_match_uia
- 创建UIA token
- 创建账号nathan, seller, buyer
- buyer挂三笔限价单 100UIA - 100CYB, 100UIA - 200CYB, 100UIA - 300 CYB
- seller挂一笔限价单 100CYB - 100 UIA
- 最终结果seller 有99 UIA, buyer有100 CYB, 手续费1 CYB
create_buy_uia_multiple_match_new_reverse
- 创建UIA token
- 创建账号nathan, seller, buyer
- seller挂一笔限价单 100CYB - 150 UIA
- buyer挂三笔限价单 100UIA - 100CYB, 100UIA - 200CYB, 100UIA - 300 CYB, 此时seller的UIA balance应该减少300
- 最终结果seller 有198 UIA, buyer有300 CYB, 手续费2 CYB
create_buy_uia_multiple_match_new_reverse_fract
- 创建UIA token
- 创建账号nathan, seller, buyer
- buyer挂三笔限价单 100UIA - 10CYB, 100UIA - 20CYB, 100UIA - 30 CYB, 此时seller的UIA balance应该减少300
- seller挂一笔限价单 30CYB - 150 UIA, 此时seller CYB balance减少300
- 最终结果seller 有198 UIA和0 CYB,buyer有30个CYB, 手续费2 CYB
uia_fees
- 发行资产时,fee的10%进入fee_pool
- committee 向fee_pool入账,入账金额应该对的上
- nathan向committee做一笔转账, fee id应该为CYB, fee amount应该大于0
- committee_account收到转账金额, accumulated_fees, fee_pool相应增加
- 重复步骤3,4
cancel_limit_order_test
- 发一笔限价单
- 取消限价单
trade_amount_equals_zero
- buyer限价单 3 TEST - 1CYB
- seller挂两笔相同的限价单 1 CYB - 2 TEST
- 最终结果seller 有3 TEST,buyer有1个CYB
limit_order_fill_or_kill
- 发一笔fill or kill 限价单
- 要么立即成交,要么立即销毁
reserve_asset_test
- 验证收回资产
- 验证摧毁资产
worker_create_test
- 创建worker
- 检查daily_pay, work_begin_date, work_end_date, vote_for, vote_against
- 检查worker_pay
- 删除worker
transfer_with_memo
- transfer时加memo, 检查transfer是否正确执行, memo是否正确
history_api_tests
get_account_history
- nathan做三笔op,查看其最近的account history 是否有这三笔
- 查看account history时限制返回limit, 看是否生效
get_account_history_additional
- 新链 get account history 长度为0
- 相互转账,双方共享一条相关的history
fee_tests
nonzero_fee_test
- fee不够时转账报错
asset_claim_fees_test
- Izzy issues asset to Alice
- Jill issues asset to Bob
- Alice and Bob trade in the market and pay fees
- Verify that Izzy and Jill can claim the fees