Reenable and fix active_transactions.inactive_votes_cache_multiple_votes (#4096)
The test active_transactions.inactive_votes_cache_multiple_votes was disabled due to being unreliable. I have re-enabled it and fixed it to make it reliable. Resolves #3632
This commit is contained in:
		
					parent
					
						
							
								cd72cc9225
							
						
					
				
			
			
				commit
				
					
						8c2e46bc49
					
				
			
		
					 1 changed files with 15 additions and 14 deletions
				
			
		| 
						 | 
				
			
			@ -367,25 +367,23 @@ TEST (active_transactions, inactive_votes_cache_existing_vote)
 | 
			
		|||
	ASSERT_EQ (0, node.stats.count (nano::stat::type::election, nano::stat::detail::vote_cached));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Test disabled because it's failing intermittently.
 | 
			
		||||
// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3629
 | 
			
		||||
// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3632
 | 
			
		||||
TEST (active_transactions, DISABLED_inactive_votes_cache_multiple_votes)
 | 
			
		||||
TEST (active_transactions, inactive_votes_cache_multiple_votes)
 | 
			
		||||
{
 | 
			
		||||
	nano::test::system system;
 | 
			
		||||
	nano::node_config node_config (nano::test::get_available_port (), system.logging);
 | 
			
		||||
	node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled;
 | 
			
		||||
	auto & node = *system.add_node (node_config);
 | 
			
		||||
	nano::block_hash latest (node.latest (nano::dev::genesis_key.pub));
 | 
			
		||||
	nano::keypair key1;
 | 
			
		||||
	nano::block_builder builder;
 | 
			
		||||
 | 
			
		||||
	auto send1 = builder.send ()
 | 
			
		||||
				 .previous (latest)
 | 
			
		||||
				 .previous (nano::dev::genesis->hash ())
 | 
			
		||||
				 .destination (key1.pub)
 | 
			
		||||
				 .balance (nano::dev::constants.genesis_amount - 100 * nano::Gxrb_ratio)
 | 
			
		||||
				 .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 send2 = builder.send ()
 | 
			
		||||
				 .previous (send1->hash ())
 | 
			
		||||
				 .destination (key1.pub)
 | 
			
		||||
| 
						 | 
				
			
			@ -393,6 +391,7 @@ TEST (active_transactions, DISABLED_inactive_votes_cache_multiple_votes)
 | 
			
		|||
				 .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub)
 | 
			
		||||
				 .work (*system.work.generate (send1->hash ()))
 | 
			
		||||
				 .build_shared ();
 | 
			
		||||
 | 
			
		||||
	auto open = builder.state ()
 | 
			
		||||
				.account (key1.pub)
 | 
			
		||||
				.previous (0)
 | 
			
		||||
| 
						 | 
				
			
			@ -402,22 +401,24 @@ TEST (active_transactions, DISABLED_inactive_votes_cache_multiple_votes)
 | 
			
		|||
				.sign (key1.prv, key1.pub)
 | 
			
		||||
				.work (*system.work.generate (key1.pub))
 | 
			
		||||
				.build_shared ();
 | 
			
		||||
	node.block_processor.add (send1);
 | 
			
		||||
	node.block_processor.add (send2);
 | 
			
		||||
	node.block_processor.add (open);
 | 
			
		||||
	node.block_processor.flush ();
 | 
			
		||||
 | 
			
		||||
	// put the blocks in the ledger witout triggering an election
 | 
			
		||||
	ASSERT_TRUE (nano::test::process (node, { send1, send2, open }));
 | 
			
		||||
	ASSERT_TIMELY (5s, nano::test::exists (node, { send1, send2, open }));
 | 
			
		||||
 | 
			
		||||
	// Process votes
 | 
			
		||||
	auto vote1 (std::make_shared<nano::vote> (key1.pub, key1.prv, 0, 0, std::vector<nano::block_hash> (1, send1->hash ())));
 | 
			
		||||
	node.vote_processor.vote (vote1, std::make_shared<nano::transport::inproc::channel> (node, node));
 | 
			
		||||
 | 
			
		||||
	auto vote2 (std::make_shared<nano::vote> (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, 0, std::vector<nano::block_hash> (1, send1->hash ())));
 | 
			
		||||
	node.vote_processor.vote (vote2, std::make_shared<nano::transport::inproc::channel> (node, node));
 | 
			
		||||
 | 
			
		||||
	ASSERT_TIMELY (5s, node.inactive_vote_cache.find (send1->hash ()));
 | 
			
		||||
	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 ());
 | 
			
		||||
	ASSERT_TIMELY (5s, node.active.election (send1->qualified_root ()));
 | 
			
		||||
	auto election = node.active.election (send1->qualified_root ());
 | 
			
		||||
	ASSERT_NE (nullptr, election);
 | 
			
		||||
	std::shared_ptr<nano::election> election;
 | 
			
		||||
	ASSERT_TIMELY (5s, election = node.active.election (send1->qualified_root ()));
 | 
			
		||||
	ASSERT_EQ (3, election->votes ().size ()); // 2 votes and 1 default not_an_acount
 | 
			
		||||
	ASSERT_EQ (2, node.stats.count (nano::stat::type::election, nano::stat::detail::vote_cached));
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue