TYPED_TEST_P(HeartBeatTest, BrokenConnection) { typedef TypeParam socket; auto log = redhorn::logging::get_logger("main"); redhorn::signals signals; redhorn::iopool pool(redhorn::logging::get_logger("iopool")); redhorn::heart_beat heart(redhorn::logging::get_logger("heart"), std::chrono::milliseconds(20), std::chrono::milliseconds(20)); signals.set_handler(SIGPIPE, [](){}); signals.start(); pool.start(2); heart.start(); redhorn::listener listener(port); socket conn_sock; std::thread connect_thread(connect_pong_thread<socket>, redhorn::logging::get_logger("connect_thread"), std::ref(conn_sock)); log.info("accepting"); socket sock = listener.accept<socket>(); connect_thread.join(); ASSERT_TRUE(static_cast<bool>(sock)); log.info("accepted"); pool.bind(sock); heart.bind(sock, std::chrono::milliseconds(20), std::function<message()>(drummer)); conn_sock.close(); EXPECT_THROW(sock.recv(), std::exception); log.info("before assert"); ASSERT_FALSE(static_cast<bool>(sock)); log.info("after assert"); heart.unbind(sock); pool.unbind(sock); heart.stop(); pool.stop(); signals.stop(); heart.wait(); pool.wait(); signals.wait(); }
void test (ACE_Reactor_Impl *reactor_impl) { ACE_Reactor reactor (reactor_impl, true); ACE_Thread_Mutex reactor_lock; ACE_Thread_Manager thread_manager; ACE_DEBUG ((LM_DEBUG, "Starting %d connection threads...\n", number_of_threads)); Connect_Thread connect_thread (thread_manager, reactor, reactor_lock); result = connect_thread.activate (THR_NEW_LWP|THR_JOINABLE, number_of_threads); ACE_TEST_ASSERT (result == 0); // Wait for threads to exit. result = thread_manager.wait (); ACE_TEST_ASSERT (result == 0); }
TYPED_TEST_P(HeartBeatTest, Ping) { typedef TypeParam socket; auto log = redhorn::logging::get_logger("main"); redhorn::iopool pool(redhorn::logging::get_logger("iopool")); redhorn::heart_beat heart(redhorn::logging::get_logger("heart"), std::chrono::milliseconds(20), std::chrono::milliseconds(20)); pool.start(2); heart.start(); redhorn::listener listener(port); std::thread connect_thread(connect_ping_thread<socket>, redhorn::logging::get_logger("connect_thread")); log.info("accepting"); socket sock = listener.accept<socket>(); ASSERT_TRUE(static_cast<bool>(sock)); log.info("accepted"); pool.bind(sock); heart.bind(sock, std::chrono::milliseconds::zero(), std::function<message()>(drummer)); log.info("joining"); connect_thread.join(); log.info("joined"); heart.unbind(sock); heart.stop(); pool.stop(); heart.wait(); pool.wait(); }