From 1815655da758d3eeb91c639c7f2df1b7be42d109 Mon Sep 17 00:00:00 2001 From: sowle Date: Wed, 20 May 2020 17:41:46 +0300 Subject: [PATCH] coretests: hard_fork_2_tx_extra_alias_entry_in_wallet greatly improved to check alias reg/update to an auditable address before/after the HF2 --- tests/core_tests/hard_fork_2.cpp | 107 ++++++++++++++++++++++++++++--- 1 file changed, 97 insertions(+), 10 deletions(-) diff --git a/tests/core_tests/hard_fork_2.cpp b/tests/core_tests/hard_fork_2.cpp index e11241a8..76c70701 100644 --- a/tests/core_tests/hard_fork_2.cpp +++ b/tests/core_tests/hard_fork_2.cpp @@ -432,7 +432,7 @@ bool hard_fork_2_tx_receiver_in_wallet::c1(currency::core& c, size_t ev_index, c //------------------------------------------------------------------------------ hard_fork_2_tx_extra_alias_entry_in_wallet::hard_fork_2_tx_extra_alias_entry_in_wallet() - : hard_fork_2_base_test(22) + : hard_fork_2_base_test(23) { REGISTER_CALLBACK_METHOD(hard_fork_2_tx_extra_alias_entry_in_wallet, c1); } @@ -442,7 +442,7 @@ bool hard_fork_2_tx_extra_alias_entry_in_wallet::generate(std::vector(res_tx.extra); CHECK_AND_ASSERT_MES(r, false, "extra_alias_entry is found in extra"); - // mine few block to activate HF2 - r = mine_next_pow_blocks_in_playtime(m_accounts[MINER_ACC_IDX].get_public_address(), c, 3); + // before the HF2 an alias to an auditable address is not supported + extra_alias_entry ai_bob = AUTO_VAL_INIT(ai_bob); + ai_bob.m_alias = "bobbobbob"; + ai_bob.m_address = m_accounts[BOB_ACC_IDX].get_public_address(); + alias_reward = get_alias_coast_from_fee(ai_bob.m_alias, TESTS_DEFAULT_FEE); + res_tx = AUTO_VAL_INIT(res_tx); + r = false; + try + { + alice_wlt->request_alias_registration(ai_bob, res_tx, TESTS_DEFAULT_FEE, alias_reward); + } + catch (...) + { + r = true; + } + CHECK_AND_ASSERT_MES(r, false, "exception was not cought as expected"); + + // should be still one tx in the pool + CHECK_AND_ASSERT_MES(c.get_pool_transactions_count() == 1, false, "Incorrect txs count in the pool: " << c.get_pool_transactions_count()); + + r = mine_next_pow_block_in_playtime(m_accounts[MINER_ACC_IDX].get_public_address(), c); CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_block_in_playtime failed"); - CHECK_AND_ASSERT_MES(c.get_pool_transactions_count() == 0, false, "Incorrect txs count in the pool"); - + CHECK_AND_ASSERT_MES(c.get_pool_transactions_count() == 0, false, "Incorrect txs count in the pool: " << c.get_pool_transactions_count()); + + // try to update Alice's alias to an auditable address + extra_alias_entry ai_alice_update = ai; + ai_alice_update.m_text_comment = "Update to auditable"; + ai_alice_update.m_address = m_accounts[BOB_ACC_IDX].get_public_address(); // auditable + CHECK_AND_ASSERT_MES(ai_alice_update.m_address.is_auditable(), false, "address is not auditable"); + r = false; + try + { + alice_wlt->request_alias_update(ai_alice_update, res_tx, TESTS_DEFAULT_FEE, 0); + } + catch (...) + { + r = true; + } + CHECK_AND_ASSERT_MES(r, false, "exception was not cought as expected"); + + + // mine few blocks to activate HF2 + r = mine_next_pow_blocks_in_playtime(m_accounts[MINER_ACC_IDX].get_public_address(), c, 2); + CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_block_in_playtime failed"); + CHECK_AND_ASSERT_MES(c.get_pool_transactions_count() == 0, false, "Incorrect txs count in the pool: " << c.get_pool_transactions_count()); + CHECK_AND_ASSERT_MES(c.get_current_blockchain_size() == CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 1 + WALLET_DEFAULT_TX_SPENDABLE_AGE + 4, false, "Incorrect blockchain size"); alice_wlt->refresh(blocks_fetched, received_money, atomic_false); CHECK_AND_ASSERT_MES(blocks_fetched == 3, false, "Incorrect numbers of blocks fetched"); // update alias, change comment and address - ai.m_text_comment = "Update!"; + ai.m_text_comment = "Update to normal"; ai.m_address = m_accounts[MINER_ACC_IDX].get_public_address(); alice_wlt->request_alias_update(ai, res_tx, TESTS_DEFAULT_FEE, 0); @@ -518,10 +559,56 @@ bool hard_fork_2_tx_extra_alias_entry_in_wallet::c1(currency::core& c, size_t ev CHECK_AND_ASSERT_MES(r, false, "extra_alias_entry_old is found in extra"); // make sure alias was updated indeed - extra_alias_entry ai2 = AUTO_VAL_INIT(ai2); - r = c.get_blockchain_storage().get_alias_info(ai.m_alias, ai2); + extra_alias_entry ai_check = AUTO_VAL_INIT(ai_check); + r = c.get_blockchain_storage().get_alias_info(ai.m_alias, ai_check); CHECK_AND_ASSERT_MES(r, false, "get_alias_info failed"); - CHECK_AND_ASSERT_MES(ai2.m_text_comment == ai.m_text_comment && ai2.m_address == m_accounts[MINER_ACC_IDX].get_public_address(), + CHECK_AND_ASSERT_MES(ai_check.m_text_comment == ai.m_text_comment && ai_check.m_address == m_accounts[MINER_ACC_IDX].get_public_address(), + false, "Incorrect alias info retunred by get_alias_info"); + + + // make sure an alias to auditable address can be registered now + alice_wlt->request_alias_registration(ai_bob, res_tx, TESTS_DEFAULT_FEE, alias_reward); + // after HF2: extra_alias_entry should be here, not extra_alias_entry_old + r = have_type_in_variant_container(res_tx.extra); + CHECK_AND_ASSERT_MES(r, false, "extra_alias_entry is not found in extra"); + r = !have_type_in_variant_container(res_tx.extra); + CHECK_AND_ASSERT_MES(r, false, "extra_alias_entry_old is found in extra"); + + // miner a block to confirm it + CHECK_AND_ASSERT_MES(c.get_pool_transactions_count() == 1, false, "Incorrect txs count in the pool"); + r = mine_next_pow_block_in_playtime(m_accounts[MINER_ACC_IDX].get_public_address(), c); + CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_block_in_playtime failed"); + CHECK_AND_ASSERT_MES(c.get_pool_transactions_count() == 0, false, "Incorrect txs count in the pool"); + + // make sure alias was updated to an auditable address indeed + ai_check = AUTO_VAL_INIT(ai_check); + r = c.get_blockchain_storage().get_alias_info(ai_bob.m_alias, ai_check); + CHECK_AND_ASSERT_MES(r, false, "get_alias_info failed"); + CHECK_AND_ASSERT_MES(ai_check.m_text_comment == ai_bob.m_text_comment && ai_check.m_address == m_accounts[BOB_ACC_IDX].get_public_address(), + false, "Incorrect alias info retunred by get_alias_info"); + + miner_wlt->refresh(); + + // update alias once again, change comment and address to auditable + // alias updated by miner, as he's the owner now + miner_wlt->request_alias_update(ai_alice_update, res_tx, TESTS_DEFAULT_FEE, 0); + + // after HF2: extra_alias_entry should be here, not extra_alias_entry_old + r = have_type_in_variant_container(res_tx.extra); + CHECK_AND_ASSERT_MES(r, false, "extra_alias_entry is not found in extra"); + r = !have_type_in_variant_container(res_tx.extra); + CHECK_AND_ASSERT_MES(r, false, "extra_alias_entry_old is found in extra"); + + CHECK_AND_ASSERT_MES(c.get_pool_transactions_count() == 1, false, "Incorrect txs count in the pool"); + r = mine_next_pow_block_in_playtime(m_accounts[MINER_ACC_IDX].get_public_address(), c); + CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_block_in_playtime failed"); + CHECK_AND_ASSERT_MES(c.get_pool_transactions_count() == 0, false, "Incorrect txs count in the pool"); + + // make sure alias was updated to an auditable address indeed + ai_check = AUTO_VAL_INIT(ai_check); + r = c.get_blockchain_storage().get_alias_info(ai_alice_update.m_alias, ai_check); + CHECK_AND_ASSERT_MES(r, false, "get_alias_info failed"); + CHECK_AND_ASSERT_MES(ai_check.m_text_comment == ai_alice_update.m_text_comment && ai_check.m_address == m_accounts[BOB_ACC_IDX].get_public_address(), false, "Incorrect alias info retunred by get_alias_info"); return true;