diff options
Diffstat (limited to 'src/components/connection_handler/test')
-rw-r--r-- | src/components/connection_handler/test/CMakeLists.txt | 12 | ||||
-rw-r--r-- | src/components/connection_handler/test/connection_handler_impl_test.cc | 906 | ||||
-rw-r--r-- | src/components/connection_handler/test/connection_test.cc | 328 | ||||
-rw-r--r-- | src/components/connection_handler/test/device_test.cc | 4 | ||||
-rw-r--r-- | src/components/connection_handler/test/heart_beat_monitor_test.cc | 126 | ||||
-rw-r--r-- | src/components/connection_handler/test/include/connection_handler/connection_handler_observer_mock.h (renamed from src/components/connection_handler/test/include/connection_handler_observer_mock.h) | 42 |
6 files changed, 888 insertions, 530 deletions
diff --git a/src/components/connection_handler/test/CMakeLists.txt b/src/components/connection_handler/test/CMakeLists.txt index 7c0e1b2a98..32da4bdcd8 100644 --- a/src/components/connection_handler/test/CMakeLists.txt +++ b/src/components/connection_handler/test/CMakeLists.txt @@ -35,26 +35,22 @@ set(appMain_DIR ${CMAKE_SOURCE_DIR}/src/appMain) include_directories( ${GMOCK_INCLUDE_DIRECTORY} ${COMPONENTS_DIR}/connection_handler/include - ${COMPONENTS_DIR}/security_manager/test/include - ${COMPONENTS_DIR}/protocol_handler/test/include - ${COMPONENTS_DIR}/security_manager/include ${COMPONENTS_DIR}/connection_handler/test/include - ${COMPONENTS_DIR}/transport_manager/test/include + ${COMPONENTS_DIR}/resumption/include + ${JSONCPP_INCLUDE_DIRECTORY} ) set(LIBRARIES gmock connectionHandler - ConfigProfile ProtocolHandler - TransportManager ) set(SOURCES - #connection_handler_impl_test.cc + connection_handler_impl_test.cc connection_test.cc device_test.cc - #heart_beat_monitor_test.cc + heart_beat_monitor_test.cc ) file(COPY ${appMain_DIR}/smartDeviceLink.ini DESTINATION "./") diff --git a/src/components/connection_handler/test/connection_handler_impl_test.cc b/src/components/connection_handler/test/connection_handler_impl_test.cc index 94e4c816fa..3a8aaa70b4 100644 --- a/src/components/connection_handler/test/connection_handler_impl_test.cc +++ b/src/components/connection_handler/test/connection_handler_impl_test.cc @@ -30,38 +30,60 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#include <gtest/gtest.h> +#include "gtest/gtest.h" #include <fstream> -#include <cstdint> +#include <stdint.h> +#include <vector> #include "connection_handler/connection_handler_impl.h" #include "protocol/common.h" -#include "config_profile/profile.h" // TODO(EZamakhov): move security test -#include "security_manager_mock.h" -#include "protocol_handler_mock.h" -#include "connection_handler_observer_mock.h" -#include "transport_manager_mock.h" +#include "security_manager/mock_security_manager.h" +#include "security_manager/mock_ssl_context.h" +#include "protocol_handler/mock_protocol_handler.h" +#include "connection_handler/connection_handler_observer_mock.h" +#include "connection_handler/mock_connection_handler_settings.h" +#include "transport_manager/mock_transport_manager.h" +#include "encryption/hashing.h" namespace test { namespace components { -namespace connection_handle_test { +namespace connection_handler_test { using namespace ::connection_handler; using ::protocol_handler::ServiceType; using namespace ::protocol_handler; using ::testing::_; using ::testing::InSequence; +using ::testing::Mock; +using ::testing::Return; +using ::testing::ReturnRefOfCopy; + // For service types and PROTECTION_ON/OFF +enum UnnamedService { kServedService1 = 0x06, kServedService2 = 0x08 }; + class ConnectionHandlerTest : public ::testing::Test { protected: void SetUp() OVERRIDE { - connection_handler_ = ConnectionHandlerImpl::instance(); + connection_handler_ = new ConnectionHandlerImpl( + mock_connection_handler_settings, mock_transport_manager); uid_ = 1u; connection_key_ = connection_handler_->KeyFromPair(0, 0u); + protected_services_.clear(); + unprotected_services_.clear(); + SetSpecificServices(); } void TearDown() OVERRIDE { - ConnectionHandlerImpl::destroy(); + delete connection_handler_; + } + + void SetSpecificServices() { +#ifdef ENABLE_SECURITY + ON_CALL(mock_connection_handler_settings, force_protected_service()) + .WillByDefault(ReturnRefOfCopy(protected_services_)); + ON_CALL(mock_connection_handler_settings, force_unprotected_service()) + .WillByDefault(ReturnRefOfCopy(unprotected_services_)); +#endif // ENABLE_SECURITY } // Additional SetUp void AddTestDeviceConnection() { @@ -71,19 +93,18 @@ class ConnectionHandlerTest : public ::testing::Test { device_name_ = "test_name"; mac_address_ = "test_address"; - const transport_manager::DeviceInfo device_info(device_handle_, - mac_address_, - device_name_, - connection_type_); + const transport_manager::DeviceInfo device_info( + device_handle_, mac_address_, device_name_, connection_type_); // Add Device and connection + ON_CALL(mock_connection_handler_settings, heart_beat_timeout()) + .WillByDefault(Return(1000u)); connection_handler_->addDeviceConnection(device_info, uid_); connection_key_ = connection_handler_->KeyFromPair(uid_, 0u); // Remove all specific services - SetSpecificServices("", ""); } void AddTestSession() { start_session_id_ = connection_handler_->OnSessionStartedCallback( - uid_, 0, kRpc, PROTECTION_OFF, &out_hash_id_); + uid_, 0, kRpc, PROTECTION_OFF, &out_hash_id_); EXPECT_NE(0u, start_session_id_); EXPECT_EQ(SessionHash(uid_, start_session_id_), out_hash_id_); connection_key_ = connection_handler_->KeyFromPair(uid_, start_session_id_); @@ -102,27 +123,12 @@ class ConnectionHandlerTest : public ::testing::Test { EXPECT_EQ(session_id, start_session_id_); } - // Additional SetUp - void SetSpecificServices(const std::string& protect, const std::string& not_protect) { - const char* config_file = "config.ini"; - std::ofstream file_config(config_file); - ASSERT_TRUE(file_config.is_open()); - const std::string non("NON"); - file_config << "[Security Manager]" << std::endl - << "; Force protected services (could be id's from 0x01 to 0xFF)" - << std::endl << "ForceProtectedService = " - << (protect.empty() ? non : protect) << std::endl - << "; Force unprotected services" << std::endl - << "ForceUnprotectedService = " - << (not_protect.empty() ? non : not_protect) << std::endl; - file_config.close(); - profile::Profile::instance()->config_file_name(config_file); - } // Check Service Wrapper // If session_id is NULL - check that there is no sessions in connection void CheckSessionExists(const int connectionId, const int session_id) { // Check all tree to find Session and check own protected value - const ConnectionList& connection_list = connection_handler_->getConnectionList(); + const ConnectionList& connection_list = + connection_handler_->getConnectionList(); ASSERT_FALSE(connection_list.empty()); ConnectionList::const_iterator conn_it = connection_list.find(connectionId); ASSERT_NE(conn_it, connection_list.end()); @@ -139,17 +145,21 @@ class ConnectionHandlerTest : public ::testing::Test { const ServiceList& service_list = session.service_list; ASSERT_FALSE(service_list.empty()); // Check RPC and bulk services in session - ASSERT_NE(service_list.end(), std::find(service_list.begin(), service_list.end(), kRpc)); - ASSERT_NE(service_list.end(), std::find(service_list.begin(), service_list.end(), kBulk)); + ASSERT_NE(service_list.end(), + std::find(service_list.begin(), service_list.end(), kRpc)); + ASSERT_NE(service_list.end(), + std::find(service_list.begin(), service_list.end(), kBulk)); } } // Check Service Wrapper - void CheckServiceExists(const int connectionId, const int session_id, + void CheckServiceExists(const int connectionId, + const int session_id, const ::protocol_handler::ServiceType serviceId, const bool exists) { // Check all trees to find Service and check own protected value - const ConnectionList& connection_list = connection_handler_->getConnectionList(); + const ConnectionList& connection_list = + connection_handler_->getConnectionList(); ASSERT_FALSE(connection_list.empty()); ConnectionList::const_iterator conn_it = connection_list.find(connectionId); ASSERT_NE(conn_it, connection_list.end()); @@ -162,7 +172,8 @@ class ConnectionHandlerTest : public ::testing::Test { const Session& session = sess_it->second; const ServiceList& service_list = session.service_list; ASSERT_FALSE(service_list.empty()); - ServiceList::const_iterator serv_it = std::find(service_list.begin(), service_list.end(), serviceId); + ServiceList::const_iterator serv_it = + std::find(service_list.begin(), service_list.end(), serviceId); if (exists) { ASSERT_NE(serv_it, service_list.end()); } else { @@ -170,12 +181,14 @@ class ConnectionHandlerTest : public ::testing::Test { } } // Check Service Wrapper - void CheckService(const int connectionId, const int session_id, + void CheckService(const int connectionId, + const int session_id, const ::protocol_handler::ServiceType serviceId, const ::security_manager::SSLContext* ssl_context, const bool is_protected) { // Check all tree to find Service and check own protected value - const ConnectionList& connection_list = connection_handler_->getConnectionList(); + const ConnectionList& connection_list = + connection_handler_->getConnectionList(); ASSERT_FALSE(connection_list.empty()); ConnectionList::const_iterator conn_it = connection_list.find(connectionId); ASSERT_NE(conn_it, connection_list.end()); @@ -191,7 +204,8 @@ class ConnectionHandlerTest : public ::testing::Test { #endif // ENABLE_SECURITY const ServiceList& service_list = session.service_list; ASSERT_FALSE(service_list.empty()); - ServiceList::const_iterator serv_it = std::find(service_list.begin(), service_list.end(), serviceId); + ServiceList::const_iterator serv_it = + std::find(service_list.begin(), service_list.end(), serviceId); ASSERT_NE(serv_it, service_list.end()); const Service& service = *serv_it; @@ -199,28 +213,36 @@ class ConnectionHandlerTest : public ::testing::Test { #ifdef ENABLE_SECURITY if (is_protected) { // Emulate success protection - check enable service flag - const uint32_t connection_key_ = connection_handler_->KeyFromPair( - connectionId, session_id); + const uint32_t connection_key_ = + connection_handler_->KeyFromPair(connectionId, session_id); connection_handler_->SetProtectionFlag(connection_key_, serviceId); } #endif // ENABLE_SECURITY } - void ChangeProtocol(const int connectionId, const int session_id, const uint8_t protocol_version) { + void ChangeProtocol(const int connectionId, + const int session_id, + const uint8_t protocol_version) { ConnectionList connection_list = connection_handler_->getConnectionList(); - ConnectionList::const_iterator conn_it = (connection_handler_->getConnectionList()).find(connectionId); + ConnectionList::const_iterator conn_it = + (connection_handler_->getConnectionList()).find(connectionId); ASSERT_NE(conn_it, connection_list.end()); - Connection * connection = conn_it->second; + Connection* connection = conn_it->second; ASSERT_TRUE(connection != NULL); connection->UpdateProtocolVersionSession(session_id, protocol_version); uint8_t check_protocol_version; - EXPECT_TRUE(connection->ProtocolVersion(session_id, check_protocol_version)); - EXPECT_EQ(check_protocol_version,protocol_version); - + EXPECT_TRUE( + connection->ProtocolVersion(session_id, check_protocol_version)); + EXPECT_EQ(check_protocol_version, protocol_version); } ConnectionHandlerImpl* connection_handler_; + testing::NiceMock<transport_manager_test::MockTransportManager> + mock_transport_manager; + testing::NiceMock<MockConnectionHandlerSettings> + mock_connection_handler_settings; + protocol_handler_test::MockProtocolHandler mock_protocol_handler_; transport_manager::DeviceHandle device_handle_; transport_manager::ConnectionUID uid_; uint32_t connection_key_; @@ -231,13 +253,17 @@ class ConnectionHandlerTest : public ::testing::Test { std::string device_name_; std::string mac_address_; + const uint32_t heartbeat_timeout = 100u; + std::vector<int> protected_services_; + std::vector<int> unprotected_services_; }; TEST_F(ConnectionHandlerTest, StartSession_NoConnection) { // Null sessionId for start new session const uint8_t sessionID = 0; // Start new session with RPC service - const uint32_t result_fail = connection_handler_->OnSessionStartedCallback(uid_, sessionID, kRpc, PROTECTION_ON, &out_hash_id_); + const uint32_t result_fail = connection_handler_->OnSessionStartedCallback( + uid_, sessionID, kRpc, PROTECTION_ON, &out_hash_id_); // Unknown connection error is '0' EXPECT_EQ(0u, result_fail); EXPECT_EQ(protocol_handler::HASH_ID_WRONG, out_hash_id_); @@ -251,12 +277,23 @@ TEST_F(ConnectionHandlerTest, StartSession) { AddTestSession(); } +TEST_F(ConnectionHandlerTest, AddConnection_StopConnection) { + // Add virtual device and connection + AddTestDeviceConnection(); + EXPECT_FALSE(connection_handler_->getConnectionList().empty()); + // Stop connection + connection_handler_->Stop(); + EXPECT_TRUE(connection_handler_->getConnectionList().empty()); +} + TEST_F(ConnectionHandlerTest, GetConnectionSessionsCount) { AddTestDeviceConnection(); - EXPECT_EQ(0u, connection_handler_->GetConnectionSessionsCount(connection_key_)); + EXPECT_EQ(0u, + connection_handler_->GetConnectionSessionsCount(connection_key_)); AddTestSession(); - EXPECT_EQ(1u, connection_handler_->GetConnectionSessionsCount(connection_key_)); + EXPECT_EQ(1u, + connection_handler_->GetConnectionSessionsCount(connection_key_)); } TEST_F(ConnectionHandlerTest, GetAppIdOnSessionKey) { @@ -266,51 +303,82 @@ TEST_F(ConnectionHandlerTest, GetAppIdOnSessionKey) { uint32_t app_id = 0; const uint32_t testid = SessionHash(uid_, start_session_id_); - EXPECT_EQ(0, connection_handler_->GetDataOnSessionKey(connection_key_, &app_id, NULL, NULL)); + EXPECT_EQ(0, + connection_handler_->GetDataOnSessionKey( + connection_key_, &app_id, NULL, NULL)); EXPECT_EQ(testid, app_id); } -TEST_F(ConnectionHandlerTest,GetDeviceID) { +TEST_F(ConnectionHandlerTest, GetAppIdOnSessionKey_SessionNotStarted) { + AddTestDeviceConnection(); + + uint32_t app_id = 0; + EXPECT_EQ(-1, + connection_handler_->GetDataOnSessionKey( + connection_key_, &app_id, NULL, NULL)); +} + +TEST_F(ConnectionHandlerTest, GetDeviceID) { AddTestDeviceConnection(); AddTestSession(); DeviceHandle test_handle; - const DeviceMap & devmap = connection_handler_->getDeviceList(); + const DeviceMap& devmap = connection_handler_->getDeviceList(); DeviceMap::const_iterator pos = devmap.find(device_handle_); ASSERT_NE(pos, devmap.end()); - const Device & devres = pos->second; + const Device& devres = pos->second; std::string test_mac_address = devres.mac_address(); EXPECT_TRUE(connection_handler_->GetDeviceID(test_mac_address, &test_handle)); EXPECT_EQ(device_handle_, test_handle); } -TEST_F(ConnectionHandlerTest,GetDeviceName) { +TEST_F(ConnectionHandlerTest, GetDeviceName) { AddTestDeviceConnection(); AddTestSession(); std::string test_device_name; DeviceHandle handle = 0; - EXPECT_EQ(0, connection_handler_->GetDataOnDeviceID(handle, &test_device_name)); + EXPECT_EQ(0, + connection_handler_->GetDataOnDeviceID(handle, &test_device_name)); EXPECT_EQ(device_name_, test_device_name); } -TEST_F(ConnectionHandlerTest,GetConnectionType) { +TEST_F(ConnectionHandlerTest, GetConnectionType) { AddTestDeviceConnection(); AddTestSession(); const DeviceHandle handle = 0; std::string test_connection_type; - EXPECT_EQ(0, connection_handler_->GetDataOnDeviceID(handle, NULL, NULL, NULL, &test_connection_type)); + EXPECT_EQ(0, + connection_handler_->GetDataOnDeviceID( + handle, NULL, NULL, NULL, &test_connection_type)); EXPECT_EQ(connection_type_, test_connection_type); } +TEST_F(ConnectionHandlerTest, GetApplicationsOnDevice) { + AddTestDeviceConnection(); + AddTestSession(); + + const DeviceHandle handle = 0; + std::list<uint32_t> applications_list; + EXPECT_EQ( + 0, + connection_handler_->GetDataOnDeviceID(handle, NULL, &applications_list)); + + uint32_t test_id = connection_handler_->KeyFromPair(uid_, start_session_id_); + EXPECT_EQ(1u, applications_list.size()); + + EXPECT_EQ(test_id, applications_list.front()); +} + TEST_F(ConnectionHandlerTest, GetDefaultProtocolVersion) { AddTestDeviceConnection(); AddTestSession(); uint8_t protocol_version = 0; - EXPECT_TRUE(connection_handler_->ProtocolVersionUsed(uid_, start_session_id_, protocol_version)); + EXPECT_TRUE(connection_handler_->ProtocolVersionUsed( + uid_, start_session_id_, protocol_version)); EXPECT_EQ(PROTOCOL_VERSION_2, protocol_version); } @@ -321,7 +389,8 @@ TEST_F(ConnectionHandlerTest, GetProtocolVersion) { ChangeProtocol(uid_, start_session_id_, PROTOCOL_VERSION_3); uint8_t protocol_version = 0; - EXPECT_TRUE(connection_handler_->ProtocolVersionUsed(uid_, start_session_id_, protocol_version)); + EXPECT_TRUE(connection_handler_->ProtocolVersionUsed( + uid_, start_session_id_, protocol_version)); EXPECT_EQ(PROTOCOL_VERSION_3, protocol_version); } @@ -330,12 +399,15 @@ TEST_F(ConnectionHandlerTest, GetProtocolVersionAfterBinding) { AddTestDeviceConnection(); AddTestSession(); uint8_t protocol_version = 0; - EXPECT_TRUE(connection_handler_->ProtocolVersionUsed(uid_, start_session_id_, protocol_version)); + EXPECT_TRUE(connection_handler_->ProtocolVersionUsed( + uid_, start_session_id_, protocol_version)); EXPECT_EQ(PROTOCOL_VERSION_2, protocol_version); - connection_handler_->BindProtocolVersionWithSession(connection_key_, PROTOCOL_VERSION_3); + connection_handler_->BindProtocolVersionWithSession(connection_key_, + PROTOCOL_VERSION_3); - EXPECT_TRUE(connection_handler_->ProtocolVersionUsed(uid_, start_session_id_, protocol_version)); + EXPECT_TRUE(connection_handler_->ProtocolVersionUsed( + uid_, start_session_id_, protocol_version)); EXPECT_EQ(PROTOCOL_VERSION_3, protocol_version); } @@ -353,49 +425,51 @@ TEST_F(ConnectionHandlerTest, GetPairFromKey) { TEST_F(ConnectionHandlerTest, IsHeartBeatSupported) { AddTestDeviceConnection(); AddTestSession(); - ChangeProtocol(uid_, start_session_id_, PROTOCOL_VERSION_3); - EXPECT_TRUE(connection_handler_->IsHeartBeatSupported(uid_, start_session_id_)); + EXPECT_TRUE( + connection_handler_->IsHeartBeatSupported(uid_, start_session_id_)); } -TEST_F(ConnectionHandlerTest,SendEndServiceWithoutSetProtocolHandler) { +TEST_F(ConnectionHandlerTest, SendEndServiceWithoutSetProtocolHandler) { AddTestDeviceConnection(); AddTestSession(); - protocol_handler_test::ProtocolHandlerMock mock_protocol_handler; - - EXPECT_CALL(mock_protocol_handler, SendEndService(_,_,kRpc)).Times(0); + EXPECT_CALL(mock_protocol_handler_, SendEndService(_, _, kRpc)).Times(0); connection_handler_->SendEndService(connection_key_, kRpc); } -TEST_F(ConnectionHandlerTest,SendEndService) { +TEST_F(ConnectionHandlerTest, SendEndService) { AddTestDeviceConnection(); AddTestSession(); - protocol_handler_test::ProtocolHandlerMock mock_protocol_handler; - - connection_handler_->set_protocol_handler(&mock_protocol_handler); - EXPECT_CALL(mock_protocol_handler, SendEndService(_,_,kRpc)); + connection_handler_->set_protocol_handler(&mock_protocol_handler_); + EXPECT_CALL(mock_protocol_handler_, SendEndService(_, _, kRpc)); connection_handler_->SendEndService(connection_key_, kRpc); } -TEST_F(ConnectionHandlerTest,OnFindNewApplicationsRequest) { +TEST_F(ConnectionHandlerTest, OnFindNewApplicationsRequest) { AddTestDeviceConnection(); AddTestSession(); - connection_handler_test::ConnectionHandlerObserverMock mock_connection_handler_observer; - connection_handler_->set_connection_handler_observer(&mock_connection_handler_observer); + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); EXPECT_CALL(mock_connection_handler_observer, OnFindNewApplicationsRequest()); connection_handler_->OnFindNewApplicationsRequest(); } -TEST_F(ConnectionHandlerTest,OnFindNewApplicationsRequestWithoutObserver) { - connection_handler_test::ConnectionHandlerObserverMock mock_connection_handler_observer; - EXPECT_CALL(mock_connection_handler_observer, OnFindNewApplicationsRequest()).Times(0); +TEST_F(ConnectionHandlerTest, OnFindNewApplicationsRequestWithoutObserver) { + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + EXPECT_CALL(mock_connection_handler_observer, OnFindNewApplicationsRequest()) + .Times(0); connection_handler_->OnFindNewApplicationsRequest(); } -TEST_F(ConnectionHandlerTest,OnFindNewApplicationsRequestWithoutSession) { - connection_handler_test::ConnectionHandlerObserverMock mock_connection_handler_observer; - connection_handler_->set_connection_handler_observer(&mock_connection_handler_observer); +TEST_F(ConnectionHandlerTest, OnFindNewApplicationsRequestWithoutSession) { + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); EXPECT_CALL(mock_connection_handler_observer, OnFindNewApplicationsRequest()); connection_handler_->OnFindNewApplicationsRequest(); @@ -406,18 +480,24 @@ TEST_F(ConnectionHandlerTest, OnMalformedMessageCallback) { AddTestSession(); AddTestService(kAudio); AddTestService(kMobileNav); - connection_handler_test::ConnectionHandlerObserverMock mock_connection_handler_observer; - connection_handler_->set_connection_handler_observer(&mock_connection_handler_observer); + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); InSequence seq; EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kMobileNav, kMalformed)).Times(1); + OnServiceEndedCallback(connection_key_, kMobileNav, kMalformed)) + .Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kAudio, kMalformed)).Times(1); + OnServiceEndedCallback(connection_key_, kAudio, kMalformed)) + .Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kBulk, kMalformed)).Times(1); + OnServiceEndedCallback(connection_key_, kBulk, kMalformed)) + .Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kRpc, kMalformed)).Times(1); + OnServiceEndedCallback(connection_key_, kRpc, kMalformed)) + .Times(1); connection_handler_->OnMalformedMessageCallback(uid_); } @@ -426,53 +506,288 @@ TEST_F(ConnectionHandlerTest, OnApplicationFloodCallBack) { AddTestSession(); AddTestService(kAudio); AddTestService(kMobileNav); - connection_handler_test::ConnectionHandlerObserverMock mock_connection_handler_observer; - connection_handler_->set_connection_handler_observer(&mock_connection_handler_observer); + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); - protocol_handler_test::ProtocolHandlerMock mock_protocol_handler; - connection_handler_->set_protocol_handler(&mock_protocol_handler); - - EXPECT_CALL(mock_protocol_handler, SendEndSession(uid_,start_session_id_)); + connection_handler_->set_protocol_handler(&mock_protocol_handler_); + EXPECT_CALL(mock_protocol_handler_, SendEndSession(uid_, start_session_id_)) + .Times(1); InSequence seq; EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kMobileNav, kCommon)).Times(1); + OnServiceEndedCallback(connection_key_, kMobileNav, kCommon)); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kAudio, kCommon)).Times(1); + OnServiceEndedCallback(connection_key_, kAudio, kCommon)); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kBulk, kCommon)).Times(1); + OnServiceEndedCallback(connection_key_, kBulk, kCommon)); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kRpc, kCommon)).Times(1); + OnServiceEndedCallback(connection_key_, kRpc, kCommon)); connection_handler_->OnApplicationFloodCallBack(uid_); } +TEST_F(ConnectionHandlerTest, OnApplicationFloodCallBack_SessionFound) { + // Precondition + AddTestDeviceConnection(); + AddTestSession(); + AddTestService(kAudio); + AddTestService(kMobileNav); + + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); + + connection_handler_->set_protocol_handler(&mock_protocol_handler_); + EXPECT_CALL(mock_protocol_handler_, SendEndSession(uid_, start_session_id_)); + InSequence seq; + EXPECT_CALL(mock_connection_handler_observer, + OnServiceEndedCallback(connection_key_, kMobileNav, kFlood)); + EXPECT_CALL(mock_connection_handler_observer, + OnServiceEndedCallback(connection_key_, kAudio, kFlood)); + EXPECT_CALL(mock_connection_handler_observer, + OnServiceEndedCallback(connection_key_, kBulk, kFlood)); + EXPECT_CALL(mock_connection_handler_observer, + OnServiceEndedCallback(connection_key_, kRpc, kFlood)); + + connection_handler_->OnApplicationFloodCallBack(connection_key_); +} + TEST_F(ConnectionHandlerTest, StartDevicesDiscovery) { AddTestDeviceConnection(); AddTestSession(); - transport_manager_test::TransportManagerMock mock_transport_manager; - connection_handler_->set_transport_manager(&mock_transport_manager); - connection_handler_test::ConnectionHandlerObserverMock mock_connection_handler_observer; - connection_handler_->set_connection_handler_observer(&mock_connection_handler_observer); + + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); EXPECT_CALL(mock_transport_manager, SearchDevices()); EXPECT_CALL(mock_connection_handler_observer, OnDeviceListUpdated(_)); connection_handler_->StartDevicesDiscovery(); } +MATCHER_P(CheckDevList, check_device_map, "") { + DeviceMap device_list = arg; + if (device_list.size() != check_device_map.size()) { + return false; + } + DeviceMap::const_iterator it = device_list.begin(); + DeviceMap::const_iterator end = device_list.end(); + + DeviceMap::const_iterator check_it = check_device_map.begin(); + for (; it != end; ++it, ++check_it) { + if (it->first != check_it->first) { + return false; + } + if ((*it).second.device_handle() != (*check_it).second.device_handle()) { + return false; + } + if ((*it).second.mac_address() != (*check_it).second.mac_address()) { + return false; + } + if ((*it).second.connection_type() != + (*check_it).second.connection_type()) { + return false; + } + } + return true; +} + +TEST_F(ConnectionHandlerTest, UpdateDeviceList) { + // Precondition + AddTestDeviceConnection(); + AddTestSession(); + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); + + connection_type_ = "BTMAC"; + device_name_ = "test_name"; + mac_address_ = "test_address"; + const transport_manager::DeviceInfo added_info( + 0, "test_address", "test_name", "BTMAC"); + connection_handler_->OnDeviceAdded(added_info); + + // Prepare map with DeviceInfo that sets in OnDeviceListUpdated + const transport_manager::DeviceInfo unused_parameter( + 0, "mac_address_", "device_name_", "connection_type_"); + std::vector<transport_manager::DeviceInfo> unused_info; + unused_info.push_back(unused_parameter); + DeviceMap map_with_unused_var; + map_with_unused_var.insert( + DeviceMap::value_type(unused_parameter.device_handle(), + Device(unused_parameter.device_handle(), + unused_parameter.name(), + unused_parameter.mac_address(), + unused_parameter.connection_type()))); + + // Only previously added devices is updated + EXPECT_CALL( + mock_connection_handler_observer, + OnDeviceListUpdated(CheckDevList(connection_handler_->getDeviceList()))); + + // New value that sets in OnDeviceListUpdated does not add + EXPECT_CALL(mock_connection_handler_observer, + OnDeviceListUpdated(CheckDevList(map_with_unused_var))).Times(0); + + connection_handler_->OnDeviceListUpdated(unused_info); +} + +TEST_F(ConnectionHandlerTest, GetConnectedDevicesMAC) { + // Precondition + const std::string mac_address1 = "test_address1"; + const std::string mac_address2 = "test_address2"; + + const transport_manager::DeviceInfo device1( + 0, mac_address1, device_name_, connection_type_); + const transport_manager::DeviceInfo device2( + 1, mac_address2, device_name_, connection_type_); + connection_handler_->OnDeviceAdded(device1); + connection_handler_->OnDeviceAdded(device2); + + // Expect mac adress was hashed and saved + const std::string check_mac1 = encryption::MakeHash(mac_address1); + const std::string check_mac2 = encryption::MakeHash(mac_address2); + std::vector<std::string> device_macs; + connection_handler_->GetConnectedDevicesMAC(device_macs); + ASSERT_EQ(2u, device_macs.size()); + EXPECT_EQ(check_mac1, device_macs.at(0)); + EXPECT_EQ(check_mac2, device_macs.at(1)); +} + TEST_F(ConnectionHandlerTest, StartTransportManager) { AddTestDeviceConnection(); AddTestSession(); - transport_manager_test::TransportManagerMock mock_transport_manager; - connection_handler_->set_transport_manager(&mock_transport_manager); + EXPECT_CALL(mock_transport_manager, Visibility(true)); connection_handler_->StartTransportManager(); } +TEST_F(ConnectionHandlerTest, OnDeviceRemoved_ServiceNotStarted) { + // Precondition + const uint32_t dev_handle1 = 1; + const uint32_t dev_handle2 = 2; + + const transport_manager::DeviceInfo device1( + dev_handle1, mac_address_, device_name_, connection_type_); + const transport_manager::DeviceInfo device2( + dev_handle2, mac_address_, device_name_, connection_type_); + connection_handler_->OnDeviceAdded(device1); + connection_handler_->OnDeviceAdded(device2); + + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); + + EXPECT_CALL(mock_connection_handler_observer, RemoveDevice(dev_handle1)); + EXPECT_CALL(mock_connection_handler_observer, OnServiceEndedCallback(_, _, _)) + .Times(0); + connection_handler_->OnDeviceRemoved(device1); +} + +TEST_F(ConnectionHandlerTest, OnDeviceRemoved_ServiceStarted) { + // Precondition + AddTestDeviceConnection(); + AddTestSession(); + + const transport_manager::DeviceInfo device1( + device_handle_, mac_address_, device_name_, connection_type_); + + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); + + EXPECT_CALL(mock_connection_handler_observer, RemoveDevice(device_handle_)); + + EXPECT_CALL(mock_connection_handler_observer, + OnServiceEndedCallback(connection_key_, kBulk, kCommon)); + EXPECT_CALL(mock_connection_handler_observer, + OnServiceEndedCallback(connection_key_, kRpc, kCommon)); + connection_handler_->OnDeviceRemoved(device1); +} + +TEST_F(ConnectionHandlerTest, OnConnectionClosed) { + AddTestDeviceConnection(); + AddTestSession(); + + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); + + EXPECT_CALL(mock_connection_handler_observer, + OnServiceEndedCallback(connection_key_, kBulk, kCommon)); + EXPECT_CALL(mock_connection_handler_observer, + OnServiceEndedCallback(connection_key_, kRpc, kCommon)); + + connection_handler_->OnConnectionClosed(uid_); +} + +TEST_F(ConnectionHandlerTest, OnUnexpectedDisconnect) { + AddTestDeviceConnection(); + AddTestSession(); + + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); + transport_manager::CommunicationError err; + EXPECT_CALL(mock_connection_handler_observer, + OnServiceEndedCallback( + connection_key_, kBulk, CloseSessionReason::kCommon)); + EXPECT_CALL(mock_connection_handler_observer, + OnServiceEndedCallback( + connection_key_, kRpc, CloseSessionReason::kCommon)); + + connection_handler_->OnUnexpectedDisconnect(uid_, err); +} + +TEST_F(ConnectionHandlerTest, ConnectToDevice) { + // Precondition + const uint32_t dev_handle1 = 1; + const uint32_t dev_handle2 = 2; + + const transport_manager::DeviceInfo device1( + dev_handle1, mac_address_, device_name_, connection_type_); + const transport_manager::DeviceInfo device2( + dev_handle2, mac_address_, device_name_, connection_type_); + connection_handler_->OnDeviceAdded(device1); + connection_handler_->OnDeviceAdded(device2); + + EXPECT_CALL(mock_transport_manager, ConnectDevice(dev_handle1)) + .WillOnce(Return(transport_manager::E_SUCCESS)); + EXPECT_CALL(mock_transport_manager, ConnectDevice(dev_handle2)).Times(0); + connection_handler_->ConnectToDevice(dev_handle1); +} + +TEST_F(ConnectionHandlerTest, ConnectToAllDevices) { + // Precondition + const uint32_t dev_handle1 = 1; + const uint32_t dev_handle2 = 2; + + const transport_manager::DeviceInfo device1( + dev_handle1, mac_address_, device_name_, connection_type_); + const transport_manager::DeviceInfo device2( + dev_handle2, mac_address_, device_name_, connection_type_); + connection_handler_->OnDeviceAdded(device1); + connection_handler_->OnDeviceAdded(device2); + + EXPECT_CALL(mock_transport_manager, ConnectDevice(dev_handle1)) + .WillOnce(Return(transport_manager::E_SUCCESS)); + EXPECT_CALL(mock_transport_manager, ConnectDevice(dev_handle2)) + .WillOnce(Return(transport_manager::E_SUCCESS)); + connection_handler_->ConnectToAllDevices(); +} + TEST_F(ConnectionHandlerTest, CloseConnection) { AddTestDeviceConnection(); AddTestSession(); - transport_manager_test::TransportManagerMock mock_transport_manager; - connection_handler_->set_transport_manager(&mock_transport_manager); + EXPECT_CALL(mock_transport_manager, DisconnectForce(uid_)); connection_handler_->CloseConnection(uid_); } @@ -480,8 +795,7 @@ TEST_F(ConnectionHandlerTest, CloseConnection) { TEST_F(ConnectionHandlerTest, CloseRevokedConnection) { AddTestDeviceConnection(); AddTestSession(); - transport_manager_test::TransportManagerMock mock_transport_manager; - connection_handler_->set_transport_manager(&mock_transport_manager); + EXPECT_CALL(mock_transport_manager, DisconnectForce(uid_)); connection_handler_->CloseRevokedConnection(connection_key_); } @@ -491,24 +805,27 @@ TEST_F(ConnectionHandlerTest, CloseSessionWithCommonReason) { AddTestSession(); AddTestService(kAudio); AddTestService(kMobileNav); - connection_handler_test::ConnectionHandlerObserverMock mock_connection_handler_observer; - connection_handler_->set_connection_handler_observer(&mock_connection_handler_observer); - - protocol_handler_test::ProtocolHandlerMock mock_protocol_handler; - connection_handler_->set_protocol_handler(&mock_protocol_handler); - - EXPECT_CALL(mock_protocol_handler, SendEndSession(uid_,start_session_id_)); - + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); + + connection_handler_->set_protocol_handler(&mock_protocol_handler_); + EXPECT_CALL(mock_protocol_handler_, SendEndSession(uid_, start_session_id_)) + .Times(1); InSequence seq; EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kMobileNav, kCommon)).Times(1); + OnServiceEndedCallback(connection_key_, kMobileNav, kCommon)) + .Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kAudio, kCommon)).Times(1); + OnServiceEndedCallback(connection_key_, kAudio, kCommon)) + .Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kBulk, kCommon)).Times(1); + OnServiceEndedCallback(connection_key_, kBulk, kCommon)).Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kRpc, kCommon)).Times(1); + OnServiceEndedCallback(connection_key_, kRpc, kCommon)).Times(1); connection_handler_->CloseSession(connection_key_, kCommon); + Mock::AsyncVerifyAndClearExpectations(10000); } TEST_F(ConnectionHandlerTest, CloseSessionWithFloodReason) { @@ -516,24 +833,27 @@ TEST_F(ConnectionHandlerTest, CloseSessionWithFloodReason) { AddTestSession(); AddTestService(kAudio); AddTestService(kMobileNav); - connection_handler_test::ConnectionHandlerObserverMock mock_connection_handler_observer; - connection_handler_->set_connection_handler_observer(&mock_connection_handler_observer); + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); - protocol_handler_test::ProtocolHandlerMock mock_protocol_handler; - connection_handler_->set_protocol_handler(&mock_protocol_handler); - - EXPECT_CALL(mock_protocol_handler, SendEndSession(uid_,start_session_id_)); + connection_handler_->set_protocol_handler(&mock_protocol_handler_); + EXPECT_CALL(mock_protocol_handler_, SendEndSession(uid_, start_session_id_)) + .Times(1); InSequence seq; EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kMobileNav, kFlood)).Times(1); + OnServiceEndedCallback(connection_key_, kMobileNav, kFlood)) + .Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kAudio, kFlood)).Times(1); + OnServiceEndedCallback(connection_key_, kAudio, kFlood)).Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kBulk, kFlood)).Times(1); + OnServiceEndedCallback(connection_key_, kBulk, kFlood)).Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kRpc, kFlood)).Times(1); + OnServiceEndedCallback(connection_key_, kRpc, kFlood)).Times(1); connection_handler_->CloseSession(connection_key_, kFlood); + Mock::AsyncVerifyAndClearExpectations(10000); } TEST_F(ConnectionHandlerTest, CloseSessionWithMalformedMessage) { @@ -541,24 +861,30 @@ TEST_F(ConnectionHandlerTest, CloseSessionWithMalformedMessage) { AddTestSession(); AddTestService(kAudio); AddTestService(kMobileNav); - connection_handler_test::ConnectionHandlerObserverMock mock_connection_handler_observer; - connection_handler_->set_connection_handler_observer(&mock_connection_handler_observer); - - protocol_handler_test::ProtocolHandlerMock mock_protocol_handler; - connection_handler_->set_protocol_handler(&mock_protocol_handler); + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); - EXPECT_CALL(mock_protocol_handler, SendEndSession(uid_,start_session_id_)).Times(0); + connection_handler_->set_protocol_handler(&mock_protocol_handler_); + EXPECT_CALL(mock_protocol_handler_, SendEndSession(uid_, start_session_id_)) + .Times(0); InSequence seq; EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kMobileNav, kMalformed)).Times(1); + OnServiceEndedCallback(connection_key_, kMobileNav, kMalformed)) + .Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kAudio, kMalformed)).Times(1); + OnServiceEndedCallback(connection_key_, kAudio, kMalformed)) + .Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kBulk, kMalformed)).Times(1); + OnServiceEndedCallback(connection_key_, kBulk, kMalformed)) + .Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kRpc, kMalformed)).Times(1); + OnServiceEndedCallback(connection_key_, kRpc, kMalformed)) + .Times(1); connection_handler_->CloseSession(connection_key_, kMalformed); + Mock::AsyncVerifyAndClearExpectations(10000); } TEST_F(ConnectionHandlerTest, CloseConnectionSessionsWithMalformedMessage) { @@ -566,24 +892,30 @@ TEST_F(ConnectionHandlerTest, CloseConnectionSessionsWithMalformedMessage) { AddTestSession(); AddTestService(kAudio); AddTestService(kMobileNav); - connection_handler_test::ConnectionHandlerObserverMock mock_connection_handler_observer; - connection_handler_->set_connection_handler_observer(&mock_connection_handler_observer); + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); - protocol_handler_test::ProtocolHandlerMock mock_protocol_handler; - connection_handler_->set_protocol_handler(&mock_protocol_handler); - - EXPECT_CALL(mock_protocol_handler, SendEndSession(uid_,start_session_id_)).Times(0); + connection_handler_->set_protocol_handler(&mock_protocol_handler_); + EXPECT_CALL(mock_protocol_handler_, SendEndSession(uid_, start_session_id_)) + .Times(0); InSequence seq; EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kMobileNav, kMalformed)).Times(1); + OnServiceEndedCallback(connection_key_, kMobileNav, kMalformed)) + .Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kAudio, kMalformed)).Times(1); + OnServiceEndedCallback(connection_key_, kAudio, kMalformed)) + .Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kBulk, kMalformed)).Times(1); + OnServiceEndedCallback(connection_key_, kBulk, kMalformed)) + .Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kRpc, kMalformed)).Times(1); + OnServiceEndedCallback(connection_key_, kRpc, kMalformed)) + .Times(1); connection_handler_->CloseConnectionSessions(uid_, kMalformed); + Mock::AsyncVerifyAndClearExpectations(10000); } TEST_F(ConnectionHandlerTest, CloseConnectionSessionsWithCommonReason) { @@ -591,24 +923,28 @@ TEST_F(ConnectionHandlerTest, CloseConnectionSessionsWithCommonReason) { AddTestSession(); AddTestService(kAudio); AddTestService(kMobileNav); - connection_handler_test::ConnectionHandlerObserverMock mock_connection_handler_observer; - connection_handler_->set_connection_handler_observer(&mock_connection_handler_observer); - - protocol_handler_test::ProtocolHandlerMock mock_protocol_handler; - connection_handler_->set_protocol_handler(&mock_protocol_handler); + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); - EXPECT_CALL(mock_protocol_handler, SendEndSession(uid_,start_session_id_)); + connection_handler_->set_protocol_handler(&mock_protocol_handler_); + EXPECT_CALL(mock_protocol_handler_, SendEndSession(uid_, start_session_id_)) + .Times(1); InSequence seq; EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kMobileNav, kCommon)).Times(1); + OnServiceEndedCallback(connection_key_, kMobileNav, kCommon)) + .Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kAudio, kCommon)).Times(1); + OnServiceEndedCallback(connection_key_, kAudio, kCommon)) + .Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kBulk, kCommon)).Times(1); + OnServiceEndedCallback(connection_key_, kBulk, kCommon)).Times(1); EXPECT_CALL(mock_connection_handler_observer, - OnServiceEndedCallback(connection_key_,kRpc, kCommon)).Times(1); + OnServiceEndedCallback(connection_key_, kRpc, kCommon)).Times(1); connection_handler_->CloseConnectionSessions(uid_, kCommon); + Mock::AsyncVerifyAndClearExpectations(10000); } TEST_F(ConnectionHandlerTest, StartService_withServices) { @@ -618,7 +954,7 @@ TEST_F(ConnectionHandlerTest, StartService_withServices) { // Start Audio service const uint32_t start_audio = connection_handler_->OnSessionStartedCallback( - uid_, start_session_id_, kAudio, PROTECTION_OFF, &out_hash_id_); + uid_, start_session_id_, kAudio, PROTECTION_OFF, &out_hash_id_); EXPECT_EQ(start_session_id_, start_audio); CheckServiceExists(uid_, start_session_id_, kAudio, true); EXPECT_EQ(protocol_handler::HASH_ID_NOT_SUPPORTED, out_hash_id_); @@ -634,8 +970,8 @@ TEST_F(ConnectionHandlerTest, StartService_withServices) { TEST_F(ConnectionHandlerTest, ServiceStop_UnExistSession) { AddTestDeviceConnection(); - const uint32_t end_session_result = connection_handler_->OnSessionEndedCallback( - uid_, 0u, 0u, kAudio); + const uint32_t end_session_result = + connection_handler_->OnSessionEndedCallback(uid_, 0u, 0u, kAudio); EXPECT_EQ(0u, end_session_result); CheckSessionExists(uid_, 0); } @@ -643,8 +979,9 @@ TEST_F(ConnectionHandlerTest, ServiceStop_UnExistSession) { TEST_F(ConnectionHandlerTest, ServiceStop_UnExistService) { AddTestDeviceConnection(); AddTestSession(); - const uint32_t end_session_result = connection_handler_->OnSessionEndedCallback( - uid_, start_session_id_, 0u, kAudio); + const uint32_t end_session_result = + connection_handler_->OnSessionEndedCallback( + uid_, start_session_id_, 0u, kAudio); EXPECT_EQ(0u, end_session_result); CheckServiceExists(uid_, start_session_id_, kAudio, false); } @@ -656,12 +993,13 @@ TEST_F(ConnectionHandlerTest, ServiceStop) { for (uint32_t some_hash_id = 0; some_hash_id < 0xFF; ++some_hash_id) { // Start audio service const uint32_t start_audio = connection_handler_->OnSessionStartedCallback( - uid_, start_session_id_, kAudio, PROTECTION_OFF, &out_hash_id_); + uid_, start_session_id_, kAudio, PROTECTION_OFF, &out_hash_id_); EXPECT_EQ(start_session_id_, start_audio); EXPECT_EQ(protocol_handler::HASH_ID_NOT_SUPPORTED, out_hash_id_); - const uint32_t end_session_result = connection_handler_->OnSessionEndedCallback( - uid_, start_session_id_, some_hash_id, kAudio); + const uint32_t end_session_result = + connection_handler_->OnSessionEndedCallback( + uid_, start_session_id_, some_hash_id, kAudio); EXPECT_EQ(connection_key_, end_session_result); CheckServiceExists(uid_, start_session_id_, kAudio, false); } @@ -675,13 +1013,14 @@ TEST_F(ConnectionHandlerTest, SessionStop_CheckHash) { const uint32_t hash = connection_key_; const uint32_t wrong_hash = hash + 1; - const uint32_t end_audio_wrong_hash = connection_handler_->OnSessionEndedCallback( - uid_, start_session_id_, wrong_hash, kRpc); + const uint32_t end_audio_wrong_hash = + connection_handler_->OnSessionEndedCallback( + uid_, start_session_id_, wrong_hash, kRpc); EXPECT_EQ(0u, end_audio_wrong_hash); CheckSessionExists(uid_, start_session_id_); const uint32_t end_audio = connection_handler_->OnSessionEndedCallback( - uid_, start_session_id_, hash, kRpc); + uid_, start_session_id_, hash, kRpc); EXPECT_EQ(connection_key_, end_audio); CheckSessionExists(uid_, 0); } @@ -695,26 +1034,53 @@ TEST_F(ConnectionHandlerTest, SessionStop_CheckSpecificHash) { const uint32_t wrong_hash = protocol_handler::HASH_ID_WRONG; const uint32_t hash = protocol_handler::HASH_ID_NOT_SUPPORTED; - const uint32_t end_audio_wrong_hash = connection_handler_->OnSessionEndedCallback( - uid_, start_session_id_, wrong_hash, kRpc); + const uint32_t end_audio_wrong_hash = + connection_handler_->OnSessionEndedCallback( + uid_, start_session_id_, wrong_hash, kRpc); EXPECT_EQ(0u, end_audio_wrong_hash); CheckSessionExists(uid_, start_session_id_); const uint32_t end_audio = connection_handler_->OnSessionEndedCallback( - uid_, start_session_id_, hash, kRpc); + uid_, start_session_id_, hash, kRpc); EXPECT_EQ(connection_key_, end_audio); CheckSessionExists(uid_, 0); } } -TEST_F(ConnectionHandlerTest, SessionStarted_StartSession_SecureSpecific_Unprotect) { +TEST_F(ConnectionHandlerTest, SessionStarted_WithRpc) { + // Add virtual device and connection + AddTestDeviceConnection(); + // Expect that rpc service has started + connection_handler_test::ConnectionHandlerObserverMock + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); + uint32_t session_key = + connection_handler_->KeyFromPair(uid_, start_session_id_); + EXPECT_CALL(mock_connection_handler_observer, + OnServiceStartedCallback(device_handle_, session_key, kRpc)) + .WillOnce(Return(true)); + + // Start new session with RPC service + uint32_t new_session_id = connection_handler_->OnSessionStartedCallback( + uid_, 0, kRpc, PROTECTION_OFF, &out_hash_id_); + + EXPECT_NE(0u, new_session_id); +} + +TEST_F(ConnectionHandlerTest, + SessionStarted_StartSession_SecureSpecific_Unprotect) { + EXPECT_CALL(mock_connection_handler_settings, heart_beat_timeout()) + .WillOnce(Return(heartbeat_timeout)); // Add virtual device and connection AddTestDeviceConnection(); // Forbid start kRPC without encryption - SetSpecificServices("0x07", ""); + protected_services_.push_back(kRpc); + SetSpecificServices(); // Start new session with RPC service - const uint32_t session_id_fail = connection_handler_->OnSessionStartedCallback( - uid_, 0, kRpc, PROTECTION_OFF, &out_hash_id_); + const uint32_t session_id_fail = + connection_handler_->OnSessionStartedCallback( + uid_, 0, kRpc, PROTECTION_OFF, &out_hash_id_); #ifdef ENABLE_SECURITY EXPECT_EQ(0u, session_id_fail); EXPECT_EQ(protocol_handler::HASH_ID_WRONG, out_hash_id_); @@ -724,23 +1090,31 @@ TEST_F(ConnectionHandlerTest, SessionStarted_StartSession_SecureSpecific_Unprote #endif // ENABLE_SECURITY // Allow start kRPC without encryption - SetSpecificServices("0x00, Non", ""); + protected_services_.clear(); + protected_services_.push_back(kControl); + SetSpecificServices(); // Start new session with RPC service const uint32_t session_id = connection_handler_->OnSessionStartedCallback( - uid_, 0, kRpc, PROTECTION_OFF, &out_hash_id_); + uid_, 0, kRpc, PROTECTION_OFF, &out_hash_id_); EXPECT_NE(0u, session_id); CheckService(uid_, session_id, kRpc, NULL, PROTECTION_OFF); EXPECT_EQ(SessionHash(uid_, session_id), out_hash_id_); } -TEST_F(ConnectionHandlerTest, SessionStarted_StartSession_SecureSpecific_Protect) { +TEST_F(ConnectionHandlerTest, + SessionStarted_StartSession_SecureSpecific_Protect) { // Add virtual device and connection AddTestDeviceConnection(); // Forbid start kRPC with encryption - SetSpecificServices("", "0x06, 0x07, 0x08, Non"); + unprotected_services_.push_back(UnnamedService::kServedService1); + unprotected_services_.push_back(kRpc); + unprotected_services_.push_back(UnnamedService::kServedService2); + unprotected_services_.push_back(kControl); + SetSpecificServices(); // Start new session with RPC service - const uint32_t session_id_fail = connection_handler_->OnSessionStartedCallback( - uid_, 0, kRpc, PROTECTION_ON, NULL); + const uint32_t session_id_fail = + connection_handler_->OnSessionStartedCallback( + uid_, 0, kRpc, PROTECTION_ON, NULL); #ifdef ENABLE_SECURITY EXPECT_EQ(0u, session_id_fail); #else @@ -748,10 +1122,12 @@ TEST_F(ConnectionHandlerTest, SessionStarted_StartSession_SecureSpecific_Protect #endif // ENABLE_SECURITY // Allow start kRPC with encryption - SetSpecificServices("", "0x00, 0x05, Non"); + unprotected_services_.clear(); + unprotected_services_.push_back(kControl); + SetSpecificServices(); // Start new session with RPC service const uint32_t session_id = connection_handler_->OnSessionStartedCallback( - uid_, 0, kRpc, PROTECTION_ON, &out_hash_id_); + uid_, 0, kRpc, PROTECTION_ON, &out_hash_id_); EXPECT_NE(0u, session_id); EXPECT_EQ(SessionHash(uid_, session_id), out_hash_id_); @@ -759,67 +1135,75 @@ TEST_F(ConnectionHandlerTest, SessionStarted_StartSession_SecureSpecific_Protect CheckService(uid_, session_id, kRpc, NULL, PROTECTION_OFF); } -TEST_F(ConnectionHandlerTest, SessionStarted_StartService_SecureSpecific_Unprotect) { +TEST_F(ConnectionHandlerTest, + SessionStarted_StartService_SecureSpecific_Unprotect) { AddTestDeviceConnection(); AddTestSession(); - // Audio is 0x0A - ASSERT_EQ(0x0A, kAudio); - // Forbid start kAudio without encryption - SetSpecificServices("0x06, 0x0A, 0x08, Non", ""); + protected_services_.push_back(UnnamedService::kServedService1); + protected_services_.push_back(kAudio); + protected_services_.push_back(UnnamedService::kServedService2); + protected_services_.push_back(kControl); + SetSpecificServices(); // Start new session with Audio service const uint32_t session_id2 = connection_handler_->OnSessionStartedCallback( - uid_, start_session_id_, kAudio, PROTECTION_OFF, NULL); + uid_, start_session_id_, kAudio, PROTECTION_OFF, NULL); #ifdef ENABLE_SECURITY EXPECT_EQ(0u, session_id2); #else EXPECT_EQ(1u, session_id2); #endif // ENABLE_SECURITY // Allow start kAudio without encryption - SetSpecificServices("0x06, 0x0B, 0x08, Non", ""); + protected_services_.clear(); + protected_services_.push_back(UnnamedService::kServedService1); + protected_services_.push_back(kMobileNav); + protected_services_.push_back(UnnamedService::kServedService2); + protected_services_.push_back(kControl); + SetSpecificServices(); const uint32_t session_id3 = connection_handler_->OnSessionStartedCallback( - uid_, start_session_id_, kAudio, PROTECTION_OFF, &out_hash_id_); - // Returned original session id + uid_, start_session_id_, kAudio, PROTECTION_OFF, &out_hash_id_); +// Returned original session id #ifdef ENABLE_SECURITY EXPECT_EQ(start_session_id_, session_id3); EXPECT_EQ(protocol_handler::HASH_ID_NOT_SUPPORTED, out_hash_id_); - CheckService(uid_, session_id3, kRpc, - NULL, - PROTECTION_OFF); + CheckService(uid_, session_id3, kRpc, NULL, PROTECTION_OFF); #else EXPECT_EQ(0u, session_id3); EXPECT_EQ(protocol_handler::HASH_ID_WRONG, out_hash_id_); #endif // ENABLE_SECURITY } -TEST_F(ConnectionHandlerTest, SessionStarted_StartService_SecureSpecific_Protect) { +TEST_F(ConnectionHandlerTest, + SessionStarted_StartService_SecureSpecific_Protect) { AddTestDeviceConnection(); AddTestSession(); - // Audio is 0x0A - ASSERT_EQ(0x0A, kAudio); // Forbid start kAudio with encryption - SetSpecificServices("", "0x06, 0x0A, 0x08, Non"); + unprotected_services_.push_back(UnnamedService::kServedService1); + unprotected_services_.push_back(kAudio); + unprotected_services_.push_back(UnnamedService::kServedService2); + unprotected_services_.push_back(kControl); + SetSpecificServices(); // Start new session with Audio service - const uint32_t session_id_reject = connection_handler_->OnSessionStartedCallback( - uid_, start_session_id_, kAudio, PROTECTION_ON, NULL); + const uint32_t session_id_reject = + connection_handler_->OnSessionStartedCallback( + uid_, start_session_id_, kAudio, PROTECTION_ON, NULL); #ifdef ENABLE_SECURITY EXPECT_EQ(0u, session_id_reject); #else EXPECT_EQ(1u, session_id_reject); #endif // ENABLE_SECURITY // Allow start kAudio with encryption - SetSpecificServices("", "Non"); + unprotected_services_.clear(); + SetSpecificServices(); const uint32_t session_id3 = connection_handler_->OnSessionStartedCallback( - uid_, start_session_id_, kAudio, PROTECTION_ON, &out_hash_id_); - // Returned original session id + uid_, start_session_id_, kAudio, PROTECTION_ON, &out_hash_id_); +// Returned original session id #ifdef ENABLE_SECURITY EXPECT_EQ(start_session_id_, session_id3); EXPECT_EQ(protocol_handler::HASH_ID_NOT_SUPPORTED, out_hash_id_); - CheckService(uid_, session_id3, kAudio, - NULL, - PROTECTION_ON); + CheckService(uid_, session_id3, kAudio, NULL, PROTECTION_ON); #else EXPECT_EQ(0u, session_id3); EXPECT_EQ(protocol_handler::HASH_ID_WRONG, out_hash_id_); @@ -833,14 +1217,12 @@ TEST_F(ConnectionHandlerTest, SessionStarted_DealyProtect) { // Start RPC protection const uint32_t session_id_new = connection_handler_->OnSessionStartedCallback( - uid_, start_session_id_, kRpc, PROTECTION_ON, &out_hash_id_); + uid_, start_session_id_, kRpc, PROTECTION_ON, &out_hash_id_); #ifdef ENABLE_SECURITY EXPECT_EQ(start_session_id_, session_id_new); // Post protection nedd no hash EXPECT_EQ(protocol_handler::HASH_ID_NOT_SUPPORTED, out_hash_id_); - CheckService(uid_, start_session_id_, kRpc, - NULL, - PROTECTION_ON); + CheckService(uid_, start_session_id_, kRpc, NULL, PROTECTION_ON); #else EXPECT_EQ(0u, session_id_new); // Post protection nedd no hash @@ -850,20 +1232,18 @@ TEST_F(ConnectionHandlerTest, SessionStarted_DealyProtect) { // Start Audio session without protection const uint32_t session_id2 = connection_handler_->OnSessionStartedCallback( - uid_, start_session_id_, kAudio, PROTECTION_OFF, &out_hash_id_); + uid_, start_session_id_, kAudio, PROTECTION_OFF, &out_hash_id_); EXPECT_EQ(start_session_id_, session_id2); EXPECT_EQ(protocol_handler::HASH_ID_NOT_SUPPORTED, out_hash_id_); CheckService(uid_, start_session_id_, kAudio, NULL, PROTECTION_OFF); // Start Audio protection const uint32_t session_id3 = connection_handler_->OnSessionStartedCallback( - uid_, start_session_id_, kAudio, PROTECTION_ON, &out_hash_id_); + uid_, start_session_id_, kAudio, PROTECTION_ON, &out_hash_id_); #ifdef ENABLE_SECURITY EXPECT_EQ(start_session_id_, session_id3); EXPECT_EQ(protocol_handler::HASH_ID_NOT_SUPPORTED, out_hash_id_); - CheckService(uid_, start_session_id_, kAudio, - NULL, - PROTECTION_ON); + CheckService(uid_, start_session_id_, kAudio, NULL, PROTECTION_ON); #else EXPECT_EQ(0u, session_id3); EXPECT_EQ(protocol_handler::HASH_ID_WRONG, out_hash_id_); @@ -876,12 +1256,10 @@ TEST_F(ConnectionHandlerTest, SessionStarted_DealyProtectBulk) { AddTestSession(); const uint32_t session_id_new = connection_handler_->OnSessionStartedCallback( - uid_, start_session_id_, kBulk, PROTECTION_ON, NULL); + uid_, start_session_id_, kBulk, PROTECTION_ON, NULL); #ifdef ENABLE_SECURITY EXPECT_EQ(start_session_id_, session_id_new); - CheckService(uid_, start_session_id_, kRpc, - NULL, - PROTECTION_ON); + CheckService(uid_, start_session_id_, kRpc, NULL, PROTECTION_ON); #else EXPECT_EQ(0u, session_id_new); CheckService(uid_, start_session_id_, kRpc, NULL, PROTECTION_OFF); @@ -892,40 +1270,41 @@ TEST_F(ConnectionHandlerTest, SessionStarted_DealyProtectBulk) { TEST_F(ConnectionHandlerTest, SetSSLContext_Null) { // No SSLContext on start up EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kControl), - reinterpret_cast<security_manager::SSLContext *>(NULL)); + reinterpret_cast<security_manager::SSLContext*>(NULL)); EXPECT_EQ(::security_manager::SecurityManager::ERROR_INTERNAL, - connection_handler_->SetSSLContext(connection_key_, NULL)); + connection_handler_->SetSSLContext(connection_key_, NULL)); // No SSLContext after error EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kControl), - reinterpret_cast<security_manager::SSLContext *>(NULL)); + reinterpret_cast<security_manager::SSLContext*>(NULL)); AddTestDeviceConnection(); EXPECT_EQ(::security_manager::SecurityManager::ERROR_INTERNAL, - connection_handler_->SetSSLContext(connection_key_, NULL)); + connection_handler_->SetSSLContext(connection_key_, NULL)); // No SSLContext after error EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kControl), - reinterpret_cast<security_manager::SSLContext *>(NULL)); + reinterpret_cast<security_manager::SSLContext*>(NULL)); AddTestSession(); EXPECT_EQ(::security_manager::SecurityManager::ERROR_SUCCESS, - connection_handler_->SetSSLContext(connection_key_, NULL)); + connection_handler_->SetSSLContext(connection_key_, NULL)); // NULL SSLContext after success EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kControl), - reinterpret_cast<security_manager::SSLContext *>(NULL)); + reinterpret_cast<security_manager::SSLContext*>(NULL)); } + TEST_F(ConnectionHandlerTest, SetSSLContext) { // No SSLContext on start up EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kControl), - reinterpret_cast<security_manager::SSLContext *>(NULL)); + reinterpret_cast<security_manager::SSLContext*>(NULL)); - testing::StrictMock<security_manager_test::SSLContextMock> mock_ssl_context; + testing::StrictMock<security_manager_test::MockSSLContext> mock_ssl_context; // Error on no connection EXPECT_EQ( connection_handler_->SetSSLContext(connection_key_, &mock_ssl_context), ::security_manager::SecurityManager::ERROR_INTERNAL); // No SSLContext after error EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kControl), - reinterpret_cast<security_manager::SSLContext *>(NULL)); + reinterpret_cast<security_manager::SSLContext*>(NULL)); AddTestDeviceConnection(); // Error on no session @@ -934,7 +1313,7 @@ TEST_F(ConnectionHandlerTest, SetSSLContext) { ::security_manager::SecurityManager::ERROR_INTERNAL); // No SSLContext after error EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kControl), - reinterpret_cast<security_manager::SSLContext *>(NULL)); + reinterpret_cast<security_manager::SSLContext*>(NULL)); AddTestSession(); // Success EXPECT_EQ( @@ -942,24 +1321,24 @@ TEST_F(ConnectionHandlerTest, SetSSLContext) { ::security_manager::SecurityManager::ERROR_SUCCESS); // SSLContext set on Success EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kControl), - &mock_ssl_context); + &mock_ssl_context); // Null SSLContext for unprotected services EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kRpc), - reinterpret_cast<security_manager::SSLContext *>(NULL)); + reinterpret_cast<security_manager::SSLContext*>(NULL)); EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kBulk), - reinterpret_cast<security_manager::SSLContext *>(NULL)); + reinterpret_cast<security_manager::SSLContext*>(NULL)); EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kAudio), - reinterpret_cast<security_manager::SSLContext *>(NULL)); + reinterpret_cast<security_manager::SSLContext*>(NULL)); EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kMobileNav), - reinterpret_cast<security_manager::SSLContext *>(NULL)); + reinterpret_cast<security_manager::SSLContext*>(NULL)); } TEST_F(ConnectionHandlerTest, GetSSLContext_ByProtectedService) { // No SSLContext on start up EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kControl), - reinterpret_cast<security_manager::SSLContext *>(NULL)); + reinterpret_cast<security_manager::SSLContext*>(NULL)); - testing::StrictMock<security_manager_test::SSLContextMock> mock_ssl_context; + testing::StrictMock<security_manager_test::MockSSLContext> mock_ssl_context; AddTestDeviceConnection(); AddTestSession(); EXPECT_EQ( @@ -967,11 +1346,11 @@ TEST_F(ConnectionHandlerTest, GetSSLContext_ByProtectedService) { ::security_manager::SecurityManager::ERROR_SUCCESS); // kControl service mean - return for all connection EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kControl), - &mock_ssl_context); + &mock_ssl_context); // kAudio is not exists yet EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kAudio), - reinterpret_cast<security_manager::SSLContext *>(NULL)); + reinterpret_cast<security_manager::SSLContext*>(NULL)); // Open kAudio service const uint32_t session_id = connection_handler_->OnSessionStartedCallback( uid_, start_session_id_, kAudio, PROTECTION_ON, NULL); @@ -980,21 +1359,22 @@ TEST_F(ConnectionHandlerTest, GetSSLContext_ByProtectedService) { // kAudio is not exists yet EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kAudio), - &mock_ssl_context); + &mock_ssl_context); } + TEST_F(ConnectionHandlerTest, GetSSLContext_ByDealyProtectedRPC) { - testing::StrictMock<security_manager_test::SSLContextMock> mock_ssl_context; + testing::StrictMock<security_manager_test::MockSSLContext> mock_ssl_context; AddTestDeviceConnection(); AddTestSession(); EXPECT_EQ( connection_handler_->SetSSLContext(connection_key_, &mock_ssl_context), ::security_manager::SecurityManager::ERROR_SUCCESS); EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kControl), - &mock_ssl_context); + &mock_ssl_context); // kRpc is not protected EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kRpc), - reinterpret_cast<security_manager::SSLContext *>(NULL)); + reinterpret_cast<security_manager::SSLContext*>(NULL)); // Protect kRpc (Bulk will be protect also) const uint32_t session_id = connection_handler_->OnSessionStartedCallback( @@ -1004,24 +1384,25 @@ TEST_F(ConnectionHandlerTest, GetSSLContext_ByDealyProtectedRPC) { // kRpc is protected EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kRpc), - &mock_ssl_context); + &mock_ssl_context); // kBulk is protected EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kBulk), - &mock_ssl_context); + &mock_ssl_context); } + TEST_F(ConnectionHandlerTest, GetSSLContext_ByDealyProtectedBulk) { - testing::StrictMock<security_manager_test::SSLContextMock> mock_ssl_context; + testing::StrictMock<security_manager_test::MockSSLContext> mock_ssl_context; AddTestDeviceConnection(); AddTestSession(); EXPECT_EQ( connection_handler_->SetSSLContext(connection_key_, &mock_ssl_context), ::security_manager::SecurityManager::ERROR_SUCCESS); EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kControl), - &mock_ssl_context); + &mock_ssl_context); // kRpc is not protected EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kRpc), - reinterpret_cast<security_manager::SSLContext *>(NULL)); + reinterpret_cast<security_manager::SSLContext*>(NULL)); // Protect Bulk (kRpc will be protected also) const uint32_t session_id = connection_handler_->OnSessionStartedCallback( @@ -1031,13 +1412,22 @@ TEST_F(ConnectionHandlerTest, GetSSLContext_ByDealyProtectedBulk) { // kRpc is protected EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kRpc), - &mock_ssl_context); + &mock_ssl_context); // kBulk is protected EXPECT_EQ(connection_handler_->GetSSLContext(connection_key_, kBulk), - &mock_ssl_context); + &mock_ssl_context); } #endif // ENABLE_SECURITY -} // namespace connection_handle_test +TEST_F(ConnectionHandlerTest, SendHeartBeat) { + // Add virtual device and connection + AddTestDeviceConnection(); + AddTestSession(); + connection_handler_->set_protocol_handler(&mock_protocol_handler_); + EXPECT_CALL(mock_protocol_handler_, SendHeartBeat(uid_, start_session_id_)); + connection_handler_->SendHeartBeat(uid_, start_session_id_); +} + +} // namespace connection_handler_test } // namespace components } // namespace test diff --git a/src/components/connection_handler/test/connection_test.cc b/src/components/connection_handler/test/connection_test.cc index a1e9307ce3..e36e9aa65c 100644 --- a/src/components/connection_handler/test/connection_test.cc +++ b/src/components/connection_handler/test/connection_test.cc @@ -30,14 +30,18 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#include <gtest/gtest.h> #include <algorithm> + +#include "gtest/gtest.h" + #include "protocol/common.h" #include "connection_handler/connection.h" #include "connection_handler/connection_handler_impl.h" #include "protocol/service_type.h" -#include "utils/shared_ptr.h" -#include "security_manager_mock.h" +#include "connection_handler/mock_connection_handler_settings.h" +#include "transport_manager/mock_transport_manager.h" +#include "security_manager/mock_security_manager.h" +#include "security_manager/mock_ssl_context.h" #define EXPECT_RETURN_TRUE true #define EXPECT_RETURN_FALSE false @@ -46,24 +50,25 @@ namespace test { namespace components { -namespace connection_handle { +namespace connection_handler_test { using namespace ::connection_handler; using namespace ::protocol_handler; class ConnectionTest : public ::testing::Test { protected: void SetUp() OVERRIDE { - connection_handler_ = ConnectionHandlerImpl::instance(); + connection_handler_ = new ConnectionHandlerImpl( + mock_connection_handler_settings, transport_manager_mock); const ConnectionHandle connectionHandle = 0; - const DeviceHandle device_handle = 0; - connection_.reset( - new Connection(connectionHandle, device_handle, connection_handler_, - 10000)); + const DeviceHandle device_handle = 0u; + const uint32_t heart_beat = 10000u; + connection_ = new Connection( + connectionHandle, device_handle, connection_handler_, heart_beat); } void TearDown() OVERRIDE { - connection_.reset(); - ConnectionHandlerImpl::destroy(); + delete connection_; + delete connection_handler_; } void StartSession() { session_id = connection_->AddNewSession(); @@ -72,17 +77,17 @@ class ConnectionTest : public ::testing::Test { EXPECT_FALSE(sessionMap.empty()); const ServiceList serviceList = sessionMap.begin()->second.service_list; EXPECT_FALSE(serviceList.empty()); - const ServiceList::const_iterator it = std::find(serviceList.begin(), - serviceList.end(), - protocol_handler::kRpc); - EXPECT_NE(it, serviceList.end()); + const ServiceList::const_iterator it = + std::find(serviceList.begin(), serviceList.end(), kRpc); + const bool found_result = (it != serviceList.end()); + EXPECT_TRUE(found_result); } - void AddNewService(const protocol_handler::ServiceType service_type, + void AddNewService(const ServiceType service_type, const bool protection, const bool expect_add_new_service_call_result, const bool expect_exist_service) { - const bool result = connection_->AddNewService(session_id, service_type, - protection); + const bool result = + connection_->AddNewService(session_id, service_type, protection); EXPECT_EQ(result, expect_add_new_service_call_result); #ifdef ENABLE_SECURITY @@ -94,9 +99,8 @@ class ConnectionTest : public ::testing::Test { EXPECT_FALSE(session_map.empty()); const ServiceList newServiceList = session_map.begin()->second.service_list; EXPECT_FALSE(newServiceList.empty()); - const ServiceList::const_iterator it = std::find(newServiceList.begin(), - newServiceList.end(), - service_type); + const ServiceList::const_iterator it = + std::find(newServiceList.begin(), newServiceList.end(), service_type); const bool found_result = it != newServiceList.end(); EXPECT_EQ(expect_exist_service, found_result); #ifdef ENABLE_SECURITY @@ -107,7 +111,7 @@ class ConnectionTest : public ::testing::Test { #endif // ENABLE_SECURITY } - void RemoveService(const protocol_handler::ServiceType service_type, + void RemoveService(const ServiceType service_type, const bool expect_remove_service_result, const bool expect_exist_service) { const bool result = connection_->RemoveService(session_id, service_type); @@ -115,22 +119,23 @@ class ConnectionTest : public ::testing::Test { const SessionMap newSessionMap = connection_->session_map(); EXPECT_FALSE(newSessionMap.empty()); - const ServiceList newServiceList = newSessionMap.begin()->second - .service_list; + const ServiceList newServiceList = + newSessionMap.begin()->second.service_list; EXPECT_FALSE(newServiceList.empty()); - const ServiceList::const_iterator it = std::find(newServiceList.begin(), - newServiceList.end(), - service_type); - const bool found_result = it != newServiceList.end(); + const ServiceList::const_iterator it = + std::find(newServiceList.begin(), newServiceList.end(), service_type); + const bool found_result = (it != newServiceList.end()); EXPECT_EQ(expect_exist_service, found_result); } - ::utils::SharedPtr<Connection> connection_; + Connection* connection_; + MockConnectionHandlerSettings mock_connection_handler_settings; + testing::StrictMock<transport_manager_test::MockTransportManager> + transport_manager_mock; ConnectionHandlerImpl* connection_handler_; uint32_t session_id; }; - TEST_F(ConnectionTest, Session_TryGetProtocolVersionWithoutSession) { uint8_t protocol_version; EXPECT_FALSE(connection_->ProtocolVersion(session_id, protocol_version)); @@ -140,14 +145,14 @@ TEST_F(ConnectionTest, Session_GetDefaultProtocolVersion) { StartSession(); uint8_t protocol_version; EXPECT_TRUE(connection_->ProtocolVersion(session_id, protocol_version)); - EXPECT_EQ(protocol_version, ::protocol_handler::PROTOCOL_VERSION_2); + EXPECT_EQ(static_cast<uint8_t>(PROTOCOL_VERSION_2), protocol_version); } TEST_F(ConnectionTest, Session_UpdateProtocolVersion) { StartSession(); - uint8_t protocol_version = ::protocol_handler::PROTOCOL_VERSION_3; + uint8_t protocol_version = static_cast<uint8_t>(PROTOCOL_VERSION_3); connection_->UpdateProtocolVersionSession(session_id, protocol_version); EXPECT_TRUE(connection_->ProtocolVersion(session_id, protocol_version)); - EXPECT_EQ(protocol_version, ::protocol_handler::PROTOCOL_VERSION_3); + EXPECT_EQ(static_cast<uint8_t>(PROTOCOL_VERSION_3), protocol_version); } TEST_F(ConnectionTest, HeartBeat_NotSupported) { @@ -155,44 +160,64 @@ TEST_F(ConnectionTest, HeartBeat_NotSupported) { StartSession(); uint8_t protocol_version; EXPECT_TRUE(connection_->ProtocolVersion(session_id, protocol_version)); - EXPECT_EQ(protocol_version, ::protocol_handler::PROTOCOL_VERSION_2); + EXPECT_EQ(static_cast<uint8_t>(PROTOCOL_VERSION_2), protocol_version); // Assert EXPECT_FALSE(connection_->SupportHeartBeat(session_id)); } -TEST_F(ConnectionTest, DISABLED_HeartBeat_Supported) { +TEST_F(ConnectionTest, HeartBeat_Protocol3_Supported) { // Arrange StartSession(); - - // Check if protocol version is 3 - uint8_t protocol_version = ::protocol_handler::PROTOCOL_VERSION_3; + // Check execution if protocol version is 3 + const uint8_t protocol_version = static_cast<uint8_t>(PROTOCOL_VERSION_3); connection_->UpdateProtocolVersionSession(session_id, protocol_version); - EXPECT_EQ(protocol_version, ::protocol_handler::PROTOCOL_VERSION_3); + EXPECT_TRUE(connection_->SupportHeartBeat(session_id)); +} - // Assert +TEST_F(ConnectionTest, HeartBeat_Protocol4_PositiveHeartBeat_Supported) { + // Arrange + StartSession(); + // Check execution if protocol version is 4 + const uint8_t protocol_version = static_cast<uint8_t>(PROTOCOL_VERSION_4); + connection_->UpdateProtocolVersionSession(session_id, protocol_version); EXPECT_TRUE(connection_->SupportHeartBeat(session_id)); } +TEST_F(ConnectionTest, HeartBeat_Protocol4_ZeroHeartBeat_NotSupported) { + // Correctc of connection (need connection with heartbeat=0) + delete connection_; + connection_ = 0; + + const ConnectionHandle connectionHandle = 0; + const DeviceHandle device_handle = 0u; + const uint32_t heart_beat = 0u; + connection_ = new Connection( + connectionHandle, device_handle, connection_handler_, heart_beat); + StartSession(); + // Check execution if protocol version is 4 + const uint8_t protocol_version = static_cast<uint8_t>(PROTOCOL_VERSION_4); + connection_->UpdateProtocolVersionSession(session_id, protocol_version); + EXPECT_FALSE(connection_->SupportHeartBeat(session_id)); +} + // Try to add service without session TEST_F(ConnectionTest, Session_AddNewServiceWithoutSession) { - EXPECT_EQ( - connection_->AddNewService(session_id, protocol_handler::kAudio, true), - EXPECT_RETURN_FALSE); - EXPECT_EQ( - connection_->AddNewService(session_id, protocol_handler::kAudio, false), - EXPECT_RETURN_FALSE); - EXPECT_EQ( - connection_->AddNewService(session_id, protocol_handler::kMobileNav, true), - EXPECT_RETURN_FALSE); - EXPECT_EQ( - connection_->AddNewService(session_id, protocol_handler::kMobileNav, false), - EXPECT_RETURN_FALSE); + EXPECT_EQ(connection_->AddNewService(session_id, kAudio, true), + EXPECT_RETURN_FALSE); + EXPECT_EQ(connection_->AddNewService(session_id, kAudio, false), + EXPECT_RETURN_FALSE); + EXPECT_EQ(connection_->AddNewService(session_id, kMobileNav, true), + EXPECT_RETURN_FALSE); + EXPECT_EQ(connection_->AddNewService(session_id, kMobileNav, false), + EXPECT_RETURN_FALSE); } // Try to remove service without session TEST_F(ConnectionTest, Session_RemoveServiceWithoutSession) { - EXPECT_EQ(connection_->RemoveService(session_id, protocol_handler::kAudio), + EXPECT_EQ(connection_->RemoveService(session_id, kAudio), + EXPECT_RETURN_FALSE); + EXPECT_EQ(connection_->RemoveService(session_id, kMobileNav), EXPECT_RETURN_FALSE); EXPECT_EQ( connection_->RemoveService(session_id, protocol_handler::kMobileNav), @@ -201,70 +226,67 @@ TEST_F(ConnectionTest, Session_RemoveServiceWithoutSession) { // Try to remove RPC TEST_F(ConnectionTest, Session_RemoveRPCBulk) { StartSession(); - EXPECT_EQ(connection_->RemoveService(session_id, protocol_handler::kRpc), - EXPECT_RETURN_FALSE); - EXPECT_EQ(connection_->RemoveService(session_id, protocol_handler::kBulk), - EXPECT_RETURN_FALSE); + EXPECT_EQ(connection_->RemoveService(session_id, kRpc), EXPECT_RETURN_FALSE); + EXPECT_EQ(connection_->RemoveService(session_id, kBulk), EXPECT_RETURN_FALSE); } // Control Service could not be started anyway TEST_F(ConnectionTest, Session_AddControlService) { StartSession(); - - AddNewService(protocol_handler::kControl, PROTECTION_OFF, EXPECT_RETURN_FALSE, - EXPECT_SERVICE_NOT_EXISTS); - AddNewService(protocol_handler::kControl, PROTECTION_ON, EXPECT_RETURN_FALSE, - EXPECT_SERVICE_NOT_EXISTS); + AddNewService( + kControl, PROTECTION_OFF, EXPECT_RETURN_FALSE, EXPECT_SERVICE_NOT_EXISTS); + AddNewService( + kControl, PROTECTION_ON, EXPECT_RETURN_FALSE, EXPECT_SERVICE_NOT_EXISTS); } // Invalid Services couldnot be started anyway TEST_F(ConnectionTest, Session_AddInvalidService) { StartSession(); - AddNewService(protocol_handler::kInvalidServiceType, PROTECTION_OFF, - EXPECT_RETURN_FALSE, EXPECT_SERVICE_NOT_EXISTS); - AddNewService(protocol_handler::kInvalidServiceType, PROTECTION_ON, - EXPECT_RETURN_FALSE, EXPECT_SERVICE_NOT_EXISTS); + AddNewService(kInvalidServiceType, + PROTECTION_OFF, + EXPECT_RETURN_FALSE, + EXPECT_SERVICE_NOT_EXISTS); + AddNewService(kInvalidServiceType, + PROTECTION_ON, + EXPECT_RETURN_FALSE, + EXPECT_SERVICE_NOT_EXISTS); } // RPC and Bulk Services could be only delay protected TEST_F(ConnectionTest, Session_AddRPCBulkServices) { StartSession(); - AddNewService(protocol_handler::kRpc, PROTECTION_OFF, - EXPECT_RETURN_FALSE, EXPECT_SERVICE_EXISTS); + AddNewService( + kRpc, PROTECTION_OFF, EXPECT_RETURN_FALSE, EXPECT_SERVICE_EXISTS); // Bulk shall not be added and shall be PROTECTION_OFF - AddNewService(protocol_handler::kBulk, PROTECTION_OFF, - EXPECT_RETURN_FALSE, EXPECT_SERVICE_EXISTS); + AddNewService( + kBulk, PROTECTION_OFF, EXPECT_RETURN_FALSE, EXPECT_SERVICE_EXISTS); #ifdef ENABLE_SECURITY - AddNewService(protocol_handler::kRpc, PROTECTION_ON, - EXPECT_RETURN_TRUE, - EXPECT_SERVICE_EXISTS); + AddNewService(kRpc, PROTECTION_ON, EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); #else - AddNewService(protocol_handler::kRpc, PROTECTION_ON, - EXPECT_RETURN_FALSE, EXPECT_SERVICE_EXISTS); + AddNewService( + kRpc, PROTECTION_ON, EXPECT_RETURN_FALSE, EXPECT_SERVICE_EXISTS); #endif // ENABLE_SECURITY // Bulk shall not be added and shall be PROTECTION_ON - AddNewService(protocol_handler::kBulk, PROTECTION_ON, - EXPECT_RETURN_FALSE, EXPECT_SERVICE_EXISTS); + AddNewService( + kBulk, PROTECTION_ON, EXPECT_RETURN_FALSE, EXPECT_SERVICE_EXISTS); } TEST_F(ConnectionTest, Session_AddAllOtherService_Unprotected) { StartSession(); - - AddNewService(protocol_handler::kAudio, PROTECTION_OFF, - EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); - AddNewService(protocol_handler::kMobileNav, PROTECTION_OFF, - EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); + AddNewService( + kAudio, PROTECTION_OFF, EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); + AddNewService( + kMobileNav, PROTECTION_OFF, EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); } TEST_F(ConnectionTest, Session_AddAllOtherService_Protected) { StartSession(); - - AddNewService(protocol_handler::kAudio, PROTECTION_ON, - EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); - AddNewService(protocol_handler::kMobileNav, PROTECTION_ON, - EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); + AddNewService( + kAudio, PROTECTION_ON, EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); + AddNewService( + kMobileNav, PROTECTION_ON, EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); } TEST_F(ConnectionTest, FindAddedService) { @@ -272,82 +294,79 @@ TEST_F(ConnectionTest, FindAddedService) { // Arrange SessionMap currentSessionMap = connection_->session_map(); - Service * sessionWithService = currentSessionMap.find(session_id)->second - .FindService(protocol_handler::kAudio); + Service* sessionWithService = + currentSessionMap.find(session_id)->second.FindService(kAudio); EXPECT_EQ(NULL, sessionWithService); // Act - AddNewService(protocol_handler::kAudio, PROTECTION_OFF, - EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); + AddNewService( + kAudio, PROTECTION_OFF, EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); currentSessionMap = connection_->session_map(); // Expect that service is existing - sessionWithService = currentSessionMap.find(session_id)->second.FindService( - protocol_handler::kAudio); + sessionWithService = + currentSessionMap.find(session_id)->second.FindService(kAudio); EXPECT_TRUE(sessionWithService != NULL); } TEST_F(ConnectionTest, Session_RemoveAddedService) { StartSession(); - AddNewService(protocol_handler::kAudio, PROTECTION_OFF, - EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); + AddNewService( + kAudio, PROTECTION_OFF, EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); - EXPECT_EQ(connection_->RemoveService(session_id, protocol_handler::kAudio), - EXPECT_RETURN_TRUE); + EXPECT_EQ(connection_->RemoveService(session_id, kAudio), EXPECT_RETURN_TRUE); // Try delete nonexisting service - EXPECT_EQ(connection_->RemoveService(session_id, protocol_handler::kAudio), + EXPECT_EQ(connection_->RemoveService(session_id, kAudio), EXPECT_RETURN_FALSE); } TEST_F(ConnectionTest, Session_AddAllOtherService_DelayProtected1) { StartSession(); - AddNewService(protocol_handler::kAudio, PROTECTION_OFF, - EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); + AddNewService( + kAudio, PROTECTION_OFF, EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); - AddNewService(protocol_handler::kMobileNav, PROTECTION_OFF, - EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); + AddNewService( + kMobileNav, PROTECTION_OFF, EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); #ifdef ENABLE_SECURITY - AddNewService(protocol_handler::kAudio, PROTECTION_ON, - EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); + AddNewService( + kAudio, PROTECTION_ON, EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); - AddNewService(protocol_handler::kMobileNav, PROTECTION_ON, - EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); + AddNewService( + kMobileNav, PROTECTION_ON, EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); #else - AddNewService(protocol_handler::kAudio, PROTECTION_ON, - EXPECT_RETURN_FALSE, EXPECT_SERVICE_EXISTS); + AddNewService( + kAudio, PROTECTION_ON, EXPECT_RETURN_FALSE, EXPECT_SERVICE_EXISTS); - AddNewService(protocol_handler::kMobileNav, PROTECTION_ON, - EXPECT_RETURN_FALSE, EXPECT_SERVICE_EXISTS); + AddNewService( + kMobileNav, PROTECTION_ON, EXPECT_RETURN_FALSE, EXPECT_SERVICE_EXISTS); #endif // ENABLE_SECURITY } // Use other order TEST_F(ConnectionTest, Session_AddAllOtherService_DelayProtected2) { StartSession(); - - AddNewService(protocol_handler::kAudio, PROTECTION_OFF, - EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); + AddNewService( + kAudio, PROTECTION_OFF, EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); #ifdef ENABLE_SECURITY - AddNewService(protocol_handler::kAudio, PROTECTION_ON, - EXPECT_RETURN_TRUE, - EXPECT_SERVICE_EXISTS); + AddNewService( + kAudio, PROTECTION_ON, EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); #else - AddNewService(protocol_handler::kAudio, PROTECTION_ON, - EXPECT_RETURN_FALSE, EXPECT_SERVICE_EXISTS); + AddNewService( + kAudio, PROTECTION_ON, EXPECT_RETURN_FALSE, EXPECT_SERVICE_EXISTS); #endif // ENABLE_SECURITY - AddNewService(protocol_handler::kMobileNav, PROTECTION_OFF, - EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); + AddNewService( + kMobileNav, PROTECTION_OFF, EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); #ifdef ENABLE_SECURITY - AddNewService(protocol_handler::kMobileNav, PROTECTION_ON, - EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); + AddNewService( + kMobileNav, PROTECTION_ON, EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); #else - AddNewService(protocol_handler::kMobileNav, PROTECTION_ON, - EXPECT_RETURN_FALSE, EXPECT_SERVICE_EXISTS); + AddNewService( + kMobileNav, PROTECTION_ON, EXPECT_RETURN_FALSE, EXPECT_SERVICE_EXISTS); #endif // ENABLE_SECURITY } @@ -360,86 +379,84 @@ TEST_F(ConnectionTest, RemoveSession) { #ifdef ENABLE_SECURITY TEST_F(ConnectionTest, SetSSLContextWithoutSession) { - //random value. Session was not started + // random value. Session was not started uint8_t session_id = 10; - security_manager_test::SSLContextMock mock_ssl_context; + security_manager_test::MockSSLContext mock_ssl_context; int setResult = connection_->SetSSLContext(session_id, &mock_ssl_context); - EXPECT_EQ(security_manager::SecurityManager::ERROR_INTERNAL,setResult); + EXPECT_EQ(security_manager::SecurityManager::ERROR_INTERNAL, setResult); } TEST_F(ConnectionTest, GetSSLContextWithoutSession) { - //random value. Session was not started + // random value. Session was not started uint8_t session_id = 10; - EXPECT_EQ(NULL,connection_->GetSSLContext(session_id,protocol_handler::kMobileNav)); + EXPECT_EQ(NULL, connection_->GetSSLContext(session_id, kMobileNav)); } TEST_F(ConnectionTest, SetGetSSLContext) { StartSession(); - EXPECT_EQ(NULL,connection_->GetSSLContext(session_id,protocol_handler::kMobileNav)); - AddNewService(protocol_handler::kMobileNav, PROTECTION_ON, - EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); + EXPECT_EQ(NULL, connection_->GetSSLContext(session_id, kMobileNav)); + AddNewService( + kMobileNav, PROTECTION_ON, EXPECT_RETURN_TRUE, EXPECT_SERVICE_EXISTS); - EXPECT_EQ(NULL,connection_->GetSSLContext(session_id,protocol_handler::kMobileNav)); + EXPECT_EQ(NULL, connection_->GetSSLContext(session_id, kMobileNav)); - security_manager_test::SSLContextMock mock_ssl_context; - //Set SSLContext + security_manager_test::MockSSLContext mock_ssl_context; + // Set SSLContext int setResult = connection_->SetSSLContext(session_id, &mock_ssl_context); - EXPECT_EQ(security_manager::SecurityManager::ERROR_SUCCESS,setResult); + EXPECT_EQ(security_manager::SecurityManager::ERROR_SUCCESS, setResult); - security_manager::SSLContext *result = connection_->GetSSLContext(session_id,protocol_handler::kMobileNav); - EXPECT_EQ(result,&mock_ssl_context); + security_manager::SSLContext* result = + connection_->GetSSLContext(session_id, kMobileNav); + EXPECT_EQ(result, &mock_ssl_context); } TEST_F(ConnectionTest, SetProtectionFlagForRPC) { StartSession(); // Arrange SessionMap currentSessionMap = connection_->session_map(); - Service * service_rpc = currentSessionMap.find(session_id)->second - .FindService(protocol_handler::kRpc); + Service* service_rpc = + currentSessionMap.find(session_id)->second.FindService(kRpc); EXPECT_FALSE(service_rpc->is_protected_); - Service * service_bulk = currentSessionMap.find(session_id)->second - .FindService(protocol_handler::kBulk); + Service* service_bulk = + currentSessionMap.find(session_id)->second.FindService(kBulk); EXPECT_FALSE(service_bulk->is_protected_); // Expect that service protection is enabled - connection_->SetProtectionFlag(session_id, protocol_handler::kRpc); + connection_->SetProtectionFlag(session_id, kRpc); currentSessionMap = connection_->session_map(); - service_bulk = currentSessionMap.find(session_id)->second - .FindService(protocol_handler::kBulk); + service_bulk = currentSessionMap.find(session_id)->second.FindService(kBulk); EXPECT_TRUE(service_bulk->is_protected_); - service_rpc = currentSessionMap.find(session_id)->second - .FindService(protocol_handler::kRpc); + service_rpc = currentSessionMap.find(session_id)->second.FindService(kRpc); EXPECT_TRUE(service_rpc->is_protected_); } - TEST_F(ConnectionTest, SetProtectionFlagForBulk) { StartSession(); // Arrange SessionMap currentSessionMap = connection_->session_map(); - Service * service_rpc = currentSessionMap.find(session_id)->second - .FindService(protocol_handler::kRpc); + Service* service_rpc = + currentSessionMap.find(session_id)->second.FindService(kRpc); EXPECT_FALSE(service_rpc->is_protected_); - Service * service_bulk = currentSessionMap.find(session_id)->second - .FindService(protocol_handler::kBulk); + Service* service_bulk = + currentSessionMap.find(session_id)->second.FindService(kBulk); EXPECT_FALSE(service_bulk->is_protected_); // Expect that service protection is enabled - connection_->SetProtectionFlag(session_id, protocol_handler::kBulk); + connection_->SetProtectionFlag(session_id, kBulk); currentSessionMap = connection_->session_map(); - service_bulk = currentSessionMap.find(session_id)->second.FindService(protocol_handler::kBulk); + service_bulk = currentSessionMap.find(session_id)->second.FindService(kBulk); EXPECT_TRUE(service_bulk->is_protected_); - service_rpc = currentSessionMap.find(session_id)->second.FindService(protocol_handler::kRpc); + service_rpc = currentSessionMap.find(session_id)->second.FindService(kRpc); EXPECT_TRUE(service_rpc->is_protected_); } @@ -448,4 +465,3 @@ TEST_F(ConnectionTest, SetProtectionFlagForBulk) { } // namespace connection_handle } // namespace components } // namespace test - diff --git a/src/components/connection_handler/test/device_test.cc b/src/components/connection_handler/test/device_test.cc index dc1a51faf1..ea9aa746b5 100644 --- a/src/components/connection_handler/test/device_test.cc +++ b/src/components/connection_handler/test/device_test.cc @@ -55,7 +55,8 @@ TEST(ConnectionDevice, CompareDevicesWithDifferentMacAddresses) { std::string hash_mac_address = test_device.mac_address(); std::string test_next_mac_address = "test_address_"; - Device next_test_device(device_handle, device_name, test_next_mac_address, connection_type); + Device next_test_device( + device_handle, device_name, test_next_mac_address, connection_type); EXPECT_NE(test_next_mac_address, next_test_device.mac_address()); std::string hash_next_mac_address = next_test_device.mac_address(); @@ -77,4 +78,3 @@ TEST(ConnectionDevice, MacAddressHash) { } // namespace connection_handle } // namespace components } // namespace test - 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 710977c643..2c928fe458 100644 --- a/src/components/connection_handler/test/heart_beat_monitor_test.cc +++ b/src/components/connection_handler/test/heart_beat_monitor_test.cc @@ -32,12 +32,11 @@ #include <string> #include <iostream> -//#include <stdio.h> -#include "gmock/gmock.h" +#include "gtest/gtest.h" #include "connection_handler/heartbeat_monitor.h" #include "connection_handler/connection.h" #include "connection_handler/connection_handler.h" -#include "config_profile/profile.h" +#include "connection_handler/mock_connection_handler.h" namespace { const int32_t MILLISECONDS_IN_SECOND = 1000; @@ -50,91 +49,42 @@ namespace components { namespace connection_handler_test { using ::testing::_; -class ConnectionHandlerMock : public connection_handler::ConnectionHandler { +class HeartBeatMonitorTest : public testing::Test { public: - MOCK_METHOD1(set_connection_handler_observer, - void(connection_handler::ConnectionHandlerObserver*)); - MOCK_METHOD1(set_transport_manager, - void(transport_manager::TransportManager*)); - MOCK_METHOD0(StartTransportManager, - void()); - MOCK_METHOD1(ConnectToDevice, - void(connection_handler::DeviceHandle device_handle)); - MOCK_METHOD0(ConnectToAllDevices, - void()); - MOCK_METHOD1(CloseRevokedConnection, void(uint32_t connection_key)); - MOCK_METHOD1(CloseConnection, - void(connection_handler::ConnectionHandle connection_handle)); - MOCK_METHOD1(GetConnectionSessionsCount, uint32_t(uint32_t connection_key)); - MOCK_METHOD2(GetDeviceID, - bool(const std::string& mac_address, - connection_handler::DeviceHandle* device_handle)); - MOCK_CONST_METHOD1(GetConnectedDevicesMAC, void(std::vector<std::string> &device_macs)); - MOCK_METHOD2(CloseSession, - void(uint32_t key, - connection_handler::CloseSessionReason close_reason)); - MOCK_METHOD3(CloseSession, - void(connection_handler::ConnectionHandle connection_handle, - uint8_t session_id, - connection_handler::CloseSessionReason close_reason)); - MOCK_METHOD2(SendEndService, - void(uint32_t key, uint8_t service_type)); - - MOCK_METHOD1(StartSessionHeartBeat, - void(uint32_t key)); - MOCK_METHOD2(SendHeartBeat, - void(connection_handler::ConnectionHandle connection_handle, - uint8_t session_id)); - MOCK_METHOD2(SetHeartBeatTimeout, void(uint32_t connection_key, - uint32_t timeout)); - MOCK_METHOD2(BindProtocolVersionWithSession, - void(uint32_t connection_key, - uint8_t protocol_version)); - MOCK_METHOD4(GetDataOnSessionKey, - int32_t(uint32_t key, uint32_t* app_id, - std::list<int32_t>* sessions_list, - uint32_t* device_id)); -}; + HeartBeatMonitorTest() : conn(NULL) { + kTimeout = 5000u; + } -class HeartBeatMonitorTest : public testing::Test { -public: - HeartBeatMonitorTest(): - conn(NULL) { - profile::Profile::instance()->config_file_name("smartDeviceLink.ini"); - kTimeout = profile::Profile::instance()->heart_beat_timeout(); - } - -protected: - testing::NiceMock<ConnectionHandlerMock> connection_handler_mock; + protected: + testing::NiceMock<MockConnectionHandler> connection_handler_mock; connection_handler::Connection* conn; uint32_t kTimeout; - static const connection_handler::ConnectionHandle kConnectionHandle = 0xABCDEF; + static const connection_handler::ConnectionHandle kConnectionHandle = + 0xABCDEF; virtual void SetUp() { - conn = new connection_handler::Connection(kConnectionHandle, 0, - &connection_handler_mock, - kTimeout); + conn = new connection_handler::Connection( + kConnectionHandle, 0, &connection_handler_mock, kTimeout); } - virtual void TearDown() { + void TearDown() OVERRIDE { delete conn; } - }; -ACTION_P2(RemoveSession, conn, session_id){ +ACTION_P2(RemoveSession, conn, session_id) { conn->RemoveSession(session_id); } TEST_F(HeartBeatMonitorTest, TimerNotStarted) { - - // Whithout StartHeartBeat nothing to be call + // 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); conn->AddNewSession(); - usleep(kTimeout * MICROSECONDS_IN_MILLISECONDS + MICROSECONDS_IN_SECOND); + testing::Mock::AsyncVerifyAndClearExpectations( + kTimeout * MICROSECONDS_IN_MILLISECONDS + MICROSECONDS_IN_SECOND); } TEST_F(HeartBeatMonitorTest, TimerNotElapsed) { @@ -144,19 +94,21 @@ TEST_F(HeartBeatMonitorTest, TimerNotElapsed) { const uint32_t session = conn->AddNewSession(); conn->StartHeartBeat(session); - usleep(kTimeout * MICROSECONDS_IN_MILLISECONDS - MICROSECONDS_IN_SECOND); + testing::Mock::AsyncVerifyAndClearExpectations( + kTimeout * MICROSECONDS_IN_MILLISECONDS - MICROSECONDS_IN_SECOND); } TEST_F(HeartBeatMonitorTest, TimerElapsed) { const uint32_t session = conn->AddNewSession(); - EXPECT_CALL(connection_handler_mock, CloseSession(_, session,_)) - .WillOnce(RemoveSession(conn, session)); + EXPECT_CALL(connection_handler_mock, CloseSession(_, session, _)) + .WillOnce(RemoveSession(conn, session)); EXPECT_CALL(connection_handler_mock, CloseConnection(_)); EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, session)); conn->StartHeartBeat(session); - usleep(2 * kTimeout * MICROSECONDS_IN_MILLISECONDS + MICROSECONDS_IN_SECOND); + testing::Mock::AsyncVerifyAndClearExpectations( + 2 * kTimeout * MICROSECONDS_IN_MILLISECONDS + MICROSECONDS_IN_SECOND); } TEST_F(HeartBeatMonitorTest, KeptAlive) { @@ -179,8 +131,8 @@ TEST_F(HeartBeatMonitorTest, NotKeptAlive) { const uint32_t session = conn->AddNewSession(); EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, session)); - EXPECT_CALL(connection_handler_mock, CloseSession(_, session,_)) - .WillOnce(RemoveSession(conn, session)); + EXPECT_CALL(connection_handler_mock, CloseSession(_, session, _)) + .WillOnce(RemoveSession(conn, session)); EXPECT_CALL(connection_handler_mock, CloseConnection(_)); conn->StartHeartBeat(session); @@ -197,17 +149,18 @@ TEST_F(HeartBeatMonitorTest, TwoSessionsElapsed) { const uint32_t kSession1 = conn->AddNewSession(); const uint32_t kSession2 = conn->AddNewSession(); - EXPECT_CALL(connection_handler_mock, CloseSession(_, kSession1,_)) - .WillOnce(RemoveSession(conn, kSession1)); - EXPECT_CALL(connection_handler_mock, CloseSession(_, kSession2,_)) - .WillOnce(RemoveSession(conn, kSession2)); + EXPECT_CALL(connection_handler_mock, CloseSession(_, kSession1, _)) + .WillOnce(RemoveSession(conn, kSession1)); + EXPECT_CALL(connection_handler_mock, CloseSession(_, kSession2, _)) + .WillOnce(RemoveSession(conn, kSession2)); EXPECT_CALL(connection_handler_mock, CloseConnection(_)); EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, kSession1)); EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, kSession2)); conn->StartHeartBeat(kSession1); conn->StartHeartBeat(kSession2); - usleep(2 * kTimeout * MICROSECONDS_IN_MILLISECONDS + MICROSECONDS_IN_SECOND); + testing::Mock::AsyncVerifyAndClearExpectations( + 2 * kTimeout * MICROSECONDS_IN_MILLISECONDS + MICROSECONDS_IN_SECOND); } TEST_F(HeartBeatMonitorTest, IncreaseHeartBeatTimeout) { @@ -217,19 +170,19 @@ TEST_F(HeartBeatMonitorTest, IncreaseHeartBeatTimeout) { 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); // new timeout greater by old timeout so mock object shouldn't be invoked - usleep(kTimeout * MICROSECONDS_IN_MILLISECONDS); + testing::Mock::AsyncVerifyAndClearExpectations(kTimeout * + MICROSECONDS_IN_MILLISECONDS); } TEST_F(HeartBeatMonitorTest, DecreaseHeartBeatTimeout) { const uint32_t kSession = conn->AddNewSession(); - EXPECT_CALL(connection_handler_mock, CloseSession(_, kSession,_)) - .WillOnce(RemoveSession(conn, kSession)); + EXPECT_CALL(connection_handler_mock, CloseSession(_, kSession, _)) + .WillOnce(RemoveSession(conn, kSession)); EXPECT_CALL(connection_handler_mock, CloseConnection(_)); EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, kSession)); @@ -237,9 +190,10 @@ TEST_F(HeartBeatMonitorTest, DecreaseHeartBeatTimeout) { conn->StartHeartBeat(kSession); conn->SetHeartBeatTimeout(kNewTimeout, kSession); // new timeout less than old timeout so mock object should be invoked - usleep(kTimeout * 2 * MICROSECONDS_IN_MILLISECONDS); + testing::Mock::AsyncVerifyAndClearExpectations(kTimeout * 2 * + MICROSECONDS_IN_MILLISECONDS); } -} // namespace connection_handler_test -} // namespace components -} // namespace test +} // namespace connection_handler_test +} // namespace components +} // namespace test diff --git a/src/components/connection_handler/test/include/connection_handler_observer_mock.h b/src/components/connection_handler/test/include/connection_handler/connection_handler_observer_mock.h index 9a74375262..aa22f1aa1c 100644 --- a/src/components/connection_handler/test/include/connection_handler_observer_mock.h +++ b/src/components/connection_handler/test/include/connection_handler/connection_handler_observer_mock.h @@ -33,7 +33,7 @@ #ifndef SRC_COMPONENTS_CONNECTION_HANDLER_TEST_INCLUDE_CONNECTION_HANDLER_OBSERVER_MOCK_H_ #define SRC_COMPONENTS_CONNECTION_HANDLER_TEST_INCLUDE_CONNECTION_HANDLER_OBSERVER_MOCK_H_ -#include <gmock/gmock.h> +#include "gmock/gmock.h" #include <string> #include "connection_handler/connection_handler_observer.h" @@ -42,29 +42,31 @@ namespace components { namespace connection_handler_test { /* - * MOCK implementation of ::connection_handler::ConnectionHandlerObserver interface + * MOCK implementation of ::connection_handler::ConnectionHandlerObserver + * interface */ -class ConnectionHandlerObserverMock : public ::connection_handler::ConnectionHandlerObserver { +class ConnectionHandlerObserverMock + : public ::connection_handler::ConnectionHandlerObserver { public: MOCK_METHOD1(OnDeviceListUpdated, - void(const connection_handler::DeviceMap &device_list)); - MOCK_METHOD0(OnFindNewApplicationsRequest,void()); + void(const connection_handler::DeviceMap& device_list)); + MOCK_METHOD0(OnFindNewApplicationsRequest, void()); MOCK_METHOD1(RemoveDevice, - void(const connection_handler::DeviceHandle &device_handle)); + void(const connection_handler::DeviceHandle& device_handle)); MOCK_METHOD3(OnServiceStartedCallback, - bool(const connection_handler::DeviceHandle &device_handle, - const int32_t &session_key, - const protocol_handler::ServiceType &type)); - MOCK_METHOD3(OnServiceEndedCallback, - void(const int32_t &session_key, - const protocol_handler::ServiceType &type, + bool(const connection_handler::DeviceHandle& device_handle, + const int32_t& session_key, + const protocol_handler::ServiceType& type)); + MOCK_METHOD3( + OnServiceEndedCallback, + void(const int32_t& session_key, + const protocol_handler::ServiceType& type, const connection_handler::CloseSessionReason& close_reason)); - MOCK_CONST_METHOD1(GetHandshakeContext, - security_manager::SSLContext::HandshakeContext( - uint32_t key)); - + MOCK_CONST_METHOD1( + GetHandshakeContext, + security_manager::SSLContext::HandshakeContext(uint32_t key)); }; -} // namespace connection_handler_test -} // namespace components -} // namespace test -#endif //SRC_COMPONENTS_CONNECTION_HANDLER_TEST_INCLUDE_CONNECTION_HANDLER_OBSERVER_MOCK_H_ +} // namespace connection_handler_test +} // namespace components +} // namespace test +#endif // SRC_COMPONENTS_CONNECTION_HANDLER_TEST_INCLUDE_CONNECTION_HANDLER_OBSERVER_MOCK_H_ |