summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Oleynik (GitHub) <aoleynik@luxoft.com>2017-11-24 15:19:41 +0200
committerAndriy Byzhynar <AByzhynar@luxoft.com>2018-01-18 12:03:51 +0200
commit11bef60123b62bbe0f8f624bb24a5f0cf74980aa (patch)
tree4107f200920be493067ad798c9843af62c0de5df
parentec8b48590b89c2ba1dced1e33ad8565970829a5a (diff)
downloadsdl_core-11bef60123b62bbe0f8f624bb24a5f0cf74980aa.tar.gz
Fixes multiconnection from the same adapter type
On new device connection SDL has to skip devices already known for the same adapter from update device list update process.
-rw-r--r--src/components/transport_manager/src/transport_manager_impl.cc14
-rw-r--r--src/components/transport_manager/test/transport_manager_impl_test.cc13
2 files changed, 18 insertions, 9 deletions
diff --git a/src/components/transport_manager/src/transport_manager_impl.cc b/src/components/transport_manager/src/transport_manager_impl.cc
index 22e93615cd..4ab5371b74 100644
--- a/src/components/transport_manager/src/transport_manager_impl.cc
+++ b/src/components/transport_manager/src/transport_manager_impl.cc
@@ -795,17 +795,23 @@ bool TransportManagerImpl::UpdateDeviceMapping(
for (DeviceList::const_iterator it = device_list.begin();
it != device_list.end();
++it) {
- auto result = device_to_adapter_map_.insert(std::make_pair(*it, ta));
+ const auto device_uid = *it;
+ auto result = device_to_adapter_map_.insert(std::make_pair(device_uid, ta));
if (result.second || TryDeviceSwitch(ta, result.first)) {
DeviceHandle device_handle =
- converter_.UidToHandle(*it, ta->GetConnectionType());
+ converter_.UidToHandle(device_uid, ta->GetConnectionType());
DeviceInfo info(
- device_handle, *it, ta->DeviceName(*it), ta->GetConnectionType());
+ device_handle, device_uid, ta->DeviceName(device_uid),
+ ta->GetConnectionType());
RaiseEvent(&TransportManagerListener::OnDeviceFound, info);
+ } else if(device_to_adapter_map_[device_uid]->GetDeviceType() ==
+ ta->GetDeviceType()) {
+ LOG4CXX_DEBUG(logger_, "Device with UID: " << device_uid
+ << " is found for the same adapter type. Skipping.");
} else {
LOG4CXX_ERROR(
logger_,
- "Same UUID " + *it + "detected, but transport switching failed.");
+ "Same UID " + device_uid + " detected, but transport switching failed.");
return false;
}
}
diff --git a/src/components/transport_manager/test/transport_manager_impl_test.cc b/src/components/transport_manager/test/transport_manager_impl_test.cc
index cd5bb27a0f..65884d8e94 100644
--- a/src/components/transport_manager/test/transport_manager_impl_test.cc
+++ b/src/components/transport_manager/test/transport_manager_impl_test.cc
@@ -1082,7 +1082,8 @@ TEST_F(
EXPECT_CALL(*second_mock_adapter, IsInitialised()).WillOnce(Return(true));
EXPECT_EQ(E_SUCCESS, tm_.AddTransportAdapter(second_mock_adapter));
- // Act and Assert
+ EXPECT_CALL(*mock_adapter_, GetDeviceType())
+ .WillRepeatedly(Return(transport_adapter::DeviceType::TCP));
EXPECT_CALL(*mock_adapter_, GetDeviceList())
.WillRepeatedly(Return(device_list_));
EXPECT_CALL(*mock_adapter_, DeviceName(dev_info_.mac_address()))
@@ -1092,6 +1093,8 @@ TEST_F(
EXPECT_CALL(*tm_listener_, OnDeviceFound(dev_info_));
EXPECT_CALL(*tm_listener_, OnDeviceAdded(dev_info_));
EXPECT_CALL(*tm_listener_, OnDeviceListUpdated(_));
+
+ // Act
tm_.OnDeviceListUpdated(mock_adapter_);
EXPECT_CALL(*second_mock_adapter, GetDeviceList())
@@ -1100,13 +1103,13 @@ TEST_F(
.WillRepeatedly(Return(dev_info_.name()));
EXPECT_CALL(*second_mock_adapter, GetConnectionType())
.WillRepeatedly(Return(dev_info_.connection_type()));
-
- EXPECT_CALL(*mock_adapter_, GetDeviceType())
- .WillOnce(Return(transport_adapter::DeviceType::TCP));
-
+ EXPECT_CALL(*second_mock_adapter, GetDeviceType())
+ .WillRepeatedly(Return(transport_adapter::DeviceType::IOS_USB));
EXPECT_CALL(*second_mock_adapter, StopDevice(_)).Times(0);
EXPECT_CALL(*second_mock_adapter, DeviceSwitched(_)).Times(0);
EXPECT_CALL(*tm_listener_, OnDeviceListUpdated(_)).Times(0);
+
+ // Act
tm_.OnDeviceListUpdated(second_mock_adapter);
device_list_.pop_back();