summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJackLivio <jack@livio.io>2022-03-03 16:28:46 -0500
committerGitHub <noreply@github.com>2022-03-03 16:28:46 -0500
commitbe6efb64176b8b6ffa30d37c01e8bb58862f947f (patch)
treeb51b044ab2692e8ac66183bdfb51d7d42660fc36
parentdf9331868f564b160931f0e11cb3abfb01b55236 (diff)
downloadsdl_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
-rw-r--r--src/components/connection_handler/src/connection_handler_impl.cc9
-rw-r--r--src/components/connection_handler/test/connection_handler_impl_test.cc92
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