summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJackLivio <jack@livio.io>2018-02-21 14:33:52 -0500
committerGitHub <noreply@github.com>2018-02-21 14:33:52 -0500
commit1c6592814f33d9cce8e8dc3af175194ececdf8e1 (patch)
treed044fac1f3d4a1f1b3da58bd7f34b07e6a44c675
parenta7d2216860e429f21f31dad9579526530abe60fd (diff)
parentae5cf19d484597490f3c0fa05678533b2cfb2716 (diff)
downloadsdl_core-1c6592814f33d9cce8e8dc3af175194ececdf8e1.tar.gz
Merge pull request #2018 from smartdevicelink/hotfix/bluetooth_restore_on_start
Fix bluetooth restore on startup
-rw-r--r--src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc4
-rw-r--r--src/components/transport_manager/src/transport_manager_impl.cc12
-rw-r--r--src/components/transport_manager/test/transport_manager_default_test.cc44
3 files changed, 47 insertions, 13 deletions
diff --git a/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc b/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
index 9fb0921c4b..bdacd68006 100644
--- a/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
+++ b/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
@@ -82,6 +82,7 @@ TransportAdapterImpl::TransportAdapterImpl(
}
TransportAdapterImpl::~TransportAdapterImpl() {
+ listeners_.clear();
Terminate();
if (device_scanner_) {
@@ -158,10 +159,9 @@ TransportAdapter::Error TransportAdapterImpl::Init() {
initialised_ = (error == OK);
- if (get_settings().use_last_state()) {
+ if (get_settings().use_last_state() && initialised_) {
if (!Restore()) {
LOG4CXX_WARN(logger_, "could not restore transport adapter state");
- error = FAIL;
}
}
LOG4CXX_TRACE(logger_, "exit with error: " << error);
diff --git a/src/components/transport_manager/src/transport_manager_impl.cc b/src/components/transport_manager/src/transport_manager_impl.cc
index 03e6bd58f6..83419a50c9 100644
--- a/src/components/transport_manager/src/transport_manager_impl.cc
+++ b/src/components/transport_manager/src/transport_manager_impl.cc
@@ -435,15 +435,17 @@ int TransportManagerImpl::AddTransportAdapter(
return E_ADAPTER_EXISTS;
}
+ auto listener =
+ new TransportAdapterListenerImpl(this, transport_adapter);
+
+ transport_adapter->AddListener(listener);
+
if (transport_adapter->IsInitialised() ||
transport_adapter->Init() == TransportAdapter::OK) {
- transport_adapter_listeners_[transport_adapter] =
- new TransportAdapterListenerImpl(this, transport_adapter);
- transport_adapter->AddListener(
- transport_adapter_listeners_[transport_adapter]);
-
+ transport_adapter_listeners_[transport_adapter] = listener;
transport_adapters_.push_back(transport_adapter);
} else {
+ delete listener;
delete transport_adapter;
}
LOG4CXX_TRACE(logger_, "exit with E_SUCCESS");
diff --git a/src/components/transport_manager/test/transport_manager_default_test.cc b/src/components/transport_manager/test/transport_manager_default_test.cc
index 0d8e574317..d095a51cb6 100644
--- a/src/components/transport_manager/test/transport_manager_default_test.cc
+++ b/src/components/transport_manager/test/transport_manager_default_test.cc
@@ -51,6 +51,8 @@ const std::string kDeviceAddress = "address";
const std::string kDeviceApplications = "applications";
const std::string kApplicationPort = "port";
const std::string kApplicationPortValue = "12345";
+const std::string kApplicationRfcomm = "rfcomm_channel";
+const std::string kApplicationRfcommValue = "7";
const std::string kTransportManager = "TransportManager";
const std::string kTcpAdapter = "TcpAdapter";
const std::string kBluetoothAdapter = "BluetoothAdapter";
@@ -71,7 +73,7 @@ TEST(TestTransportManagerDefault, Init_LastStateNotUsed) {
EXPECT_CALL(transport_manager_settings, use_last_state())
.WillRepeatedly(Return(false));
EXPECT_CALL(transport_manager_settings, transport_manager_tcp_adapter_port())
- .WillRepeatedly(Return(1u));
+ .WillRepeatedly(Return(12345u));
transport_manager.Init(mock_last_state);
transport_manager.Stop();
@@ -86,13 +88,13 @@ TEST(TestTransportManagerDefault, Init_LastStateUsed) {
Json::Value custom_dictionary;
Json::Value tcp_device;
tcp_device[kDeviceName] = "unique_tcp_device_name";
- tcp_device[kDeviceAddress] = "57.48.0.1";
+ tcp_device[kDeviceAddress] = "127.0.0.1";
tcp_device[kDeviceApplications][0][kApplicationPort] = kApplicationPortValue;
Json::Value bluetooth_device;
bluetooth_device[kDeviceName] = "unique_bluetooth_device_name";
- bluetooth_device[kDeviceAddress] = "57.48.0.2";
- bluetooth_device[kDeviceApplications][0][kApplicationPort] =
- kApplicationPortValue;
+ bluetooth_device[kDeviceAddress] = "AB:CD:EF:GH:IJ:KL";
+ bluetooth_device[kDeviceApplications][0][kApplicationRfcomm] =
+ kApplicationRfcommValue;
custom_dictionary[kTransportManager][kTcpAdapter][kDevices][0] = tcp_device;
custom_dictionary[kTransportManager][kBluetoothAdapter][kDevices][0] =
bluetooth_device;
@@ -103,8 +105,38 @@ TEST(TestTransportManagerDefault, Init_LastStateUsed) {
EXPECT_CALL(transport_manager_settings, use_last_state())
.WillRepeatedly(Return(true));
EXPECT_CALL(transport_manager_settings, transport_manager_tcp_adapter_port())
- .WillRepeatedly(Return(1u));
+ .WillRepeatedly(Return(12345u));
+ transport_manager.Init(mock_last_state);
+ transport_manager.Stop();
+}
+
+TEST(TestTransportManagerDefault, Init_LastStateUsed_InvalidPort) {
+ MockTransportManagerSettings transport_manager_settings;
+ transport_manager::TransportManagerDefault transport_manager(
+ transport_manager_settings);
+
+ NiceMock<MockLastState> mock_last_state;
+ Json::Value custom_dictionary;
+ Json::Value tcp_device;
+ tcp_device[kDeviceName] = "unique_tcp_device_name";
+ tcp_device[kDeviceAddress] = "127.0.0.1";
+ tcp_device[kDeviceApplications][0][kApplicationPort] = "1";
+ Json::Value bluetooth_device;
+ bluetooth_device[kDeviceName] = "unique_bluetooth_device_name";
+ bluetooth_device[kDeviceAddress] = "AB:CD:EF:GH:IJ:KL";
+ bluetooth_device[kDeviceApplications][0][kApplicationRfcomm] =
+ kApplicationRfcommValue;
+ custom_dictionary[kTransportManager][kTcpAdapter][kDevices][0] = tcp_device;
+ custom_dictionary[kTransportManager][kBluetoothAdapter][kDevices][0] =
+ bluetooth_device;
+ ON_CALL(mock_last_state, get_dictionary())
+ .WillByDefault(ReturnRef(custom_dictionary));
+
+ EXPECT_CALL(transport_manager_settings, use_last_state())
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(transport_manager_settings, transport_manager_tcp_adapter_port())
+ .WillRepeatedly(Return(1u));
transport_manager.Init(mock_last_state);
transport_manager.Stop();
}