diff options
author | JackLivio <jack@livio.io> | 2022-03-03 16:28:46 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-03 16:28:46 -0500 |
commit | be6efb64176b8b6ffa30d37c01e8bb58862f947f (patch) | |
tree | b51b044ab2692e8ac66183bdfb51d7d42660fc36 /src/components | |
parent | df9331868f564b160931f0e11cb3abfb01b55236 (diff) | |
download | sdl_core-be6efb64176b8b6ffa30d37c01e8bb58862f947f.tar.gz |
Check if app id exists in cloud_app_id_map_ (#3870)
* Check if app id exists in cloud_app_id_map_
* Update cloud_app_id_map_ if does not exist or endpoint changed
* Fix style
* Expand unit tests for connection handler
Diffstat (limited to 'src/components')
-rw-r--r-- | src/components/connection_handler/src/connection_handler_impl.cc | 9 | ||||
-rw-r--r-- | src/components/connection_handler/test/connection_handler_impl_test.cc | 92 |
2 files changed, 99 insertions, 2 deletions
diff --git a/src/components/connection_handler/src/connection_handler_impl.cc b/src/components/connection_handler/src/connection_handler_impl.cc index c2c70ccae8..e00eaa33e0 100644 --- a/src/components/connection_handler/src/connection_handler_impl.cc +++ b/src/components/connection_handler/src/connection_handler_impl.cc @@ -1487,8 +1487,13 @@ void ConnectionHandlerImpl::AddCloudAppDevice( const transport_manager::transport_adapter::CloudAppProperties& cloud_properties) { cloud_app_id_map_lock_.Acquire(); - cloud_app_id_map_[policy_app_id] = - std::make_pair(cloud_properties.endpoint, 0); + auto it = cloud_app_id_map_.find(policy_app_id); + if (cloud_app_id_map_.end() == it || + cloud_properties.endpoint != it->second.first) { + // Init map entry if does not exist or if endpoint changed + cloud_app_id_map_[policy_app_id] = + std::make_pair(cloud_properties.endpoint, 0); + } cloud_app_id_map_lock_.Release(); transport_manager_.AddCloudDevice(cloud_properties); } 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 79b237253c..5c9f9a7bd3 100644 --- a/src/components/connection_handler/test/connection_handler_impl_test.cc +++ b/src/components/connection_handler/test/connection_handler_impl_test.cc @@ -2463,6 +2463,98 @@ TEST_F(ConnectionHandlerTest, CloseSession_LastSession_ConnectionOpened) { EXPECT_EQ(0u, connection->session_map().size()); EXPECT_EQ(1u, connection_list.size()); } + +TEST_F(ConnectionHandlerTest, AddCloudAppDevice_GetCloudAppID_Success) { + const transport_manager::transport_adapter::CloudAppProperties properties{ + "ws://192.168.1.100:9876", "", true, "iAmAAuthToken!", "WS", "CLOUD"}; + std::string policyID = "iAmAPolicyID-12345"; + EXPECT_CALL(mock_transport_manager_, AddCloudDevice(_)); + connection_handler_->AddCloudAppDevice(policyID, properties); + + const std::string result = connection_handler_->GetCloudAppID(0); + EXPECT_EQ(result, policyID); +} + +TEST_F(ConnectionHandlerTest, AddCloudAppDevice_OnConnectPending_Success) { + std::string endpoint = "ws://192.168.1.100:9876"; + const transport_manager::transport_adapter::CloudAppProperties properties{ + endpoint, "", true, "iAmAAuthToken!", "WS", "CLOUD"}; + std::string policyID = "iAmAPolicyID-12345"; + const transport_manager::DeviceInfo device_info(1, endpoint, endpoint, "WS"); + + connection_handler_->OnDeviceAdded(device_info); + + EXPECT_CALL(mock_transport_manager_, AddCloudDevice(_)); + connection_handler_->AddCloudAppDevice(policyID, properties); + + connection_handler_test::MockConnectionHandlerObserver + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); + EXPECT_CALL(mock_connection_handler_observer, + CreatePendingApplication(1, device_info, _)); + connection_handler_->OnConnectionPending(device_info, 1); + + const std::string result = connection_handler_->GetCloudAppID(1); + EXPECT_EQ(result, policyID); +} + +TEST_F(ConnectionHandlerTest, AddCloudAppDevice_Repeated_Success) { + std::string endpoint = "ws://192.168.1.100:9876"; + const transport_manager::transport_adapter::CloudAppProperties properties{ + endpoint, "", true, "iAmAAuthToken!", "WS", "CLOUD"}; + std::string policyID = "iAmAPolicyID-12345"; + const transport_manager::DeviceInfo device_info(1, endpoint, endpoint, "WS"); + + connection_handler_->OnDeviceAdded(device_info); + + EXPECT_CALL(mock_transport_manager_, AddCloudDevice(_)).Times(2); + connection_handler_->AddCloudAppDevice(policyID, properties); + + connection_handler_test::MockConnectionHandlerObserver + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); + EXPECT_CALL(mock_connection_handler_observer, + CreatePendingApplication(1, device_info, _)); + connection_handler_->OnConnectionPending(device_info, 1); + + // Call AddCloudAppDevice and verify policy id is still recoverable + connection_handler_->AddCloudAppDevice(policyID, properties); + const std::string result = connection_handler_->GetCloudAppID(1); + EXPECT_EQ(result, policyID); +} + +TEST_F(ConnectionHandlerTest, AddCloudAppDevice_NewEndpoint_Success) { + std::string endpoint = "ws://192.168.1.100:9876"; + const transport_manager::transport_adapter::CloudAppProperties properties{ + endpoint, "", true, "iAmAAuthToken!", "WS", "CLOUD"}; + std::string policyID = "iAmAPolicyID-12345"; + const transport_manager::DeviceInfo device_info(1, endpoint, endpoint, "WS"); + + connection_handler_->OnDeviceAdded(device_info); + + EXPECT_CALL(mock_transport_manager_, AddCloudDevice(_)).Times(2); + connection_handler_->AddCloudAppDevice(policyID, properties); + + connection_handler_test::MockConnectionHandlerObserver + mock_connection_handler_observer; + connection_handler_->set_connection_handler_observer( + &mock_connection_handler_observer); + EXPECT_CALL(mock_connection_handler_observer, + CreatePendingApplication(1, device_info, _)); + connection_handler_->OnConnectionPending(device_info, 1); + + // Call AddCloudAppDevice with new endpoint and verify connection id re-init + // to 0 + std::string endpoint2 = "ws://192.168.1.111:9888"; + const transport_manager::transport_adapter::CloudAppProperties properties2{ + endpoint2, "", true, "iAmAAuthToken2!", "WS", "CLOUD"}; + connection_handler_->AddCloudAppDevice(policyID, properties2); + const std::string result = connection_handler_->GetCloudAppID(0); + EXPECT_EQ(result, policyID); +} + } // namespace connection_handler_test } // namespace components } // namespace test |