From 9dde6c897a781b21a219b648c6276cc7255fdc08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20W=C3=B3jcik?= <3044353+pwojcikdev@users.noreply.github.com> Date: Wed, 28 Sep 2022 02:17:04 +0200 Subject: [PATCH] Fix tests using `election_scheduler::flush()` (#3961) * Fix tests using election_scheduler::flush * Fix more tests using `election_scheduler::flush` * Remove flush calls * One more flush removed --- nano/core_test/active_transactions.cpp | 14 +++-- nano/core_test/bootstrap.cpp | 1 - nano/core_test/conflicts.cpp | 2 +- nano/core_test/election.cpp | 6 +-- nano/core_test/election_scheduler.cpp | 5 +- nano/core_test/ledger.cpp | 10 ++-- nano/core_test/node.cpp | 74 +++++++++++--------------- 7 files changed, 47 insertions(+), 65 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index 19f33602..e4703e7c 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -406,7 +406,7 @@ TEST (active_transactions, DISABLED_inactive_votes_cache_multiple_votes) ASSERT_TIMELY (5s, node.inactive_vote_cache.find (send1->hash ())->voters.size () == 2); ASSERT_EQ (1, node.inactive_vote_cache.cache_size ()); node.scheduler.activate (nano::dev::genesis_key.pub, node.store.tx_begin_read ()); - node.scheduler.flush (); + ASSERT_TIMELY (5s, node.active.election (send1->qualified_root ())); auto election = node.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (3, election->votes ().size ()); // 2 votes and 1 default not_an_acount @@ -623,7 +623,7 @@ TEST (active_transactions, dropped_cleanup) ASSERT_TRUE (node.network.publish_filter.apply (block_bytes.data (), block_bytes.size ())); node.block_confirm (nano::dev::genesis); - node.scheduler.flush (); + ASSERT_TIMELY (5s, node.active.election (nano::dev::genesis->qualified_root ())); auto election = node.active.election (nano::dev::genesis->qualified_root ()); ASSERT_NE (nullptr, election); @@ -647,7 +647,7 @@ TEST (active_transactions, dropped_cleanup) // Repeat test for a confirmed election ASSERT_TRUE (node.network.publish_filter.apply (block_bytes.data (), block_bytes.size ())); node.block_confirm (nano::dev::genesis); - node.scheduler.flush (); + ASSERT_TIMELY (5s, node.active.election (nano::dev::genesis->qualified_root ())); election = node.active.election (nano::dev::genesis->qualified_root ()); ASSERT_NE (nullptr, election); election->force_confirm (); @@ -1018,8 +1018,7 @@ TEST (active_transactions, DISABLED_confirm_new) .build_shared (); node1.process_active (send); node1.block_processor.flush (); - node1.scheduler.flush (); - ASSERT_EQ (1, node1.active.size ()); + ASSERT_TIMELY_EQ (5s, 1, node1.active.size ()); auto & node2 = *system.add_node (); // Add key to node2 system.wallet (1)->insert_adhoc (nano::dev::genesis_key.prv); @@ -1059,8 +1058,7 @@ TEST (active_transactions, conflicting_block_vote_existing_election) auto vote_fork (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, std::vector{ fork->hash () })); ASSERT_EQ (nano::process_result::progress, node.process_local (send).code); - node.scheduler.flush (); - ASSERT_EQ (1, node.active.size ()); + ASSERT_TIMELY_EQ (5s, 1, node.active.size ()); // Vote for conflicting block, but the block does not yet exist in the ledger node.active.vote (vote_fork); @@ -1136,7 +1134,7 @@ TEST (active_transactions, activate_account_chain) ASSERT_EQ (nano::process_result::progress, node.process (*receive).code); node.scheduler.activate (nano::dev::genesis_key.pub, node.store.tx_begin_read ()); - node.scheduler.flush (); + ASSERT_TIMELY (5s, node.active.election (send->qualified_root ())); auto election1 = node.active.election (send->qualified_root ()); ASSERT_EQ (1, node.active.size ()); ASSERT_EQ (1, election1->blocks ().count (send->hash ())); diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index 748d9b0e..2368d3b9 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -1955,7 +1955,6 @@ TEST (bulk, offline_send) ASSERT_NE (nullptr, send1); ASSERT_NE (std::numeric_limits::max (), node1->balance (nano::dev::genesis_key.pub)); node1->block_processor.flush (); - node1->scheduler.flush (); // Wait to finish election background tasks ASSERT_TIMELY (10s, node1->active.empty ()); ASSERT_TIMELY (10s, node1->block_confirmed (send1->hash ())); diff --git a/nano/core_test/conflicts.cpp b/nano/core_test/conflicts.cpp index 7060fa52..c85117d5 100644 --- a/nano/core_test/conflicts.cpp +++ b/nano/core_test/conflicts.cpp @@ -26,7 +26,7 @@ TEST (conflicts, start_stop) ASSERT_EQ (nano::process_result::progress, node1.process (*send1).code); ASSERT_EQ (0, node1.active.size ()); node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); - node1.scheduler.flush (); + ASSERT_TIMELY (5s, node1.active.election (send1->qualified_root ())); auto election1 = node1.active.election (send1->qualified_root ()); ASSERT_EQ (1, node1.active.size ()); ASSERT_NE (nullptr, election1); diff --git a/nano/core_test/election.cpp b/nano/core_test/election.cpp index 0c221f49..d3f2edd6 100644 --- a/nano/core_test/election.cpp +++ b/nano/core_test/election.cpp @@ -11,7 +11,7 @@ TEST (election, construction) nano::test::system system (1); auto & node = *system.nodes[0]; node.block_confirm (nano::dev::genesis); - node.scheduler.flush (); + ASSERT_TIMELY (5s, node.active.election (nano::dev::genesis->qualified_root ())); auto election = node.active.election (nano::dev::genesis->qualified_root ()); election->transition_active (); } @@ -142,7 +142,7 @@ TEST (election, quorum_minimum_confirm_success) node1.process_active (send1); node1.block_processor.flush (); node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); - node1.scheduler.flush (); + ASSERT_TIMELY (5s, node1.active.election (send1->qualified_root ())); auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (1, election->blocks ().size ()); @@ -175,7 +175,7 @@ TEST (election, quorum_minimum_confirm_fail) node1.process_active (send1); node1.block_processor.flush (); node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); - node1.scheduler.flush (); + ASSERT_TIMELY (5s, node1.active.election (send1->qualified_root ())); auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (1, election->blocks ().size ()); diff --git a/nano/core_test/election_scheduler.cpp b/nano/core_test/election_scheduler.cpp index dcc3f20c..75cea320 100644 --- a/nano/core_test/election_scheduler.cpp +++ b/nano/core_test/election_scheduler.cpp @@ -28,7 +28,7 @@ TEST (election_scheduler, activate_one_timely) .build_shared (); system.nodes[0]->ledger.process (system.nodes[0]->store.tx_begin_write (), *send1); system.nodes[0]->scheduler.activate (nano::dev::genesis_key.pub, system.nodes[0]->store.tx_begin_read ()); - ASSERT_TIMELY (1s, system.nodes[0]->active.election (send1->qualified_root ())); + ASSERT_TIMELY (5s, system.nodes[0]->active.election (send1->qualified_root ())); } TEST (election_scheduler, activate_one_flush) @@ -46,8 +46,7 @@ TEST (election_scheduler, activate_one_flush) .build_shared (); system.nodes[0]->ledger.process (system.nodes[0]->store.tx_begin_write (), *send1); system.nodes[0]->scheduler.activate (nano::dev::genesis_key.pub, system.nodes[0]->store.tx_begin_read ()); - system.nodes[0]->scheduler.flush (); - ASSERT_NE (nullptr, system.nodes[0]->active.election (send1->qualified_root ())); + ASSERT_TIMELY (5s, system.nodes[0]->active.election (send1->qualified_root ())); } /** diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 70cd170e..dc8f9406 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -915,7 +915,7 @@ TEST (votes, check_signature) ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *send1).code); } node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); - node1.scheduler.flush (); + ASSERT_TIMELY (5s, node1.active.election (send1->qualified_root ())); auto election1 = node1.active.election (send1->qualified_root ()); ASSERT_EQ (1, election1->votes ().size ()); auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, 0, std::vector{ send1->hash () })); @@ -944,7 +944,7 @@ TEST (votes, add_one) auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *send1).code); node1.block_confirm (send1); - node1.scheduler.flush (); + ASSERT_TIMELY (5s, node1.active.election (send1->qualified_root ())); auto election1 = node1.active.election (send1->qualified_root ()); ASSERT_EQ (1, election1->votes ().size ()); auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, 0, std::vector{ send1->hash () })); @@ -986,7 +986,7 @@ TEST (votes, add_existing) node1.work_generate_blocking (*send1); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (node1.store.tx_begin_write (), *send1).code); node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); - node1.scheduler.flush (); + ASSERT_TIMELY (5s, node1.active.election (send1->qualified_root ())); auto election1 = node1.active.election (send1->qualified_root ()); auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, 0, std::vector{ send1->hash () })); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); @@ -1045,7 +1045,7 @@ TEST (votes, add_old) auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *send1).code); node1.block_confirm (send1); - node1.scheduler.flush (); + ASSERT_TIMELY (5s, node1.active.election (send1->qualified_root ())); auto election1 = node1.active.election (send1->qualified_root ()); auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, 0, std::vector{ send1->hash () })); auto channel (std::make_shared (node1, node1)); @@ -1151,7 +1151,7 @@ TEST (votes, add_cooldown) auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *send1).code); node1.block_confirm (send1); - node1.scheduler.flush (); + ASSERT_TIMELY (5s, node1.active.election (send1->qualified_root ())); auto election1 = node1.active.election (send1->qualified_root ()); auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, 0, std::vector{ send1->hash () })); auto channel (std::make_shared (node1, node1)); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 2874e292..0afa6270 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -602,8 +602,7 @@ TEST (node, fork_publish) node1.work_generate_blocking (*send2); node1.process_active (send1); node1.block_processor.flush (); - node1.scheduler.flush (); - ASSERT_EQ (1, node1.active.size ()); + ASSERT_TIMELY_EQ (5s, 1, node1.active.size ()); auto election (node1.active.election (send1->qualified_root ())); ASSERT_NE (nullptr, election); // Wait until the genesis rep activated & makes vote @@ -683,12 +682,10 @@ TEST (node, fork_keep) .build_shared (); node1.process_active (send1); node1.block_processor.flush (); - node1.scheduler.flush (); node2.process_active (send1); node2.block_processor.flush (); - node2.scheduler.flush (); - ASSERT_EQ (1, node1.active.size ()); - ASSERT_EQ (1, node2.active.size ()); + ASSERT_TIMELY_EQ (5s, 1, node1.active.size ()); + ASSERT_TIMELY_EQ (5s, 1, node2.active.size ()); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); node1.process_active (send2); node1.block_processor.flush (); @@ -740,13 +737,10 @@ TEST (node, fork_flip) node1.network.inbound (publish1, ignored_channel); node1.block_processor.flush (); - node1.scheduler.flush (); - node2.network.inbound (publish2, ignored_channel); node2.block_processor.flush (); - node2.scheduler.flush (); - ASSERT_EQ (1, node1.active.size ()); - ASSERT_EQ (1, node2.active.size ()); + ASSERT_TIMELY_EQ (5s, 1, node1.active.size ()); + ASSERT_TIMELY_EQ (5s, 1, node2.active.size ()); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); node1.network.inbound (publish2, ignored_channel); node1.block_processor.flush (); @@ -810,11 +804,9 @@ TEST (node, fork_multi_flip) node2.network.inbound (publish2, channel2); node2.network.inbound (publish3, channel2); node1.block_processor.flush (); - node1.scheduler.flush (); node2.block_processor.flush (); - node2.scheduler.flush (); - ASSERT_EQ (1, node1.active.size ()); - ASSERT_EQ (1, node2.active.size ()); + ASSERT_TIMELY_EQ (5s, 1, node1.active.size ()); + ASSERT_TIMELY_EQ (5s, 1, node2.active.size ()); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); node1.network.inbound (publish2, channel1); @@ -822,6 +814,7 @@ TEST (node, fork_multi_flip) node1.block_processor.flush (); node2.network.inbound (publish1, channel2); node2.block_processor.flush (); + ASSERT_TIMELY (5s, node2.active.election (nano::qualified_root (nano::dev::genesis->hash (), nano::dev::genesis->hash ()))); auto election1 (node2.active.election (nano::qualified_root (nano::dev::genesis->hash (), nano::dev::genesis->hash ()))); ASSERT_NE (nullptr, election1); ASSERT_EQ (1, election1->votes ().size ()); @@ -1424,7 +1417,7 @@ TEST (node, rep_self_vote) auto & active = node0->active; auto & scheduler = node0->scheduler; scheduler.activate (nano::dev::genesis_key.pub, node0->store.tx_begin_read ()); - scheduler.flush (); + ASSERT_TIMELY (5s, active.election (block0->qualified_root ())); auto election1 = active.election (block0->qualified_root ()); ASSERT_NE (nullptr, election1); // Wait until representatives are activated & make vote @@ -2117,8 +2110,7 @@ TEST (node, online_reps_election) .build_shared (); node1.process_active (send1); node1.block_processor.flush (); - node1.scheduler.flush (); - ASSERT_EQ (1, node1.active.size ()); + ASSERT_TIMELY_EQ (5s, 1, node1.active.size ()); // Process vote for ongoing election auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), 0, std::vector{ send1->hash () }); ASSERT_EQ (0, node1.online_reps.online ()); @@ -3612,10 +3604,9 @@ TEST (node, rollback_vote_self) ASSERT_EQ (weight, node.weight (key.pub)); node.process_active (send2); node.block_processor.flush (); - node.scheduler.flush (); node.process_active (fork); node.block_processor.flush (); - node.scheduler.flush (); + ASSERT_TIMELY (5s, node.active.election (send2->qualified_root ())); election = node.active.election (send2->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (2, election->blocks ().size ()); @@ -4167,7 +4158,7 @@ TEST (node, deferred_dependent_elections) node.process_local (send1); node.block_processor.flush (); - node.scheduler.flush (); + ASSERT_TIMELY (5s, node.active.election (send1->qualified_root ())); auto election_send1 = node.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election_send1); @@ -4175,20 +4166,18 @@ TEST (node, deferred_dependent_elections) node.process_local (open); node.process_local (send2); node.block_processor.flush (); - node.scheduler.flush (); - ASSERT_TRUE (node.block (open->hash ())); - ASSERT_TRUE (node.block (send2->hash ())); - ASSERT_FALSE (node.active.active (open->qualified_root ())); - ASSERT_FALSE (node.active.active (send2->qualified_root ())); - ASSERT_TIMELY (2s, node2.block (open->hash ())); - ASSERT_TIMELY (2s, node2.block (send2->hash ())); + ASSERT_TIMELY (5s, node.block (open->hash ())); + ASSERT_TIMELY (5s, node.block (send2->hash ())); + ASSERT_NEVER (1s, node.active.active (open->qualified_root ())); + ASSERT_NEVER (1s, node.active.active (send2->qualified_root ())); + ASSERT_TIMELY (5s, node2.block (open->hash ())); + ASSERT_TIMELY (5s, node2.block (send2->hash ())); // Re-processing older blocks with updated work also does not start an election node.work_generate_blocking (*open, nano::dev::network_params.work.difficulty (*open) + 1); node.process_local (open); node.block_processor.flush (); - node.scheduler.flush (); - ASSERT_FALSE (node.active.active (open->qualified_root ())); + ASSERT_NEVER (1s, node.active.active (open->qualified_root ())); // It is however possible to manually start an election from elsewhere node.block_confirm (open); @@ -4201,8 +4190,7 @@ TEST (node, deferred_dependent_elections) ASSERT_FALSE (node.active.active (open->qualified_root ())); node.process_local (open); node.block_processor.flush (); - node.scheduler.flush (); - ASSERT_FALSE (node.active.active (open->qualified_root ())); + ASSERT_NEVER (1s, node.active.active (open->qualified_root ())); // Drop both elections node.active.erase (*open); @@ -4212,8 +4200,9 @@ TEST (node, deferred_dependent_elections) // Confirming send1 will automatically start elections for the dependents election_send1->force_confirm (); - ASSERT_TIMELY (2s, node.block_confirmed (send1->hash ())); - ASSERT_TIMELY (2s, node.active.active (open->qualified_root ()) && node.active.active (send2->qualified_root ())); + ASSERT_TIMELY (5s, node.block_confirmed (send1->hash ())); + ASSERT_TIMELY (5s, node.active.active (open->qualified_root ())); + ASSERT_TIMELY (5s, node.active.active (send2->qualified_root ())); auto election_open = node.active.election (open->qualified_root ()); ASSERT_NE (nullptr, election_open); auto election_send2 = node.active.election (send2->qualified_root ()); @@ -4223,29 +4212,26 @@ TEST (node, deferred_dependent_elections) ASSERT_EQ (nano::process_result::progress, node.process (*receive).code); ASSERT_FALSE (node.active.active (receive->qualified_root ())); election_open->force_confirm (); - ASSERT_TIMELY (2s, node.block_confirmed (open->hash ())); + ASSERT_TIMELY (5s, node.block_confirmed (open->hash ())); ASSERT_FALSE (node.ledger.dependents_confirmed (node.store.tx_begin_read (), *receive)); - std::this_thread::sleep_for (500ms); - ASSERT_FALSE (node.active.active (receive->qualified_root ())); + ASSERT_NEVER (1s, node.active.active (receive->qualified_root ())); ASSERT_FALSE (node.ledger.rollback (node.store.tx_begin_write (), receive->hash ())); ASSERT_FALSE (node.block (receive->hash ())); node.process_local (receive); node.block_processor.flush (); - node.scheduler.flush (); - ASSERT_TRUE (node.block (receive->hash ())); - ASSERT_FALSE (node.active.active (receive->qualified_root ())); + ASSERT_TIMELY (5s, node.block (receive->hash ())); + ASSERT_NEVER (1s, node.active.active (receive->qualified_root ())); // Processing a fork will also not start an election ASSERT_EQ (nano::process_result::fork, node.process (*fork).code); node.process_local (fork); node.block_processor.flush (); - node.scheduler.flush (); - ASSERT_FALSE (node.active.active (receive->qualified_root ())); + ASSERT_NEVER (1s, node.active.active (receive->qualified_root ())); // Confirming the other dependency allows starting an election from a fork election_send2->force_confirm (); - ASSERT_TIMELY (2s, node.block_confirmed (send2->hash ())); - ASSERT_TIMELY (2s, node.active.active (receive->qualified_root ())); + ASSERT_TIMELY (5s, node.block_confirmed (send2->hash ())); + ASSERT_TIMELY (5s, node.active.active (receive->qualified_root ())); } }