forked from lthn/blockchain
extended test for refund validation(fails so far)
This commit is contained in:
parent
367a786642
commit
38f342b62c
1 changed files with 68 additions and 24 deletions
|
|
@ -70,20 +70,21 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto
|
|||
|
||||
*/
|
||||
|
||||
currency::account_base accunt_alice_blockchain_a;
|
||||
currency::account_base accunt_alice_blockchain_b;
|
||||
currency::account_base accunt_bob_blockchain_a;
|
||||
currency::account_base accunt_bob_blockchain_b;
|
||||
accunt_alice_blockchain_a.generate();
|
||||
accunt_alice_blockchain_b.generate();
|
||||
accunt_bob_blockchain_a.generate();
|
||||
accunt_bob_blockchain_b.generate();
|
||||
|
||||
LOG_PRINT_MAGENTA("Mining Address: " << currency::get_account_address_as_str(m_mining_accunt.get_public_address()), LOG_LEVEL_0);
|
||||
LOG_PRINT_MAGENTA("Alice [A] Address: " << currency::get_account_address_as_str(accunt_alice_blockchain_a.get_public_address()), LOG_LEVEL_0);
|
||||
LOG_PRINT_MAGENTA("Alice [B] Address: " << currency::get_account_address_as_str(accunt_alice_blockchain_b.get_public_address()), LOG_LEVEL_0);
|
||||
LOG_PRINT_MAGENTA("Bob [A] Address: " << currency::get_account_address_as_str(accunt_bob_blockchain_a.get_public_address()), LOG_LEVEL_0);
|
||||
LOG_PRINT_MAGENTA("Bob [B] Address: " << currency::get_account_address_as_str(accunt_bob_blockchain_b.get_public_address()), LOG_LEVEL_0);
|
||||
|
||||
#define INIT_RUNTIME_WALLET(instance_name) \
|
||||
currency::account_base instance_name##acc_base; \
|
||||
instance_name##acc_base.generate(); \
|
||||
LOG_PRINT_MAGENTA(": " << currency::get_account_address_as_str(instance_name##acc_base.get_public_address()), LOG_LEVEL_0); \
|
||||
std::shared_ptr<tools::wallet2> instance_name = init_playtime_test_wallet(events, c, instance_name##acc_base);
|
||||
|
||||
//create wallet instances and calculate balances
|
||||
INIT_RUNTIME_WALLET(alice_a_wlt_instance);
|
||||
INIT_RUNTIME_WALLET(alice_b_wlt_instance);
|
||||
INIT_RUNTIME_WALLET(bob_a_wlt_instance);
|
||||
INIT_RUNTIME_WALLET(bob_b_wlt_instance);
|
||||
INIT_RUNTIME_WALLET(refund_test_instance);
|
||||
INIT_RUNTIME_WALLET(refund_test_instance2);
|
||||
|
||||
#define AMOUNT_TO_TRANSFER_HTLC (TESTS_DEFAULT_FEE*10)
|
||||
|
||||
|
|
@ -96,42 +97,59 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto
|
|||
CHECK_AND_FORCE_ASSERT_MES(c.get_pool_transactions_count() == 0, false, "Incorrect txs count in the pool");
|
||||
|
||||
uint64_t transfer_amount = AMOUNT_TO_TRANSFER_HTLC + TESTS_DEFAULT_FEE;
|
||||
miner_wlt->transfer(transfer_amount, accunt_alice_blockchain_a.get_public_address());
|
||||
miner_wlt->transfer(transfer_amount, alice_a_wlt_instance->get_account().get_public_address());
|
||||
LOG_PRINT_MAGENTA("Transaction sent to Alice A: " << transfer_amount, LOG_LEVEL_0);
|
||||
|
||||
miner_wlt->transfer(transfer_amount, accunt_bob_blockchain_b.get_public_address());
|
||||
miner_wlt->transfer(transfer_amount, bob_b_wlt_instance->get_account().get_public_address());
|
||||
LOG_PRINT_MAGENTA("Transaction sent to Bob B: " << transfer_amount, LOG_LEVEL_0);
|
||||
|
||||
miner_wlt->transfer(transfer_amount, refund_test_instance->get_account().get_public_address());
|
||||
LOG_PRINT_MAGENTA("Transaction sent to Refund test: " << transfer_amount, LOG_LEVEL_0);
|
||||
|
||||
bool r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW);
|
||||
CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed");
|
||||
|
||||
//create wallet instances and calculate balances
|
||||
std::shared_ptr<tools::wallet2> alice_a_wlt_instance = init_playtime_test_wallet(events, c, accunt_alice_blockchain_a);
|
||||
std::shared_ptr<tools::wallet2> alice_b_wlt_instance = init_playtime_test_wallet(events, c, accunt_alice_blockchain_b);
|
||||
std::shared_ptr<tools::wallet2> bob_a_wlt_instance = init_playtime_test_wallet(events, c, accunt_bob_blockchain_a);
|
||||
std::shared_ptr<tools::wallet2> bob_b_wlt_instance = init_playtime_test_wallet(events, c, accunt_bob_blockchain_b);
|
||||
// std::shared_ptr<wallet_tests_callback_handler> backend_mock(new wallet_tests_callback_handler());
|
||||
// alice_a_wlt_instance->callback(backend_mock);
|
||||
|
||||
alice_a_wlt_instance->refresh();
|
||||
alice_b_wlt_instance->refresh();
|
||||
bob_a_wlt_instance->refresh();
|
||||
bob_b_wlt_instance->refresh();
|
||||
refund_test_instance->refresh();
|
||||
refund_test_instance2->refresh();
|
||||
|
||||
|
||||
CHECK_AND_FORCE_ASSERT_MES(alice_a_wlt_instance->balance() == transfer_amount, false, "Incorrect balance");
|
||||
CHECK_AND_FORCE_ASSERT_MES(bob_b_wlt_instance->balance() == transfer_amount, false, "Incorrect balance");
|
||||
CHECK_AND_FORCE_ASSERT_MES(refund_test_instance->balance() == transfer_amount, false, "Incorrect balance");
|
||||
|
||||
|
||||
//============= phase 1 =============
|
||||
//----------- preparation -----------
|
||||
//a) basic full atomic process test
|
||||
std::string alice_origin; //will be deterministically generated by Alice's A wallet
|
||||
currency::transaction res_tx = AUTO_VAL_INIT(res_tx);
|
||||
alice_a_wlt_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, bob_a_wlt_instance->get_account().get_public_address(), 100, res_tx, currency::null_hash, alice_origin);
|
||||
|
||||
//b) htlc refund test
|
||||
std::string refund_origin; //will be deterministically generated by Alice's A wallet
|
||||
currency::transaction refund_res_tx = AUTO_VAL_INIT(refund_res_tx);
|
||||
refund_test_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, miner_wlt->get_account().get_public_address(), 18, refund_res_tx, currency::null_hash, refund_origin);
|
||||
|
||||
|
||||
//----------- rewinding -----------
|
||||
r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW);
|
||||
CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed");
|
||||
alice_a_wlt_instance->refresh();
|
||||
alice_b_wlt_instance->refresh();
|
||||
bob_a_wlt_instance->refresh();
|
||||
bob_b_wlt_instance->refresh();
|
||||
refund_test_instance->refresh();
|
||||
refund_test_instance2->refresh();
|
||||
|
||||
|
||||
|
||||
//----------- checks -----------
|
||||
//a) basic full atomic process test
|
||||
std::list<tools::wallet_public::htlc_entry_info> htlcs_alice_a;
|
||||
alice_a_wlt_instance->get_list_of_active_htlc(htlcs_alice_a, false);
|
||||
CHECK_AND_ASSERT_MES(htlcs_alice_a.size() == 1, false, "htlcs_alice.size() == 1 failed");
|
||||
|
|
@ -151,23 +169,37 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto
|
|||
&& hei_alice.sha256_hash == hei_bob.sha256_hash
|
||||
&& hei_alice.tx_id == hei_bob.tx_id, false, "hei_alice !=hei_bob ");
|
||||
|
||||
//b) htlc refund test
|
||||
//money at refund_test_instance should be released as refunded, and balance should get to transfer_amount - TESTS_DEFAULT_FEE
|
||||
CHECK_AND_ASSERT_MES(refund_test_instance->balance() == transfer_amount - TESTS_DEFAULT_FEE, false, "refund_test_instance->balance() == transfer_amount - TESTS_DEFAULT_FEE failed");
|
||||
|
||||
//std::string bob_origin;
|
||||
//============= phase 2 =============
|
||||
//----------- preparation -----------
|
||||
//a) basic full atomic process test
|
||||
currency::transaction res_bob_tx = AUTO_VAL_INIT(res_tx);
|
||||
std::string dummy_origin;
|
||||
bob_b_wlt_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE,
|
||||
alice_b_wlt_instance->get_account().get_public_address(),
|
||||
100,
|
||||
res_tx, hei_bob.sha256_hash, dummy_origin);
|
||||
|
||||
//b) htlc refund test
|
||||
//try to spend refunded money to make sure it's spendable
|
||||
refund_test_instance->transfer(transfer_amount - TESTS_DEFAULT_FEE * 2, refund_test_instance2->get_account().get_public_address());
|
||||
|
||||
//----------- rewinding -----------
|
||||
r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW);
|
||||
CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed");
|
||||
alice_a_wlt_instance->refresh();
|
||||
alice_b_wlt_instance->refresh();
|
||||
bob_a_wlt_instance->refresh();
|
||||
bob_b_wlt_instance->refresh();
|
||||
refund_test_instance->refresh();
|
||||
refund_test_instance2->refresh();
|
||||
|
||||
|
||||
//----------- checks -----------
|
||||
//a) basic full atomic process test
|
||||
std::list<tools::wallet_public::htlc_entry_info> htlcs_alice_b;
|
||||
alice_b_wlt_instance->get_list_of_active_htlc(htlcs_alice_b, false);
|
||||
CHECK_AND_ASSERT_MES(htlcs_alice_b.size() == 1, false, "htlcs_alice_b.size() == 1 failed");
|
||||
|
|
@ -191,10 +223,18 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto
|
|||
CHECK_AND_ASSERT_MES(hei_alice_b.amount == hei_bob_b.amount
|
||||
&& hei_alice_b.sha256_hash == hei_bob_b.sha256_hash
|
||||
&& hei_alice_b.tx_id == hei_bob_b.tx_id, false, "hei_alice !=hei_bob ");
|
||||
|
||||
//b) htlc refund test
|
||||
CHECK_AND_ASSERT_MES(refund_test_instance->balance() == 0, false, "refund_test_instance->balance() == 0 failed");
|
||||
CHECK_AND_ASSERT_MES(refund_test_instance2->balance() == transfer_amount - TESTS_DEFAULT_FEE * 2, false, "refund_test_instance->balance() == transfer_amount - TESTS_DEFAULT_FEE * 2 failed");
|
||||
|
||||
|
||||
//============= phase 3 =============
|
||||
//----------- preparation -----------
|
||||
//now alice redeem her contract in blockchain B
|
||||
alice_b_wlt_instance->redeem_htlc(hei_alice_b.tx_id, alice_origin);
|
||||
|
||||
//----------- rewinding -----------
|
||||
r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW);
|
||||
CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed");
|
||||
alice_a_wlt_instance->refresh();
|
||||
|
|
@ -202,11 +242,14 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto
|
|||
bob_a_wlt_instance->refresh();
|
||||
bob_b_wlt_instance->refresh();
|
||||
|
||||
//----------- checks -----------
|
||||
std::list<tools::wallet_public::htlc_entry_info> htlcs_bob_a_3;
|
||||
bob_a_wlt_instance->get_list_of_active_htlc(htlcs_bob_a_3, false);
|
||||
CHECK_AND_ASSERT_MES(htlcs_bob_a_3.size() == 1, false, "htlcs_bob_a.size() == 1 failed");
|
||||
|
||||
|
||||
//============= phase 4 =============
|
||||
//----------- preparation -----------
|
||||
std::string bob_detected_origin;
|
||||
r = bob_b_wlt_instance->check_htlc_redeemed(hei_bob_b.tx_id, bob_detected_origin);
|
||||
CHECK_AND_ASSERT_MES(r, false, "bob_a_wlt_instance->check_htlc_redeemed(hei_bob_b.tx_id, bob_detected_origin); returned false");
|
||||
|
|
@ -214,7 +257,7 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto
|
|||
CHECK_AND_ASSERT_MES(bob_detected_origin == alice_origin, false, "bob_detected_origin == alice_origin failed");
|
||||
bob_a_wlt_instance->redeem_htlc(hei_bob.tx_id, bob_detected_origin);
|
||||
|
||||
|
||||
//----------- rewinding -----------
|
||||
r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW);
|
||||
CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed");
|
||||
alice_a_wlt_instance->refresh();
|
||||
|
|
@ -222,6 +265,7 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto
|
|||
bob_a_wlt_instance->refresh();
|
||||
bob_b_wlt_instance->refresh();
|
||||
|
||||
//----------- checks -----------
|
||||
//now we have to check if all balances to make sure that atomic swap passed properly
|
||||
CHECK_AND_FORCE_ASSERT_MES(alice_a_wlt_instance->balance() == 0, false, "Incorrect balance");
|
||||
CHECK_AND_FORCE_ASSERT_MES(bob_b_wlt_instance->balance() == 0, false, "Incorrect balance");
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue