diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index 139acea5..dce86020 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -242,29 +242,33 @@ TEST (active_transactions, inactive_votes_cache) ASSERT_EQ (1, node.stats.count (nano::stat::type::election, nano::stat::detail::vote_cached)); } +/** + * This test case confirms that a non final vote cannot cause an election to become confirmed + */ TEST (active_transactions, inactive_votes_cache_non_final) { nano::test::system system (1); auto & node = *system.nodes[0]; - nano::block_hash latest (node.latest (nano::dev::genesis_key.pub)); - nano::keypair key; + auto send = nano::send_block_builder () - .previous (latest) - .destination (key.pub) + .previous (nano::dev::genesis->hash ()) + .destination (nano::keypair{}.pub) .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (latest)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, 0, std::vector (1, send->hash ()))); // Non-final vote + + // Non-final vote + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, 0, std::vector (1, send->hash ())); node.vote_processor.vote (vote, std::make_shared (node, node)); ASSERT_TIMELY (5s, node.inactive_vote_cache.cache_size () == 1); + node.process_active (send); - node.block_processor.flush (); - ASSERT_TIMELY (5s, node.stats.count (nano::stat::type::election, nano::stat::detail::vote_cached) == 1); - auto election = node.active.election (send->qualified_root ()); - ASSERT_NE (nullptr, election); + std::shared_ptr election; + ASSERT_TIMELY (5s, election = node.active.election (send->qualified_root ())); + ASSERT_TIMELY_EQ (5s, node.stats.count (nano::stat::type::election, nano::stat::detail::vote_cached), 1); + ASSERT_TIMELY_EQ (5s, nano::dev::constants.genesis_amount - 100, election->tally ().begin ()->first); ASSERT_FALSE (election->confirmed ()); - ASSERT_EQ (nano::dev::constants.genesis_amount - 100, election->tally ().begin ()->first); } TEST (active_transactions, inactive_votes_cache_fork)