diff options
Diffstat (limited to 'src/components/connection_handler/test/heart_beat_monitor_test.cc')
-rw-r--r-- | src/components/connection_handler/test/heart_beat_monitor_test.cc | 226 |
1 files changed, 133 insertions, 93 deletions
diff --git a/src/components/connection_handler/test/heart_beat_monitor_test.cc b/src/components/connection_handler/test/heart_beat_monitor_test.cc index 4c67c97191..ccfff34116 100644 --- a/src/components/connection_handler/test/heart_beat_monitor_test.cc +++ b/src/components/connection_handler/test/heart_beat_monitor_test.cc @@ -43,6 +43,7 @@ namespace { const int32_t MILLISECONDS_IN_SECOND = 1000; const int32_t MICROSECONDS_IN_MILLISECONDS = 1000; const int32_t MICROSECONDS_IN_SECOND = 1000 * 1000; +const uint32_t kTime_offset = 20u; } namespace test { @@ -51,27 +52,34 @@ namespace connection_handler_test { using ::testing::DoAll; using ::testing::_; +using ::testing::Return; class HeartBeatMonitorTest : public testing::Test { public: - HeartBeatMonitorTest() : conn(NULL) { - kTimeout = 5000u; - } + HeartBeatMonitorTest() + : connection_(NULL) + , timeout_(100u) + , time_allowance_multiplier_(1.5) + , expiration_timeout_(timeout_ * 2u) {} protected: - testing::NiceMock<MockConnectionHandler> connection_handler_mock; - connection_handler::Connection* conn; - uint32_t kTimeout; - static const connection_handler::ConnectionHandle kConnectionHandle = + testing::NiceMock<MockConnectionHandler> connection_handler_mock_; + connection_handler::Connection* connection_; + const uint32_t timeout_; + const float_t time_allowance_multiplier_; + const uint32_t expiration_timeout_; + static const connection_handler::ConnectionHandle connection_handle_ = 0xABCDEF; + static const transport_manager::ConnectionUID kDefaultConnectionHandle = 1; + static const uint32_t kDefaultSessionId = 1; - virtual void SetUp() { - conn = new connection_handler::Connection( - kConnectionHandle, 0, &connection_handler_mock, kTimeout); + void SetUp() OVERRIDE { + connection_ = new connection_handler::Connection( + connection_handle_, 0, &connection_handler_mock_, timeout_); } void TearDown() OVERRIDE { - delete conn; + delete connection_; } }; @@ -80,159 +88,191 @@ ACTION_P2(RemoveSession, conn, session_id) { } TEST_F(HeartBeatMonitorTest, TimerNotStarted) { + EXPECT_CALL(connection_handler_mock_, AddSession(_)) + .WillOnce(Return(kDefaultSessionId)); + EXPECT_CALL(connection_handler_mock_, RemoveSession(kDefaultSessionId)) + .WillOnce(Return(true)); // called by destructor of Connection + // Whithout StartHeartBeat nothing to be call - EXPECT_CALL(connection_handler_mock, CloseSession(_, _)).Times(0); - EXPECT_CALL(connection_handler_mock, CloseConnection(_)).Times(0); - EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, _)).Times(0); + EXPECT_CALL(connection_handler_mock_, CloseSession(_, _)).Times(0); + EXPECT_CALL(connection_handler_mock_, CloseConnection(_)).Times(0); + EXPECT_CALL(connection_handler_mock_, SendHeartBeat(_, _)).Times(0); - conn->AddNewSession(); + connection_->AddNewSession(kDefaultConnectionHandle); } TEST_F(HeartBeatMonitorTest, TimerNotElapsed) { - EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, _)).Times(0); - EXPECT_CALL(connection_handler_mock, CloseSession(_, _)).Times(0); - EXPECT_CALL(connection_handler_mock, CloseConnection(_)).Times(0); + EXPECT_CALL(connection_handler_mock_, AddSession(_)) + .WillOnce(Return(kDefaultSessionId)); + EXPECT_CALL(connection_handler_mock_, RemoveSession(kDefaultSessionId)) + .WillOnce(Return(true)); + + EXPECT_CALL(connection_handler_mock_, SendHeartBeat(_, _)).Times(0); + EXPECT_CALL(connection_handler_mock_, CloseSession(_, _)).Times(0); + EXPECT_CALL(connection_handler_mock_, CloseConnection(_)).Times(0); - const uint32_t session = conn->AddNewSession(); - conn->StartHeartBeat(session); + const uint32_t session = connection_->AddNewSession(kDefaultConnectionHandle); + connection_->StartHeartBeat(session); } TEST_F(HeartBeatMonitorTest, TimerElapsed) { - const uint32_t session = conn->AddNewSession(); + EXPECT_CALL(connection_handler_mock_, AddSession(_)) + .WillOnce(Return(kDefaultSessionId)); + EXPECT_CALL(connection_handler_mock_, RemoveSession(kDefaultSessionId)) + .WillOnce(Return(true)); // invoked by RemoveSession action + + const uint32_t session = connection_->AddNewSession(kDefaultConnectionHandle); TestAsyncWaiter waiter; uint32_t times = 0; - EXPECT_CALL(connection_handler_mock, CloseSession(_, session, _)) - .WillOnce( - DoAll(NotifyTestAsyncWaiter(&waiter), RemoveSession(conn, session))); - times++; - EXPECT_CALL(connection_handler_mock, CloseConnection(_)) - .WillOnce(NotifyTestAsyncWaiter(&waiter)); + EXPECT_CALL(connection_handler_mock_, CloseSession(_, session, _)) + .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), + RemoveSession(connection_, session))); times++; - EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, session)) + EXPECT_CALL(connection_handler_mock_, SendHeartBeat(_, session)) .WillOnce(NotifyTestAsyncWaiter(&waiter)); times++; - conn->StartHeartBeat(session); + connection_->StartHeartBeat(session); EXPECT_TRUE(waiter.WaitFor( times, - 2 * kTimeout * MICROSECONDS_IN_MILLISECONDS + MICROSECONDS_IN_SECOND)); + 2 * timeout_ * MICROSECONDS_IN_MILLISECONDS + MICROSECONDS_IN_SECOND)); } TEST_F(HeartBeatMonitorTest, KeptAlive) { - EXPECT_CALL(connection_handler_mock, CloseSession(_, _)).Times(0); - EXPECT_CALL(connection_handler_mock, CloseConnection(_)).Times(0); - EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, _)).Times(0); - - const uint32_t session = conn->AddNewSession(); - conn->StartHeartBeat(session); - usleep(kTimeout * MICROSECONDS_IN_MILLISECONDS - MICROSECONDS_IN_SECOND); - conn->KeepAlive(session); - usleep(kTimeout * MICROSECONDS_IN_MILLISECONDS - MICROSECONDS_IN_SECOND); - conn->KeepAlive(session); - usleep(kTimeout * MICROSECONDS_IN_MILLISECONDS - MICROSECONDS_IN_SECOND); - conn->KeepAlive(session); - usleep(kTimeout * MICROSECONDS_IN_MILLISECONDS - MICROSECONDS_IN_SECOND); + EXPECT_CALL(connection_handler_mock_, AddSession(_)) + .WillOnce(Return(kDefaultSessionId)); + EXPECT_CALL(connection_handler_mock_, RemoveSession(kDefaultSessionId)) + .WillOnce(Return(true)); + + EXPECT_CALL(connection_handler_mock_, CloseSession(_, _)).Times(0); + EXPECT_CALL(connection_handler_mock_, CloseConnection(_)).Times(0); + EXPECT_CALL(connection_handler_mock_, SendHeartBeat(_, _)).Times(0); + + const uint32_t session = connection_->AddNewSession(kDefaultConnectionHandle); + connection_->StartHeartBeat(session); + usleep(timeout_); + connection_->KeepAlive(session); + usleep(timeout_); + connection_->KeepAlive(session); } TEST_F(HeartBeatMonitorTest, NotKeptAlive) { - const uint32_t session = conn->AddNewSession(); + EXPECT_CALL(connection_handler_mock_, AddSession(_)) + .WillOnce(Return(kDefaultSessionId)); + EXPECT_CALL(connection_handler_mock_, RemoveSession(kDefaultSessionId)) + .WillOnce(Return(true)); + + const uint32_t session = connection_->AddNewSession(kDefaultConnectionHandle); TestAsyncWaiter waiter; uint32_t times = 0; - EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, session)) + EXPECT_CALL(connection_handler_mock_, SendHeartBeat(_, session)) .WillOnce(NotifyTestAsyncWaiter(&waiter)); times++; - EXPECT_CALL(connection_handler_mock, CloseSession(_, session, _)) - .WillOnce( - DoAll(NotifyTestAsyncWaiter(&waiter), RemoveSession(conn, session))); - times++; - EXPECT_CALL(connection_handler_mock, CloseConnection(_)) - .WillOnce(NotifyTestAsyncWaiter(&waiter)); + EXPECT_CALL(connection_handler_mock_, CloseSession(_, session, _)) + .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), + RemoveSession(connection_, session))); times++; - conn->StartHeartBeat(session); - usleep(kTimeout * MICROSECONDS_IN_MILLISECONDS - MICROSECONDS_IN_SECOND); - conn->KeepAlive(session); - usleep(kTimeout * MICROSECONDS_IN_MILLISECONDS - MICROSECONDS_IN_SECOND); - conn->KeepAlive(session); - usleep(kTimeout * MICROSECONDS_IN_MILLISECONDS - MICROSECONDS_IN_SECOND); - conn->KeepAlive(session); - usleep(2 * kTimeout * MICROSECONDS_IN_MILLISECONDS + MICROSECONDS_IN_SECOND); + connection_->StartHeartBeat(session); + usleep(timeout_); + connection_->KeepAlive(session); EXPECT_TRUE(waiter.WaitFor( times, - 2 * kTimeout * MICROSECONDS_IN_MILLISECONDS + MICROSECONDS_IN_SECOND)); + 2 * timeout_ * MICROSECONDS_IN_MILLISECONDS + MICROSECONDS_IN_SECOND)); } TEST_F(HeartBeatMonitorTest, TwoSessionsElapsed) { - const uint32_t kSession1 = conn->AddNewSession(); - const uint32_t kSession2 = conn->AddNewSession(); + const uint32_t kMockSessionId1 = 1; + const uint32_t kMockSessionId2 = 2; + EXPECT_CALL(connection_handler_mock_, AddSession(_)) + .WillOnce(Return(kMockSessionId1)) + .WillOnce(Return(kMockSessionId2)); + EXPECT_CALL(connection_handler_mock_, RemoveSession(kMockSessionId1)) + .WillOnce(Return(true)); + EXPECT_CALL(connection_handler_mock_, RemoveSession(kMockSessionId2)) + .WillOnce(Return(true)); + + const uint32_t kSession1 = + connection_->AddNewSession(kDefaultConnectionHandle); + + const transport_manager::ConnectionUID kAnotherConnectionHandle = 2; + const uint32_t kSession2 = + connection_->AddNewSession(kAnotherConnectionHandle); TestAsyncWaiter waiter; uint32_t times = 0; - EXPECT_CALL(connection_handler_mock, CloseSession(_, kSession1, _)) + EXPECT_CALL(connection_handler_mock_, CloseSession(_, kSession1, _)) .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), - RemoveSession(conn, kSession1))); + RemoveSession(connection_, kSession1))); times++; - EXPECT_CALL(connection_handler_mock, CloseSession(_, kSession2, _)) + EXPECT_CALL(connection_handler_mock_, CloseSession(_, kSession2, _)) .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), - RemoveSession(conn, kSession2))); - times++; - EXPECT_CALL(connection_handler_mock, CloseConnection(_)) - .WillOnce(NotifyTestAsyncWaiter(&waiter)); + RemoveSession(connection_, kSession2))); times++; - EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, kSession1)) + + EXPECT_CALL(connection_handler_mock_, SendHeartBeat(_, kSession1)) .WillOnce(NotifyTestAsyncWaiter(&waiter)); times++; - EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, kSession2)) + EXPECT_CALL(connection_handler_mock_, SendHeartBeat(_, kSession2)) .WillOnce(NotifyTestAsyncWaiter(&waiter)); times++; - conn->StartHeartBeat(kSession1); - conn->StartHeartBeat(kSession2); + connection_->StartHeartBeat(kSession1); + connection_->StartHeartBeat(kSession2); EXPECT_TRUE(waiter.WaitFor( times, - 2 * kTimeout * MICROSECONDS_IN_MILLISECONDS + MICROSECONDS_IN_SECOND)); + 2 * timeout_ * MICROSECONDS_IN_MILLISECONDS + MICROSECONDS_IN_SECOND)); } TEST_F(HeartBeatMonitorTest, IncreaseHeartBeatTimeout) { - const uint32_t kSession = conn->AddNewSession(); + EXPECT_CALL(connection_handler_mock_, AddSession(_)) + .WillOnce(Return(kDefaultSessionId)); + EXPECT_CALL(connection_handler_mock_, RemoveSession(kDefaultSessionId)) + .WillOnce(Return(true)); + + const uint32_t kSession = + connection_->AddNewSession(kDefaultConnectionHandle); - EXPECT_CALL(connection_handler_mock, CloseSession(_, _)).Times(0); - EXPECT_CALL(connection_handler_mock, CloseConnection(_)).Times(0); - EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, _)).Times(0); + EXPECT_CALL(connection_handler_mock_, CloseSession(_, _)).Times(0); + EXPECT_CALL(connection_handler_mock_, CloseConnection(_)).Times(0); + EXPECT_CALL(connection_handler_mock_, SendHeartBeat(_, _)).Times(0); - const uint32_t kNewTimeout = kTimeout + MICROSECONDS_IN_MILLISECONDS; - conn->StartHeartBeat(kSession); - conn->SetHeartBeatTimeout(kNewTimeout, kSession); + const uint32_t kNewTimeout = timeout_ + MICROSECONDS_IN_MILLISECONDS; + connection_->StartHeartBeat(kSession); + connection_->SetHeartBeatTimeout(kNewTimeout, kSession); } TEST_F(HeartBeatMonitorTest, DecreaseHeartBeatTimeout) { - const uint32_t kSession = conn->AddNewSession(); + EXPECT_CALL(connection_handler_mock_, AddSession(_)) + .WillOnce(Return(kDefaultSessionId)); + EXPECT_CALL(connection_handler_mock_, RemoveSession(kDefaultSessionId)) + .WillOnce(Return(true)); + + const uint32_t kSession = + connection_->AddNewSession(kDefaultConnectionHandle); TestAsyncWaiter waiter; uint32_t times = 0; - EXPECT_CALL(connection_handler_mock, CloseSession(_, kSession, _)) - .WillOnce( - DoAll(NotifyTestAsyncWaiter(&waiter), RemoveSession(conn, kSession))); - times++; - EXPECT_CALL(connection_handler_mock, CloseConnection(_)) - .WillOnce(NotifyTestAsyncWaiter(&waiter)); + EXPECT_CALL(connection_handler_mock_, CloseSession(_, kSession, _)) + .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), + RemoveSession(connection_, kSession))); times++; - EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, kSession)) + EXPECT_CALL(connection_handler_mock_, SendHeartBeat(_, kSession)) .WillOnce(NotifyTestAsyncWaiter(&waiter)); times++; - const uint32_t kNewTimeout = kTimeout - MICROSECONDS_IN_MILLISECONDS; - conn->StartHeartBeat(kSession); - conn->SetHeartBeatTimeout(kNewTimeout, kSession); + const uint32_t new_timeout = timeout_ - kTime_offset; + connection_->StartHeartBeat(kSession); + connection_->SetHeartBeatTimeout(new_timeout, kSession); EXPECT_TRUE(waiter.WaitFor( times, - 2 * kTimeout * MICROSECONDS_IN_MILLISECONDS + MICROSECONDS_IN_SECOND)); + 2 * timeout_ * MICROSECONDS_IN_MILLISECONDS + MICROSECONDS_IN_SECOND)); } } // namespace connection_handler_test |