From e9e61a05d047c1f10df06c341b330cb03f52cf54 Mon Sep 17 00:00:00 2001 From: sowle Date: Wed, 12 Feb 2020 15:59:51 +0300 Subject: [PATCH] coretests: adapted few tests to new tx pool rule (no standalone txs acceptable while BCS is in CP zone): gen_checkpoints_attachments_basic, gen_checkpoints_invalid_keyimage, multisig_and_checkpoints_bad_txs, prun_ring_signatures, hard_fork_1_checkpoint_basic_test, multisig_and_checkpoints, gen_checkpoints_prun_txs_after_blockchain_load --- tests/core_tests/checkpoints_tests.cpp | 39 ++++++++++++++------ tests/core_tests/hard_fork_1.cpp | 6 ++- tests/core_tests/multisig_wallet_tests.cpp | 26 ++++++++++++- tests/core_tests/pruning_ring_signatures.cpp | 4 ++ 4 files changed, 60 insertions(+), 15 deletions(-) diff --git a/tests/core_tests/checkpoints_tests.cpp b/tests/core_tests/checkpoints_tests.cpp index 02165918..6238615b 100644 --- a/tests/core_tests/checkpoints_tests.cpp +++ b/tests/core_tests/checkpoints_tests.cpp @@ -81,7 +81,9 @@ bool gen_checkpoints_attachments_basic::generate(std::vector& REWIND_BLOCKS_N(events, blk_0r, blk_0, miner_acc, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); // 0 ... N N+1 N+2 <- height (N = CURRENCY_MINED_MONEY_UNLOCK_WINDOW) + // CP checkpoint // (0 )- (0r)- (1 )- (2 ) + // tx_0 txs DO_CALLBACK_PARAMS(events, "set_checkpoint", params_checkpoint(CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 2)); @@ -94,10 +96,13 @@ bool gen_checkpoints_attachments_basic::generate(std::vector& attachments.push_back(cm); attachments.push_back(ms); - MAKE_TX_LIST_START_WITH_ATTACHS(events, txs, miner_acc, miner_acc, MK_TEST_COINS(1), blk_0r, attachments); - m_tx_hash = get_transaction_hash(txs.front()); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, true)); // tx_0 goes with the block blk_1 + MAKE_TX_ATTACH(events, tx_0, miner_acc, miner_acc, MK_TEST_COINS(1), blk_0r, attachments); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, false)); + + m_tx_hash = get_transaction_hash(tx_0); - MAKE_NEXT_BLOCK_TX_LIST(events, blk_1, blk_0r, miner_acc, txs); + MAKE_NEXT_BLOCK_TX1(events, blk_1, blk_0r, miner_acc, tx_0); MAKE_NEXT_BLOCK(events, blk_2, blk_1, miner_acc); @@ -150,7 +155,10 @@ bool gen_checkpoints_invalid_keyimage::generate(std::vector& e // don't sign at all // tb.step5_sign(); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, true)); // tb.m_tx goes with block blk_1 events.push_back(tb.m_tx); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, false)); + MAKE_NEXT_BLOCK_TX1(events, blk_1, blk_0r, miner_acc, tb.m_tx); MAKE_NEXT_BLOCK(events, blk_2, blk_1, miner_acc); @@ -376,33 +384,40 @@ bool gen_checkpoints_prun_txs_after_blockchain_load::generate(std::vectorCP1 +------->CP2 <- checkpoints - // | | <- when CP are set up - // (0 )- (0r)- (1 )- (2 )- (3 )- (4 )- (5 )- (6 ) <- main chain - // tx_0 tx_1 <- txs included in blocks + // 0 ... N N+1 N+2 N+3 N+4 N+5 N+6 N+7 <- height (N = CURRENCY_MINED_MONEY_UNLOCK_WINDOW) + // +------->CP1 +------->CP2 <- checkpoints + // | | <- when CP are set up + // (0 )- (0r)- (1 )- (2 )- (3 )- (4 )- (5 )- (6 )- (7 ) <- main chain + // tx_0 tx_1 <- txs included in blocks // // Expected: tx_0 and tx_1 are both pruned DO_CALLBACK(events, "check_not_being_in_cp_zone"); DO_CALLBACK_PARAMS(events, "set_checkpoint", params_checkpoint(CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 2)); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, true)); // tx_0 goes with blk_1_bad MAKE_TX(events, tx_0, miner_acc, alice, MK_TEST_COINS(1), blk_0r); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, false)); MAKE_NEXT_BLOCK_TX1(events, blk_1, blk_0r, miner_acc, tx_0); DO_CALLBACK(events, "check_being_in_cp_zone"); MAKE_NEXT_BLOCK(events, blk_2, blk_1, miner_acc); - MAKE_TX(events, tx_1, miner_acc, alice, MK_TEST_COINS(1), blk_2); - MAKE_NEXT_BLOCK_TX1(events, blk_3, blk_2, miner_acc, tx_1); + MAKE_NEXT_BLOCK(events, blk_3, blk_2, miner_acc); DO_CALLBACK(events, "check_not_being_in_cp_zone"); - DO_CALLBACK_PARAMS(events, "set_checkpoint", params_checkpoint(CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 5)); - MAKE_NEXT_BLOCK(events, blk_4, blk_3, miner_acc); + MAKE_TX(events, tx_1, miner_acc, alice, MK_TEST_COINS(1), blk_3); + MAKE_NEXT_BLOCK_TX1(events, blk_4, blk_3, miner_acc, tx_1); + + DO_CALLBACK(events, "check_not_being_in_cp_zone"); + + DO_CALLBACK_PARAMS(events, "set_checkpoint", params_checkpoint(CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 6)); + MAKE_NEXT_BLOCK(events, blk_5, blk_4, miner_acc); DO_CALLBACK(events, "check_being_in_cp_zone"); MAKE_NEXT_BLOCK(events, blk_6, blk_5, miner_acc); + MAKE_NEXT_BLOCK(events, blk_7, blk_6, miner_acc); DO_CALLBACK(events, "check_not_being_in_cp_zone"); m_tx0_id = get_transaction_hash(tx_0); diff --git a/tests/core_tests/hard_fork_1.cpp b/tests/core_tests/hard_fork_1.cpp index fdbe9617..ed278cba 100644 --- a/tests/core_tests/hard_fork_1.cpp +++ b/tests/core_tests/hard_fork_1.cpp @@ -340,11 +340,13 @@ bool hard_fork_1_checkpoint_basic_test::generate(std::vector& r = construct_tx(miner_acc.get_keys(), sources, destinations, extra, empty_attachment, tx_0, tx_sec_key, 0 /* unlock time 1 is zero and thus will not be set */); CHECK_AND_ASSERT_MES(r, false, "construct_tx failed"); // tx_0 should be accepted + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, true)); // tx_0 goes with blk_1_bad events.push_back(tx_0); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, false)); DO_CALLBACK(events, "mark_invalid_block"); MAKE_NEXT_BLOCK_TX1(events, blk_1_bad, blk_0r, miner_acc, tx_0); // should be rejected because of tx_0 - DO_CALLBACK_PARAMS(events, "check_tx_pool_count", static_cast(1)); + DO_CALLBACK(events, "check_tx_pool_empty"); // tx_0 won't be returned to the pool as it came with block blk_1_bad DO_CALLBACK(events, "clear_tx_pool"); MAKE_NEXT_BLOCK(events, blk_1, blk_0r, miner_acc); @@ -360,7 +362,9 @@ bool hard_fork_1_checkpoint_basic_test::generate(std::vector& // // now tx_0 is okay and can be added to the blockchain + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, true)); // tx_0 goes with blk_5 events.push_back(tx_0); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, false)); MAKE_NEXT_BLOCK_TX1(events, blk_5, blk_4, miner_acc, tx_0); REWIND_BLOCKS_N_WITH_TIME(events, blk_5r, blk_5, miner_acc, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); diff --git a/tests/core_tests/multisig_wallet_tests.cpp b/tests/core_tests/multisig_wallet_tests.cpp index 7a50e2a2..c9990045 100644 --- a/tests/core_tests/multisig_wallet_tests.cpp +++ b/tests/core_tests/multisig_wallet_tests.cpp @@ -1674,7 +1674,10 @@ bool multisig_and_checkpoints::generate(std::vector& events) c transaction tx_1 = AUTO_VAL_INIT(tx_1); r = construct_tx(miner_acc.get_keys(), sources, destinations, empty_attachment, tx_1, 0, CURRENCY_TO_KEY_OUT_RELAXED, true); CHECK_AND_ASSERT_MES(r, false, "construct_tx"); + + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, true)); // tx_1 goes with the block blk_1 events.push_back(tx_1); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, false)); MAKE_NEXT_BLOCK_TX1(events, blk_1, blk_0r, miner_acc, tx_1); @@ -1695,7 +1698,9 @@ bool multisig_and_checkpoints::generate(std::vector& events) c bool tx_fully_signed = false; r = sign_multisig_input_in_tx(tx_2, 0, alice_acc.get_keys(), tx_1, &tx_fully_signed); CHECK_AND_ASSERT_MES(r & tx_fully_signed, false, "sign_multisig_input_in_tx failed, tx_fully_signed: " << tx_fully_signed); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, true)); // tx_2 goes with the block blk_2 events.push_back(tx_2); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, false)); MAKE_NEXT_BLOCK_TX1(events, blk_2, blk_1, miner_acc, tx_2); ADJUST_TEST_CORE_TIME(blk_2.timestamp); @@ -1708,7 +1713,10 @@ bool multisig_and_checkpoints::generate(std::vector& events) c transaction tx_3 = AUTO_VAL_INIT(tx_3); r = construct_tx(miner_acc.get_keys(), sources, destinations, empty_attachment, tx_3, 0, CURRENCY_TO_KEY_OUT_RELAXED, true); CHECK_AND_ASSERT_MES(r, false, "construct_tx"); + + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, true)); // tx_3 goes with the block blk_3 events.push_back(tx_3); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, false)); MAKE_NEXT_BLOCK_TX1(events, blk_3, blk_2, miner_acc, tx_3); // <-- CP @@ -1732,7 +1740,9 @@ bool multisig_and_checkpoints::generate(std::vector& events) c CHECK_AND_ASSERT_MES(r, false, "construct_tx failed"); r = sign_multisig_input_in_tx(tx_4, 0, alice_acc.get_keys(), tx_3, &tx_fully_signed); CHECK_AND_ASSERT_MES(r & tx_fully_signed, false, "sign_multisig_input_in_tx failed, tx_fully_signed: " << tx_fully_signed); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, true)); // tx_4 goes with the block blk_4 events.push_back(tx_4); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, false)); MAKE_NEXT_BLOCK_TX1(events, blk_4, blk_3, miner_acc, tx_4); // tx_5: normal input -> multisig output @@ -1815,7 +1825,10 @@ bool multisig_and_checkpoints_bad_txs::generate(std::vector& e transaction tx_1 = AUTO_VAL_INIT(tx_1); r = construct_tx(miner_acc.get_keys(), sources, destinations, empty_attachment, tx_1, 0, CURRENCY_TO_KEY_OUT_RELAXED, true); CHECK_AND_ASSERT_MES(r, false, "construct_tx"); + + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, true)); // tx_1 goes with the block blk_1 events.push_back(tx_1); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, false)); MAKE_NEXT_BLOCK_TX1(events, blk_1, blk_0r, miner_acc, tx_1); @@ -1829,21 +1842,24 @@ bool multisig_and_checkpoints_bad_txs::generate(std::vector& e boost::get(tx_2.vin[0]).sigs_count = 10; DO_CALLBACK(events, "mark_invalid_tx"); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, true)); events.push_back(tx_2); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, false)); MAKE_NEXT_BLOCK(events, blk_2, blk_1, miner_acc); DO_CALLBACK_PARAMS(events, "check_balance", params_check_balance(BOB_ACC_IDX, 0, 0, 0, 0, 0)); - // tx_3: no signatures, zero sigs_count in ms input (should FAIL) + // tx_3: no signatures, zero sigs_count in ms input (should pass under CP zone) transaction tx_3 = AUTO_VAL_INIT(tx_3); r = make_tx_multisig_to_key(tx_1, get_tx_out_index_by_amount(tx_1, amount), std::list({ alice_acc.get_keys() }), bob_acc.get_public_address(), tx_3); CHECK_AND_ASSERT_MES(r, false, "make_tx_multisig_to_key failed"); tx_3.signatures.clear(); boost::get(tx_3.vin[0]).sigs_count = 0; - DO_CALLBACK(events, "mark_invalid_tx"); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, true)); events.push_back(tx_3); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, false)); // tx_4: zero ms out keys (should FAIL) r = fill_tx_sources_and_destinations(events, blk_0r, miner_acc.get_keys(), to_addrs, amount, TESTS_DEFAULT_FEE, 0, sources, destinations, true, true, 1); @@ -1857,7 +1873,9 @@ bool multisig_and_checkpoints_bad_txs::generate(std::vector& e txb.step5_sign(sources); transaction tx_4 = txb.m_tx; DO_CALLBACK(events, "mark_invalid_tx"); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, true)); events.push_back(tx_4); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, false)); // tx_6: many ms out keys + no sigs (should pass due to CP zone) txb = AUTO_VAL_INIT(txb); @@ -1870,7 +1888,9 @@ bool multisig_and_checkpoints_bad_txs::generate(std::vector& e txb.step5_sign(sources); txb.m_tx.signatures.clear(); transaction tx_6 = txb.m_tx; + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, true)); events.push_back(tx_6); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, false)); MAKE_NEXT_BLOCK_TX1(events, blk_3, blk_2, miner_acc, tx_6); @@ -1880,7 +1900,9 @@ bool multisig_and_checkpoints_bad_txs::generate(std::vector& e transaction tx_7 = AUTO_VAL_INIT(tx_7); r = make_tx_multisig_to_key(tx_6, get_tx_out_index_by_amount(tx_6, amount), std::list({ alice_acc.get_keys() }), bob_acc.get_public_address(), tx_7); CHECK_AND_ASSERT_MES(r, false, "make_tx_multisig_to_key failed"); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, true)); events.push_back(tx_7); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, false)); MAKE_NEXT_BLOCK_TX1(events, blk_4, blk_3, miner_acc, tx_7); diff --git a/tests/core_tests/pruning_ring_signatures.cpp b/tests/core_tests/pruning_ring_signatures.cpp index 56fb5444..ec38eccb 100644 --- a/tests/core_tests/pruning_ring_signatures.cpp +++ b/tests/core_tests/pruning_ring_signatures.cpp @@ -56,6 +56,7 @@ bool generate_blockchain_with_pruned_rs(std::vector& events) REWIND_BLOCKS_N(events, blk_5, blk_4, miner_account, 30); REWIND_BLOCKS(events, blk_5r, blk_5, miner_account); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, true)); MAKE_TX_LIST_START(events, txs_blk_6, miner_account, some_account_1, MK_TEST_COINS(1), blk_5r); MAKE_TX_LIST(events, txs_blk_6, miner_account, some_account_1, MK_TEST_COINS(1), blk_5r); MAKE_TX_LIST(events, txs_blk_6, miner_account, some_account_1, MK_TEST_COINS(1), blk_5r); @@ -69,13 +70,16 @@ bool generate_blockchain_with_pruned_rs(std::vector& events) MAKE_TX_LIST(events, txs_blk_6, miner_account, some_account_1, MK_TEST_COINS(1), blk_5r); MAKE_TX_LIST(events, txs_blk_6, miner_account, some_account_1, MK_TEST_COINS(1), blk_5r); MAKE_TX_LIST(events, txs_blk_6, miner_account, some_account_1, MK_TEST_COINS(1), blk_5r); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, false)); MAKE_NEXT_BLOCK_TX_LIST(events, blk_6, blk_5r, miner_account, txs_blk_6); REWIND_BLOCKS_N(events, blk_6r, blk_6, miner_account, 20); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, true)); MAKE_TX_LIST_START(events, txs_blk_7, some_account_1, some_account_1, MK_TEST_COINS(1) + TESTS_DEFAULT_FEE, blk_6r); MAKE_TX_MIX_LIST(events, txs_blk_7, some_account_1, some_account_1, MK_TEST_COINS(1) + TESTS_DEFAULT_FEE, 3, blk_6r, std::vector()); MAKE_TX_MIX_LIST(events, txs_blk_7, some_account_1, some_account_1, MK_TEST_COINS(1) + TESTS_DEFAULT_FEE, 3, blk_6r, std::vector()); MAKE_TX_MIX_LIST(events, txs_blk_7, some_account_1, some_account_1, MK_TEST_COINS(1) + TESTS_DEFAULT_FEE, 3, blk_6r, std::vector()); + events.push_back(event_visitor_settings(event_visitor_settings::set_txs_kept_by_block, false)); MAKE_NEXT_BLOCK_TX_LIST(events, blk_7, blk_6r, miner_account, txs_blk_7); REWIND_BLOCKS(events, blk_7r, blk_7, miner_account);