From 976858ea43c0f72c1cb0cab3107edb29d9fd968c Mon Sep 17 00:00:00 2001 From: JackLivio Date: Tue, 20 Feb 2018 17:02:30 -0500 Subject: Fix bluetooth restore on startup --- .../transport_manager/src/transport_manager_impl.cc | 11 ++++++----- .../transport_manager/test/transport_manager_default_test.cc | 11 ++++++----- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/components/transport_manager/src/transport_manager_impl.cc b/src/components/transport_manager/src/transport_manager_impl.cc index 03e6bd58f6..f7b44d255b 100644 --- a/src/components/transport_manager/src/transport_manager_impl.cc +++ b/src/components/transport_manager/src/transport_manager_impl.cc @@ -435,15 +435,16 @@ int TransportManagerImpl::AddTransportAdapter( return E_ADAPTER_EXISTS; } + transport_adapter_listeners_[transport_adapter] = + new TransportAdapterListenerImpl(this, transport_adapter); + transport_adapter->AddListener( + transport_adapter_listeners_[transport_adapter]); + 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_adapters_.push_back(transport_adapter); } else { + transport_adapter_listeners_.erase(transport_adapter); 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..fd48ab8f22 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"; @@ -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; @@ -104,7 +106,6 @@ TEST(TestTransportManagerDefault, Init_LastStateUsed) { .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(); } -- cgit v1.2.1 From f0346e16e00ab0c3feb21cbb6364294058af6c5e Mon Sep 17 00:00:00 2001 From: JackLivio Date: Wed, 21 Feb 2018 12:44:11 -0500 Subject: Fix unit test failure --- .../transport_adapter/transport_adapter_impl.cc | 3 +- .../src/transport_manager_impl.cc | 9 +++--- .../test/transport_manager_default_test.cc | 33 +++++++++++++++++++++- 3 files changed, 39 insertions(+), 6 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..df9628f732 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,7 +159,7 @@ 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; diff --git a/src/components/transport_manager/src/transport_manager_impl.cc b/src/components/transport_manager/src/transport_manager_impl.cc index f7b44d255b..83419a50c9 100644 --- a/src/components/transport_manager/src/transport_manager_impl.cc +++ b/src/components/transport_manager/src/transport_manager_impl.cc @@ -435,16 +435,17 @@ int TransportManagerImpl::AddTransportAdapter( return E_ADAPTER_EXISTS; } - transport_adapter_listeners_[transport_adapter] = + auto listener = new TransportAdapterListenerImpl(this, transport_adapter); - transport_adapter->AddListener( - transport_adapter_listeners_[transport_adapter]); + + transport_adapter->AddListener(listener); if (transport_adapter->IsInitialised() || transport_adapter->Init() == TransportAdapter::OK) { + transport_adapter_listeners_[transport_adapter] = listener; transport_adapters_.push_back(transport_adapter); } else { - transport_adapter_listeners_.erase(transport_adapter); + 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 fd48ab8f22..d095a51cb6 100644 --- a/src/components/transport_manager/test/transport_manager_default_test.cc +++ b/src/components/transport_manager/test/transport_manager_default_test.cc @@ -73,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(); @@ -102,6 +102,37 @@ TEST(TestTransportManagerDefault, Init_LastStateUsed) { 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(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 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()) -- cgit v1.2.1 From ae5cf19d484597490f3c0fa05678533b2cfb2716 Mon Sep 17 00:00:00 2001 From: JackLivio Date: Wed, 21 Feb 2018 14:29:28 -0500 Subject: Warning only on failed restore --- .../transport_manager/src/transport_adapter/transport_adapter_impl.cc | 1 - 1 file changed, 1 deletion(-) 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 df9628f732..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 @@ -162,7 +162,6 @@ TransportAdapter::Error TransportAdapterImpl::Init() { 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); -- cgit v1.2.1