Keep io context running when stopping tests

This commit is contained in:
Piotr Wójcik 2024-03-26 11:26:41 +01:00
commit b5ae8b9f53
3 changed files with 17 additions and 29 deletions

View file

@ -296,7 +296,6 @@ TEST (bootstrap_processor, process_none)
node1->bootstrap_initiator.bootstrap (system.nodes[0]->network.endpoint (), false); node1->bootstrap_initiator.bootstrap (system.nodes[0]->network.endpoint (), false);
ASSERT_TIMELY (5s, done); ASSERT_TIMELY (5s, done);
node1->stop ();
} }
// Bootstrap can pull one basic block // Bootstrap can pull one basic block
@ -320,7 +319,6 @@ TEST (bootstrap_processor, process_one)
ASSERT_NE (node0->latest (nano::dev::genesis_key.pub), node1->latest (nano::dev::genesis_key.pub)); ASSERT_NE (node0->latest (nano::dev::genesis_key.pub), node1->latest (nano::dev::genesis_key.pub));
node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false);
ASSERT_TIMELY_EQ (10s, node1->latest (nano::dev::genesis_key.pub), node0->latest (nano::dev::genesis_key.pub)); ASSERT_TIMELY_EQ (10s, node1->latest (nano::dev::genesis_key.pub), node0->latest (nano::dev::genesis_key.pub));
node1->stop ();
} }
TEST (bootstrap_processor, process_two) TEST (bootstrap_processor, process_two)
@ -341,7 +339,6 @@ TEST (bootstrap_processor, process_two)
ASSERT_NE (node1->latest (nano::dev::genesis_key.pub), node0->latest (nano::dev::genesis_key.pub)); // nodes should be out of sync here ASSERT_NE (node1->latest (nano::dev::genesis_key.pub), node0->latest (nano::dev::genesis_key.pub)); // nodes should be out of sync here
node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); // bootstrap triggered node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); // bootstrap triggered
ASSERT_TIMELY_EQ (5s, node1->latest (nano::dev::genesis_key.pub), node0->latest (nano::dev::genesis_key.pub)); // nodes should sync up ASSERT_TIMELY_EQ (5s, node1->latest (nano::dev::genesis_key.pub), node0->latest (nano::dev::genesis_key.pub)); // nodes should sync up
node1->stop ();
} }
// Bootstrap can pull universal blocks // Bootstrap can pull universal blocks
@ -387,7 +384,6 @@ TEST (bootstrap_processor, process_state)
ASSERT_NE (node1->latest (nano::dev::genesis_key.pub), block2->hash ()); ASSERT_NE (node1->latest (nano::dev::genesis_key.pub), block2->hash ());
node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false);
ASSERT_TIMELY_EQ (5s, node1->latest (nano::dev::genesis_key.pub), block2->hash ()); ASSERT_TIMELY_EQ (5s, node1->latest (nano::dev::genesis_key.pub), block2->hash ());
node1->stop ();
} }
TEST (bootstrap_processor, process_new) TEST (bootstrap_processor, process_new)
@ -426,7 +422,6 @@ TEST (bootstrap_processor, process_new)
auto node3 = system.make_disconnected_node (); auto node3 = system.make_disconnected_node ();
node3->bootstrap_initiator.bootstrap (node1->network.endpoint (), false); node3->bootstrap_initiator.bootstrap (node1->network.endpoint (), false);
ASSERT_TIMELY_EQ (5s, node3->balance (key2.pub), amount); ASSERT_TIMELY_EQ (5s, node3->balance (key2.pub), amount);
node3->stop ();
} }
TEST (bootstrap_processor, pull_diamond) TEST (bootstrap_processor, pull_diamond)
@ -478,7 +473,6 @@ TEST (bootstrap_processor, pull_diamond)
auto node1 = system.make_disconnected_node (); auto node1 = system.make_disconnected_node ();
node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false);
ASSERT_TIMELY_EQ (5s, node1->balance (nano::dev::genesis_key.pub), 100); ASSERT_TIMELY_EQ (5s, node1->balance (nano::dev::genesis_key.pub), 100);
node1->stop ();
} }
TEST (bootstrap_processor, DISABLED_pull_requeue_network_error) TEST (bootstrap_processor, DISABLED_pull_requeue_network_error)
@ -517,7 +511,6 @@ TEST (bootstrap_processor, DISABLED_pull_requeue_network_error)
++attempt->pulling; ++attempt->pulling;
node1->bootstrap_initiator.connections->pulls.emplace_back (nano::dev::genesis_key.pub, send1->hash (), nano::dev::genesis->hash (), attempt->incremental_id); node1->bootstrap_initiator.connections->pulls.emplace_back (nano::dev::genesis_key.pub, send1->hash (), nano::dev::genesis->hash (), attempt->incremental_id);
node1->bootstrap_initiator.connections->request_pull (lock); node1->bootstrap_initiator.connections->request_pull (lock);
node2->stop ();
} }
ASSERT_TIMELY (5s, attempt == nullptr || attempt->requeued_pulls == 1); ASSERT_TIMELY (5s, attempt == nullptr || attempt->requeued_pulls == 1);
ASSERT_EQ (0, node1->stats.count (nano::stat::type::bootstrap, nano::stat::detail::bulk_pull_failed_account, nano::stat::dir::in)); // Requeue is not increasing failed attempts ASSERT_EQ (0, node1->stats.count (nano::stat::type::bootstrap, nano::stat::detail::bulk_pull_failed_account, nano::stat::dir::in)); // Requeue is not increasing failed attempts
@ -586,7 +579,6 @@ TEST (bootstrap_processor, push_diamond)
auto node2 = system.add_node (config, flags); auto node2 = system.add_node (config, flags);
node1->bootstrap_initiator.bootstrap (node2->network.endpoint (), false); node1->bootstrap_initiator.bootstrap (node2->network.endpoint (), false);
ASSERT_TIMELY_EQ (5s, node2->balance (nano::dev::genesis_key.pub), 100); ASSERT_TIMELY_EQ (5s, node2->balance (nano::dev::genesis_key.pub), 100);
node1->stop ();
} }
TEST (bootstrap_processor, push_diamond_pruning) TEST (bootstrap_processor, push_diamond_pruning)
@ -677,7 +669,6 @@ TEST (bootstrap_processor, push_diamond_pruning)
node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false);
ASSERT_TIMELY_EQ (5s, node0->balance (nano::dev::genesis_key.pub), 100); ASSERT_TIMELY_EQ (5s, node0->balance (nano::dev::genesis_key.pub), 100);
ASSERT_TIMELY_EQ (5s, node1->balance (nano::dev::genesis_key.pub), 100); ASSERT_TIMELY_EQ (5s, node1->balance (nano::dev::genesis_key.pub), 100);
node1->stop ();
} }
TEST (bootstrap_processor, push_one) TEST (bootstrap_processor, push_one)
@ -700,7 +691,6 @@ TEST (bootstrap_processor, push_one)
node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false);
ASSERT_TIMELY_EQ (5s, node0->balance (nano::dev::genesis_key.pub), genesis_balance - 100); ASSERT_TIMELY_EQ (5s, node0->balance (nano::dev::genesis_key.pub), genesis_balance - 100);
node1->stop ();
} }
TEST (bootstrap_processor, lazy_hash) TEST (bootstrap_processor, lazy_hash)
@ -775,7 +765,6 @@ TEST (bootstrap_processor, lazy_hash)
} }
// Check processed blocks // Check processed blocks
ASSERT_TIMELY (10s, node1->balance (key2.pub) != 0); ASSERT_TIMELY (10s, node1->balance (key2.pub) != 0);
node1->stop ();
} }
TEST (bootstrap_processor, lazy_hash_bootstrap_id) TEST (bootstrap_processor, lazy_hash_bootstrap_id)
@ -850,7 +839,6 @@ TEST (bootstrap_processor, lazy_hash_bootstrap_id)
} }
// Check processed blocks // Check processed blocks
ASSERT_TIMELY (10s, node1->balance (key2.pub) != 0); ASSERT_TIMELY (10s, node1->balance (key2.pub) != 0);
node1->stop ();
} }
TEST (bootstrap_processor, lazy_hash_pruning) TEST (bootstrap_processor, lazy_hash_pruning)
@ -1003,7 +991,6 @@ TEST (bootstrap_processor, lazy_hash_pruning)
ASSERT_TIMELY_EQ (5s, node1->ledger.cache.block_count, 9); ASSERT_TIMELY_EQ (5s, node1->ledger.cache.block_count, 9);
ASSERT_TIMELY (5s, node1->balance (key2.pub) != 0); ASSERT_TIMELY (5s, node1->balance (key2.pub) != 0);
ASSERT_TIMELY (5s, !node1->bootstrap_initiator.in_progress ()); ASSERT_TIMELY (5s, !node1->bootstrap_initiator.in_progress ());
node1->stop ();
} }
TEST (bootstrap_processor, lazy_max_pull_count) TEST (bootstrap_processor, lazy_max_pull_count)
@ -1105,7 +1092,6 @@ TEST (bootstrap_processor, lazy_max_pull_count)
node1->bootstrap_initiator.bootstrap_lazy (change3->hash ()); node1->bootstrap_initiator.bootstrap_lazy (change3->hash ());
// Check processed blocks // Check processed blocks
ASSERT_TIMELY (10s, node1->block (change3->hash ())); ASSERT_TIMELY (10s, node1->block (change3->hash ()));
node1->stop ();
} }
TEST (bootstrap_processor, lazy_unclear_state_link) TEST (bootstrap_processor, lazy_unclear_state_link)
@ -1174,7 +1160,6 @@ TEST (bootstrap_processor, lazy_unclear_state_link)
node2->bootstrap_initiator.bootstrap_lazy (receive->hash ()); node2->bootstrap_initiator.bootstrap_lazy (receive->hash ());
ASSERT_TIMELY (5s, nano::test::exists (*node2, { send1, send2, open, receive })); ASSERT_TIMELY (5s, nano::test::exists (*node2, { send1, send2, open, receive }));
ASSERT_EQ (0, node2->stats.count (nano::stat::type::bootstrap, nano::stat::detail::bulk_pull_failed_account, nano::stat::dir::in)); ASSERT_EQ (0, node2->stats.count (nano::stat::type::bootstrap, nano::stat::detail::bulk_pull_failed_account, nano::stat::dir::in));
node2->stop ();
} }
TEST (bootstrap_processor, lazy_unclear_state_link_not_existing) TEST (bootstrap_processor, lazy_unclear_state_link_not_existing)
@ -1233,7 +1218,6 @@ TEST (bootstrap_processor, lazy_unclear_state_link_not_existing)
ASSERT_TIMELY (15s, !node2->bootstrap_initiator.in_progress ()); ASSERT_TIMELY (15s, !node2->bootstrap_initiator.in_progress ());
ASSERT_TIMELY (15s, nano::test::block_or_pruned_all_exists (*node2, { send1, open, send2 })); ASSERT_TIMELY (15s, nano::test::block_or_pruned_all_exists (*node2, { send1, open, send2 }));
ASSERT_EQ (1, node2->stats.count (nano::stat::type::bootstrap, nano::stat::detail::bulk_pull_failed_account, nano::stat::dir::in)); ASSERT_EQ (1, node2->stats.count (nano::stat::type::bootstrap, nano::stat::detail::bulk_pull_failed_account, nano::stat::dir::in));
node2->stop ();
} }
TEST (bootstrap_processor, lazy_destinations) TEST (bootstrap_processor, lazy_destinations)
@ -1312,7 +1296,6 @@ TEST (bootstrap_processor, lazy_destinations)
ASSERT_TIMELY (5s, node2->ledger.block_or_pruned_exists (send2->hash ())); ASSERT_TIMELY (5s, node2->ledger.block_or_pruned_exists (send2->hash ()));
ASSERT_FALSE (node2->ledger.block_or_pruned_exists (open->hash ())); ASSERT_FALSE (node2->ledger.block_or_pruned_exists (open->hash ()));
ASSERT_FALSE (node2->ledger.block_or_pruned_exists (state_open->hash ())); ASSERT_FALSE (node2->ledger.block_or_pruned_exists (state_open->hash ()));
node2->stop ();
} }
TEST (bootstrap_processor, lazy_pruning_missing_block) TEST (bootstrap_processor, lazy_pruning_missing_block)
@ -1421,7 +1404,6 @@ TEST (bootstrap_processor, lazy_pruning_missing_block)
ASSERT_TIMELY_EQ (5s, 3, node2->ledger.cache.block_count); ASSERT_TIMELY_EQ (5s, 3, node2->ledger.cache.block_count);
ASSERT_TIMELY (5s, nano::test::exists (*node2, { send1, send2 })); ASSERT_TIMELY (5s, nano::test::exists (*node2, { send1, send2 }));
ASSERT_TRUE (nano::test::block_or_pruned_none_exists (*node2, { open, state_open })); ASSERT_TRUE (nano::test::block_or_pruned_none_exists (*node2, { open, state_open }));
node2->stop ();
} }
TEST (bootstrap_processor, lazy_cancel) TEST (bootstrap_processor, lazy_cancel)
@ -1456,7 +1438,6 @@ TEST (bootstrap_processor, lazy_cancel)
} }
// Cancel failing lazy bootstrap // Cancel failing lazy bootstrap
ASSERT_TIMELY (10s, !node1->bootstrap_initiator.in_progress ()); ASSERT_TIMELY (10s, !node1->bootstrap_initiator.in_progress ());
node1->stop ();
} }
TEST (bootstrap_processor, wallet_lazy_frontier) TEST (bootstrap_processor, wallet_lazy_frontier)
@ -1537,7 +1518,6 @@ TEST (bootstrap_processor, wallet_lazy_frontier)
} }
// Check processed blocks // Check processed blocks
ASSERT_TIMELY (10s, node1->ledger.block_or_pruned_exists (receive2->hash ())); ASSERT_TIMELY (10s, node1->ledger.block_or_pruned_exists (receive2->hash ()));
node1->stop ();
} }
TEST (bootstrap_processor, wallet_lazy_pending) TEST (bootstrap_processor, wallet_lazy_pending)
@ -1684,7 +1664,6 @@ TEST (bootstrap_processor, multiple_attempts)
ASSERT_TIMELY (10s, node2->balance (key2.pub) != 0); ASSERT_TIMELY (10s, node2->balance (key2.pub) != 0);
// Check attempts finish // Check attempts finish
ASSERT_TIMELY_EQ (5s, node2->bootstrap_initiator.attempts.size (), 0); ASSERT_TIMELY_EQ (5s, node2->bootstrap_initiator.attempts.size (), 0);
node2->stop ();
} }
TEST (frontier_req_response, DISABLED_destruction) TEST (frontier_req_response, DISABLED_destruction)
@ -1996,7 +1975,6 @@ TEST (bulk, genesis)
node2->bootstrap_initiator.bootstrap (node1->network.endpoint (), false); node2->bootstrap_initiator.bootstrap (node1->network.endpoint (), false);
ASSERT_TIMELY_EQ (10s, node2->latest (nano::dev::genesis_key.pub), node1->latest (nano::dev::genesis_key.pub)); ASSERT_TIMELY_EQ (10s, node2->latest (nano::dev::genesis_key.pub), node1->latest (nano::dev::genesis_key.pub));
ASSERT_EQ (node2->latest (nano::dev::genesis_key.pub), node1->latest (nano::dev::genesis_key.pub)); ASSERT_EQ (node2->latest (nano::dev::genesis_key.pub), node1->latest (nano::dev::genesis_key.pub));
node2->stop ();
} }
TEST (bulk, offline_send) TEST (bulk, offline_send)
@ -2036,7 +2014,6 @@ TEST (bulk, offline_send)
ASSERT_TIMELY_EQ (5s, node2->balance (nano::dev::genesis_key.pub), std::numeric_limits<nano::uint128_t>::max () - amount); ASSERT_TIMELY_EQ (5s, node2->balance (nano::dev::genesis_key.pub), std::numeric_limits<nano::uint128_t>::max () - amount);
// Receiving send block // Receiving send block
ASSERT_TIMELY_EQ (5s, node2->balance (key2.pub), amount); ASSERT_TIMELY_EQ (5s, node2->balance (key2.pub), amount);
node2->stop ();
} }
TEST (bulk, genesis_pruning) TEST (bulk, genesis_pruning)
@ -2115,7 +2092,6 @@ TEST (bulk, genesis_pruning)
ASSERT_TIMELY_EQ (5s, node2->bootstrap_initiator.connections->connections_count, 0); ASSERT_TIMELY_EQ (5s, node2->bootstrap_initiator.connections->connections_count, 0);
node2->bootstrap_initiator.bootstrap (node1->network.endpoint (), false); node2->bootstrap_initiator.bootstrap (node1->network.endpoint (), false);
ASSERT_TIMELY_EQ (5s, node2->latest (nano::dev::genesis_key.pub), node1->latest (nano::dev::genesis_key.pub)); ASSERT_TIMELY_EQ (5s, node2->latest (nano::dev::genesis_key.pub), node1->latest (nano::dev::genesis_key.pub));
node2->stop ();
} }
TEST (bulk_pull_account, basics) TEST (bulk_pull_account, basics)

View file

@ -105,7 +105,6 @@ TEST (network, send_node_id_handshake_tcp)
auto list2 (node1->network.list (1)); auto list2 (node1->network.list (1));
ASSERT_EQ (nano::transport::transport_type::tcp, list2[0]->get_type ()); ASSERT_EQ (nano::transport::transport_type::tcp, list2[0]->get_type ());
ASSERT_EQ (node0->get_node_id (), list2[0]->get_node_id ()); ASSERT_EQ (node0->get_node_id (), list2[0]->get_node_id ());
node1->stop ();
} }
TEST (network, last_contacted) TEST (network, last_contacted)

View file

@ -73,11 +73,23 @@ nano::test::system::~system ()
void nano::test::system::stop () void nano::test::system::stop ()
{ {
io_guard.reset (); logger.debug (nano::log::type::system, "Stopping...");
// Keep io_context running while stopping
auto stopped = std::async (std::launch::async, [&] {
for (auto & node : nodes) for (auto & node : nodes)
{ {
node->stop (); node->stop ();
} }
});
auto ec = poll_until_true (10s, [&] {
auto status = stopped.wait_for (0s);
return status == std::future_status::ready;
});
debug_assert (!ec);
io_guard.reset ();
work.stop (); work.stop ();
} }
@ -195,6 +207,7 @@ std::shared_ptr<nano::node> nano::test::system::make_disconnected_node (std::opt
return nullptr; return nullptr;
} }
node->start (); node->start ();
nodes.push_back (node);
return node; return node;
} }