Mercurial > irccd
changeset 835:62c34f1e44e2
tests: don't wait indefinitely in test-transports
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 25 Apr 2019 20:58:42 +0200 |
parents | b7ec41d2d5be |
children | e7a37a331753 |
files | tests/src/libirccd-daemon/transports/main.cpp |
diffstat | 1 files changed, 25 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/src/libirccd-daemon/transports/main.cpp Mon Apr 01 20:10:00 2019 +0200 +++ b/tests/src/libirccd-daemon/transports/main.cpp Thu Apr 25 20:58:42 2019 +0200 @@ -21,7 +21,7 @@ #include <irccd/daemon/transport_server.hpp> -namespace asio = boost::asio; +using namespace std::chrono_literals; namespace irccd::daemon { @@ -29,9 +29,11 @@ BOOST_AUTO_TEST_CASE(fix_995) { - asio::io_context ctx; - asio::ip::tcp::socket cl1(ctx); - asio::ip::tcp::socket cl2(ctx); + boost::asio::io_context ctx; + boost::asio::deadline_timer t1(ctx); + boost::asio::deadline_timer t2(ctx); + boost::asio::ip::tcp::socket cl1(ctx); + boost::asio::ip::tcp::socket cl2(ctx); /* * a server that waits for authentication, the client does not send @@ -40,24 +42,34 @@ auto acc = std::make_unique<ip_acceptor>(ctx, "*", 0, true, false); auto ep = acc->get_acceptor().local_endpoint(); auto tpt = std::make_shared<transport_server>(std::move(acc)); - auto accepted = false; auto connected1 = false; auto connected2 = false; + for (auto timer : {&t1, &t2}) { + timer->expires_from_now(boost::posix_time::seconds(3)); + timer->async_wait([] (auto code) { + if (code != boost::asio::error::operation_aborted) + throw std::system_error(std::make_error_code(std::errc::timed_out)); + }); + } + tpt->set_password("test"); - tpt->accept([&accepted] (auto, auto) { - accepted = true; + tpt->accept([] (auto, auto) {}); + cl1.async_connect(ep, [&connected1, &t1] (auto) { + connected1 = true; + t1.cancel(); }); - cl1.async_connect(ep, [&connected1] (auto) { - connected1 = true; - }); - cl2.async_connect(ep, [&connected2] (auto) { + cl2.async_connect(ep, [&connected2, &t2] (auto) { connected2 = true; + t2.cancel(); }); - ctx.run(); + while (!connected1 && !connected2) { + ctx.reset(); + ctx.poll(); + std::this_thread::sleep_for(1s); + } - BOOST_TEST(accepted); BOOST_TEST(connected1); BOOST_TEST(connected2); }