diff options
author | Andrey Oleynik (GitHub) <aoleynik@luxoft.com> | 2017-11-24 15:19:41 +0200 |
---|---|---|
committer | Andriy Byzhynar <AByzhynar@luxoft.com> | 2018-01-18 12:03:51 +0200 |
commit | 11bef60123b62bbe0f8f624bb24a5f0cf74980aa (patch) | |
tree | 4107f200920be493067ad798c9843af62c0de5df | |
parent | ec8b48590b89c2ba1dced1e33ad8565970829a5a (diff) | |
download | sdl_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.cc | 14 | ||||
-rw-r--r-- | src/components/transport_manager/test/transport_manager_impl_test.cc | 13 |
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(); |