コード例 #1
0
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();
    
}
コード例 #2
0
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);
}
コード例 #3
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();
    
}