summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJackLivio <jack@livio.io>2020-02-17 13:45:52 -0500
committerJackLivio <jack@livio.io>2020-02-17 13:45:52 -0500
commit610c3d8458a12a07955f0a39ade724216d4eae5e (patch)
tree2025ccb85697071d378d89d144f922b60434e79f
parentb28a10d21f08d78a733a37b51242a206a65a707b (diff)
parentece258838a44a5461d718c5eeae380ad11a3769b (diff)
downloadsdl_core-610c3d8458a12a07955f0a39ade724216d4eae5e.tar.gz
Merge remote-tracking branch 'origin/develop' into fix/hash_id_rejected_params
-rw-r--r--src/appMain/life_cycle_impl.cc23
-rw-r--r--src/appMain/life_cycle_impl.h2
-rw-r--r--src/components/application_manager/include/application_manager/app_launch/app_launch_data_json.h29
-rw-r--r--src/components/application_manager/include/application_manager/app_service_manager.h13
-rw-r--r--src/components/application_manager/include/application_manager/application_manager_impl.h6
-rw-r--r--src/components/application_manager/include/application_manager/hmi_capabilities_impl.h7
-rw-r--r--src/components/application_manager/include/application_manager/hmi_language_handler.h12
-rw-r--r--src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin.h12
-rw-r--r--src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin_manager_impl.h14
-rw-r--r--src/components/application_manager/include/application_manager/resumption/resume_ctrl.h7
-rw-r--r--src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h6
-rw-r--r--src/components/application_manager/include/application_manager/resumption/resumption_data.h1
-rw-r--r--src/components/application_manager/include/application_manager/resumption/resumption_data_db.h1
-rw-r--r--src/components/application_manager/include/application_manager/resumption/resumption_data_json.h32
-rw-r--r--src/components/application_manager/include/application_manager/state_controller_impl.h15
-rw-r--r--src/components/application_manager/rpc_plugins/app_service_rpc_plugin/include/app_service_rpc_plugin/app_service_rpc_plugin.h10
-rw-r--r--src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc14
-rw-r--r--src/components/application_manager/rpc_plugins/app_service_rpc_plugin/test/commands/mobile/on_app_service_data_notification_test.cc7
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_consent_manager.h2
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_consent_manager_impl.h31
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_rpc_plugin.h11
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_consent_manager_impl.cc82
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc10
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/include/rc_rpc_plugin/mock/mock_rc_consent_manager.h10
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/rc_consent_manager_impl_test.cc33
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/sdl_rpc_plugin.h7
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc14
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_plugin.h7
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc21
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/CMakeLists.txt2
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/unsubscribe_vehicle_request_test.cc7
-rw-r--r--src/components/application_manager/src/app_launch/app_launch_data_json.cc86
-rw-r--r--src/components/application_manager/src/app_service_manager.cc24
-rw-r--r--src/components/application_manager/src/application_impl.cc28
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc26
-rw-r--r--src/components/application_manager/src/hmi_capabilities_impl.cc7
-rw-r--r--src/components/application_manager/src/hmi_language_handler.cc16
-rw-r--r--src/components/application_manager/src/plugin_manager/rpc_plugin_manager_impl.cc2
-rw-r--r--src/components/application_manager/src/policies/policy_handler.cc4
-rw-r--r--src/components/application_manager/src/resumption/resume_ctrl_impl.cc8
-rw-r--r--src/components/application_manager/src/resumption/resumption_data_json.cc255
-rw-r--r--src/components/application_manager/src/state_controller_impl.cc1
-rw-r--r--src/components/application_manager/test/app_launch/app_launch_data_json_test.cc30
-rw-r--r--src/components/application_manager/test/app_service_manager_test.cc22
-rw-r--r--src/components/application_manager/test/application_helper_test.cc9
-rw-r--r--src/components/application_manager/test/application_manager_impl_test.cc12
-rw-r--r--src/components/application_manager/test/commands/command_request_impl_test.cc22
-rw-r--r--src/components/application_manager/test/hmi_capabilities_test.cc15
-rw-r--r--src/components/application_manager/test/hmi_language_handler_test.cc9
-rw-r--r--src/components/application_manager/test/include/application_manager/mock_app_service_manager.h2
-rw-r--r--src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h3
-rw-r--r--src/components/application_manager/test/include/application_manager/mock_resume_ctrl.h4
-rw-r--r--src/components/application_manager/test/resumption/resumption_data_json_test.cc22
-rw-r--r--src/components/application_manager/test/rpc_passing_handler_test.cc9
-rw-r--r--src/components/connection_handler/CMakeLists.txt1
-rw-r--r--src/components/include/application_manager/application_manager.h11
-rw-r--r--src/components/include/application_manager/hmi_capabilities.h8
-rw-r--r--src/components/include/resumption/last_state.h87
-rw-r--r--src/components/include/resumption/last_state_wrapper.h57
-rw-r--r--src/components/include/test/application_manager/mock_application_manager.h6
-rw-r--r--src/components/include/test/application_manager/mock_rpc_plugin.h7
-rw-r--r--src/components/include/test/resumption/mock_last_state.h7
-rw-r--r--src/components/include/test/transport_manager/mock_transport_manager.h4
-rw-r--r--src/components/include/transport_manager/transport_manager.h10
-rw-r--r--src/components/include/utils/data_accessor.h1
-rw-r--r--src/components/include/utils/mutable_data_accessor.h78
-rw-r--r--src/components/protocol_handler/CMakeLists.txt1
-rw-r--r--src/components/resumption/CMakeLists.txt1
-rw-r--r--src/components/resumption/include/resumption/last_state_impl.h43
-rw-r--r--src/components/resumption/include/resumption/last_state_wrapper_impl.h (renamed from src/components/resumption/include/resumption/last_state.h)33
-rw-r--r--src/components/resumption/src/last_state_impl.cc61
-rw-r--r--src/components/resumption/src/last_state_wrapper_impl.cc49
-rw-r--r--src/components/resumption/test/last_state_test.cc9
-rw-r--r--src/components/security_manager/include/security_manager/crypto_manager_impl.h1
-rw-r--r--src/components/security_manager/src/crypto_manager_impl.cc3
-rw-r--r--src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_transport_adapter.h6
-rw-r--r--src/components/transport_manager/include/transport_manager/cloud/cloud_websocket_transport_adapter.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/iap2_emulation/iap2_transport_adapter.h20
-rw-r--r--src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h11
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h15
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_manager_default.h15
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_manager_impl.h3
-rw-r--r--src/components/transport_manager/include/transport_manager/usb/usb_aoa_adapter.h7
-rw-r--r--src/components/transport_manager/src/bluetooth/bluetooth_transport_adapter.cc31
-rw-r--r--src/components/transport_manager/src/cloud/cloud_websocket_transport_adapter.cc5
-rw-r--r--src/components/transport_manager/src/iap2_emulation/iap2_transport_adapter.cc8
-rw-r--r--src/components/transport_manager/src/tcp/tcp_transport_adapter.cc24
-rw-r--r--src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc4
-rw-r--r--src/components/transport_manager/src/transport_manager_default.cc44
-rw-r--r--src/components/transport_manager/src/transport_manager_impl.cc12
-rw-r--r--src/components/transport_manager/src/usb/usb_aoa_adapter.cc4
-rw-r--r--src/components/transport_manager/test/include/transport_manager/cloud/mock_cloud_websocket_transport_adapter.h4
-rw-r--r--src/components/transport_manager/test/include/transport_manager/tcp/mock_tcp_transport_adapter.h4
-rw-r--r--src/components/transport_manager/test/include/transport_manager/transport_adapter/mock_transport_adapter_impl.h11
-rw-r--r--src/components/transport_manager/test/include/transport_manager/usb/mock_usb_aoa_adapter.h4
-rw-r--r--src/components/transport_manager/test/tcp_transport_adapter_test.cc62
-rw-r--r--src/components/transport_manager/test/transport_adapter_test.cc106
-rw-r--r--src/components/transport_manager/test/transport_manager_default_test.cc64
-rw-r--r--src/components/transport_manager/test/transport_manager_impl_test.cc9
-rw-r--r--src/components/transport_manager/test/websocket_connection_test.cc7
100 files changed, 1399 insertions, 625 deletions
diff --git a/src/appMain/life_cycle_impl.cc b/src/appMain/life_cycle_impl.cc
index a7786e302b..4c2d1e88ac 100644
--- a/src/appMain/life_cycle_impl.cc
+++ b/src/appMain/life_cycle_impl.cc
@@ -34,8 +34,8 @@
#include "application_manager/system_time/system_time_handler_impl.h"
#include "config_profile/profile.h"
#include "resumption/last_state_impl.h"
+#include "resumption/last_state_wrapper_impl.h"
#include "utils/signals.h"
-
#ifdef ENABLE_SECURITY
#include "application_manager/policies/policy_handler.h"
#include "security_manager/crypto_manager_impl.h"
@@ -67,7 +67,6 @@ LifeCycleImpl::LifeCycleImpl(const profile::Profile& profile)
, hmi_handler_(NULL)
, hmi_message_adapter_(NULL)
, media_manager_(NULL)
- , last_state_(NULL)
#ifdef TELEMETRY_MONITOR
, telemetry_monitor_(NULL)
#endif // TELEMETRY_MONITOR
@@ -80,9 +79,12 @@ LifeCycleImpl::LifeCycleImpl(const profile::Profile& profile)
bool LifeCycleImpl::StartComponents() {
LOG4CXX_AUTO_TRACE(logger_);
- DCHECK(!last_state_);
- last_state_ = new resumption::LastStateImpl(profile_.app_storage_folder(),
- profile_.app_info_storage());
+ DCHECK(!last_state_wrapper_);
+
+ auto last_state = std::make_shared<resumption::LastStateImpl>(
+ profile_.app_storage_folder(), profile_.app_info_storage());
+ last_state_wrapper_ =
+ std::make_shared<resumption::LastStateWrapperImpl>(last_state);
DCHECK(!transport_manager_);
transport_manager_ = new transport_manager::TransportManagerDefault(
@@ -120,7 +122,7 @@ bool LifeCycleImpl::StartComponents() {
media_manager_ = new media_manager::MediaManagerImpl(*app_manager_, profile_);
app_manager_->set_connection_handler(connection_handler_);
app_manager_->AddPolicyObserver(protocol_handler_);
- if (!app_manager_->Init(*last_state_, media_manager_)) {
+ if (!app_manager_->Init(last_state_wrapper_, media_manager_)) {
LOG4CXX_ERROR(logger_, "Application manager init failed.");
return false;
}
@@ -171,7 +173,8 @@ bool LifeCycleImpl::StartComponents() {
// It's important to initialise TM after setting up listener chain
// [TM -> CH -> AM], otherwise some events from TM could arrive at nowhere
app_manager_->set_protocol_handler(protocol_handler_);
- if (transport_manager::E_SUCCESS != transport_manager_->Init(*last_state_)) {
+ if (transport_manager::E_SUCCESS !=
+ transport_manager_->Init(last_state_wrapper_)) {
LOG4CXX_ERROR(logger_, "Transport manager init failed.");
return false;
}
@@ -319,10 +322,8 @@ void LifeCycleImpl::StopComponents() {
delete connection_handler_;
connection_handler_ = NULL;
- LOG4CXX_INFO(logger_, "Destroying Last State");
- DCHECK(last_state_);
- delete last_state_;
- last_state_ = NULL;
+ LOG4CXX_INFO(logger_, "Destroying Last State.");
+ last_state_wrapper_.reset();
LOG4CXX_INFO(logger_, "Destroying Application Manager.");
DCHECK(app_manager_);
diff --git a/src/appMain/life_cycle_impl.h b/src/appMain/life_cycle_impl.h
index 5bddf6bff9..4a2e41b52f 100644
--- a/src/appMain/life_cycle_impl.h
+++ b/src/appMain/life_cycle_impl.h
@@ -95,7 +95,7 @@ class LifeCycleImpl : public LifeCycle {
hmi_message_handler::HMIMessageHandlerImpl* hmi_handler_;
hmi_message_handler::HMIMessageAdapter* hmi_message_adapter_;
media_manager::MediaManagerImpl* media_manager_;
- resumption::LastState* last_state_;
+ resumption::LastStateWrapperPtr last_state_wrapper_;
#ifdef TELEMETRY_MONITOR
telemetry_monitor::TelemetryMonitor* telemetry_monitor_;
#endif // TELEMETRY_MONITOR
diff --git a/src/components/application_manager/include/application_manager/app_launch/app_launch_data_json.h b/src/components/application_manager/include/application_manager/app_launch/app_launch_data_json.h
index 9463a349d9..9e60183960 100644
--- a/src/components/application_manager/include/application_manager/app_launch/app_launch_data_json.h
+++ b/src/components/application_manager/include/application_manager/app_launch/app_launch_data_json.h
@@ -35,8 +35,7 @@
#include <memory>
#include "application_manager/app_launch/app_launch_data_impl.h"
-#include "resumption/last_state.h"
-#include "smart_objects/smart_object.h"
+#include "resumption/last_state_wrapper.h"
#include "utils/lock.h"
#include "utils/macro.h"
@@ -53,7 +52,12 @@ class AppLaunchDataJson : public AppLaunchDataImpl {
* @brief Constructor of AppLaunchDataJson object
*/
AppLaunchDataJson(const AppLaunchSettings& settings,
+ resumption::LastStateWrapperPtr last_state_wrapper);
+
+ DEPRECATED
+ AppLaunchDataJson(const AppLaunchSettings& settings,
resumption::LastState& last_state);
+
/**
* @brief allows to destroy AppLaunchDataJson object
*/
@@ -88,9 +92,15 @@ class AppLaunchDataJson : public AppLaunchDataImpl {
* @param app_data - searching filled in object
* @param founded_index - referenceto index of founded record
* in case it wasn't found it'll be -1
+ * @param dictionary - data dictionary where all necessary info stored
* @return pointer to json list object
*/
Json::Value& GetApplicationListAndIndex(const ApplicationData& app_data,
+ int32_t& found_index,
+ Json::Value& dictionary) const;
+
+ DEPRECATED
+ Json::Value& GetApplicationListAndIndex(const ApplicationData& app_data,
int32_t& founded_index) const;
private:
@@ -117,27 +127,22 @@ class AppLaunchDataJson : public AppLaunchDataImpl {
const std::string& dev_mac) const OVERRIDE;
/**
- * @return pointer to LastState functionality
- */
- resumption::LastState& last_state() const {
- return last_state_;
- }
-
- /**
* @brief delete record with oldest timestamp
* @return true in success cases and false othrewise
*/
bool DeleteOldestAppData();
/**
+ * @param dictionary - data dictionary where all necessary info stored
* @return pointer to AppLaunch data block in Json file
*/
- Json::Value& GetSavedApplicationDataList() const;
+ Json::Value& GetSavedApplicationDataList(Json::Value& dictionary) const;
/**
+ * @param dictionary - data dictionary where all necessary info stored
* @return pointer to AppLaunch records block in Json file
*/
- Json::Value& GetApplicationData() const;
+ Json::Value& GetApplicationData(Json::Value& dictionary) const;
/**
* @brief lock to protected common data
@@ -147,7 +152,7 @@ class AppLaunchDataJson : public AppLaunchDataImpl {
/**
* @brief ponter to Last State object
*/
- resumption::LastState& last_state_;
+ resumption::LastStateWrapperPtr last_state_wrapper_;
DISALLOW_COPY_AND_ASSIGN(AppLaunchDataJson);
};
diff --git a/src/components/application_manager/include/application_manager/app_service_manager.h b/src/components/application_manager/include/application_manager/app_service_manager.h
index 5080748f17..d26598c1e9 100644
--- a/src/components/application_manager/include/application_manager/app_service_manager.h
+++ b/src/components/application_manager/include/application_manager/app_service_manager.h
@@ -36,11 +36,9 @@
#include "application_manager/application.h"
#include "application_manager/rpc_passing_handler.h"
#include "interfaces/MOBILE_API.h"
+#include "resumption/last_state_wrapper.h"
#include "smart_objects/smart_object.h"
-
-namespace resumption {
-class LastState;
-}
+#include "utils/macro.h"
namespace application_manager {
@@ -65,7 +63,10 @@ class AppServiceManager {
* @param app_manager
*/
AppServiceManager(ApplicationManager& app_manager,
- resumption::LastState& last_state);
+ resumption::LastStateWrapperPtr last_state);
+
+ DEPRECATED AppServiceManager(ApplicationManager& app_manager,
+ resumption::LastState& last_state);
/**
* @brief Class destructor
@@ -221,7 +222,7 @@ class AppServiceManager {
private:
ApplicationManager& app_manager_;
- resumption::LastState& last_state_;
+ resumption::LastStateWrapperPtr last_state_;
sync_primitives::RecursiveLock published_services_lock_;
std::map<std::string, AppService> published_services_;
diff --git a/src/components/application_manager/include/application_manager/application_manager_impl.h b/src/components/application_manager/include/application_manager/application_manager_impl.h
index 7eb2d43d84..ab7cf95139 100644
--- a/src/components/application_manager/include/application_manager/application_manager_impl.h
+++ b/src/components/application_manager/include/application_manager/application_manager_impl.h
@@ -158,10 +158,14 @@ class ApplicationManagerImpl
const policy::PolicySettings& policy_settings);
~ApplicationManagerImpl();
+ DEPRECATED
+ bool Init(resumption::LastState&,
+ media_manager::MediaManager* media_manager) OVERRIDE;
+
/**
* Inits application manager
*/
- bool Init(resumption::LastState& last_state,
+ bool Init(resumption::LastStateWrapperPtr last_state_wrapper,
media_manager::MediaManager* media_manager) OVERRIDE;
/**
diff --git a/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h b/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h
index 2c4212c888..b7f41ca297 100644
--- a/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h
+++ b/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h
@@ -41,10 +41,6 @@
#include "smart_objects/smart_object.h"
#include "utils/macro.h"
-namespace resumption {
-class LastState;
-} // namespace resumption
-
namespace application_manager {
class ApplicationManager;
@@ -514,6 +510,9 @@ class HMICapabilitiesImpl : public HMICapabilities {
const smart_objects::SmartObject* seat_location_capability() const OVERRIDE;
+ void Init(resumption::LastStateWrapperPtr last_state_wrapper) OVERRIDE;
+
+ DEPRECATED
void Init(resumption::LastState* last_state) OVERRIDE;
/*
diff --git a/src/components/application_manager/include/application_manager/hmi_language_handler.h b/src/components/application_manager/include/application_manager/hmi_language_handler.h
index edf0759114..2ef034450d 100644
--- a/src/components/application_manager/include/application_manager/hmi_language_handler.h
+++ b/src/components/application_manager/include/application_manager/hmi_language_handler.h
@@ -35,12 +35,10 @@
#include "application_manager/event_engine/event_observer.h"
#include "interfaces/HMI_API.h"
+#include "resumption/last_state_wrapper.h"
#include "smart_objects/smart_object.h"
#include "utils/lock.h"
-namespace resumption {
-class LastState;
-}
namespace application_manager {
class ApplicationManager;
@@ -97,7 +95,11 @@ class HMILanguageHandler : public event_engine::EventObserver {
void set_default_capabilities_languages(hmi_apis::Common_Language::eType ui,
hmi_apis::Common_Language::eType vr,
hmi_apis::Common_Language::eType tts);
- void Init(resumption::LastState* value);
+
+ DEPRECATED
+ void Init(resumption::LastState*);
+
+ void Init(resumption::LastStateWrapperPtr value);
/**
* @brief Removes application from container after
@@ -179,7 +181,7 @@ class HMILanguageHandler : public event_engine::EventObserver {
* @brief Indicates if current TTS language has been received from HMI
*/
bool is_tts_language_received_;
- resumption::LastState* last_state_;
+ resumption::LastStateWrapperPtr last_state_wrapper_;
ApplicationManager& application_manager_;
};
diff --git a/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin.h b/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin.h
index 3af87a0c9e..88f91d14fc 100644
--- a/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin.h
+++ b/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin.h
@@ -43,10 +43,6 @@ namespace policy {
class PolicyHandlerInterface;
}
-namespace resumption {
-class LastState;
-}
-
namespace application_manager {
class CommandFactory;
@@ -88,7 +84,15 @@ class RPCPlugin {
rpc_service::RPCService& rpc_service,
HMICapabilities& hmi_capabilities,
policy::PolicyHandlerInterface& policy_handler,
+ resumption::LastStateWrapperPtr last_state) = 0;
+
+ DEPRECATED
+ virtual bool Init(ApplicationManager& app_manager,
+ rpc_service::RPCService& rpc_service,
+ HMICapabilities& hmi_capabilities,
+ policy::PolicyHandlerInterface& policy_handler,
resumption::LastState& last_state) = 0;
+
/**
* @brief IsAbleToProcess check if plugin is able to process function
* @param function_id RPC identifier
diff --git a/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin_manager_impl.h b/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin_manager_impl.h
index 5495c44e05..004d6418f5 100644
--- a/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin_manager_impl.h
+++ b/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin_manager_impl.h
@@ -37,12 +37,9 @@
#include "application_manager/plugin_manager/rpc_plugin_manager.h"
#include "application_manager/policies/policy_handler_interface.h"
#include "application_manager/rpc_service.h"
+#include "resumption/last_state_wrapper.h"
#include "utils/optional.h"
-namespace resumption {
-class LastState;
-}
-
namespace application_manager {
namespace plugin_manager {
@@ -60,6 +57,13 @@ class RPCPluginManagerImpl : public RPCPluginManager {
rpc_service::RPCService& rpc_service,
HMICapabilities& hmi_capabilities,
policy::PolicyHandlerInterface& policy_handler,
+ resumption::LastStateWrapperPtr last_state);
+
+ DEPRECATED
+ RPCPluginManagerImpl(ApplicationManager& app_manager,
+ rpc_service::RPCService& rpc_service,
+ HMICapabilities& hmi_capabilities,
+ policy::PolicyHandlerInterface& policy_handler,
resumption::LastState& last_state);
uint32_t LoadPlugins(const std::string& plugins_path) OVERRIDE;
@@ -76,7 +80,7 @@ class RPCPluginManagerImpl : public RPCPluginManager {
rpc_service::RPCService& rpc_service_;
HMICapabilities& hmi_capabilities_;
policy::PolicyHandlerInterface& policy_handler_;
- resumption::LastState& last_state_;
+ resumption::LastStateWrapperPtr last_state_;
// RPCPluginManager interface
public:
diff --git a/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h b/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h
index 78366ea96a..e572eaec39 100644
--- a/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h
+++ b/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h
@@ -47,8 +47,6 @@ namespace app_mngr = application_manager;
namespace resumption {
-class LastState;
-
/**
* @brief Contains logic for storage/restore data of applications.
*/
@@ -272,12 +270,15 @@ class ResumeCtrl {
*/
virtual void RemoveFromResumption(uint32_t app_id) = 0;
+ DEPRECATED
+ virtual bool Init(resumption::LastState& last_state) = 0;
+
/**
* @brief Initialization data for Resume controller
* @return true if initialization is success otherwise
* returns false
*/
- virtual bool Init(LastState& last_state) = 0;
+ virtual bool Init(resumption::LastStateWrapperPtr last_state_wrapper) = 0;
/**
* @brief Notify resume controller about new application
diff --git a/src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h b/src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h
index f0d5dc39e4..3ac59b9f88 100644
--- a/src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h
+++ b/src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h
@@ -52,8 +52,6 @@
namespace resumption {
-class LastState;
-
/**
* @brief Contains logic for storage/restore data of applications.
*/
@@ -286,12 +284,14 @@ class ResumeCtrlImpl : public ResumeCtrl,
*/
void RemoveFromResumption(uint32_t app_id) OVERRIDE;
+ DEPRECATED bool Init(resumption::LastState& last_state) FINAL;
+
/**
* @brief Initialization data for Resume controller
* @return true if initialization is success otherwise
* returns false
*/
- bool Init(LastState& last_state) OVERRIDE;
+ bool Init(resumption::LastStateWrapperPtr last_state_wrapper) FINAL;
/**
* @brief Notify resume controller about new application
diff --git a/src/components/application_manager/include/application_manager/resumption/resumption_data.h b/src/components/application_manager/include/application_manager/resumption/resumption_data.h
index d1dada345c..69fc5437de 100644
--- a/src/components/application_manager/include/application_manager/resumption/resumption_data.h
+++ b/src/components/application_manager/include/application_manager/resumption/resumption_data.h
@@ -305,7 +305,6 @@ class ResumptionData {
++first;
}
}
- mutable sync_primitives::RecursiveLock resumption_lock_;
const application_manager::ApplicationManager& application_manager_;
};
} // namespace resumption
diff --git a/src/components/application_manager/include/application_manager/resumption/resumption_data_db.h b/src/components/application_manager/include/application_manager/resumption/resumption_data_db.h
index 2b5a1fdcc9..a667dbf8e2 100644
--- a/src/components/application_manager/include/application_manager/resumption/resumption_data_db.h
+++ b/src/components/application_manager/include/application_manager/resumption/resumption_data_db.h
@@ -838,6 +838,7 @@ class ResumptionDataDB : public ResumptionData {
DISALLOW_COPY_AND_ASSIGN(ResumptionDataDB);
utils::dbms::SQLDatabase* db_;
+ mutable sync_primitives::RecursiveLock resumption_lock_;
};
} // namespace resumption
diff --git a/src/components/application_manager/include/application_manager/resumption/resumption_data_json.h b/src/components/application_manager/include/application_manager/resumption/resumption_data_json.h
index e2418fd033..2394fe00dc 100644
--- a/src/components/application_manager/include/application_manager/resumption/resumption_data_json.h
+++ b/src/components/application_manager/include/application_manager/resumption/resumption_data_json.h
@@ -35,7 +35,7 @@
#include "application_manager/resumption/resumption_data.h"
#include "json/json.h"
-#include "resumption/last_state.h"
+#include "resumption/last_state_wrapper.h"
namespace resumption {
@@ -49,7 +49,12 @@ class ResumptionDataJson : public ResumptionData {
* @brief Constructor of ResumptionDataJson
*/
ResumptionDataJson(
- LastState& last_state,
+ resumption::LastStateWrapperPtr last_state_wrapper,
+ const application_manager::ApplicationManager& application_manager);
+
+ DEPRECATED
+ ResumptionDataJson(
+ LastState&,
const application_manager::ApplicationManager& application_manager);
/**
@@ -175,9 +180,8 @@ class ResumptionDataJson : public ResumptionData {
*/
void Persist() OVERRIDE;
- resumption::LastState& last_state() const {
- return last_state_;
- }
+ DEPRECATED
+ resumption::LastState& last_state() const;
private:
/**
@@ -185,22 +189,26 @@ class ResumptionDataJson : public ResumptionData {
* or adds the new one.
* @param policy_app_id application id.
* @param device_id unique id of device.
+ * @param dictionary - data dictionary where all necessary info stored
* @return the reference to the record in applications array.
*/
Json::Value& GetFromSavedOrAppend(const std::string& policy_app_id,
- const std::string& device_id) const;
+ const std::string& device_id,
+ Json::Value& dictionary) const;
/**
* @brief Get applications for resumption of LastState
+ * @param dictionary - data dictionary where all necessary info stored
* @return applications for resumption of LastState
*/
- Json::Value& GetSavedApplications() const;
+ Json::Value& GetSavedApplications(Json::Value& dictionary) const;
/**
* @brief Get Resumption section of LastState
+ * @param dictionary - data dictionary where all necessary info stored
* @return Resumption section of LastState in Json
*/
- Json::Value& GetResumptionData() const;
+ Json::Value& GetResumptionData(Json::Value& dictionary) const;
/**
* @brief GetObjectIndex allows to obtain specified object index from
@@ -214,15 +222,17 @@ class ResumptionDataJson : public ResumptionData {
/**
* @brief Set applications for resumption to LastState
+ * @param dictionary - data dictionary where all necessary info stored
* @parems apps_json applications to write in LastState
*/
- void SetSavedApplication(Json::Value& apps_json);
+ void SetSavedApplication(Json::Value& apps_json, Json::Value& dictionary);
/**
* @brief Setup IgnOff time to LastState
+ * @param dictionary - data dictionary where all necessary info stored
* @param ign_off_time - igition off time
*/
- void SetLastIgnOffTime(time_t ign_off_time);
+ void SetLastIgnOffTime(time_t ign_off_time, Json::Value& dictionary);
/*
* @brief Return true if application resumption data is valid,
@@ -231,7 +241,7 @@ class ResumptionDataJson : public ResumptionData {
*/
bool IsResumptionDataValid(uint32_t index) const;
- LastState& last_state_;
+ resumption::LastStateWrapperPtr last_state_wrapper_;
DISALLOW_COPY_AND_ASSIGN(ResumptionDataJson);
};
} // namespace resumption
diff --git a/src/components/application_manager/include/application_manager/state_controller_impl.h b/src/components/application_manager/include/application_manager/state_controller_impl.h
index 000569e450..c6121f5d1d 100644
--- a/src/components/application_manager/include/application_manager/state_controller_impl.h
+++ b/src/components/application_manager/include/application_manager/state_controller_impl.h
@@ -152,13 +152,14 @@ class StateControllerImpl : public event_engine::EventObserver,
template <typename UnaryFunction>
void ForEachApplication(UnaryFunction func) const {
- DataAccessor<ApplicationSet> accessor = app_mngr_.applications();
- ApplicationSet::iterator it = accessor.GetData().begin();
- for (; it != accessor.GetData().end(); ++it) {
- ApplicationConstSharedPtr const_app = *it;
- if (const_app) {
- func(app_mngr_.application(const_app->app_id()));
- }
+ ApplicationSet applications;
+ {
+ DataAccessor<ApplicationSet> accessor = app_mngr_.applications();
+ applications = accessor.GetData();
+ }
+
+ for (const auto& app : applications) {
+ func(app);
}
}
diff --git a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/include/app_service_rpc_plugin/app_service_rpc_plugin.h b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/include/app_service_rpc_plugin/app_service_rpc_plugin.h
index 1765c1e7fa..5d85237899 100644
--- a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/include/app_service_rpc_plugin/app_service_rpc_plugin.h
+++ b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/include/app_service_rpc_plugin/app_service_rpc_plugin.h
@@ -36,7 +36,6 @@
#include "application_manager/command_factory.h"
namespace app_service_rpc_plugin {
-// class AppServiceAppExtension;
namespace app_mngr = application_manager;
namespace plugins = application_manager::plugin_manager;
@@ -48,7 +47,14 @@ class AppServiceRpcPlugin : public plugins::RPCPlugin {
app_mngr::rpc_service::RPCService& rpc_service,
app_mngr::HMICapabilities& hmi_capabilities,
policy::PolicyHandlerInterface& policy_handler,
- resumption::LastState& last_state) OVERRIDE;
+ resumption::LastStateWrapperPtr last_state) OVERRIDE;
+
+ DEPRECATED
+ bool Init(app_mngr::ApplicationManager& application_manager,
+ app_mngr::rpc_service::RPCService& rpc_service,
+ app_mngr::HMICapabilities& hmi_capabilities,
+ policy::PolicyHandlerInterface& policy_handler,
+ resumption::LastState& last_state);
bool IsAbleToProcess(
const int32_t function_id,
diff --git a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc
index 0e739522d9..1c3a9c77c5 100644
--- a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc
+++ b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc
@@ -50,7 +50,19 @@ bool AppServiceRpcPlugin::Init(
application_manager::rpc_service::RPCService& rpc_service,
application_manager::HMICapabilities& hmi_capabilities,
policy::PolicyHandlerInterface& policy_handler,
- resumption::LastState& last_state) {
+ resumption::LastStateWrapperPtr last_state) {
+ UNUSED(last_state);
+ application_manager_ = &app_manager;
+ command_factory_.reset(new app_service_rpc_plugin::AppServiceCommandFactory(
+ app_manager, rpc_service, hmi_capabilities, policy_handler));
+ return true;
+}
+
+bool AppServiceRpcPlugin::Init(app_mngr::ApplicationManager& app_manager,
+ app_mngr::rpc_service::RPCService& rpc_service,
+ app_mngr::HMICapabilities& hmi_capabilities,
+ policy::PolicyHandlerInterface& policy_handler,
+ resumption::LastState& last_state) {
UNUSED(last_state);
application_manager_ = &app_manager;
command_factory_.reset(new app_service_rpc_plugin::AppServiceCommandFactory(
diff --git a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/test/commands/mobile/on_app_service_data_notification_test.cc b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/test/commands/mobile/on_app_service_data_notification_test.cc
index 3e88d4eaf3..6949a3aff0 100644
--- a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/test/commands/mobile/on_app_service_data_notification_test.cc
+++ b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/test/commands/mobile/on_app_service_data_notification_test.cc
@@ -41,6 +41,7 @@
#include "gtest/gtest.h"
#include "interfaces/MOBILE_API.h"
#include "resumption/last_state_impl.h"
+#include "resumption/last_state_wrapper_impl.h"
namespace am = application_manager;
using am::ApplicationSet;
@@ -80,7 +81,9 @@ class OnAppServiceDataNotificationTest
app_service_plugin_, *mock_app_))
, apps_lock_(std::make_shared<sync_primitives::Lock>())
, apps_da_(apps_, apps_lock_)
- , last_state_("app_storage_folder", "app_info_storage")
+ , last_state_(std::make_shared<resumption::LastStateWrapperImpl>(
+ std::make_shared<resumption::LastStateImpl>("app_storage_folder",
+ "app_info_storage")))
, app_service_manager_(app_mngr_, last_state_) {
ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId));
ON_CALL(*mock_app_, is_remote_control_supported())
@@ -109,7 +112,7 @@ class OnAppServiceDataNotificationTest
application_manager::ApplicationSet apps_;
const std::shared_ptr<sync_primitives::Lock> apps_lock_;
DataAccessor<application_manager::ApplicationSet> apps_da_;
- resumption::LastStateImpl last_state_;
+ resumption::LastStateWrapperPtr last_state_;
MockAppServiceManager app_service_manager_;
};
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_consent_manager.h b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_consent_manager.h
index cde7928a14..c8b99cc724 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_consent_manager.h
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_consent_manager.h
@@ -70,7 +70,7 @@ class RCConsentManager {
virtual rc_rpc_plugin::rc_rpc_types::ModuleConsent GetModuleConsent(
const std::string& app_id,
const std::string& mac_address,
- const rc_rpc_types::ModuleUid& module_id) const = 0;
+ const rc_rpc_types::ModuleUid& module_id) = 0;
/**
* @brief Remove modules consents from LastState if they exist
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_consent_manager_impl.h b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_consent_manager_impl.h
index b3c6a0b129..5cbc4b977e 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_consent_manager_impl.h
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_consent_manager_impl.h
@@ -34,7 +34,7 @@
#define SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_RC_RPC_PLUGIN_INCLUDE_RC_CONSENT_MANAGER_IMPL_H
#include "rc_consent_manager.h"
-#include "resumption/last_state.h"
+#include "resumption/last_state_wrapper.h"
#include "utils/lock.h"
namespace Json {
@@ -46,6 +46,12 @@ namespace rc_rpc_plugin {
class RCConsentManagerImpl : public RCConsentManager {
public:
RCConsentManagerImpl(
+ resumption::LastStateWrapperPtr last_state,
+ application_manager::ApplicationManager& application_manager,
+ const uint32_t period_of_consent_expired);
+
+ DEPRECATED
+ RCConsentManagerImpl(
resumption::LastState& last_state,
application_manager::ApplicationManager& application_manager,
const uint32_t period_of_consent_expired);
@@ -58,7 +64,7 @@ class RCConsentManagerImpl : public RCConsentManager {
rc_rpc_types::ModuleConsent GetModuleConsent(
const std::string& app_id,
const std::string& mac_address,
- const rc_rpc_types::ModuleUid& module_id) const OVERRIDE;
+ const rc_rpc_types::ModuleUid& module_id) OVERRIDE;
void RemoveExpiredConsents() OVERRIDE;
@@ -111,7 +117,7 @@ class RCConsentManagerImpl : public RCConsentManager {
* In case the section is absent, will be appended a new empty section.
* @return Remote Control section of LastState in Json
*/
- Json::Value& GetRemoteControlDataOrAppend() const;
+ Json::Value& GetRemoteControlDataOrAppend(Json::Value& last_state_data);
/**
* @brief Gets Device applications section for specified device mac adress
@@ -119,8 +125,8 @@ class RCConsentManagerImpl : public RCConsentManager {
* @param mac_aress Device MAC adress
* @return Device applications section of LastState in Json
*/
- Json::Value& GetDeviceApplicationsOrAppend(
- const std::string& mac_address) const;
+ Json::Value& GetDeviceApplicationsOrAppend(const std::string& mac_address,
+ Json::Value& last_state_data);
/**
* @brief Get AppConsentsList section of LastState for specified application.
@@ -130,7 +136,8 @@ class RCConsentManagerImpl : public RCConsentManager {
* @return AppConsentsList of LastState in Json
*/
Json::Value& GetAppConsentsListOrAppend(const std::string& policy_app_id,
- const std::string& mac_address) const;
+ const std::string& mac_address,
+ Json::Value& last_state_data);
/**
* @brief Get Application consents section of Remote Control section of
@@ -138,7 +145,7 @@ class RCConsentManagerImpl : public RCConsentManager {
* is absent, will be created a new empty section
* @return AppConsents section of RemoteControl section of LastState in Jason
*/
- Json::Value& GetAppsConsentsOrAppend() const;
+ Json::Value& GetAppsConsentsOrAppend(Json::Value& last_state_data);
/**
* @brief Get all module resource consents for specified application and
@@ -149,14 +156,14 @@ class RCConsentManagerImpl : public RCConsentManager {
* acquiring resource
* @param module_type Module type with consents
*/
- Json::Value& GetModuleTypeConsentsOrAppend(
- const std::string& policy_app_id,
- const std::string& mac_address,
- const std::string& module_type) const;
+ Json::Value& GetModuleTypeConsentsOrAppend(const std::string& policy_app_id,
+ const std::string& mac_address,
+ const std::string& module_type,
+ Json::Value& last_state_data);
private:
application_manager::ApplicationManager& app_manager_;
- resumption::LastState& last_state_;
+ resumption::LastStateWrapperPtr last_state_;
const uint32_t period_of_consent_expired_;
mutable sync_primitives::Lock dictionary_control_lock_;
mutable sync_primitives::Lock remote_control_lock_;
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_rpc_plugin.h b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_rpc_plugin.h
index 1225feb67f..e12bd88e58 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_rpc_plugin.h
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_rpc_plugin.h
@@ -43,10 +43,6 @@
#include "rc_rpc_plugin/rc_consent_manager.h"
#include "rc_rpc_plugin/resource_allocation_manager.h"
-namespace resumption {
-class LastState;
-}
-
namespace rc_rpc_plugin {
namespace plugins = application_manager::plugin_manager;
namespace app_mngr = application_manager;
@@ -65,6 +61,13 @@ class RCRPCPlugin : public plugins::RPCPlugin {
app_mngr::rpc_service::RPCService& rpc_service,
app_mngr::HMICapabilities& hmi_capabilities,
policy::PolicyHandlerInterface& policy_handler,
+ resumption::LastStateWrapperPtr last_state) OVERRIDE;
+
+ DEPRECATED
+ bool Init(app_mngr::ApplicationManager& app_manager,
+ app_mngr::rpc_service::RPCService& rpc_service,
+ app_mngr::HMICapabilities& hmi_capabilities,
+ policy::PolicyHandlerInterface& policy_handler,
resumption::LastState& last_state) OVERRIDE;
/**
* @param int32_t command id
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_consent_manager_impl.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_consent_manager_impl.cc
index acaa6ce86c..1d7db181eb 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_consent_manager_impl.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_consent_manager_impl.cc
@@ -48,7 +48,7 @@ namespace app_mngr = application_manager;
CREATE_LOGGERPTR_GLOBAL(logger_, "RCConsentManager")
RCConsentManagerImpl::RCConsentManagerImpl(
- resumption::LastState& last_state,
+ resumption::LastStateWrapperPtr last_state,
application_manager::ApplicationManager& application_manager,
const uint32_t period_of_consent_expired)
: app_manager_(application_manager)
@@ -64,20 +64,31 @@ void RCConsentManagerImpl::SaveModuleConsents(
for (const auto& consent : module_consents) {
std::string module_type = consent.module_id.first;
- auto& app_module_consents =
- GetModuleTypeConsentsOrAppend(policy_app_id, mac_address, module_type);
+ auto last_state_accessor = last_state_->get_accessor();
+ auto last_state_dictionary = last_state_accessor.GetData().dictionary();
+
+ auto& app_module_consents = GetModuleTypeConsentsOrAppend(
+ policy_app_id, mac_address, module_type, last_state_dictionary);
SaveAppModuleConsent(app_module_consents, consent);
+
+ last_state_accessor.GetMutableData().set_dictionary(last_state_dictionary);
}
}
rc_rpc_types::ModuleConsent RCConsentManagerImpl::GetModuleConsent(
const std::string& app_id,
const std::string& mac_address,
- const rc_rpc_types::ModuleUid& module_id) const {
+ const rc_rpc_types::ModuleUid& module_id) {
sync_primitives::AutoLock autolock(module_consents_lock_);
- auto& module_consents =
- GetModuleTypeConsentsOrAppend(app_id, mac_address, module_id.first);
+ auto last_state_accessor = last_state_->get_accessor();
+ auto last_state_dictionary = last_state_accessor.GetData().dictionary();
+
+ auto& module_consents = GetModuleTypeConsentsOrAppend(
+ app_id, mac_address, module_id.first, last_state_dictionary);
+
+ last_state_accessor.GetMutableData().set_dictionary(last_state_dictionary);
+
if (module_consents.empty()) {
LOG4CXX_DEBUG(
logger_,
@@ -102,23 +113,35 @@ rc_rpc_types::ModuleConsent RCConsentManagerImpl::GetModuleConsent(
void RCConsentManagerImpl::RemoveExpiredConsents() {
LOG4CXX_AUTO_TRACE(logger_);
- auto& remote_control = GetRemoteControlDataOrAppend();
+
+ auto last_state_accessor = last_state_->get_accessor();
+ auto last_state_dictionary = last_state_accessor.GetData().dictionary();
+
+ auto& remote_control = GetRemoteControlDataOrAppend(last_state_dictionary);
if (remote_control.empty()) {
+ last_state_accessor.GetMutableData().set_dictionary(last_state_dictionary);
return;
}
- auto& devices = GetAppsConsentsOrAppend();
+ auto& devices = GetAppsConsentsOrAppend(last_state_dictionary);
sync_primitives::AutoLock autolock(device_applications_lock_);
for (auto& device_item : devices) {
RemoveDeviceExpiredConsents(device_item);
}
+
+ last_state_accessor.GetMutableData().set_dictionary(last_state_dictionary);
}
void RCConsentManagerImpl::RemoveAllConsents() {
- auto& remote_control = GetRemoteControlDataOrAppend();
+ auto last_state_accessor = last_state_->get_accessor();
+ auto last_state_dictionary = last_state_accessor.GetData().dictionary();
+
+ auto& remote_control = GetRemoteControlDataOrAppend(last_state_dictionary);
remote_control.removeMember(message_params::kAppConsents);
+
+ last_state_accessor.GetMutableData().set_dictionary(last_state_dictionary);
}
rc_rpc_types::ModuleConsentState RCConsentManagerImpl::CheckModuleConsentState(
@@ -203,17 +226,17 @@ void RCConsentManagerImpl::RemoveModuleExpiredConsents(
}
}
-Json::Value& RCConsentManagerImpl::GetRemoteControlDataOrAppend() const {
- Json::Value& dictionary = last_state_.get_dictionary();
-
+Json::Value& RCConsentManagerImpl::GetRemoteControlDataOrAppend(
+ Json::Value& last_state_data) {
sync_primitives::AutoLock autolock(dictionary_control_lock_);
- if (!dictionary.isMember(app_mngr::strings::remote_control)) {
- dictionary[app_mngr::strings::remote_control] =
+ if (!last_state_data.isMember(app_mngr::strings::remote_control)) {
+ last_state_data[app_mngr::strings::remote_control] =
Json::Value(Json::objectValue);
LOG4CXX_DEBUG(logger_, "remote_control section is missed");
}
- Json::Value& remote_control = dictionary[app_mngr::strings::remote_control];
+ Json::Value& remote_control =
+ last_state_data[app_mngr::strings::remote_control];
if (!remote_control.isObject()) {
LOG4CXX_ERROR(logger_, "remote_control type INVALID rewrite");
@@ -223,10 +246,10 @@ Json::Value& RCConsentManagerImpl::GetRemoteControlDataOrAppend() const {
}
Json::Value& RCConsentManagerImpl::GetDeviceApplicationsOrAppend(
- const std::string& mac_address) const {
+ const std::string& mac_address, Json::Value& last_state_data) {
sync_primitives::AutoLock autolock(device_applications_lock_);
- auto& apps_consents = GetAppsConsentsOrAppend();
+ auto& apps_consents = GetAppsConsentsOrAppend(last_state_data);
if (!apps_consents.isArray()) {
LOG4CXX_DEBUG(logger_, "applications_consents type INVALID rewrite");
@@ -257,8 +280,11 @@ Json::Value& RCConsentManagerImpl::GetDeviceApplicationsOrAppend(
}
Json::Value& RCConsentManagerImpl::GetAppConsentsListOrAppend(
- const std::string& policy_app_id, const std::string& mac_address) const {
- auto& device_applications = GetDeviceApplicationsOrAppend(mac_address);
+ const std::string& policy_app_id,
+ const std::string& mac_address,
+ Json::Value& last_state_data) {
+ auto& device_applications =
+ GetDeviceApplicationsOrAppend(mac_address, last_state_data);
sync_primitives::AutoLock autolock(applications_lock_);
if (!device_applications.isArray()) {
@@ -291,8 +317,9 @@ Json::Value& RCConsentManagerImpl::GetAppConsentsListOrAppend(
[message_params::kAppConsentList];
}
-Json::Value& RCConsentManagerImpl::GetAppsConsentsOrAppend() const {
- Json::Value& remote_control = GetRemoteControlDataOrAppend();
+Json::Value& RCConsentManagerImpl::GetAppsConsentsOrAppend(
+ Json::Value& last_state_data) {
+ Json::Value& remote_control = GetRemoteControlDataOrAppend(last_state_data);
sync_primitives::AutoLock autolock(remote_control_lock_);
if (!remote_control.isMember(message_params::kAppConsents)) {
@@ -312,12 +339,13 @@ Json::Value& RCConsentManagerImpl::GetAppsConsentsOrAppend() const {
Json::Value& RCConsentManagerImpl::GetModuleTypeConsentsOrAppend(
const std::string& policy_app_id,
const std::string& mac_address,
- const std::string& module_type) const {
- auto& app_consnets_list =
- GetAppConsentsListOrAppend(policy_app_id, mac_address);
+ const std::string& module_type,
+ Json::Value& last_state_data) {
+ auto& app_consents_list =
+ GetAppConsentsListOrAppend(policy_app_id, mac_address, last_state_data);
sync_primitives::AutoLock autolock(app_consents_lock_);
- for (auto& module_consents : app_consnets_list) {
+ for (auto& module_consents : app_consents_list) {
const bool module_exists =
module_consents.isMember(message_params::kModuleType);
@@ -338,10 +366,10 @@ Json::Value& RCConsentManagerImpl::GetModuleTypeConsentsOrAppend(
consent_item[message_params::kModuleType] = module_type;
consent_item[message_params::kModuleConsents] = Json::Value(Json::arrayValue);
- app_consnets_list.append(consent_item);
+ app_consents_list.append(consent_item);
// Returns last (appended) object
- return app_consnets_list[app_consnets_list.size() - 1]
+ return app_consents_list[app_consents_list.size() - 1]
[message_params::kModuleConsents];
}
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc
index 4e43cff58d..c2aa639fda 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc
@@ -52,7 +52,7 @@ bool RCRPCPlugin::Init(
application_manager::rpc_service::RPCService& rpc_service,
application_manager::HMICapabilities& hmi_capabilities,
policy::PolicyHandlerInterface& policy_handler,
- resumption::LastState& last_state) {
+ resumption::LastStateWrapperPtr last_state) {
rc_consent_manager_.reset(new rc_rpc_plugin::RCConsentManagerImpl(
last_state,
app_manager,
@@ -83,6 +83,14 @@ bool RCRPCPlugin::Init(
return true;
}
+bool RCRPCPlugin::Init(application_manager::ApplicationManager&,
+ application_manager::rpc_service::RPCService&,
+ application_manager::HMICapabilities&,
+ policy::PolicyHandlerInterface&,
+ resumption::LastState&) {
+ return false;
+}
+
bool RCRPCPlugin::IsAbleToProcess(
const int32_t function_id,
const application_manager::commands::Command::CommandSource
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/include/rc_rpc_plugin/mock/mock_rc_consent_manager.h b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/include/rc_rpc_plugin/mock/mock_rc_consent_manager.h
index 147da9ed55..a89202b5f5 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/include/rc_rpc_plugin/mock/mock_rc_consent_manager.h
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/include/rc_rpc_plugin/mock/mock_rc_consent_manager.h
@@ -46,11 +46,11 @@ class MockRCConsentManager : public rc_rpc_plugin::RCConsentManager {
void(const std::string&,
const std::string&,
const rc_rpc_plugin::rc_rpc_types::ModuleIdConsentVector&));
- MOCK_CONST_METHOD3(GetModuleConsent,
- rc_rpc_plugin::rc_rpc_types::ModuleConsent(
- const std::string&,
- const std::string&,
- const rc_rpc_plugin::rc_rpc_types::ModuleUid&));
+ MOCK_METHOD3(GetModuleConsent,
+ rc_rpc_plugin::rc_rpc_types::ModuleConsent(
+ const std::string&,
+ const std::string&,
+ const rc_rpc_plugin::rc_rpc_types::ModuleUid&));
MOCK_METHOD0(RemoveExpiredConsents, void());
MOCK_METHOD0(RemoveAllConsents, void());
};
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/rc_consent_manager_impl_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/rc_consent_manager_impl_test.cc
index b4d826719a..a2e9f6d83b 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/rc_consent_manager_impl_test.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/rc_consent_manager_impl_test.cc
@@ -40,8 +40,8 @@
#include "application_manager/mock_application_manager_settings.h"
#include "rc_rpc_plugin/rc_consent_manager_impl.h"
-#include "resumption/last_state.h"
#include "resumption/last_state_impl.h"
+#include "resumption/last_state_wrapper_impl.h"
#include "utils/date_time.h"
#include "utils/file_system.h"
@@ -76,10 +76,11 @@ class RCConsentManagerImplTest : public ::testing::Test {
public:
RCConsentManagerImplTest()
: current_date_(0u)
- , last_state_(new resumption::LastStateImpl(kAppTestStorageFolder,
- kAppTestInfoStorage))
+ , last_state_(std::make_shared<resumption::LastStateWrapperImpl>(
+ std::make_shared<resumption::LastStateImpl>(kAppTestStorageFolder,
+ kAppTestInfoStorage)))
, rc_consent_manager_(new rc_rpc_plugin::RCConsentManagerImpl(
- *last_state_, mock_app_mngr_, kPeriodOfConsentExpired)) {}
+ last_state_, mock_app_mngr_, kPeriodOfConsentExpired)) {}
void SetUp() OVERRIDE {
current_date_ = std::time(0);
@@ -102,14 +103,20 @@ class RCConsentManagerImplTest : public ::testing::Test {
file_system::RemoveDirectory(kAppTestStorageFolder);
}
- last_state_->get_dictionary().clear();
+ auto last_state_accessor = last_state_->get_accessor();
+ last_state_accessor.GetMutableData().set_dictionary(Json::Value());
+ }
+
+ void SaveStateToFileSystem() {
+ auto last_state_accessor = last_state_->get_accessor();
+ last_state_accessor.GetMutableData().SaveToFileSystem();
}
protected:
time_t current_date_;
NiceMock<MockApplicationManagerSettings> mock_app_mnrg_settings_;
NiceMock<MockApplicationManager> mock_app_mngr_;
- std::unique_ptr<resumption::LastState> last_state_;
+ resumption::LastStateWrapperPtr last_state_;
std::unique_ptr<rc_rpc_plugin::RCConsentManagerImpl> rc_consent_manager_;
};
@@ -129,7 +136,7 @@ TEST_F(RCConsentManagerImplTest, SaveAndGetModuleConsents_SUCCESS) {
rc_consent_manager_->SaveModuleConsents(
kPolicyApp1Id, kMacAddress1, module_consents);
- last_state_->SaveStateToFileSystem();
+ SaveStateToFileSystem();
auto radio_consent = rc_consent_manager_->GetModuleConsent(
kPolicyApp1Id, kMacAddress1, {kRadioModule, radio_moduleId});
@@ -160,7 +167,7 @@ TEST_F(RCConsentManagerImplTest, ModuleId_NOT_EXISTS) {
rc_consent_manager_->SaveModuleConsents(
kPolicyApp1Id, kMacAddress1, module_consents);
- last_state_->SaveStateToFileSystem();
+ SaveStateToFileSystem();
ModuleConsent consent = rc_consent_manager_->GetModuleConsent(
kPolicyApp1Id, kMacAddress1, unknown_module);
@@ -197,7 +204,7 @@ TEST_F(RCConsentManagerImplTest, ConsentIsExpired) {
module_consent_not_expired};
rc_consent_manager_->SaveModuleConsents(
kPolicyApp1Id, kMacAddress1, module_consents);
- last_state_->SaveStateToFileSystem();
+ SaveStateToFileSystem();
// All consents, which consent has been saved more than 30 days, will be
// removed.
@@ -238,7 +245,7 @@ TEST_F(RCConsentManagerImplTest,
rc_consent_manager_->SaveModuleConsents(
kPolicyApp1Id, kMacAddress2, module_consents_app2);
- last_state_->SaveStateToFileSystem();
+ SaveStateToFileSystem();
// Module consents for same app ids and different device_id (mac_adress) will
// haven't been replaced each other
@@ -280,12 +287,12 @@ TEST_F(RCConsentManagerImplTest,
rc_consent_manager_->SaveModuleConsents(
kPolicyApp1Id, kMacAddress1, module_consents_app1);
- last_state_->SaveStateToFileSystem();
+ SaveStateToFileSystem();
rc_consent_manager_->SaveModuleConsents(
kPolicyApp1Id, kMacAddress1, module_consents_app2);
- last_state_->SaveStateToFileSystem();
+ SaveStateToFileSystem();
// Module consents for same app ids and same device_id (mac_adress) will
// have been replaced each other
@@ -318,7 +325,7 @@ TEST_F(RCConsentManagerImplTest, RemoveAllModuleConsents_SUCCESS) {
rc_consent_manager_->SaveModuleConsents(
kPolicyApp1Id, kMacAddress2, module_consents_app2);
- last_state_->SaveStateToFileSystem();
+ SaveStateToFileSystem();
rc_consent_manager_->RemoveAllConsents();
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/sdl_rpc_plugin.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/sdl_rpc_plugin.h
index 91298f4883..9c770279ab 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/sdl_rpc_plugin.h
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/sdl_rpc_plugin.h
@@ -48,6 +48,13 @@ class SDLRPCPlugin : public plugins::RPCPlugin {
app_mngr::rpc_service::RPCService& rpc_service,
app_mngr::HMICapabilities& hmi_capabilities,
policy::PolicyHandlerInterface& policy_handler,
+ resumption::LastStateWrapperPtr last_state) OVERRIDE;
+
+ DEPRECATED
+ bool Init(app_mngr::ApplicationManager& app_manager,
+ app_mngr::rpc_service::RPCService& rpc_service,
+ app_mngr::HMICapabilities& hmi_capabilities,
+ policy::PolicyHandlerInterface& policy_handler,
resumption::LastState& last_state) OVERRIDE;
bool IsAbleToProcess(
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc
index 35d3fbe2f6..2a1261f643 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc
@@ -45,7 +45,19 @@ bool SDLRPCPlugin::Init(app_mngr::ApplicationManager& app_manager,
app_mngr::rpc_service::RPCService& rpc_service,
app_mngr::HMICapabilities& hmi_capabilities,
policy::PolicyHandlerInterface& policy_handler,
- resumption::LastState& last_state) {
+ resumption::LastStateWrapperPtr last_state) {
+ UNUSED(last_state);
+ command_factory_.reset(new sdl_rpc_plugin::SDLCommandFactory(
+ app_manager, rpc_service, hmi_capabilities, policy_handler));
+ return true;
+}
+
+bool SDLRPCPlugin::Init(
+ application_manager::ApplicationManager& app_manager,
+ application_manager::rpc_service::RPCService& rpc_service,
+ application_manager::HMICapabilities& hmi_capabilities,
+ policy::PolicyHandlerInterface& policy_handler,
+ resumption::LastState& last_state) {
UNUSED(last_state);
command_factory_.reset(new sdl_rpc_plugin::SDLCommandFactory(
app_manager, rpc_service, hmi_capabilities, policy_handler));
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_plugin.h b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_plugin.h
index f0f68af298..80336b6967 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_plugin.h
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_plugin.h
@@ -49,6 +49,13 @@ class VehicleInfoPlugin : public plugins::RPCPlugin {
app_mngr::rpc_service::RPCService& rpc_service,
app_mngr::HMICapabilities& hmi_capabilities,
policy::PolicyHandlerInterface& policy_handler,
+ resumption::LastStateWrapperPtr last_state) OVERRIDE;
+
+ DEPRECATED
+ bool Init(app_mngr::ApplicationManager& application_manager,
+ app_mngr::rpc_service::RPCService& rpc_service,
+ app_mngr::HMICapabilities& hmi_capabilities,
+ policy::PolicyHandlerInterface& policy_handler,
resumption::LastState& last_state) OVERRIDE;
bool IsAbleToProcess(
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc
index 3017b6712f..3e8ef6b29d 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc
@@ -53,7 +53,7 @@ bool VehicleInfoPlugin::Init(
application_manager::rpc_service::RPCService& rpc_service,
application_manager::HMICapabilities& hmi_capabilities,
policy::PolicyHandlerInterface& policy_handler,
- resumption::LastState& last_state) {
+ resumption::LastStateWrapperPtr last_state) {
UNUSED(last_state);
application_manager_ = &app_manager;
custom_vehicle_data_manager_.reset(
@@ -67,6 +67,25 @@ bool VehicleInfoPlugin::Init(
return true;
}
+bool VehicleInfoPlugin::Init(
+ application_manager::ApplicationManager& application_manager,
+ application_manager::rpc_service::RPCService& rpc_service,
+ application_manager::HMICapabilities& hmi_capabilities,
+ policy::PolicyHandlerInterface& policy_handler,
+ resumption::LastState& last_state) {
+ UNUSED(last_state);
+ application_manager_ = &application_manager;
+ custom_vehicle_data_manager_.reset(
+ new CustomVehicleDataManagerImpl(policy_handler, rpc_service));
+ command_factory_.reset(new vehicle_info_plugin::VehicleInfoCommandFactory(
+ application_manager,
+ rpc_service,
+ hmi_capabilities,
+ policy_handler,
+ *(custom_vehicle_data_manager_.get())));
+ return true;
+}
+
bool VehicleInfoPlugin::IsAbleToProcess(
const int32_t function_id, const commands::Command::CommandSource source) {
return command_factory_->IsAbleToProcess(function_id, source);
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/CMakeLists.txt b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/CMakeLists.txt
index 95d49f9a20..a8193c17f0 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/CMakeLists.txt
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/CMakeLists.txt
@@ -37,6 +37,7 @@ include_directories(
${COMPONENTS_DIR}/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/commands
${COMPONENTS_DIR}/application_manager/test/include/
${COMPONENTS_DIR}/include/test/application_manager/
+ ${COMPONENTS_DIR}/resumption/include/resumption/
)
set(COMMANDS_TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}/commands)
@@ -53,6 +54,7 @@ file(GLOB SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/vehicle_data_item_schema_test.cc
${COMPONENTS_DIR}/application_manager/src/message.cc
${COMPONENTS_DIR}/application_manager/src/event_engine/*
+ ${COMPONENTS_DIR}/resumption/src/last_state_wrapper_impl.cc
)
set(LIBRARIES
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/unsubscribe_vehicle_request_test.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/unsubscribe_vehicle_request_test.cc
index 3a200ff282..450bb5ac26 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/unsubscribe_vehicle_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/unsubscribe_vehicle_request_test.cc
@@ -39,6 +39,7 @@
#include "application_manager/mock_application_manager.h"
#include "application_manager/mock_message_helper.h"
#include "mobile/unsubscribe_vehicle_data_request.h"
+#include "resumption/last_state_wrapper_impl.h"
#include "resumption/mock_last_state.h"
#include "vehicle_info_plugin/commands/vi_command_request_test.h"
#include "vehicle_info_plugin/vehicle_info_app_extension.h"
@@ -78,7 +79,9 @@ class UnsubscribeVehicleRequestTest
, vi_app_extension_ptr_(
std::make_shared<vehicle_info_plugin::VehicleInfoAppExtension>(
vi_plugin_, *mock_app_))
- , app_set_lock_ptr_(std::make_shared<sync_primitives::Lock>()) {}
+ , app_set_lock_ptr_(std::make_shared<sync_primitives::Lock>())
+ , mock_last_state_(std::make_shared<resumption::LastStateWrapperImpl>(
+ std::make_shared<resumption_test::MockLastState>())) {}
protected:
void UnsubscribeSuccessfully();
@@ -107,7 +110,7 @@ class UnsubscribeVehicleRequestTest
std::shared_ptr<sync_primitives::Lock> app_set_lock_ptr_;
vehicle_info_plugin::VehicleInfoPlugin vi_plugin_;
application_manager_test::MockRPCHandler mock_rpc_handler_;
- resumption_test::MockLastState mock_last_state_;
+ resumption::LastStateWrapperPtr mock_last_state_;
};
TEST_F(UnsubscribeVehicleRequestTest, Run_AppNotRegistered_UNSUCCESS) {
diff --git a/src/components/application_manager/src/app_launch/app_launch_data_json.cc b/src/components/application_manager/src/app_launch/app_launch_data_json.cc
index 984997e424..86d585f215 100644
--- a/src/components/application_manager/src/app_launch/app_launch_data_json.cc
+++ b/src/components/application_manager/src/app_launch/app_launch_data_json.cc
@@ -32,26 +32,27 @@
#include "application_manager/app_launch/app_launch_data_json.h"
#include <algorithm>
#include "application_manager/smart_object_keys.h"
-#include "smart_objects/smart_object.h"
-
#include "json/json.h"
+#include "smart_objects/smart_object.h"
#include "utils/date_time.h"
namespace app_launch {
CREATE_LOGGERPTR_GLOBAL(logger_, "AppLaunch")
-AppLaunchDataJson::AppLaunchDataJson(const AppLaunchSettings& settings,
- resumption::LastState& last_state)
- : AppLaunchDataImpl(settings), last_state_(last_state) {}
+AppLaunchDataJson::AppLaunchDataJson(
+ const AppLaunchSettings& settings,
+ resumption::LastStateWrapperPtr last_state_wrapper)
+ : AppLaunchDataImpl(settings), last_state_wrapper_(last_state_wrapper) {}
AppLaunchDataJson::~AppLaunchDataJson() {}
-Json::Value& AppLaunchDataJson::GetSavedApplicationDataList() const {
+Json::Value& AppLaunchDataJson::GetSavedApplicationDataList(
+ Json::Value& dictionary) const {
using namespace application_manager;
LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock autolock(app_launch_json_lock_);
- Json::Value& app_launch = GetApplicationData();
+ Json::Value& app_launch = GetApplicationData(dictionary);
if (!app_launch.isMember(strings::app_launch_list)) {
app_launch[strings::app_launch_list] = Json::Value(Json::arrayValue);
LOG4CXX_WARN(logger_, "app_list section is missed");
@@ -64,11 +65,11 @@ Json::Value& AppLaunchDataJson::GetSavedApplicationDataList() const {
return app_launch_list;
}
-Json::Value& AppLaunchDataJson::GetApplicationData() const {
+Json::Value& AppLaunchDataJson::GetApplicationData(
+ Json::Value& dictionary) const {
using namespace application_manager;
LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock autolock(app_launch_json_lock_);
- Json::Value& dictionary = last_state().get_dictionary();
if (!dictionary.isMember(strings::app_launch)) {
dictionary[strings::app_launch] = Json::Value(Json::objectValue);
LOG4CXX_WARN(logger_, "app_launch section is missed");
@@ -82,12 +83,14 @@ Json::Value& AppLaunchDataJson::GetApplicationData() const {
}
Json::Value& AppLaunchDataJson::GetApplicationListAndIndex(
- const ApplicationData& app_data, int32_t& founded_index) const {
+ const ApplicationData& app_data,
+ int32_t& found_index,
+ Json::Value& dictionary) const {
using namespace application_manager;
LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock autolock(app_launch_json_lock_);
- Json::Value& apps_list = GetSavedApplicationDataList();
+ Json::Value& apps_list = GetSavedApplicationDataList(dictionary);
const Json::ArrayIndex size = apps_list.size();
for (Json::ArrayIndex idx = 0; idx != size; ++idx) {
@@ -103,7 +106,7 @@ Json::Value& AppLaunchDataJson::GetApplicationListAndIndex(
if (deviceID == app_data.device_mac_ && bundleID == app_data.bundle_id_ &&
appID == app_data.mobile_app_id_) {
- founded_index = idx;
+ found_index = idx;
}
}
}
@@ -116,7 +119,11 @@ bool AppLaunchDataJson::IsAppDataAlreadyExisted(
LOG4CXX_AUTO_TRACE(logger_);
int32_t index = NotFound;
- GetApplicationListAndIndex(app_data, index);
+
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ GetApplicationListAndIndex(app_data, index, dictionary);
+ accessor.GetMutableData().set_dictionary(dictionary);
return index == NotFound ? false : true;
}
@@ -127,7 +134,10 @@ bool AppLaunchDataJson::RefreshAppSessionTime(const ApplicationData& app_data) {
bool retVal = false;
int32_t index = NotFound;
- Json::Value& json_data_list = GetApplicationListAndIndex(app_data, index);
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ Json::Value& json_data_list =
+ GetApplicationListAndIndex(app_data, index, dictionary);
if (index != NotFound) {
if (json_data_list.empty() == false) {
json_data_list[index][strings::app_launch_last_session] =
@@ -135,6 +145,7 @@ bool AppLaunchDataJson::RefreshAppSessionTime(const ApplicationData& app_data) {
retVal = true;
}
}
+ accessor.GetMutableData().set_dictionary(dictionary);
return retVal;
}
@@ -144,20 +155,22 @@ bool AppLaunchDataJson::AddNewAppData(const ApplicationData& app_data) {
LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock autolock(app_launch_json_lock_);
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
Json::Value& json_app_data =
- GetSavedApplicationDataList().append(Json::Value());
+ GetSavedApplicationDataList(dictionary).append(Json::Value());
json_app_data[strings::device_id] = app_data.device_mac_;
json_app_data[strings::app_id] = app_data.mobile_app_id_;
json_app_data[strings::bundle_id] = app_data.bundle_id_;
json_app_data[strings::app_launch_last_session] =
static_cast<Json::Value::UInt64>(getSecs(getCurrentTime()));
+ accessor.GetMutableData().set_dictionary(dictionary);
LOG4CXX_DEBUG(logger_,
"New application data saved. Detatils device_id: "
<< app_data.device_mac_
<< ", app_id: " << app_data.mobile_app_id_
<< ", bundle_id: " << app_data.bundle_id_ << ".");
-
return true;
}
@@ -167,7 +180,9 @@ std::vector<ApplicationDataPtr> AppLaunchDataJson::GetAppDataByDevMac(
LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock autolock(app_launch_json_lock_);
std::vector<ApplicationDataPtr> dev_apps;
- const Json::Value& apps_list = GetSavedApplicationDataList();
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ const Json::Value& apps_list = GetSavedApplicationDataList(dictionary);
const Json::ArrayIndex size = apps_list.size();
for (Json::ArrayIndex idx = 0; idx != size; ++idx) {
@@ -187,15 +202,16 @@ std::vector<ApplicationDataPtr> AppLaunchDataJson::GetAppDataByDevMac(
}
}
}
-
+ accessor.GetMutableData().set_dictionary(dictionary);
return dev_apps;
}
bool AppLaunchDataJson::Clear() {
LOG4CXX_AUTO_TRACE(logger_);
-
- GetSavedApplicationDataList().clear();
-
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ GetSavedApplicationDataList(dictionary).clear();
+ accessor.GetMutableData().set_dictionary(dictionary);
LOG4CXX_DEBUG(logger_,
"Application launch JSON section successfully cleared.");
@@ -204,9 +220,10 @@ bool AppLaunchDataJson::Clear() {
uint32_t AppLaunchDataJson::GetCurentNumberOfAppData() const {
LOG4CXX_AUTO_TRACE(logger_);
-
- uint32_t list_size = GetSavedApplicationDataList().size();
-
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ const uint32_t list_size = GetSavedApplicationDataList(dictionary).size();
+ accessor.GetMutableData().set_dictionary(dictionary);
LOG4CXX_DEBUG(logger_,
"Successfully was gotten app_launch list. Size: " << list_size);
@@ -219,7 +236,9 @@ bool AppLaunchDataJson::DeleteOldestAppData() {
sync_primitives::AutoLock autolock(app_launch_json_lock_);
std::vector<uint64_t> temp_array;
std::vector<Json::Value> temp_json_list;
- Json::Value& apps_list = GetSavedApplicationDataList();
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ Json::Value& apps_list = GetSavedApplicationDataList(dictionary);
const Json::ArrayIndex size = apps_list.size();
// Search oldest record in Json
@@ -241,9 +260,7 @@ bool AppLaunchDataJson::DeleteOldestAppData() {
// Copy in temporary vector Json list without oldest record
int32_t i = 0;
- for (Json::Value::iterator it = GetSavedApplicationDataList().begin();
- it != GetSavedApplicationDataList().end();
- ++it, i++) {
+ for (auto it = apps_list.begin(); it != apps_list.end(); ++it, i++) {
if ((*it).isMember(strings::device_id) &&
(*it).isMember(strings::bundle_id) && (*it).isMember(strings::app_id) &&
(*it).isMember(strings::app_launch_last_session)) {
@@ -255,15 +272,13 @@ bool AppLaunchDataJson::DeleteOldestAppData() {
}
// Clear Json list
- GetSavedApplicationDataList().clear();
+ GetSavedApplicationDataList(dictionary).clear();
// Copy to Json new list without oldest one
- for (std::vector<Json::Value>::iterator it = temp_json_list.begin();
- it != temp_json_list.end();
- ++it) {
- GetSavedApplicationDataList().append((*it));
+ for (const auto& item : temp_json_list) {
+ GetSavedApplicationDataList(dictionary).append(item);
}
-
+ accessor.GetMutableData().set_dictionary(dictionary);
LOG4CXX_DEBUG(
logger_, "Oldest application launch data had been successfully deleted.");
@@ -272,8 +287,7 @@ bool AppLaunchDataJson::DeleteOldestAppData() {
bool AppLaunchDataJson::Persist() {
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(app_launch_json_lock_);
- last_state().SaveStateToFileSystem();
+ last_state_wrapper_->get_accessor().GetMutableData().SaveToFileSystem();
return true;
}
diff --git a/src/components/application_manager/src/app_service_manager.cc b/src/components/application_manager/src/app_service_manager.cc
index afcc7ae1dd..3e7b4b99fe 100644
--- a/src/components/application_manager/src/app_service_manager.cc
+++ b/src/components/application_manager/src/app_service_manager.cc
@@ -53,7 +53,7 @@ const char* kAppServiceSection = "AppServices";
const char* kDefaults = "defaults";
AppServiceManager::AppServiceManager(ApplicationManager& app_manager,
- resumption::LastState& last_state)
+ resumption::LastStateWrapperPtr last_state)
: app_manager_(app_manager)
, last_state_(last_state)
, rpc_passing_handler_(*this, app_manager_) {}
@@ -139,13 +139,14 @@ smart_objects::SmartObject AppServiceManager::PublishAppService(
std::string default_app_id = DefaultServiceByType(service_type);
if (default_app_id.empty() && !mobile_service) {
auto embedded_services = app_manager_.get_settings().embedded_services();
- for (auto it = embedded_services.begin(); it != embedded_services.end();
- ++it) {
- if (*it == service_type) {
- Json::Value& dictionary = last_state_.get_dictionary();
+ for (const auto& embedded_service : embedded_services) {
+ if (embedded_service == service_type) {
+ auto last_state_accessor = last_state_->get_accessor();
+ Json::Value dictionary = last_state_accessor.GetData().dictionary();
dictionary[kAppServiceSection][kDefaults][service_type] =
kEmbeddedService;
default_app_id = kEmbeddedService;
+ last_state_accessor.GetMutableData().set_dictionary(dictionary);
}
}
}
@@ -340,9 +341,11 @@ bool AppServiceManager::SetDefaultService(const std::string service_id) {
}
service.default_service = true;
- Json::Value& dictionary = last_state_.get_dictionary();
+ auto last_state_accessor = last_state_->get_accessor();
+ Json::Value dictionary = last_state_accessor.GetData().dictionary();
dictionary[kAppServiceSection][kDefaults][service_type] =
GetPolicyAppID(service);
+ last_state_accessor.GetMutableData().set_dictionary(dictionary);
return true;
}
@@ -365,8 +368,11 @@ bool AppServiceManager::RemoveDefaultService(const std::string service_id) {
std::string service_type =
service.record[strings::service_manifest][strings::service_type]
.asString();
- Json::Value& dictionary = last_state_.get_dictionary();
+
+ auto last_state_accessor = last_state_->get_accessor();
+ Json::Value dictionary = last_state_accessor.GetData().dictionary();
dictionary[kAppServiceSection][kDefaults].removeMember(service_type);
+ last_state_accessor.GetMutableData().set_dictionary(dictionary);
return true;
}
@@ -547,7 +553,9 @@ AppService* AppServiceManager::FindServiceByName(std::string name) {
std::string AppServiceManager::DefaultServiceByType(
const std::string service_type) {
LOG4CXX_AUTO_TRACE(logger_);
- Json::Value& dictionary = last_state_.get_dictionary();
+
+ auto last_state_accessor = last_state_->get_accessor();
+ Json::Value dictionary = last_state_accessor.GetData().dictionary();
if (dictionary[kAppServiceSection][kDefaults].isMember(service_type)) {
return dictionary[kAppServiceSection][kDefaults][service_type].asString();
}
diff --git a/src/components/application_manager/src/application_impl.cc b/src/components/application_manager/src/application_impl.cc
index f44a63d5d6..11d038fee2 100644
--- a/src/components/application_manager/src/application_impl.cc
+++ b/src/components/application_manager/src/application_impl.cc
@@ -645,23 +645,27 @@ void ApplicationImpl::WakeUpStreaming(
sync_primitives::AutoLock lock(streaming_stop_lock_);
if (ServiceType::kMobileNav == service_type) {
- sync_primitives::AutoLock lock(video_streaming_suspended_lock_);
- if (video_streaming_suspended_) {
- application_manager_.OnAppStreaming(app_id(), service_type, true);
- application_manager_.ProcessOnDataStreamingNotification(
- service_type, app_id(), true);
- video_streaming_suspended_ = false;
+ { // reduce the range of video_streaming_suspended_lock_
+ sync_primitives::AutoLock lock(video_streaming_suspended_lock_);
+ if (video_streaming_suspended_) {
+ application_manager_.OnAppStreaming(app_id(), service_type, true);
+ application_manager_.ProcessOnDataStreamingNotification(
+ service_type, app_id(), true);
+ video_streaming_suspended_ = false;
+ }
}
video_stream_suspend_timer_.Start(
timer_len == 0 ? video_stream_suspend_timeout_ : timer_len,
timer::kPeriodic);
} else if (ServiceType::kAudio == service_type) {
- sync_primitives::AutoLock lock(audio_streaming_suspended_lock_);
- if (audio_streaming_suspended_) {
- application_manager_.OnAppStreaming(app_id(), service_type, true);
- application_manager_.ProcessOnDataStreamingNotification(
- service_type, app_id(), true);
- audio_streaming_suspended_ = false;
+ { // reduce the range of audio_streaming_suspended_lock_
+ sync_primitives::AutoLock lock(audio_streaming_suspended_lock_);
+ if (audio_streaming_suspended_) {
+ application_manager_.OnAppStreaming(app_id(), service_type, true);
+ application_manager_.ProcessOnDataStreamingNotification(
+ service_type, app_id(), true);
+ audio_streaming_suspended_ = false;
+ }
}
audio_stream_suspend_timer_.Start(
timer_len == 0 ? audio_stream_suspend_timeout_ : timer_len,
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc
index b727f6d621..7d7e2b30df 100644
--- a/src/components/application_manager/src/application_manager_impl.cc
+++ b/src/components/application_manager/src/application_manager_impl.cc
@@ -2365,11 +2365,21 @@ void ApplicationManagerImpl::RemoveHMIFakeParameters(
(*message)[jhs::S_PARAMS][jhs::S_FUNCTION_ID] = mobile_function_id;
}
-bool ApplicationManagerImpl::Init(resumption::LastState& last_state,
- media_manager::MediaManager* media_manager) {
+bool ApplicationManagerImpl::Init(resumption::LastState&,
+ media_manager::MediaManager*) {
+ return false;
+}
+
+bool ApplicationManagerImpl::Init(
+ resumption::LastStateWrapperPtr last_state_wrapper,
+ media_manager::MediaManager* media_manager) {
LOG4CXX_TRACE(logger_, "Init application manager");
- plugin_manager_.reset(new plugin_manager::RPCPluginManagerImpl(
- *this, *rpc_service_, *hmi_capabilities_, *policy_handler_, last_state));
+ plugin_manager_.reset(
+ new plugin_manager::RPCPluginManagerImpl(*this,
+ *rpc_service_,
+ *hmi_capabilities_,
+ *policy_handler_,
+ last_state_wrapper));
if (!plugin_manager_->LoadPlugins(get_settings().plugins_folder())) {
LOG4CXX_ERROR(logger_, "Plugins are not loaded");
return false;
@@ -2379,11 +2389,11 @@ bool ApplicationManagerImpl::Init(resumption::LastState& last_state,
!IsReadWriteAllowed(app_storage_folder, TYPE_STORAGE)) {
return false;
}
- if (!resume_controller().Init(last_state)) {
+ if (!resume_controller().Init(last_state_wrapper)) {
LOG4CXX_ERROR(logger_, "Problem with initialization of resume controller");
return false;
}
- hmi_capabilities_->Init(&last_state);
+ hmi_capabilities_->Init(last_state_wrapper);
if (!(file_system::IsWritingAllowed(app_storage_folder) &&
file_system::IsReadingAllowed(app_storage_folder))) {
@@ -2425,13 +2435,13 @@ bool ApplicationManagerImpl::Init(resumption::LastState& last_state,
app_launch_dto_.reset(new app_launch::AppLaunchDataDB(settings_));
} else {
app_launch_dto_.reset(
- new app_launch::AppLaunchDataJson(settings_, last_state));
+ new app_launch::AppLaunchDataJson(settings_, last_state_wrapper));
}
app_launch_ctrl_.reset(new app_launch::AppLaunchCtrlImpl(
*app_launch_dto_.get(), *this, settings_));
app_service_manager_.reset(
- new application_manager::AppServiceManager(*this, last_state));
+ new application_manager::AppServiceManager(*this, last_state_wrapper));
auto on_app_policy_updated = [](plugin_manager::RPCPlugin& plugin) {
plugin.OnPolicyEvent(plugin_manager::kApplicationPolicyUpdated);
diff --git a/src/components/application_manager/src/hmi_capabilities_impl.cc b/src/components/application_manager/src/hmi_capabilities_impl.cc
index c66a8b9905..6a0fbf78e3 100644
--- a/src/components/application_manager/src/hmi_capabilities_impl.cc
+++ b/src/components/application_manager/src/hmi_capabilities_impl.cc
@@ -736,8 +736,9 @@ void HMICapabilitiesImpl::set_seat_location_capability(
new smart_objects::SmartObject(seat_location_capability);
}
-void HMICapabilitiesImpl::Init(resumption::LastState* last_state) {
- hmi_language_handler_.Init(last_state);
+void HMICapabilitiesImpl::Init(
+ resumption::LastStateWrapperPtr last_state_wrapper) {
+ hmi_language_handler_.Init(last_state_wrapper);
if (false == load_capabilities_from_file()) {
LOG4CXX_ERROR(logger_, "file hmi_capabilities.json was not loaded");
} else {
@@ -747,6 +748,8 @@ void HMICapabilitiesImpl::Init(resumption::LastState* last_state) {
ui_language_, vr_language_, tts_language_);
}
+void HMICapabilitiesImpl::Init(resumption::LastState*) {}
+
bool HMICapabilitiesImpl::is_ui_cooperating() const {
return is_ui_cooperating_;
}
diff --git a/src/components/application_manager/src/hmi_language_handler.cc b/src/components/application_manager/src/hmi_language_handler.cc
index e206633ae2..46231c4596 100644
--- a/src/components/application_manager/src/hmi_language_handler.cc
+++ b/src/components/application_manager/src/hmi_language_handler.cc
@@ -35,7 +35,7 @@
#include "application_manager/hmi_capabilities.h"
#include "application_manager/message_helper.h"
#include "application_manager/rpc_service.h"
-#include "resumption/last_state.h"
+#include "resumption/last_state_wrapper.h"
#include "smart_objects/smart_object.h"
#include "utils/helpers.h"
@@ -81,9 +81,10 @@ void HMILanguageHandler::set_language_for(
LOG4CXX_DEBUG(
logger_,
"Setting language " << language << " for interface " << interface);
- Json::Value& dictionary = last_state_->get_dictionary();
- dictionary[LanguagesKey][key] = language;
- return;
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ dictionary[LanguagesKey][key] = static_cast<int32_t>(language);
+ accessor.GetMutableData().set_dictionary(dictionary);
}
hmi_apis::Common_Language::eType HMILanguageHandler::get_language_for(
@@ -107,7 +108,8 @@ hmi_apis::Common_Language::eType HMILanguageHandler::get_language_for(
return Common_Language::INVALID_ENUM;
}
- const Json::Value& dictionary = last_state_->get_dictionary();
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
if (dictionary.isMember(LanguagesKey)) {
if (dictionary[LanguagesKey].isMember(key)) {
Common_Language::eType language = static_cast<Common_Language::eType>(
@@ -342,8 +344,8 @@ void HMILanguageHandler::CheckApplication(const Apps::value_type app) {
}
}
-void HMILanguageHandler::Init(resumption::LastState* value) {
- last_state_ = value;
+void HMILanguageHandler::Init(resumption::LastStateWrapperPtr value) {
+ last_state_wrapper_ = value;
persisted_ui_language_ = get_language_for(INTERFACE_UI);
persisted_vr_language_ = get_language_for(INTERFACE_VR);
persisted_tts_language_ = get_language_for(INTERFACE_TTS);
diff --git a/src/components/application_manager/src/plugin_manager/rpc_plugin_manager_impl.cc b/src/components/application_manager/src/plugin_manager/rpc_plugin_manager_impl.cc
index 0c7ec9838b..9214a30513 100644
--- a/src/components/application_manager/src/plugin_manager/rpc_plugin_manager_impl.cc
+++ b/src/components/application_manager/src/plugin_manager/rpc_plugin_manager_impl.cc
@@ -13,7 +13,7 @@ RPCPluginManagerImpl::RPCPluginManagerImpl(
rpc_service::RPCService& rpc_service,
HMICapabilities& hmi_capabilities,
policy::PolicyHandlerInterface& policy_handler,
- resumption::LastState& last_state)
+ resumption::LastStateWrapperPtr last_state)
: app_manager_(app_manager)
, rpc_service_(rpc_service)
, hmi_capabilities_(hmi_capabilities)
diff --git a/src/components/application_manager/src/policies/policy_handler.cc b/src/components/application_manager/src/policies/policy_handler.cc
index 64e15d7134..b70fcfef86 100644
--- a/src/components/application_manager/src/policies/policy_handler.cc
+++ b/src/components/application_manager/src/policies/policy_handler.cc
@@ -426,8 +426,8 @@ bool PolicyHandler::ClearUserConsent() {
uint32_t PolicyHandler::GetAppIdForSending() const {
LOG4CXX_AUTO_TRACE(logger_);
POLICY_LIB_CHECK(0);
- const ApplicationSet& accessor =
- application_manager_.applications().GetData();
+ // fix ApplicationSet access crash
+ const ApplicationSet accessor = application_manager_.applications().GetData();
HMILevelPredicate has_none_level(mobile_api::HMILevel::HMI_NONE);
Applications apps_without_none_level;
diff --git a/src/components/application_manager/src/resumption/resume_ctrl_impl.cc b/src/components/application_manager/src/resumption/resume_ctrl_impl.cc
index d5490c8730..486cb76369 100644
--- a/src/components/application_manager/src/resumption/resume_ctrl_impl.cc
+++ b/src/components/application_manager/src/resumption/resume_ctrl_impl.cc
@@ -91,7 +91,7 @@ bool ResumeCtrlImpl::get_resumption_active() const {
}
#endif // BUILD_TESTS
-bool ResumeCtrlImpl::Init(resumption::LastState& last_state) {
+bool ResumeCtrlImpl::Init(resumption::LastStateWrapperPtr last_state_wrapper) {
bool use_db = application_manager_.get_settings().use_db_for_resumption();
if (use_db) {
resumption_storage_.reset(
@@ -120,7 +120,7 @@ bool ResumeCtrlImpl::Init(resumption::LastState& last_state) {
}
} else {
resumption_storage_.reset(
- new ResumptionDataJson(last_state, application_manager_));
+ new ResumptionDataJson(last_state_wrapper, application_manager_));
if (!resumption_storage_->Init()) {
LOG4CXX_DEBUG(logger_, "Resumption storage initialisation failed");
return false;
@@ -377,6 +377,10 @@ void ResumeCtrlImpl::RemoveFromResumption(uint32_t app_id) {
queue_lock_.Release();
}
+bool ResumeCtrlImpl::Init(LastState&) {
+ return false;
+}
+
bool ResumeCtrlImpl::SetAppHMIState(
ApplicationSharedPtr application,
const mobile_apis::HMILevel::eType hmi_level,
diff --git a/src/components/application_manager/src/resumption/resumption_data_json.cc b/src/components/application_manager/src/resumption/resumption_data_json.cc
index 5da47d31ce..3623c18b90 100644
--- a/src/components/application_manager/src/resumption/resumption_data_json.cc
+++ b/src/components/application_manager/src/resumption/resumption_data_json.cc
@@ -46,9 +46,10 @@ namespace formatters = ns_smart_device_link::ns_json_handler::formatters;
CREATE_LOGGERPTR_GLOBAL(logger_, "Resumption")
ResumptionDataJson::ResumptionDataJson(
- LastState& last_state,
+ resumption::LastStateWrapperPtr last_state_wrapper,
const application_manager::ApplicationManager& application_manager)
- : ResumptionData(application_manager), last_state_(last_state) {}
+ : ResumptionData(application_manager)
+ , last_state_wrapper_(last_state_wrapper) {}
void ResumptionDataJson::SaveApplication(
app_mngr::ApplicationSharedPtr application) {
@@ -69,9 +70,11 @@ void ResumptionDataJson::SaveApplication(
const bool is_subscribed_for_way_points =
application_manager_.IsAppSubscribedForWayPoints(application);
- sync_primitives::AutoLock autolock(resumption_lock_);
Json::Value tmp;
- Json::Value& json_app = GetFromSavedOrAppend(policy_app_id, device_mac);
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ Json::Value& json_app =
+ GetFromSavedOrAppend(policy_app_id, device_mac, dictionary);
json_app[strings::device_id] = device_mac;
json_app[strings::app_id] = policy_app_id;
@@ -106,18 +109,21 @@ void ResumptionDataJson::SaveApplication(
json_app[strings::time_stamp] = time_stamp;
json_app[strings::subscribed_for_way_points] = is_subscribed_for_way_points;
+ accessor.GetMutableData().set_dictionary(dictionary);
LOG4CXX_DEBUG(logger_, "SaveApplication : " << json_app.toStyledString());
}
bool ResumptionDataJson::IsHMIApplicationIdExist(uint32_t hmi_app_id) const {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
- for (Json::Value::iterator it = GetSavedApplications().begin();
- it != GetSavedApplications().end();
- ++it) {
- if ((*it).isMember(strings::hmi_app_id)) {
- if ((*it)[strings::hmi_app_id].asUInt() == hmi_app_id) {
+
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ const Json::Value& saved_apps = GetSavedApplications(dictionary);
+
+ for (const auto& saved_app : saved_apps) {
+ if (saved_app.isMember(strings::hmi_app_id)) {
+ if (saved_app[strings::hmi_app_id].asUInt() == hmi_app_id) {
return true;
}
}
@@ -129,7 +135,7 @@ uint32_t ResumptionDataJson::GetHMIApplicationID(
const std::string& policy_app_id, const std::string& device_id) const {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
+
uint32_t hmi_app_id = 0;
const int idx = GetObjectIndex(policy_app_id, device_id);
@@ -137,8 +143,9 @@ uint32_t ResumptionDataJson::GetHMIApplicationID(
LOG4CXX_WARN(logger_, "Application not saved");
return hmi_app_id;
}
-
- const Json::Value& json_app = GetSavedApplications()[idx];
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ const Json::Value& json_app = GetSavedApplications(dictionary)[idx];
if (json_app.isMember(strings::app_id) &&
json_app.isMember(strings::device_id)) {
hmi_app_id = json_app[strings::hmi_app_id].asUInt();
@@ -150,47 +157,51 @@ uint32_t ResumptionDataJson::GetHMIApplicationID(
void ResumptionDataJson::IncrementIgnOffCount() {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
+
Json::Value to_save = Json::arrayValue;
- for (Json::Value::iterator it = GetSavedApplications().begin();
- it != GetSavedApplications().end();
- ++it) {
- if ((*it).isMember(strings::ign_off_count)) {
- Json::Value& ign_off_count = (*it)[strings::ign_off_count];
+ Json::Value dictionary;
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ dictionary = accessor.GetData().dictionary();
+ Json::Value& saved_apps = GetSavedApplications(dictionary);
+ for (auto& json_app : saved_apps) {
+ if (json_app.isMember(strings::ign_off_count)) {
+ Json::Value& ign_off_count = json_app[strings::ign_off_count];
const uint32_t counter_value = ign_off_count.asUInt();
ign_off_count = counter_value + 1;
} else {
LOG4CXX_WARN(logger_, "Unknown key among saved applications");
- Json::Value& ign_off_count = (*it)[strings::ign_off_count];
+ Json::Value& ign_off_count = json_app[strings::ign_off_count];
ign_off_count = 1;
}
- to_save.append(*it);
+ to_save.append(json_app);
}
- SetSavedApplication(to_save);
- SetLastIgnOffTime(time(NULL));
- LOG4CXX_DEBUG(logger_, GetResumptionData().toStyledString());
+ SetSavedApplication(to_save, dictionary);
+ SetLastIgnOffTime(time(nullptr), dictionary);
+ accessor.GetMutableData().set_dictionary(dictionary);
+ LOG4CXX_DEBUG(logger_, GetResumptionData(dictionary).toStyledString());
}
void ResumptionDataJson::DecrementIgnOffCount() {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
- for (Json::Value::iterator it = GetSavedApplications().begin();
- it != GetSavedApplications().end();
- ++it) {
- if ((*it).isMember(strings::ign_off_count)) {
- const uint32_t ign_off_count = (*it)[strings::ign_off_count].asUInt();
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ Json::Value& saved_apps = GetSavedApplications(dictionary);
+ for (auto& saved_app : saved_apps) {
+ if (saved_app.isMember(strings::ign_off_count)) {
+ const uint32_t ign_off_count = saved_app[strings::ign_off_count].asUInt();
if (0 == ign_off_count) {
LOG4CXX_WARN(logger_, "Application has not been suspended");
} else {
- (*it)[strings::ign_off_count] = ign_off_count - 1;
+ saved_app[strings::ign_off_count] = ign_off_count - 1;
}
} else {
LOG4CXX_WARN(logger_, "Unknown key among saved applications");
- (*it)[strings::ign_off_count] = 0;
+ saved_app[strings::ign_off_count] = 0;
}
}
+ accessor.GetMutableData().set_dictionary(dictionary);
}
bool ResumptionDataJson::GetHashId(const std::string& policy_app_id,
@@ -198,14 +209,16 @@ bool ResumptionDataJson::GetHashId(const std::string& policy_app_id,
std::string& hash_id) const {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
+
const int idx = GetObjectIndex(policy_app_id, device_id);
if (-1 == idx) {
LOG4CXX_WARN(logger_, "Application not saved");
return false;
}
- const Json::Value& json_app = GetSavedApplications()[idx];
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ const Json::Value& json_app = GetSavedApplications(dictionary)[idx];
LOG4CXX_DEBUG(logger_,
"Saved_application_data: " << json_app.toStyledString());
if (json_app.isMember(strings::hash_id) &&
@@ -223,12 +236,14 @@ bool ResumptionDataJson::GetSavedApplication(
smart_objects::SmartObject& saved_app) const {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
+
const int idx = GetObjectIndex(policy_app_id, device_id);
if (-1 == idx) {
return false;
}
- const Json::Value& json_saved_app = GetSavedApplications()[idx];
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ const Json::Value& json_saved_app = GetSavedApplications(dictionary)[idx];
formatters::CFormatterJsonBase::jsonValueToObj(json_saved_app, saved_app);
return true;
@@ -238,46 +253,50 @@ bool ResumptionDataJson::RemoveApplicationFromSaved(
const std::string& policy_app_id, const std::string& device_id) {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
+
bool result = false;
std::vector<Json::Value> temp;
- for (Json::Value::iterator it = GetSavedApplications().begin();
- it != GetSavedApplications().end();
- ++it) {
- if ((*it).isMember(strings::app_id) && (*it).isMember(strings::device_id)) {
- const std::string& saved_policy_app_id =
- (*it)[strings::app_id].asString();
- const std::string& saved_device_id = (*it)[strings::device_id].asString();
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ Json::Value& saved_apps = GetSavedApplications(dictionary);
+ for (auto& app : saved_apps) {
+ if (app.isMember(strings::app_id) && app.isMember(strings::device_id)) {
+ const std::string& saved_policy_app_id = app[strings::app_id].asString();
+ const std::string& saved_device_id = app[strings::device_id].asString();
if (saved_policy_app_id == policy_app_id &&
saved_device_id == device_id) {
result = true;
} else {
- temp.push_back((*it));
+ temp.push_back(app);
}
}
}
if (false == result) {
LOG4CXX_TRACE(logger_, "EXIT result: " << (result ? "true" : "false"));
+ accessor.GetMutableData().set_dictionary(dictionary);
return result;
}
- GetSavedApplications().clear();
- for (std::vector<Json::Value>::iterator it = temp.begin(); it != temp.end();
- ++it) {
- GetSavedApplications().append((*it));
+ GetSavedApplications(dictionary).clear();
+ for (auto& app : temp) {
+ GetSavedApplications(dictionary).append(app);
}
LOG4CXX_TRACE(logger_, "EXIT result: " << (result ? "true" : "false"));
+ accessor.GetMutableData().set_dictionary(dictionary);
return result;
}
uint32_t ResumptionDataJson::GetIgnOffTime() const {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
- Json::Value& resumption = GetResumptionData();
+
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ Json::Value& resumption = GetResumptionData(dictionary);
if (!resumption.isMember(strings::last_ign_off_time)) {
resumption[strings::last_ign_off_time] = 0;
+ accessor.GetMutableData().set_dictionary(dictionary);
LOG4CXX_WARN(logger_, "last_save_time section is missed");
}
return resumption[strings::last_ign_off_time].asUInt();
@@ -286,8 +305,10 @@ uint32_t ResumptionDataJson::GetIgnOffTime() const {
uint32_t ResumptionDataJson::GetGlobalIgnOnCounter() const {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
- Json::Value& resumption = GetResumptionData();
+
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ Json::Value& resumption = GetResumptionData(dictionary);
if (resumption.isMember(strings::global_ign_on_counter)) {
const uint32_t global_ign_on_counter =
resumption[strings::global_ign_on_counter].asUInt();
@@ -300,8 +321,10 @@ uint32_t ResumptionDataJson::GetGlobalIgnOnCounter() const {
void ResumptionDataJson::IncrementGlobalIgnOnCounter() {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
- Json::Value& resumption = GetResumptionData();
+
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ Json::Value& resumption = GetResumptionData(dictionary);
if (resumption.isMember(strings::global_ign_on_counter)) {
const uint32_t global_ign_on_counter =
resumption[strings::global_ign_on_counter].asUInt();
@@ -315,64 +338,71 @@ void ResumptionDataJson::IncrementGlobalIgnOnCounter() {
} else {
resumption[strings::global_ign_on_counter] = 1;
}
- last_state().SaveStateToFileSystem();
+ accessor.GetMutableData().set_dictionary(dictionary);
+ accessor.GetMutableData().SaveToFileSystem();
}
void ResumptionDataJson::ResetGlobalIgnOnCount() {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
- Json::Value& resumption = GetResumptionData();
+
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ Json::Value& resumption = GetResumptionData(dictionary);
resumption[strings::global_ign_on_counter] = 0;
+ accessor.GetMutableData().set_dictionary(dictionary);
LOG4CXX_DEBUG(logger_, "Global IGN ON counter resetting");
}
ssize_t ResumptionDataJson::IsApplicationSaved(
const std::string& policy_app_id, const std::string& device_id) const {
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
+
return GetObjectIndex(policy_app_id, device_id);
}
Json::Value& ResumptionDataJson::GetFromSavedOrAppend(
- const std::string& policy_app_id, const std::string& device_id) const {
+ const std::string& policy_app_id,
+ const std::string& device_id,
+ Json::Value& dictionary) const {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
- for (Json::Value::iterator it = GetSavedApplications().begin();
- it != GetSavedApplications().end();
- ++it) {
- if (device_id == (*it)[strings::device_id].asString() &&
- policy_app_id == (*it)[strings::app_id].asString()) {
- return *it;
+
+ Json::Value& saved_apps = GetSavedApplications(dictionary);
+ for (auto& saved_app : saved_apps) {
+ if (device_id == saved_app[strings::device_id].asString() &&
+ policy_app_id == saved_app[strings::app_id].asString()) {
+ return saved_app;
}
}
- return GetSavedApplications().append(Json::Value());
+ return GetSavedApplications(dictionary).append(Json::Value());
}
void ResumptionDataJson::GetDataForLoadResumeData(
smart_objects::SmartObject& saved_data) const {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
+
smart_objects::SmartObject so_array_data(smart_objects::SmartType_Array);
int i = 0;
- for (Json::Value::iterator it = GetSavedApplications().begin();
- it != GetSavedApplications().end();
- ++it) {
- if (((*it).isMember(strings::hmi_level)) &&
- ((*it).isMember(strings::ign_off_count)) &&
- ((*it).isMember(strings::time_stamp)) &&
- ((*it).isMember(strings::app_id)) &&
- ((*it).isMember(strings::device_id))) {
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ Json::Value& saved_apps = GetSavedApplications(dictionary);
+
+ for (auto& saved_app : saved_apps) {
+ if ((saved_app.isMember(strings::hmi_level)) &&
+ (saved_app.isMember(strings::ign_off_count)) &&
+ (saved_app.isMember(strings::time_stamp)) &&
+ (saved_app.isMember(strings::app_id)) &&
+ (saved_app.isMember(strings::device_id))) {
smart_objects::SmartObject so(smart_objects::SmartType_Map);
- so[strings::hmi_level] = (*it)[strings::hmi_level].asInt();
- so[strings::ign_off_count] = (*it)[strings::ign_off_count].asInt();
- so[strings::time_stamp] = (*it)[strings::time_stamp].asUInt();
- so[strings::app_id] = (*it)[strings::app_id].asString();
- so[strings::device_id] = (*it)[strings::device_id].asString();
+ so[strings::hmi_level] = saved_app[strings::hmi_level].asInt();
+ so[strings::ign_off_count] = saved_app[strings::ign_off_count].asInt();
+ so[strings::time_stamp] = saved_app[strings::time_stamp].asUInt();
+ so[strings::app_id] = saved_app[strings::app_id].asString();
+ so[strings::device_id] = saved_app[strings::device_id].asString();
so_array_data[i++] = so;
}
}
@@ -397,14 +427,18 @@ void ResumptionDataJson::UpdateHmiLevel(
<< policy_app_id << " device_id = " << device_id);
return;
}
- GetSavedApplications()[idx][strings::hmi_level] = hmi_level;
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ GetSavedApplications(dictionary)[idx][strings::hmi_level] = hmi_level;
+ accessor.GetMutableData().set_dictionary(dictionary);
}
-Json::Value& ResumptionDataJson::GetSavedApplications() const {
+Json::Value& ResumptionDataJson::GetSavedApplications(
+ Json::Value& dictionary) const {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
- Json::Value& resumption = GetResumptionData();
+
+ Json::Value& resumption = GetResumptionData(dictionary);
if (!resumption.isMember(strings::resume_app_list)) {
resumption[strings::resume_app_list] = Json::Value(Json::arrayValue);
LOG4CXX_WARN(logger_, "app_list section is missed");
@@ -417,11 +451,11 @@ Json::Value& ResumptionDataJson::GetSavedApplications() const {
return resume_app_list;
}
-Json::Value& ResumptionDataJson::GetResumptionData() const {
+Json::Value& ResumptionDataJson::GetResumptionData(
+ Json::Value& dictionary) const {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
- Json::Value& dictionary = last_state().get_dictionary();
+
if (!dictionary.isMember(strings::resumption)) {
dictionary[strings::resumption] = Json::Value(Json::objectValue);
LOG4CXX_WARN(logger_, "resumption section is missed");
@@ -438,8 +472,10 @@ ssize_t ResumptionDataJson::GetObjectIndex(const std::string& policy_app_id,
const std::string& device_id) const {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
- const Json::Value& apps = GetSavedApplications();
+
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ const Json::Value& apps = GetSavedApplications(dictionary);
const Json::ArrayIndex size = apps.size();
Json::ArrayIndex idx = 0;
for (; idx != size; ++idx) {
@@ -460,8 +496,10 @@ ssize_t ResumptionDataJson::GetObjectIndex(const std::string& policy_app_id,
bool ResumptionDataJson::IsResumptionDataValid(uint32_t index) const {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
- const Json::Value& json_app = GetSavedApplications()[index];
+
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ const Json::Value& json_app = GetSavedApplications(dictionary)[index];
if (!json_app.isMember(strings::app_id) ||
!json_app.isMember(strings::ign_off_count) ||
!json_app.isMember(strings::hmi_level) ||
@@ -481,19 +519,21 @@ bool ResumptionDataJson::IsResumptionDataValid(uint32_t index) const {
return true;
}
-void ResumptionDataJson::SetSavedApplication(Json::Value& apps_json) {
+void ResumptionDataJson::SetSavedApplication(Json::Value& apps_json,
+ Json::Value& dictionary) {
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
- Json::Value& app_list = GetSavedApplications();
+
+ Json::Value& app_list = GetSavedApplications(dictionary);
app_list = apps_json;
}
-void ResumptionDataJson::SetLastIgnOffTime(time_t ign_off_time) {
+void ResumptionDataJson::SetLastIgnOffTime(time_t ign_off_time,
+ Json::Value& dictionary) {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock autolock(resumption_lock_);
+
LOG4CXX_WARN(logger_, "ign_off_time = " << ign_off_time);
- Json::Value& resumption = GetResumptionData();
+ Json::Value& resumption = GetResumptionData(dictionary);
resumption[strings::last_ign_off_time] = static_cast<uint32_t>(ign_off_time);
}
@@ -506,8 +546,11 @@ bool ResumptionDataJson::DropAppDataResumption(const std::string& device_id,
const std::string& app_id) {
LOG4CXX_AUTO_TRACE(logger_);
using namespace app_mngr;
- sync_primitives::AutoLock autolock(resumption_lock_);
- Json::Value& application = GetFromSavedOrAppend(app_id, device_id);
+
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ Json::Value& application =
+ GetFromSavedOrAppend(app_id, device_id, dictionary);
if (application.isNull()) {
LOG4CXX_DEBUG(logger_,
"Application " << app_id << " with device_id " << device_id
@@ -521,6 +564,7 @@ bool ResumptionDataJson::DropAppDataResumption(const std::string& device_id,
application[strings::application_subscriptions].clear();
application[strings::application_files].clear();
application.removeMember(strings::grammar_id);
+ accessor.GetMutableData().set_dictionary(dictionary);
LOG4CXX_DEBUG(logger_,
"Resumption data for application "
<< app_id << " with device_id " << device_id
@@ -529,10 +573,11 @@ bool ResumptionDataJson::DropAppDataResumption(const std::string& device_id,
}
void ResumptionDataJson::Persist() {
- // We lock the resumption data because SaveStateToFileSystem accesses
- // the same dictionary that we use here in ResumptionDataJson
- sync_primitives::AutoLock autolock(resumption_lock_);
- last_state().SaveStateToFileSystem();
+ last_state_wrapper_->get_accessor().GetMutableData().SaveToFileSystem();
+}
+
+LastState& ResumptionDataJson::last_state() const {
+ return last_state_wrapper_->get_accessor().GetMutableData();
}
} // namespace resumption
diff --git a/src/components/application_manager/src/state_controller_impl.cc b/src/components/application_manager/src/state_controller_impl.cc
index 1bf4c2bf66..b07a5bcc13 100644
--- a/src/components/application_manager/src/state_controller_impl.cc
+++ b/src/components/application_manager/src/state_controller_impl.cc
@@ -976,6 +976,7 @@ int64_t StateControllerImpl::RequestHMIStateChange(
void StateControllerImpl::ApplyPostponedStateForApp(ApplicationSharedPtr app) {
LOG4CXX_AUTO_TRACE(logger_);
+ DCHECK_OR_RETURN_VOID(app);
const WindowIds window_ids = app->GetWindowIds();
for (const auto& window_id : window_ids) {
diff --git a/src/components/application_manager/test/app_launch/app_launch_data_json_test.cc b/src/components/application_manager/test/app_launch/app_launch_data_json_test.cc
index 12a375685e..f7bd636a66 100644
--- a/src/components/application_manager/test/app_launch/app_launch_data_json_test.cc
+++ b/src/components/application_manager/test/app_launch/app_launch_data_json_test.cc
@@ -39,6 +39,7 @@
#include "gtest/gtest.h"
#include "json/json.h"
#include "resumption/last_state_impl.h"
+#include "resumption/last_state_wrapper_impl.h"
#include "smart_objects/smart_object.h"
#include "utils/date_time.h"
#include "utils/file_system.h"
@@ -66,8 +67,9 @@ class AppLaunchDataJsonTest : public ::testing::Test {
private:
virtual void SetUp() {
::file_system::DeleteFile(kAppStorageFile);
- test_last_state_ = std::unique_ptr<resumption::LastState>(
- new resumption::LastStateImpl(kAppStorageFolder, kAppInfoStorage));
+ last_state_wrapper_ = std::make_shared<resumption::LastStateWrapperImpl>(
+ std::make_shared<resumption::LastStateImpl>(kAppStorageFolder,
+ kAppInfoStorage));
ASSERT_TRUE(::file_system::CreateFile(kAppStorageFile));
NiceMock<app_launch_test::MockAppLaunchSettings> mock_app_launch_settings_;
@@ -75,7 +77,7 @@ class AppLaunchDataJsonTest : public ::testing::Test {
.WillByDefault(Return(15u));
res_json_.reset(
- new AppLaunchDataJson(mock_app_launch_settings_, *test_last_state_));
+ new AppLaunchDataJson(mock_app_launch_settings_, last_state_wrapper_));
}
public:
@@ -101,7 +103,7 @@ class AppLaunchDataJsonTest : public ::testing::Test {
void GetApplicationData_EXPECT_FALSE(const ApplicationData& in_data);
std::string AddCounter(const std::string& inp, int32_t val);
- std::unique_ptr<resumption::LastState> test_last_state_;
+ resumption::LastStateWrapperPtr last_state_wrapper_;
std::unique_ptr<AppLaunchDataJson> res_json_;
void SetTimestamp(const ApplicationData& in_data,
date_time::TimeDuration& timestamp);
@@ -133,9 +135,11 @@ date_time::TimeDuration AppLaunchDataJsonTest::GetApplicationData_EXPECT_TRUE(
const ApplicationData& in_data, ApplicationData& out_data) {
uint32_t sizeBeforeGetting = res_json()->GetCurentNumberOfAppData();
+ Json::Value dictionary =
+ last_state_wrapper_->get_accessor().GetData().dictionary();
int32_t index = NotFound;
Json::Value& json_data_list =
- res_json()->GetApplicationListAndIndex(in_data, index);
+ res_json()->GetApplicationListAndIndex(in_data, index, dictionary);
EXPECT_FALSE(index == NotFound);
uint32_t sizeAfterGetting = res_json()->GetCurentNumberOfAppData();
@@ -150,7 +154,8 @@ date_time::TimeDuration AppLaunchDataJsonTest::GetApplicationData_EXPECT_TRUE(
// time stamp
date_time::TimeDuration tmVal = date_time::seconds(
json_data_list[index][am::strings::app_launch_last_session].asUInt64());
-
+ last_state_wrapper_->get_accessor().GetMutableData().set_dictionary(
+ dictionary);
return tmVal;
}
@@ -158,12 +163,15 @@ void AppLaunchDataJsonTest::GetApplicationData_EXPECT_FALSE(
const ApplicationData& in_data) {
uint32_t sizeBeforeGetting = res_json()->GetCurentNumberOfAppData();
+ Json::Value dictionary =
+ last_state_wrapper_->get_accessor().GetData().dictionary();
int32_t index = NotFound;
- res_json()->GetApplicationListAndIndex(in_data, index);
+ res_json()->GetApplicationListAndIndex(in_data, index, dictionary);
EXPECT_TRUE(index == NotFound);
uint32_t sizeAfterGetting = res_json()->GetCurentNumberOfAppData();
-
+ last_state_wrapper_->get_accessor().GetMutableData().set_dictionary(
+ dictionary);
EXPECT_EQ(sizeBeforeGetting, sizeAfterGetting);
}
@@ -172,8 +180,10 @@ void AppLaunchDataJsonTest::SetTimestamp(const ApplicationData& in_data,
uint32_t sizeBeforeGetting = res_json()->GetCurentNumberOfAppData();
int32_t index = NotFound;
+ Json::Value dictionary =
+ last_state_wrapper_->get_accessor().GetData().dictionary();
Json::Value& json_data_list =
- res_json()->GetApplicationListAndIndex(in_data, index);
+ res_json()->GetApplicationListAndIndex(in_data, index, dictionary);
EXPECT_FALSE(index == NotFound);
uint32_t sizeAfterGetting = res_json()->GetCurentNumberOfAppData();
@@ -184,6 +194,8 @@ void AppLaunchDataJsonTest::SetTimestamp(const ApplicationData& in_data,
// time stamp
json_data_list[index][am::strings::app_launch_last_session] =
static_cast<Json::Value::UInt64>(date_time::getSecs(timestamp));
+ last_state_wrapper_->get_accessor().GetMutableData().set_dictionary(
+ dictionary);
}
std::string AppLaunchDataJsonTest::AddCounter(const std::string& inp,
diff --git a/src/components/application_manager/test/app_service_manager_test.cc b/src/components/application_manager/test/app_service_manager_test.cc
index daabdeedf4..c2e48c3eda 100644
--- a/src/components/application_manager/test/app_service_manager_test.cc
+++ b/src/components/application_manager/test/app_service_manager_test.cc
@@ -38,6 +38,7 @@
#include "application_manager/mock_application_manager_settings.h"
#include "application_manager/mock_message_helper.h"
#include "application_manager/smart_object_keys.h"
+#include "resumption/last_state_wrapper_impl.h"
#include "resumption/mock_last_state.h"
#include "smart_objects/smart_object.h"
@@ -85,7 +86,10 @@ class AppServiceManagerTest : public testing::Test {
AppServiceManagerTest()
: mock_app_ptr_(new MockApplication)
, mock_app_ptr2_(new MockApplication)
- , app_service_manager_(mock_app_manager_, mock_last_state_)
+ , mock_last_state_(std::make_shared<resumption_test::MockLastState>())
+ , last_state_wrapper_(std::make_shared<resumption::LastStateWrapperImpl>(
+ mock_last_state_))
+ , app_service_manager_(mock_app_manager_, last_state_wrapper_)
, mock_message_helper_(
application_manager::MockMessageHelper::message_helper_mock()) {
Mock::VerifyAndClearExpectations(mock_message_helper_);
@@ -105,7 +109,7 @@ class AppServiceManagerTest : public testing::Test {
.WillByDefault(Return(kPolicyAppId));
ON_CALL(*mock_app_ptr2_, policy_app_id())
.WillByDefault(Return(kPolicyAppId2));
- ON_CALL(mock_last_state_, get_dictionary()).WillByDefault(ReturnRef(dict_));
+ ON_CALL(*mock_last_state_, dictionary()).WillByDefault(Return(dict_));
auto app_ptr = std::static_pointer_cast<am::Application>(mock_app_ptr_);
auto app_ptr2 = std::static_pointer_cast<am::Application>(mock_app_ptr2_);
ON_CALL(mock_app_manager_, application(kConnectionKey))
@@ -134,8 +138,7 @@ class AppServiceManagerTest : public testing::Test {
GenerateMediaManifest(true, service_name);
Json::Value empty_json;
- EXPECT_CALL(mock_last_state_, get_dictionary())
- .WillOnce(ReturnRef(empty_json));
+ EXPECT_CALL(*mock_last_state_, dictionary()).WillOnce(Return(empty_json));
EXPECT_CALL(*mock_message_helper_,
BroadcastCapabilityUpdate(
@@ -201,7 +204,8 @@ class AppServiceManagerTest : public testing::Test {
std::shared_ptr<MockApplication> mock_app_ptr_;
std::shared_ptr<MockApplication> mock_app_ptr2_;
MockApplicationManager mock_app_manager_;
- resumption_test::MockLastState mock_last_state_;
+ std::shared_ptr<resumption_test::MockLastState> mock_last_state_;
+ resumption::LastStateWrapperPtr last_state_wrapper_;
MockApplicationManagerSettings mock_settings_;
application_manager::AppServiceManager app_service_manager_;
application_manager::MockMessageHelper* mock_message_helper_;
@@ -211,8 +215,7 @@ TEST_F(AppServiceManagerTest, PublishAppService_Mobile_SUCCESS) {
smart_objects::SmartObject manifest = GenerateMediaManifest(true);
Json::Value empty_json;
- EXPECT_CALL(mock_last_state_, get_dictionary())
- .WillOnce(ReturnRef(empty_json));
+ EXPECT_CALL(*mock_last_state_, dictionary()).WillOnce(Return(empty_json));
smart_objects::SmartObject syscap_update_published;
EXPECT_CALL(
@@ -260,8 +263,7 @@ TEST_F(AppServiceManagerTest, PublishAppService_HMI_SUCCESS) {
smart_objects::SmartObject manifest = GenerateMediaManifest(true);
Json::Value empty_json;
- EXPECT_CALL(mock_last_state_, get_dictionary())
- .WillOnce(ReturnRef(empty_json));
+ EXPECT_CALL(*mock_last_state_, dictionary()).WillOnce(Return(empty_json));
smart_objects::SmartObject syscap_update_published;
EXPECT_CALL(
@@ -457,4 +459,4 @@ TEST_F(AppServiceManagerTest, GetActiveServices_OneService_SUCCESS) {
} // namespace application_manager_test
} // namespace components
-} // namespace test \ No newline at end of file
+} // namespace test
diff --git a/src/components/application_manager/test/application_helper_test.cc b/src/components/application_manager/test/application_helper_test.cc
index d9d590a171..ec84acc697 100644
--- a/src/components/application_manager/test/application_helper_test.cc
+++ b/src/components/application_manager/test/application_helper_test.cc
@@ -52,6 +52,7 @@
#include "utils/macro.h"
#include "media_manager/mock_media_manager.h"
+#include "resumption/last_state_wrapper_impl.h"
#include "test/resumption/mock_last_state.h"
namespace {
@@ -118,7 +119,10 @@ class ApplicationHelperTest : public testing::Test {
const std::string path_to_plagin = "";
EXPECT_CALL(mock_application_manager_settings_, plugins_folder())
.WillOnce(ReturnRef(path_to_plagin));
- app_manager_impl_.Init(mock_last_state_, &mock_media_manager_);
+ mock_last_state_ = std::make_shared<MockLastState>();
+ last_state_wrapper_ =
+ std::make_shared<resumption::LastStateWrapperImpl>(mock_last_state_);
+ app_manager_impl_.Init(last_state_wrapper_, &mock_media_manager_);
app_impl_ = std::make_shared<ApplicationImpl>(
application_id,
@@ -136,7 +140,8 @@ class ApplicationHelperTest : public testing::Test {
ApplicationManagerImpl app_manager_impl_;
MockMediaManager mock_media_manager_;
- MockLastState mock_last_state_;
+ std::shared_ptr<MockLastState> mock_last_state_;
+ std::shared_ptr<resumption::LastStateWrapperImpl> last_state_wrapper_;
ApplicationSharedPtr app_impl_;
};
diff --git a/src/components/application_manager/test/application_manager_impl_test.cc b/src/components/application_manager/test/application_manager_impl_test.cc
index 82ae42e88a..b5fba2cc54 100644
--- a/src/components/application_manager/test/application_manager_impl_test.cc
+++ b/src/components/application_manager/test/application_manager_impl_test.cc
@@ -59,6 +59,7 @@
#include "protocol/bson_object_keys.h"
#include "protocol_handler/mock_protocol_handler.h"
#include "protocol_handler/mock_session_observer.h"
+#include "resumption/last_state_wrapper_impl.h"
#include "resumption/mock_last_state.h"
#include "utils/custom_string.h"
#include "utils/file_system.h"
@@ -153,9 +154,12 @@ class ApplicationManagerImplTest
std::make_shared<NiceMock<resumption_test::MockResumptionData> >(
mock_app_mngr_))
, mock_rpc_service_(new MockRPCService)
+ , mock_last_state_(std::make_shared<resumption_test::MockLastState>())
, mock_policy_handler_(new NiceMock<MockPolicyHandlerInterface>)
- , mock_app_service_manager_(
- new MockAppServiceManager(mock_app_mngr_, mock_last_state_))
+ , mock_app_service_manager_(new MockAppServiceManager(
+ mock_app_mngr_,
+ std::make_shared<resumption::LastStateWrapperImpl>(
+ mock_last_state_)))
, mock_message_helper_(
application_manager::MockMessageHelper::message_helper_mock())
, mock_statistics_manager_(
@@ -207,7 +211,7 @@ class ApplicationManagerImplTest
.WillByDefault(Return());
app_manager_impl_->SetAppServiceManager(mock_app_service_manager_);
Json::Value empty;
- ON_CALL(mock_last_state_, get_dictionary()).WillByDefault(ReturnRef(empty));
+ ON_CALL(*mock_last_state_, dictionary()).WillByDefault(Return(empty));
auto request = std::make_shared<smart_objects::SmartObject>(
smart_objects::SmartType_Map);
@@ -313,7 +317,7 @@ class ApplicationManagerImplTest
MockStateController mock_state_ctrl_;
MockRPCService* mock_rpc_service_;
- resumption_test::MockLastState mock_last_state_;
+ std::shared_ptr<resumption_test::MockLastState> mock_last_state_;
NiceMock<con_test::MockConnectionHandler> mock_connection_handler_;
NiceMock<protocol_handler_test::MockSessionObserver> mock_session_observer_;
NiceMock<MockApplicationManagerSettings> mock_application_manager_settings_;
diff --git a/src/components/application_manager/test/commands/command_request_impl_test.cc b/src/components/application_manager/test/commands/command_request_impl_test.cc
index 86dba1c5ac..2b3231ba98 100644
--- a/src/components/application_manager/test/commands/command_request_impl_test.cc
+++ b/src/components/application_manager/test/commands/command_request_impl_test.cc
@@ -53,6 +53,7 @@
#include "application_manager/mock_app_service_manager.h"
#include "resumption/last_state_impl.h"
+#include "resumption/last_state_wrapper_impl.h"
namespace test {
namespace components {
@@ -95,6 +96,9 @@ const std::string kDisallowedParam2 = "disallowed_param2";
const std::string kAllowedParam = "allowed_param";
const std::string kUndefinedParam = "undefined_params";
const std::string kMissedParam = "missed_param";
+const std::string kAppStorageFolder = "app_storage_folder";
+const std::string kAppStorageFile = "./app_info.dat";
+const std::string kAppInfoStorage = "app_info_storage";
} // namespace
class CommandRequestImplTest
@@ -607,8 +611,10 @@ TEST_F(CommandRequestImplTest, AppNotFound_HashUpdateNotExpected) {
}
TEST_F(CommandRequestImplTest, SendProviderRequest_ByServiceType) {
- resumption::LastStateImpl last_state("app_storage_folder",
- "app_info_storage");
+ auto last_state = std::make_shared<resumption::LastStateWrapperImpl>(
+ std::make_shared<resumption::LastStateImpl>(kAppStorageFolder,
+ kAppInfoStorage));
+
MockAppServiceManager app_service_manager(app_mngr_, last_state);
MockAppPtr mock_app = CreateMockApp();
EXPECT_CALL(app_mngr_, GetAppServiceManager())
@@ -634,8 +640,10 @@ TEST_F(CommandRequestImplTest, SendProviderRequest_ByServiceType) {
}
TEST_F(CommandRequestImplTest, SendProviderRequest_ByProviderID) {
- resumption::LastStateImpl last_state("app_storage_folder",
- "app_info_storage");
+ auto last_state = std::make_shared<resumption::LastStateWrapperImpl>(
+ std::make_shared<resumption::LastStateImpl>(kAppStorageFolder,
+ kAppInfoStorage));
+
MockAppServiceManager app_service_manager(app_mngr_, last_state);
MockAppPtr mock_app = CreateMockApp();
EXPECT_CALL(app_mngr_, GetAppServiceManager())
@@ -661,8 +669,10 @@ TEST_F(CommandRequestImplTest, SendProviderRequest_ByProviderID) {
}
TEST_F(CommandRequestImplTest, SendProviderRequestToHMI_ByProviderID) {
- resumption::LastStateImpl last_state("app_storage_folder",
- "app_info_storage");
+ auto last_state = std::make_shared<resumption::LastStateWrapperImpl>(
+ std::make_shared<resumption::LastStateImpl>(kAppStorageFolder,
+ kAppInfoStorage));
+
MockAppServiceManager app_service_manager(app_mngr_, last_state);
MockAppPtr mock_app = CreateMockApp();
EXPECT_CALL(app_mngr_, GetAppServiceManager())
diff --git a/src/components/application_manager/test/hmi_capabilities_test.cc b/src/components/application_manager/test/hmi_capabilities_test.cc
index 5c7cd238df..6234830f50 100644
--- a/src/components/application_manager/test/hmi_capabilities_test.cc
+++ b/src/components/application_manager/test/hmi_capabilities_test.cc
@@ -50,6 +50,7 @@
#include "application_manager/resumption/resume_ctrl.h"
#include "application_manager/state_controller.h"
#include "resumption/last_state_impl.h"
+#include "resumption/last_state_wrapper_impl.h"
#include "utils/file_system.h"
namespace test {
@@ -68,7 +69,9 @@ using namespace application_manager;
class HMICapabilitiesTest : public ::testing::Test {
protected:
HMICapabilitiesTest()
- : last_state_("app_storage_folder", "app_info_data")
+ : last_state_wrapper_(std::make_shared<resumption::LastStateWrapperImpl>(
+ std::make_shared<resumption::LastStateImpl>("app_storage_folder",
+ "app_info_storage")))
, file_name_("hmi_capabilities.json") {}
virtual void SetUp() OVERRIDE {
EXPECT_CALL(app_mngr_, event_dispatcher())
@@ -84,7 +87,7 @@ class HMICapabilitiesTest : public ::testing::Test {
.WillOnce(Return(false));
hmi_capabilities_test =
std::make_shared<HMICapabilitiesForTesting>(app_mngr_);
- hmi_capabilities_test->Init(&last_state_);
+ hmi_capabilities_test->Init(last_state_wrapper_);
}
void TearDown() OVERRIDE {
@@ -99,7 +102,7 @@ class HMICapabilitiesTest : public ::testing::Test {
void SetCooperating();
MockApplicationManager app_mngr_;
event_engine_test::MockEventDispatcher mock_event_dispatcher;
- resumption::LastStateImpl last_state_;
+ resumption::LastStateWrapperPtr last_state_wrapper_;
MockApplicationManagerSettings mock_application_manager_settings_;
std::shared_ptr<HMICapabilitiesForTesting> hmi_capabilities_test;
const std::string file_name_;
@@ -514,7 +517,7 @@ TEST_F(HMICapabilitiesTest,
std::shared_ptr<HMICapabilitiesForTesting> hmi_capabilities =
std::make_shared<HMICapabilitiesForTesting>(mock_app_mngr);
- hmi_capabilities->Init(&last_state_);
+ hmi_capabilities->Init(last_state_wrapper_);
// Check system capabilities; only phone capability is available
EXPECT_FALSE(hmi_capabilities->navigation_supported());
@@ -554,7 +557,7 @@ TEST_F(HMICapabilitiesTest,
std::shared_ptr<HMICapabilitiesForTesting> hmi_capabilities =
std::make_shared<HMICapabilitiesForTesting>(mock_app_mngr);
- hmi_capabilities->Init(&last_state_);
+ hmi_capabilities->Init(last_state_wrapper_);
// Check system capabilities; only navigation capability is valid, the other
// two are empty
@@ -600,7 +603,7 @@ TEST_F(HMICapabilitiesTest,
std::shared_ptr<HMICapabilitiesForTesting> hmi_capabilities =
std::make_shared<HMICapabilitiesForTesting>(mock_app_mngr);
- hmi_capabilities->Init(&last_state_);
+ hmi_capabilities->Init(last_state_wrapper_);
// with old audio pass thru format, the object is an array containing a single
// object
diff --git a/src/components/application_manager/test/hmi_language_handler_test.cc b/src/components/application_manager/test/hmi_language_handler_test.cc
index 5f07c1b9d1..59913b19be 100644
--- a/src/components/application_manager/test/hmi_language_handler_test.cc
+++ b/src/components/application_manager/test/hmi_language_handler_test.cc
@@ -44,6 +44,7 @@
#include "application_manager/smart_object_keys.h"
#include "application_manager/state_controller.h"
#include "gtest/gtest.h"
+#include "resumption/last_state_wrapper_impl.h"
#include "test/resumption/mock_last_state.h"
#include "utils/lock.h"
@@ -135,7 +136,6 @@ class HmiLanguageHandlerTest : public ::testing::Test {
MockEventDispatcher event_dispatcher_;
std::shared_ptr<am::HMILanguageHandler> hmi_language_handler_;
std::shared_ptr<sync_primitives::Lock> app_set_lock_;
- resumption_test::MockLastState last_state_;
MockRPCService mock_rpc_service_;
};
@@ -155,9 +155,12 @@ TEST_F(HmiLanguageHandlerTest, OnEvent_AllLanguageIsReceivedAndSame_SUCCESS) {
// Set up `active_*_language` and
//`persisted_ui_language_` to be the same
+ auto mock_last_state = std::make_shared<resumption_test::MockLastState>();
+ std::shared_ptr<resumption::LastStateWrapperImpl> last_state_wrapper =
+ std::make_shared<resumption::LastStateWrapperImpl>(mock_last_state);
Json::Value dictionary = Json::Value();
- ON_CALL(last_state_, get_dictionary()).WillByDefault(ReturnRef(dictionary));
- hmi_language_handler_->Init(&last_state_);
+ ON_CALL(*mock_last_state, dictionary()).WillByDefault(Return(dictionary));
+ hmi_language_handler_->Init(last_state_wrapper);
InitHMICapabilitiesLanguages(hmi_apis::Common_Language::eType::EN_US,
hmi_apis::Common_Language::eType::EN_US,
hmi_apis::Common_Language::eType::EN_US);
diff --git a/src/components/application_manager/test/include/application_manager/mock_app_service_manager.h b/src/components/application_manager/test/include/application_manager/mock_app_service_manager.h
index f77b5685da..0b3753a532 100644
--- a/src/components/application_manager/test/include/application_manager/mock_app_service_manager.h
+++ b/src/components/application_manager/test/include/application_manager/mock_app_service_manager.h
@@ -45,7 +45,7 @@ namespace application_manager_test {
class MockAppServiceManager : public application_manager::AppServiceManager {
public:
MockAppServiceManager(application_manager::ApplicationManager& app_manager,
- resumption::LastState& last_state)
+ resumption::LastStateWrapperPtr last_state)
: application_manager::AppServiceManager(app_manager, last_state) {}
MOCK_METHOD3(
PublishAppService,
diff --git a/src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h b/src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h
index c08ad146ee..7c163d78ad 100644
--- a/src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h
+++ b/src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h
@@ -196,8 +196,11 @@ class MockHMICapabilities : public ::application_manager::HMICapabilities {
set_seat_location_capability,
void(const smart_objects::SmartObject& seat_location_capability));
+ DEPRECATED
MOCK_METHOD1(Init, void(resumption::LastState* last_state));
+ MOCK_METHOD1(Init, void(resumption::LastStateWrapperPtr last_state_wrapper));
+
MOCK_CONST_METHOD0(ccpu_version, const std::string&());
MOCK_METHOD1(set_ccpu_version, void(const std::string& ccpu_version));
MOCK_METHOD0(get_hmi_language_handler,
diff --git a/src/components/application_manager/test/include/application_manager/mock_resume_ctrl.h b/src/components/application_manager/test/include/application_manager/mock_resume_ctrl.h
index b657f0e86b..3935ab7924 100644
--- a/src/components/application_manager/test/include/application_manager/mock_resume_ctrl.h
+++ b/src/components/application_manager/test/include/application_manager/mock_resume_ctrl.h
@@ -34,7 +34,7 @@
#include "application_manager/application.h"
#include "application_manager/resumption/resume_ctrl.h"
#include "gmock/gmock.h"
-#include "resumption/last_state.h"
+#include "resumption/last_state_wrapper.h"
namespace test {
namespace components {
@@ -82,7 +82,9 @@ class MockResumeCtrl : public resumption::ResumeCtrl {
MOCK_METHOD1(OnAppActivated,
void(app_mngr::ApplicationSharedPtr application));
MOCK_METHOD1(RemoveFromResumption, void(uint32_t app_id));
+ DEPRECATED
MOCK_METHOD1(Init, bool(resumption::LastState& last_state));
+ MOCK_METHOD1(Init, bool(resumption::LastStateWrapperPtr last_state));
MOCK_METHOD2(OnAppRegistrationStart,
void(const std::string& policy_app_id,
const std::string& device_id));
diff --git a/src/components/application_manager/test/resumption/resumption_data_json_test.cc b/src/components/application_manager/test/resumption/resumption_data_json_test.cc
index 955309e091..9d348ecbb7 100644
--- a/src/components/application_manager/test/resumption/resumption_data_json_test.cc
+++ b/src/components/application_manager/test/resumption/resumption_data_json_test.cc
@@ -39,6 +39,7 @@
#include "application_manager/usage_statistics.h"
#include "interfaces/MOBILE_API.h"
#include "resumption/last_state_impl.h"
+#include "resumption/last_state_wrapper_impl.h"
#include "application_manager/resumption_data_test.h"
#include "formatters/CFormatterJsonBase.h"
@@ -66,8 +67,10 @@ namespace formatters = ns_smart_device_link::ns_json_handler::formatters;
class ResumptionDataJsonTest : public ResumptionDataTest {
protected:
ResumptionDataJsonTest()
- : last_state_("app_storage_folder", "app_info_storage")
- , res_json(last_state_, mock_application_manager_) {}
+ : last_state_wrapper_(std::make_shared<resumption::LastStateWrapperImpl>(
+ std::make_shared<resumption::LastStateImpl>("app_storage_folder",
+ "app_info_storage")))
+ , res_json(last_state_wrapper_, mock_application_manager_) {}
virtual void SetUp() {
app_mock = std::make_shared<
NiceMock<application_manager_test::MockApplication> >();
@@ -83,12 +86,14 @@ class ResumptionDataJsonTest : public ResumptionDataTest {
}
void CheckSavedJson() {
- Value& dictionary = last_state_.get_dictionary();
+ resumption::LastStateAccessor accessor =
+ last_state_wrapper_->get_accessor();
+ Value dictionary = accessor.GetData().dictionary();
ASSERT_TRUE(dictionary[am::strings::resumption].isObject());
ASSERT_TRUE(
dictionary[am::strings::resumption][am::strings::resume_app_list]
.isArray());
- Value& resume_app_list =
+ const Value& resume_app_list =
dictionary[am::strings::resumption][am::strings::resume_app_list];
sm::SmartObject res_app_list;
for (uint32_t i = 0; i < resume_app_list.size(); i++) {
@@ -99,13 +104,16 @@ class ResumptionDataJsonTest : public ResumptionDataTest {
}
void SetZeroIgnOff() {
- Value& dictionary = last_state_.get_dictionary();
+ resumption::LastStateAccessor accessor =
+ last_state_wrapper_->get_accessor();
+ Value dictionary = accessor.GetData().dictionary();
Value& res = dictionary[am::strings::resumption];
res[am::strings::last_ign_off_time] = 0;
- last_state_.SaveStateToFileSystem();
+ accessor.GetMutableData().set_dictionary(dictionary);
+ accessor.GetMutableData().SaveToFileSystem();
}
- resumption::LastStateImpl last_state_;
+ std::shared_ptr<resumption::LastStateWrapperImpl> last_state_wrapper_;
ResumptionDataJson res_json;
};
diff --git a/src/components/application_manager/test/rpc_passing_handler_test.cc b/src/components/application_manager/test/rpc_passing_handler_test.cc
index fb74a0a7e3..6eac6ca0b1 100644
--- a/src/components/application_manager/test/rpc_passing_handler_test.cc
+++ b/src/components/application_manager/test/rpc_passing_handler_test.cc
@@ -41,6 +41,7 @@
#include "application_manager/mock_application_manager_settings.h"
#include "application_manager/mock_rpc_handler.h"
#include "application_manager/mock_rpc_service.h"
+#include "resumption/last_state_wrapper_impl.h"
#include "resumption/mock_last_state.h"
#include <vector>
@@ -73,7 +74,10 @@ struct PassthroughParams {
class RPCPassingHandlerTest : public ::testing::Test {
public:
RPCPassingHandlerTest()
- : mock_app_service_manager_(mock_app_manager_, mock_last_state_)
+ : mock_last_state_(std::make_shared<resumption_test::MockLastState>())
+ , last_state_wrapper_(std::make_shared<resumption::LastStateWrapperImpl>(
+ mock_last_state_))
+ , mock_app_service_manager_(mock_app_manager_, last_state_wrapper_)
, mock_app_ptr_(std::make_shared<NiceMock<MockApplication> >())
, version_(utils::SemanticVersion(5, 1, 0)) {}
@@ -210,7 +214,8 @@ class RPCPassingHandlerTest : public ::testing::Test {
NiceMock<MockApplicationManagerSettings> mock_app_manager_settings_;
MockRPCService mock_rpc_service_;
MockRPCHandler mock_rpc_handler_;
- resumption_test::MockLastState mock_last_state_;
+ std::shared_ptr<resumption_test::MockLastState> mock_last_state_;
+ resumption::LastStateWrapperPtr last_state_wrapper_;
MockAppServiceManager mock_app_service_manager_;
std::shared_ptr<NiceMock<MockApplication> > mock_app_ptr_;
const utils::SemanticVersion version_;
diff --git a/src/components/connection_handler/CMakeLists.txt b/src/components/connection_handler/CMakeLists.txt
index 8018ea3707..30199b2014 100644
--- a/src/components/connection_handler/CMakeLists.txt
+++ b/src/components/connection_handler/CMakeLists.txt
@@ -37,6 +37,7 @@ include_directories (
${ENCRYPTION_INCLUDE_DIRECTORY}
${LOG4CXX_INCLUDE_DIRECTORY}
${BOOST_INCLUDE_DIR}
+ ${JSONCPP_INCLUDE_DIRECTORY}
)
set(PATHS
diff --git a/src/components/include/application_manager/application_manager.h b/src/components/include/application_manager/application_manager.h
index 04b5049c3d..057f38f78e 100644
--- a/src/components/include/application_manager/application_manager.h
+++ b/src/components/include/application_manager/application_manager.h
@@ -47,11 +47,6 @@
#include "application_manager/plugin_manager/rpc_plugin_manager.h"
#include "application_manager/state_controller.h"
#include "policy/policy_types.h"
-#include "telemetry_monitor/telemetry_observable.h"
-
-namespace resumption {
-class LastState;
-}
namespace app_launch {
class AppLaunchCtrl;
@@ -136,10 +131,14 @@ class ApplicationManager {
public:
virtual ~ApplicationManager() {}
+ DEPRECATED
+ virtual bool Init(resumption::LastState&,
+ media_manager::MediaManager* media_manager) = 0;
+
/**
* Inits application manager
*/
- virtual bool Init(resumption::LastState& last_state,
+ virtual bool Init(resumption::LastStateWrapperPtr last_state_wrapper,
media_manager::MediaManager* media_manager) = 0;
/**
diff --git a/src/components/include/application_manager/hmi_capabilities.h b/src/components/include/application_manager/hmi_capabilities.h
index 535ab0409d..e10295b56f 100644
--- a/src/components/include/application_manager/hmi_capabilities.h
+++ b/src/components/include/application_manager/hmi_capabilities.h
@@ -37,13 +37,10 @@
#include "interfaces/HMI_API.h"
#include "interfaces/MOBILE_API.h"
#include "json/json.h"
+#include "resumption/last_state_wrapper.h"
#include "smart_objects/smart_object.h"
#include "utils/macro.h"
-namespace resumption {
-class LastState;
-}
-
namespace application_manager {
class ApplicationManager;
@@ -531,8 +528,11 @@ class HMICapabilities {
virtual const smart_objects::SmartObject* seat_location_capability()
const = 0;
+ DEPRECATED
virtual void Init(resumption::LastState* last_state) = 0;
+ virtual void Init(resumption::LastStateWrapperPtr last_state_wrapper) = 0;
+
/**
* @brief Trigger waiting for response
* @param request Request object
diff --git a/src/components/include/resumption/last_state.h b/src/components/include/resumption/last_state.h
new file mode 100644
index 0000000000..b28e5611b7
--- /dev/null
+++ b/src/components/include/resumption/last_state.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2019, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef SRC_COMPONENTS_INCLUDE_RESUMPTION_LAST_STATE_H_
+#define SRC_COMPONENTS_INCLUDE_RESUMPTION_LAST_STATE_H_
+
+#include "json/json.h"
+#include "utils/macro.h"
+
+namespace resumption {
+
+class LastState {
+ public:
+ /**
+ * @brief Destructor
+ */
+ virtual ~LastState() {}
+
+ /**
+ * @brief Saves dictionary to filesystem
+ */
+ DEPRECATED
+ virtual void SaveStateToFileSystem() = 0;
+
+ /**
+ * @brief SaveToFileSystem
+ * Saving dictionary to filesystem
+ */
+ virtual void SaveToFileSystem() = 0;
+
+ /**
+ * @brief RemoveFromFileSystem
+ * Remove dictionary from filesystem
+ */
+ virtual void RemoveFromFileSystem() = 0;
+
+ /**
+ * @brief dictionary Gets internal dictionary
+ * @return Reference to internal dictionary json value
+ */
+ virtual Json::Value& get_dictionary() = 0;
+
+ /**
+ * @brief dictionary Gets internal dictionary
+ * @return Copy of internal dictionary json value
+ */
+ virtual Json::Value dictionary() const = 0;
+
+ /**
+ * @brief set_dictionary sets internal dictionary
+ * @param dictionary New dictionary json value to be set
+ */
+ virtual void set_dictionary(const Json::Value& dictionary) = 0;
+};
+
+} // namespace resumption
+
+#endif // SRC_COMPONENTS_INCLUDE_RESUMPTION_LAST_STATE_H_
diff --git a/src/components/include/resumption/last_state_wrapper.h b/src/components/include/resumption/last_state_wrapper.h
new file mode 100644
index 0000000000..d5af2e958e
--- /dev/null
+++ b/src/components/include/resumption/last_state_wrapper.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2019, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef SRC_COMPONENTS_INCLUDE_RESUMPTION_LAST_STATE_WRAPPER_H_
+#define SRC_COMPONENTS_INCLUDE_RESUMPTION_LAST_STATE_WRAPPER_H_
+
+#include <memory>
+
+#include "resumption/last_state.h"
+#include "utils/mutable_data_accessor.h"
+
+namespace resumption {
+class LastStateWrapper;
+typedef std::shared_ptr<LastStateWrapper> LastStateWrapperPtr;
+typedef MutableDataAccessor<LastState> LastStateAccessor;
+
+class LastStateWrapper {
+ public:
+ /**
+ * @brief Getter for providing exclusive access to LastState instance
+ * @return accessor with ability to access to LastState instance
+ */
+ virtual LastStateAccessor get_accessor() const = 0;
+};
+
+} // namespace resumption
+
+#endif // SRC_COMPONENTS_INCLUDE_RESUMPTION_LAST_STATE_WRAPPER_H_
diff --git a/src/components/include/test/application_manager/mock_application_manager.h b/src/components/include/test/application_manager/mock_application_manager.h
index e5706c2003..b2de63252e 100644
--- a/src/components/include/test/application_manager/mock_application_manager.h
+++ b/src/components/include/test/application_manager/mock_application_manager.h
@@ -55,7 +55,7 @@
#include "application_manager/state_controller.h"
#include "interfaces/HMI_API.h"
#include "interfaces/MOBILE_API.h"
-#include "resumption/last_state.h"
+#include "resumption/last_state_wrapper.h"
#include "smart_objects/smart_object.h"
namespace test {
@@ -66,6 +66,10 @@ using application_manager::plugin_manager::RPCPluginManager;
class MockApplicationManager : public application_manager::ApplicationManager {
public:
MOCK_METHOD2(Init,
+ bool(resumption::LastStateWrapperPtr last_state,
+ media_manager::MediaManager* media_manager));
+ DEPRECATED
+ MOCK_METHOD2(Init,
bool(resumption::LastState& last_state,
media_manager::MediaManager* media_manager));
MOCK_METHOD0(Stop, bool());
diff --git a/src/components/include/test/application_manager/mock_rpc_plugin.h b/src/components/include/test/application_manager/mock_rpc_plugin.h
index 7e4ff11bc7..2633825428 100644
--- a/src/components/include/test/application_manager/mock_rpc_plugin.h
+++ b/src/components/include/test/application_manager/mock_rpc_plugin.h
@@ -15,6 +15,13 @@ class MockRPCPlugin : public RPCPlugin {
rpc_service::RPCService& rpc_service,
HMICapabilities& hmi_capabilities,
policy::PolicyHandlerInterface& policy_handler,
+ resumption::LastStateWrapperPtr last_state));
+ DEPRECATED
+ MOCK_METHOD5(Init,
+ bool(ApplicationManager& app_manager,
+ rpc_service::RPCService& rpc_service,
+ HMICapabilities& hmi_capabilities,
+ policy::PolicyHandlerInterface& policy_handler,
resumption::LastState& last_state));
MOCK_METHOD2(IsAbleToProcess,
bool(const int32_t function_id,
diff --git a/src/components/include/test/resumption/mock_last_state.h b/src/components/include/test/resumption/mock_last_state.h
index 9f4b11cbbf..99c3799a95 100644
--- a/src/components/include/test/resumption/mock_last_state.h
+++ b/src/components/include/test/resumption/mock_last_state.h
@@ -35,6 +35,7 @@
#include "gmock/gmock.h"
#include "resumption/last_state.h"
+#include "utils/macro.h"
namespace test {
namespace components {
@@ -42,8 +43,14 @@ namespace resumption_test {
class MockLastState : public resumption::LastState {
public:
+ DEPRECATED
MOCK_METHOD0(SaveStateToFileSystem, void());
+ DEPRECATED
MOCK_METHOD0(get_dictionary, Json::Value&());
+ MOCK_METHOD0(SaveToFileSystem, void());
+ MOCK_METHOD0(RemoveFromFileSystem, void());
+ MOCK_CONST_METHOD0(dictionary, Json::Value());
+ MOCK_METHOD1(set_dictionary, void(const Json::Value&));
};
} // namespace resumption_test
diff --git a/src/components/include/test/transport_manager/mock_transport_manager.h b/src/components/include/test/transport_manager/mock_transport_manager.h
index 884bde50bf..c853ceb512 100644
--- a/src/components/include/test/transport_manager/mock_transport_manager.h
+++ b/src/components/include/test/transport_manager/mock_transport_manager.h
@@ -35,7 +35,7 @@
#include <string>
#include "gmock/gmock.h"
-#include "resumption/last_state.h"
+#include "resumption/last_state_wrapper.h"
#include "telemetry_monitor/telemetry_observable.h"
#include "transport_manager/transport_adapter/transport_adapter_event.h"
#include "transport_manager/transport_manager.h"
@@ -56,6 +56,8 @@ class MockTransportManager : public ::transport_manager::TransportManager,
public ::telemetry_monitor::TelemetryObservable<
transport_manager::TMTelemetryObserver> {
public:
+ MOCK_METHOD1(Init, int(resumption::LastStateWrapperPtr last_state));
+ DEPRECATED
MOCK_METHOD1(Init, int(resumption::LastState& last_state));
MOCK_METHOD0(Reinit, int());
MOCK_METHOD0(Deinit, void());
diff --git a/src/components/include/transport_manager/transport_manager.h b/src/components/include/transport_manager/transport_manager.h
index ce92bfd9cb..e370e3e4c6 100644
--- a/src/components/include/transport_manager/transport_manager.h
+++ b/src/components/include/transport_manager/transport_manager.h
@@ -34,14 +34,11 @@
#define SRC_COMPONENTS_INCLUDE_TRANSPORT_MANAGER_TRANSPORT_MANAGER_H_
#include "protocol/common.h"
+#include "resumption/last_state_wrapper.h"
#include "transport_manager/common.h"
#include "transport_manager/transport_adapter/transport_adapter_event.h"
#include "transport_manager/transport_manager_listener.h"
-namespace resumption {
-class LastState;
-}
-
namespace transport_manager {
class TransportAdapterEvent;
@@ -56,11 +53,14 @@ class TransportManager {
**/
virtual ~TransportManager() {}
+ DEPRECATED
+ virtual int Init(resumption::LastState& last_state) = 0;
+
/**
* @brief Initialize transport manager.
* @return Error code.
*/
- virtual int Init(resumption::LastState& last_state) = 0;
+ virtual int Init(resumption::LastStateWrapperPtr last_state_wrapper) = 0;
/**
* @brief Reinitializes transport manager
diff --git a/src/components/include/utils/data_accessor.h b/src/components/include/utils/data_accessor.h
index 1be7c3ab53..99820237c8 100644
--- a/src/components/include/utils/data_accessor.h
+++ b/src/components/include/utils/data_accessor.h
@@ -56,6 +56,7 @@ class DataAccessor {
--(*counter_);
}
}
+
const T& GetData() const {
return data_;
}
diff --git a/src/components/include/utils/mutable_data_accessor.h b/src/components/include/utils/mutable_data_accessor.h
new file mode 100644
index 0000000000..0e03345a45
--- /dev/null
+++ b/src/components/include/utils/mutable_data_accessor.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2020, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef SRC_COMPONENTS_INCLUDE_UTILS_MUTABLE_DATA_ACCESSOR_H
+#define SRC_COMPONENTS_INCLUDE_UTILS_MUTABLE_DATA_ACCESSOR_H
+
+#include "utils/lock.h"
+
+// This class is for thread-safe mutable access to data
+
+template <class T>
+class MutableDataAccessor {
+ public:
+ MutableDataAccessor(T& data,
+ const std::shared_ptr<sync_primitives::BaseLock>& lock)
+ : data_(data), lock_(lock), counter_(new uint32_t(0)) {
+ lock_->Acquire();
+ }
+
+ MutableDataAccessor(const MutableDataAccessor<T>& other)
+ : data_(other.data_), lock_(other.lock_), counter_(other.counter_) {
+ ++(*counter_);
+ }
+
+ ~MutableDataAccessor() {
+ if (0 == *counter_) {
+ lock_->Release();
+ } else {
+ --(*counter_);
+ }
+ }
+
+ const T& GetData() const {
+ return data_;
+ }
+
+ T& GetMutableData() {
+ return data_;
+ }
+
+ private:
+ void* operator new(size_t size);
+ T& data_;
+ // Require that the lock lives at least as long as the DataAccessor
+ const std::shared_ptr<sync_primitives::BaseLock> lock_;
+ std::shared_ptr<uint32_t> counter_;
+};
+
+#endif // SRC_COMPONENTS_INCLUDE_UTILS_MUTABLE_DATA_ACCESSOR_H
diff --git a/src/components/protocol_handler/CMakeLists.txt b/src/components/protocol_handler/CMakeLists.txt
index 90dd2c9eda..53ccd3c5c9 100644
--- a/src/components/protocol_handler/CMakeLists.txt
+++ b/src/components/protocol_handler/CMakeLists.txt
@@ -36,6 +36,7 @@ include_directories(
${COMPONENTS_DIR}/connection_handler/include/
${COMPONENTS_DIR}/application_manager/include
${CMAKE_BINARY_DIR}/src/components/
+ ${JSONCPP_INCLUDE_DIRECTORY}
${LOG4CXX_INCLUDE_DIRECTORY}
${BSON_INCLUDE_DIRECTORY}
${BOOST_INCLUDE_DIR}
diff --git a/src/components/resumption/CMakeLists.txt b/src/components/resumption/CMakeLists.txt
index a2c93b0689..73e7b88a74 100644
--- a/src/components/resumption/CMakeLists.txt
+++ b/src/components/resumption/CMakeLists.txt
@@ -36,6 +36,7 @@ include_directories (
${COMPONENTS_DIR}/config_profile/include/
${JSONCPP_INCLUDE_DIRECTORY}
${LOG4CXX_INCLUDE_DIRECTORY}
+ ${BOOST_INCLUDE_DIR}
)
set(PATHS
diff --git a/src/components/resumption/include/resumption/last_state_impl.h b/src/components/resumption/include/resumption/last_state_impl.h
index 2da3147930..5eb4050d2d 100644
--- a/src/components/resumption/include/resumption/last_state_impl.h
+++ b/src/components/resumption/include/resumption/last_state_impl.h
@@ -33,7 +33,10 @@
#ifndef SRC_COMPONENTS_RESUMPTION_INCLUDE_RESUMPTION_LAST_STATE_IMPL_H_
#define SRC_COMPONENTS_RESUMPTION_INCLUDE_RESUMPTION_LAST_STATE_IMPL_H_
+#include <string>
+
#include "resumption/last_state.h"
+#include "utils/lock.h"
#include "utils/macro.h"
namespace resumption {
@@ -49,31 +52,53 @@ class LastStateImpl : public LastState {
*/
LastStateImpl(const std::string& app_storage_folder,
const std::string& app_info_storage);
-
/**
* @brief Destructor
*/
~LastStateImpl();
+ DEPRECATED
+ void SaveStateToFileSystem();
+
/**
* @brief Saving dictionary to filesystem
*/
- void SaveStateToFileSystem() OVERRIDE;
+ void SaveToFileSystem() OVERRIDE;
/**
- * @brief Get reference to dictionary
+ * @brief Remove dictionary from filesystem
*/
- Json::Value& get_dictionary() OVERRIDE;
+ void RemoveFromFileSystem() OVERRIDE;
- private:
- const std::string app_storage_folder_;
- const std::string app_info_storage_;
- Json::Value dictionary_;
+ /**
+ * @brief Get the dictionary
+ * @return A copy of the dictionary instance
+ */
+ Json::Value dictionary() const OVERRIDE;
/**
+ * @brief Get the dictionary
+ * @return Reference to the dictionary
+ */
+ DEPRECATED Json::Value& get_dictionary();
+
+ /**
+ * @brief Resets internal dictionary
+ * @param dictionary New dictionary json value to be set
+ */
+ void set_dictionary(const Json::Value& dictionary) OVERRIDE;
+
+ private:
+ /**
* @brief Load dictionary from filesystem
*/
- void LoadStateFromFileSystem();
+ void LoadFromFileSystem();
+
+ Json::Value dictionary_;
+ mutable sync_primitives::Lock dictionary_lock_;
+
+ std::string app_storage_folder_;
+ std::string app_info_storage_;
DISALLOW_COPY_AND_ASSIGN(LastStateImpl);
};
diff --git a/src/components/resumption/include/resumption/last_state.h b/src/components/resumption/include/resumption/last_state_wrapper_impl.h
index 3481fc9327..52ba8a4d2b 100644
--- a/src/components/resumption/include/resumption/last_state.h
+++ b/src/components/resumption/include/resumption/last_state_wrapper_impl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, Ford Motor Company
+ * Copyright (c) 2019, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -30,33 +30,32 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef SRC_COMPONENTS_RESUMPTION_INCLUDE_RESUMPTION_LAST_STATE_H_
-#define SRC_COMPONENTS_RESUMPTION_INCLUDE_RESUMPTION_LAST_STATE_H_
+#ifndef SRC_COMPONENTS_RESUMPTION_INCLUDE_RESUMPTION_LAST_STATE_WRAPPER_IMPL_H_
+#define SRC_COMPONENTS_RESUMPTION_INCLUDE_RESUMPTION_LAST_STATE_WRAPPER_IMPL_H_
-#include <string>
+#include <memory>
-#include "json/json.h"
+#include "resumption/last_state_wrapper.h"
+#include "utils/lock.h"
+#include "utils/macro.h"
+#include "utils/mutable_data_accessor.h"
namespace resumption {
-class LastState {
+class LastStateWrapperImpl : public LastStateWrapper {
public:
/**
- * @brief Destructor
+ * @brief Constructor
*/
- virtual ~LastState() {}
+ explicit LastStateWrapperImpl(std::shared_ptr<LastState> last_state);
- /**
- * @brief Saving dictionary to filesystem
- */
- virtual void SaveStateToFileSystem() = 0;
+ LastStateAccessor get_accessor() const OVERRIDE;
- /**
- * @brief Get reference to dictionary
- */
- virtual Json::Value& get_dictionary() = 0;
+ private:
+ std::shared_ptr<LastState> last_state_;
+ mutable std::shared_ptr<sync_primitives::Lock> lock_;
};
} // namespace resumption
-#endif // SRC_COMPONENTS_RESUMPTION_INCLUDE_RESUMPTION_LAST_STATE_H_
+#endif // SRC_COMPONENTS_RESUMPTION_INCLUDE_RESUMPTION_LAST_STATE_WRAPPER_IMPL_H_
diff --git a/src/components/resumption/src/last_state_impl.cc b/src/components/resumption/src/last_state_impl.cc
index c25da5bdc4..05c801d762 100644
--- a/src/components/resumption/src/last_state_impl.cc
+++ b/src/components/resumption/src/last_state_impl.cc
@@ -43,31 +43,52 @@ LastStateImpl::LastStateImpl(const std::string& app_storage_folder,
const std::string& app_info_storage)
: app_storage_folder_(app_storage_folder)
, app_info_storage_(app_info_storage) {
- LoadStateFromFileSystem();
+ LoadFromFileSystem();
LOG4CXX_AUTO_TRACE(logger_);
}
LastStateImpl::~LastStateImpl() {
LOG4CXX_AUTO_TRACE(logger_);
- SaveStateToFileSystem();
+ SaveToFileSystem();
}
void LastStateImpl::SaveStateToFileSystem() {
LOG4CXX_AUTO_TRACE(logger_);
- const std::string& str = dictionary_.toStyledString();
- const std::vector<uint8_t> char_vector_pdata(str.begin(), str.end());
+ std::string styled_string;
+ {
+ sync_primitives::AutoLock lock(dictionary_lock_);
+ styled_string = dictionary_.toStyledString();
+ }
+
+ const std::vector<uint8_t> char_vector_pdata(styled_string.begin(),
+ styled_string.end());
DCHECK(file_system::CreateDirectoryRecursively(app_storage_folder_));
LOG4CXX_INFO(logger_,
- "LastState::SaveStateToFileSystem " << app_info_storage_ << str);
+ "LastState::SaveStateToFileSystem[DEPRECATED] "
+ << app_info_storage_ << styled_string);
DCHECK(file_system::Write(app_info_storage_, char_vector_pdata));
}
-Json::Value& LastStateImpl::get_dictionary() {
- return dictionary_;
+void LastStateImpl::SaveToFileSystem() {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ std::string styled_string;
+ {
+ sync_primitives::AutoLock lock(dictionary_lock_);
+ styled_string = dictionary_.toStyledString();
+ }
+
+ const std::vector<uint8_t> char_vector_pdata(styled_string.begin(),
+ styled_string.end());
+ DCHECK(file_system::CreateDirectoryRecursively(app_storage_folder_));
+ LOG4CXX_INFO(
+ logger_,
+ "LastState::SaveToFileSystem " << app_info_storage_ << styled_string);
+ DCHECK(file_system::Write(app_info_storage_, char_vector_pdata));
}
-void LastStateImpl::LoadStateFromFileSystem() {
+void LastStateImpl::LoadFromFileSystem() {
std::string buffer;
const bool result = file_system::ReadFile(app_info_storage_, buffer);
utils::JsonReader reader;
@@ -80,4 +101,28 @@ void LastStateImpl::LoadStateFromFileSystem() {
LOG4CXX_WARN(logger_, "No valid last state was found.");
}
+void LastStateImpl::RemoveFromFileSystem() {
+ LOG4CXX_AUTO_TRACE(logger_);
+ if (!file_system::DeleteFile(app_info_storage_)) {
+ LOG4CXX_WARN(logger_, "Failed attempt to delete " << app_info_storage_);
+ }
+}
+
+Json::Value LastStateImpl::dictionary() const {
+ sync_primitives::AutoLock lock(dictionary_lock_);
+ return dictionary_;
+}
+
+Json::Value& LastStateImpl::get_dictionary() {
+ sync_primitives::AutoLock lock(dictionary_lock_);
+ return dictionary_;
+}
+
+void LastStateImpl::set_dictionary(const Json::Value& dictionary) {
+ DCHECK(dictionary.type() == Json::objectValue ||
+ dictionary.type() == Json::nullValue);
+ sync_primitives::AutoLock lock(dictionary_lock_);
+ dictionary_ = dictionary;
+}
+
} // namespace resumption
diff --git a/src/components/resumption/src/last_state_wrapper_impl.cc b/src/components/resumption/src/last_state_wrapper_impl.cc
new file mode 100644
index 0000000000..61b325f53b
--- /dev/null
+++ b/src/components/resumption/src/last_state_wrapper_impl.cc
@@ -0,0 +1,49 @@
+/* Copyright (c) 2019, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "resumption/last_state_wrapper_impl.h"
+#include "utils/logger.h"
+
+namespace resumption {
+
+CREATE_LOGGERPTR_GLOBAL(logger_, "Resumption")
+
+LastStateWrapperImpl::LastStateWrapperImpl(
+ std::shared_ptr<LastState> last_state)
+ : last_state_(last_state)
+ , lock_(std::make_shared<sync_primitives::Lock>()) {}
+
+LastStateAccessor LastStateWrapperImpl::get_accessor() const {
+ LOG4CXX_AUTO_TRACE(logger_);
+ return MutableDataAccessor<LastState>(*last_state_, lock_);
+}
+
+} // namespace resumption
diff --git a/src/components/resumption/test/last_state_test.cc b/src/components/resumption/test/last_state_test.cc
index c82af2450c..61c227bbf3 100644
--- a/src/components/resumption/test/last_state_test.cc
+++ b/src/components/resumption/test/last_state_test.cc
@@ -73,13 +73,13 @@ class LastStateTest : public ::testing::Test {
};
TEST_F(LastStateTest, Basic) {
- const Value& dictionary = last_state_.get_dictionary();
+ const Value& dictionary = last_state_.dictionary();
EXPECT_EQ(empty_dictionary_, dictionary.toStyledString());
}
TEST_F(LastStateTest, SetGetData) {
{
- Value& dictionary = last_state_.get_dictionary();
+ Value dictionary = last_state_.dictionary();
const Value& bluetooth_info =
dictionary["TransportManager"]["BluetoothAdapter"];
EXPECT_EQ(empty_dictionary_, bluetooth_info.toStyledString());
@@ -102,10 +102,11 @@ TEST_F(LastStateTest, SetGetData) {
dictionary["TransportManager"]["BluetoothAdapter"]["devices"] =
"bluetooth_device";
- last_state_.SaveStateToFileSystem();
+ last_state_.set_dictionary(dictionary);
+ last_state_.SaveToFileSystem();
}
- const Value& dictionary = last_state_.get_dictionary();
+ const Value dictionary = last_state_.dictionary();
const Value& bluetooth_info =
dictionary["TransportManager"]["BluetoothAdapter"];
diff --git a/src/components/security_manager/include/security_manager/crypto_manager_impl.h b/src/components/security_manager/include/security_manager/crypto_manager_impl.h
index 46fd1a5995..42abe6e3b6 100644
--- a/src/components/security_manager/include/security_manager/crypto_manager_impl.h
+++ b/src/components/security_manager/include/security_manager/crypto_manager_impl.h
@@ -206,6 +206,7 @@ class CryptoManagerImpl : public CryptoManager {
SSL_CTX* context_;
static uint32_t instance_count_;
static sync_primitives::Lock instance_lock_;
+ sync_primitives::Lock crypto_manager_lock_;
DISALLOW_COPY_AND_ASSIGN(CryptoManagerImpl);
};
} // namespace security_manager
diff --git a/src/components/security_manager/src/crypto_manager_impl.cc b/src/components/security_manager/src/crypto_manager_impl.cc
index cb42d5b46c..48b3119bec 100644
--- a/src/components/security_manager/src/crypto_manager_impl.cc
+++ b/src/components/security_manager/src/crypto_manager_impl.cc
@@ -283,6 +283,7 @@ bool CryptoManagerImpl::Init() {
bool CryptoManagerImpl::OnCertificateUpdated(const std::string& data) {
LOG4CXX_AUTO_TRACE(logger_);
+ sync_primitives::AutoLock lock(crypto_manager_lock_);
if (!context_) {
LOG4CXX_WARN(logger_, "Not initialized");
return false;
@@ -307,6 +308,8 @@ bool CryptoManagerImpl::OnCertificateUpdated(const std::string& data) {
}
SSLContext* CryptoManagerImpl::CreateSSLContext() {
+ LOG4CXX_AUTO_TRACE(logger_);
+ sync_primitives::AutoLock lock(crypto_manager_lock_);
if (NULL == context_) {
return NULL;
}
diff --git a/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_transport_adapter.h b/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_transport_adapter.h
index c4bd02d64b..14f954286f 100644
--- a/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_transport_adapter.h
+++ b/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_transport_adapter.h
@@ -49,7 +49,11 @@ class BluetoothTransportAdapter : public TransportAdapterImpl {
/**
* @brief Constructor.
*/
- BluetoothTransportAdapter(resumption::LastState& last_state,
+ BluetoothTransportAdapter(resumption::LastStateWrapperPtr last_state_wrapper,
+ const TransportManagerSettings& settings);
+
+ DEPRECATED
+ BluetoothTransportAdapter(resumption::LastState&,
const TransportManagerSettings& settings);
/**
diff --git a/src/components/transport_manager/include/transport_manager/cloud/cloud_websocket_transport_adapter.h b/src/components/transport_manager/include/transport_manager/cloud/cloud_websocket_transport_adapter.h
index 138f9ca895..c8b2cc9508 100644
--- a/src/components/transport_manager/include/transport_manager/cloud/cloud_websocket_transport_adapter.h
+++ b/src/components/transport_manager/include/transport_manager/cloud/cloud_websocket_transport_adapter.h
@@ -50,7 +50,7 @@ class CloudWebsocketTransportAdapter : public TransportAdapterImpl {
* @brief Constructor.
*/
explicit CloudWebsocketTransportAdapter(
- resumption::LastState& last_state,
+ resumption::LastStateWrapperPtr last_state_wrapper,
const TransportManagerSettings& settings);
/**
diff --git a/src/components/transport_manager/include/transport_manager/iap2_emulation/iap2_transport_adapter.h b/src/components/transport_manager/include/transport_manager/iap2_emulation/iap2_transport_adapter.h
index a802a64afa..3dabfb39ca 100644
--- a/src/components/transport_manager/include/transport_manager/iap2_emulation/iap2_transport_adapter.h
+++ b/src/components/transport_manager/include/transport_manager/iap2_emulation/iap2_transport_adapter.h
@@ -33,7 +33,7 @@
#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_IAP2_EMULATION_IAP2_TRANSPORT_ADAPTER_H_
#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_IAP2_EMULATION_IAP2_TRANSPORT_ADAPTER_H_
-#include "resumption/last_state.h"
+#include "resumption/last_state_wrapper.h"
#include "transport_manager/tcp/tcp_transport_adapter.h"
#include "transport_manager/transport_manager_settings.h"
#include "utils/macro.h"
@@ -60,9 +60,14 @@ class IAP2BluetoothEmulationTransportAdapter : public TcpTransportAdapter {
*/
IAP2BluetoothEmulationTransportAdapter(
const uint16_t port,
- resumption::LastState& last_state,
+ resumption::LastStateWrapperPtr last_state_wrapper,
const TransportManagerSettings& settings);
+ DEPRECATED
+ IAP2BluetoothEmulationTransportAdapter(
+ const uint16_t port,
+ resumption::LastState& last_state_wrapper,
+ const TransportManagerSettings& settings);
/**
* @brief DeviceSwitched is called during switching from iAP2 Bluetooth to
* iAP2 USB transport.
@@ -103,9 +108,16 @@ class IAP2USBEmulationTransportAdapter : public TcpTransportAdapter {
* @param last_state LastState instance reference
* @param settings Settings reference
*/
+ IAP2USBEmulationTransportAdapter(
+ const uint16_t port,
+ resumption::LastStateWrapperPtr last_state_wrapper,
+ const TransportManagerSettings& settings);
+
+ DEPRECATED
IAP2USBEmulationTransportAdapter(const uint16_t port,
- resumption::LastState& last_state,
- const TransportManagerSettings& settings);
+ resumption::LastState&,
+ const TransportManagerSettings& settings) =
+ delete;
/**
* Destructor
diff --git a/src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h b/src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h
index 37f5a7fe49..c5948062c9 100644
--- a/src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h
+++ b/src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h
@@ -49,9 +49,14 @@ class TcpTransportAdapter : public TransportAdapterImpl {
/**
* @brief Constructor.
*/
- explicit TcpTransportAdapter(uint16_t port,
- resumption::LastState& last_state,
- const TransportManagerSettings& settings);
+ TcpTransportAdapter(uint16_t port,
+ resumption::LastStateWrapperPtr last_state_wrapper,
+ const TransportManagerSettings& settings);
+
+ DEPRECATED
+ TcpTransportAdapter(uint16_t port,
+ resumption::LastState&,
+ const TransportManagerSettings& settings) = delete;
/**
* @brief Destructor.
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h
index 5f54cf8376..db9bb03998 100644
--- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h
+++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h
@@ -43,7 +43,7 @@
#include "utils/rwlock.h"
#include "utils/timer.h"
-#include "resumption/last_state.h"
+#include "resumption/last_state_wrapper.h"
#include "transport_manager/transport_adapter/connection.h"
#include "transport_manager/transport_adapter/transport_adapter.h"
#include "transport_manager/transport_adapter/transport_adapter_controller.h"
@@ -82,9 +82,16 @@ class TransportAdapterImpl : public TransportAdapter,
TransportAdapterImpl(DeviceScanner* device_scanner,
ServerConnectionFactory* server_connection_factory,
ClientConnectionListener* client_connection_listener,
- resumption::LastState& last_state,
+ resumption::LastStateWrapperPtr last_state_wrapper,
const TransportManagerSettings& settings);
+ DEPRECATED
+ TransportAdapterImpl(DeviceScanner* device_scanner,
+ ServerConnectionFactory* server_connection_factory,
+ ClientConnectionListener* client_connection_listener,
+ resumption::LastState& last_state,
+ const TransportManagerSettings& settings) = delete;
+
/**
* @brief Destructor.
**/
@@ -662,7 +669,7 @@ class TransportAdapterImpl : public TransportAdapter,
#endif // TELEMETRY_MONITOR
resumption::LastState& last_state() const {
- return last_state_;
+ return last_state_wrapper_->get_accessor().GetMutableData();
}
/**
@@ -680,7 +687,7 @@ class TransportAdapterImpl : public TransportAdapter,
*/
ClientConnectionListener* client_connection_listener_;
- resumption::LastState& last_state_;
+ resumption::LastStateWrapperPtr last_state_wrapper_;
const TransportManagerSettings& settings_;
};
diff --git a/src/components/transport_manager/include/transport_manager/transport_manager_default.h b/src/components/transport_manager/include/transport_manager/transport_manager_default.h
index 63061b14b7..9d428cf817 100644
--- a/src/components/transport_manager/include/transport_manager/transport_manager_default.h
+++ b/src/components/transport_manager/include/transport_manager/transport_manager_default.h
@@ -38,10 +38,6 @@
#include "transport_manager/transport_manager_impl.h"
-namespace resumption {
-class LastState;
-}
-
namespace transport_manager {
struct TransportAdapterFactory {
@@ -50,19 +46,19 @@ struct TransportAdapterFactory {
using CreatorTA =
std::function<transport_adapter::TransportAdapter*(Args&&... args)>;
#ifdef BLUETOOTH_SUPPORT
- CreatorTA<resumption::LastState&, const TransportManagerSettings&>
+ CreatorTA<resumption::LastStateWrapperPtr&, const TransportManagerSettings&>
ta_bluetooth_creator_;
#endif
CreatorTA<const uint16_t,
- resumption::LastState&,
+ resumption::LastStateWrapperPtr&,
const TransportManagerSettings&>
ta_tcp_creator_;
#if defined(USB_SUPPORT)
- CreatorTA<resumption::LastState&, const TransportManagerSettings&>
+ CreatorTA<resumption::LastStateWrapperPtr&, const TransportManagerSettings&>
ta_usb_creator_;
#endif
#if defined(CLOUD_APP_WEBSOCKET_TRANSPORT_SUPPORT)
- CreatorTA<resumption::LastState&, const TransportManagerSettings&>
+ CreatorTA<resumption::LastStateWrapperPtr&, const TransportManagerSettings&>
ta_cloud_creator_;
#endif
};
@@ -80,6 +76,9 @@ class TransportManagerDefault : public TransportManagerImpl {
*
* @return Code error.
*/
+ int Init(resumption::LastStateWrapperPtr last_state_wrapper) OVERRIDE;
+
+ DEPRECATED
int Init(resumption::LastState& last_state) OVERRIDE;
/**
diff --git a/src/components/transport_manager/include/transport_manager/transport_manager_impl.h b/src/components/transport_manager/include/transport_manager/transport_manager_impl.h
index 5e97a5567e..2fbd592b72 100644
--- a/src/components/transport_manager/include/transport_manager/transport_manager_impl.h
+++ b/src/components/transport_manager/include/transport_manager/transport_manager_impl.h
@@ -124,6 +124,9 @@ class TransportManagerImpl
*
* @return Code error.
*/
+ int Init(resumption::LastStateWrapperPtr last_state_wrapper) OVERRIDE;
+
+ DEPRECATED
int Init(resumption::LastState& last_state) OVERRIDE;
/**
diff --git a/src/components/transport_manager/include/transport_manager/usb/usb_aoa_adapter.h b/src/components/transport_manager/include/transport_manager/usb/usb_aoa_adapter.h
index ee7039efde..45c6d4c0e4 100644
--- a/src/components/transport_manager/include/transport_manager/usb/usb_aoa_adapter.h
+++ b/src/components/transport_manager/include/transport_manager/usb/usb_aoa_adapter.h
@@ -44,8 +44,13 @@ namespace transport_adapter {
class UsbAoaAdapter : public TransportAdapterImpl {
public:
- UsbAoaAdapter(resumption::LastState& last_state,
+ UsbAoaAdapter(resumption::LastStateWrapperPtr last_state_wrapper,
const TransportManagerSettings& settings);
+
+ DEPRECATED
+ UsbAoaAdapter(resumption::LastState&,
+ const TransportManagerSettings& settings) = delete;
+
virtual ~UsbAoaAdapter();
protected:
diff --git a/src/components/transport_manager/src/bluetooth/bluetooth_transport_adapter.cc b/src/components/transport_manager/src/bluetooth/bluetooth_transport_adapter.cc
index 911658bc56..066751c474 100644
--- a/src/components/transport_manager/src/bluetooth/bluetooth_transport_adapter.cc
+++ b/src/components/transport_manager/src/bluetooth/bluetooth_transport_adapter.cc
@@ -57,12 +57,13 @@ CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
BluetoothTransportAdapter::~BluetoothTransportAdapter() {}
BluetoothTransportAdapter::BluetoothTransportAdapter(
- resumption::LastState& last_state, const TransportManagerSettings& settings)
+ resumption::LastStateWrapperPtr last_state_wrapper,
+ const TransportManagerSettings& settings)
: TransportAdapterImpl(
new BluetoothDeviceScanner(this, true, 0, settings.bluetooth_uuid()),
new BluetoothConnectionFactory(this),
NULL,
- last_state,
+ last_state_wrapper,
settings) {}
DeviceType BluetoothTransportAdapter::GetDeviceType() const {
@@ -112,23 +113,25 @@ void BluetoothTransportAdapter::Store() const {
}
}
bluetooth_adapter_dictionary["devices"] = devices_dictionary;
- Json::Value& dictionary = last_state().get_dictionary();
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
dictionary["TransportManager"]["BluetoothAdapter"] =
bluetooth_adapter_dictionary;
+ accessor.GetMutableData().set_dictionary(dictionary);
LOG4CXX_TRACE(logger_, "exit");
}
bool BluetoothTransportAdapter::Restore() {
LOG4CXX_TRACE(logger_, "enter");
bool errors_occured = false;
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
const Json::Value bluetooth_adapter_dictionary =
- last_state().get_dictionary()["TransportManager"]["BluetoothAdapter"];
+ dictionary["TransportManager"]["BluetoothAdapter"];
const Json::Value devices_dictionary =
bluetooth_adapter_dictionary["devices"];
- for (Json::Value::const_iterator i = devices_dictionary.begin();
- i != devices_dictionary.end();
- ++i) {
- const Json::Value device_dictionary = *i;
+ for (const auto& bt_device : devices_dictionary) {
+ const Json::Value device_dictionary = bt_device;
std::string name = device_dictionary["name"].asString();
std::string address_record = device_dictionary["address"].asString();
bdaddr_t address;
@@ -136,10 +139,8 @@ bool BluetoothTransportAdapter::Restore() {
RfcommChannelVector rfcomm_channels;
const Json::Value applications_dictionary =
device_dictionary["applications"];
- for (Json::Value::const_iterator j = applications_dictionary.begin();
- j != applications_dictionary.end();
- ++j) {
- const Json::Value application_dictionary = *j;
+ for (const auto& application : applications_dictionary) {
+ const Json::Value application_dictionary = application;
std::string rfcomm_channel_record =
application_dictionary["rfcomm_channel"].asString();
uint8_t rfcomm_channel =
@@ -150,11 +151,9 @@ bool BluetoothTransportAdapter::Restore() {
new BluetoothDevice(address, name.c_str(), rfcomm_channels);
DeviceSptr device(bluetooth_device);
AddDevice(device);
- for (RfcommChannelVector::const_iterator j = rfcomm_channels.begin();
- j != rfcomm_channels.end();
- ++j) {
+ for (const auto& channel : rfcomm_channels) {
ApplicationHandle app_handle =
- *j; // for Bluetooth device app_handle is just RFCOMM channel
+ channel; // for Bluetooth device app_handle is just RFCOMM channel
if (Error::OK != Connect(device->unique_device_id(), app_handle)) {
errors_occured = true;
}
diff --git a/src/components/transport_manager/src/cloud/cloud_websocket_transport_adapter.cc b/src/components/transport_manager/src/cloud/cloud_websocket_transport_adapter.cc
index 622531b120..2d1de703b1 100644
--- a/src/components/transport_manager/src/cloud/cloud_websocket_transport_adapter.cc
+++ b/src/components/transport_manager/src/cloud/cloud_websocket_transport_adapter.cc
@@ -44,11 +44,12 @@ namespace transport_adapter {
CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
CloudWebsocketTransportAdapter::CloudWebsocketTransportAdapter(
- resumption::LastState& last_state, const TransportManagerSettings& settings)
+ resumption::LastStateWrapperPtr last_state_wrapper,
+ const TransportManagerSettings& settings)
: TransportAdapterImpl(NULL,
new CloudWebsocketConnectionFactory(this),
NULL,
- last_state,
+ last_state_wrapper,
settings) {}
CloudWebsocketTransportAdapter::~CloudWebsocketTransportAdapter() {}
diff --git a/src/components/transport_manager/src/iap2_emulation/iap2_transport_adapter.cc b/src/components/transport_manager/src/iap2_emulation/iap2_transport_adapter.cc
index 2e37f76bc9..6a43f66c64 100644
--- a/src/components/transport_manager/src/iap2_emulation/iap2_transport_adapter.cc
+++ b/src/components/transport_manager/src/iap2_emulation/iap2_transport_adapter.cc
@@ -54,9 +54,9 @@ CREATE_LOGGERPTR_GLOBAL(logger_, "IAP2Emulation");
IAP2BluetoothEmulationTransportAdapter::IAP2BluetoothEmulationTransportAdapter(
const uint16_t port,
- resumption::LastState& last_state,
+ resumption::LastStateWrapperPtr last_state_wrapper,
const TransportManagerSettings& settings)
- : TcpTransportAdapter(port, last_state, settings) {}
+ : TcpTransportAdapter(port, last_state_wrapper, settings) {}
void IAP2BluetoothEmulationTransportAdapter::DeviceSwitched(
const DeviceUID& device_handle) {
@@ -76,9 +76,9 @@ void IAP2BluetoothEmulationTransportAdapter::TransportConfigUpdated(
IAP2USBEmulationTransportAdapter::IAP2USBEmulationTransportAdapter(
const uint16_t port,
- resumption::LastState& last_state,
+ resumption::LastStateWrapperPtr last_state_wrapper,
const TransportManagerSettings& settings)
- : TcpTransportAdapter(port, last_state, settings), out_(0) {
+ : TcpTransportAdapter(port, last_state_wrapper, settings), out_(0) {
auto delegate = new IAPSignalHandlerDelegate(*this);
signal_handler_ = threads::CreateThread("iAP signal handler", delegate);
signal_handler_->start();
diff --git a/src/components/transport_manager/src/tcp/tcp_transport_adapter.cc b/src/components/transport_manager/src/tcp/tcp_transport_adapter.cc
index aeb50f3830..54eb3a7b6d 100644
--- a/src/components/transport_manager/src/tcp/tcp_transport_adapter.cc
+++ b/src/components/transport_manager/src/tcp/tcp_transport_adapter.cc
@@ -53,7 +53,7 @@ CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
TcpTransportAdapter::TcpTransportAdapter(
const uint16_t port,
- resumption::LastState& last_state,
+ resumption::LastStateWrapperPtr last_state_wrapper,
const TransportManagerSettings& settings)
: TransportAdapterImpl(
NULL,
@@ -63,7 +63,7 @@ TcpTransportAdapter::TcpTransportAdapter(
port,
true,
settings.transport_manager_tcp_adapter_network_interface()),
- last_state,
+ last_state_wrapper,
settings) {}
TcpTransportAdapter::~TcpTransportAdapter() {}
@@ -131,20 +131,22 @@ void TcpTransportAdapter::Store() const {
}
}
tcp_adapter_dictionary["devices"] = devices_dictionary;
- Json::Value& dictionary = last_state().get_dictionary();
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
dictionary["TransportManager"]["TcpAdapter"] = tcp_adapter_dictionary;
+ accessor.GetMutableData().set_dictionary(dictionary);
}
bool TcpTransportAdapter::Restore() {
LOG4CXX_AUTO_TRACE(logger_);
bool errors_occurred = false;
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
const Json::Value tcp_adapter_dictionary =
- last_state().get_dictionary()["TransportManager"]["TcpAdapter"];
+ dictionary["TransportManager"]["TcpAdapter"];
const Json::Value devices_dictionary = tcp_adapter_dictionary["devices"];
- for (Json::Value::const_iterator i = devices_dictionary.begin();
- i != devices_dictionary.end();
- ++i) {
- const Json::Value device_dictionary = *i;
+ for (const auto& tcp_adapter_device : devices_dictionary) {
+ const Json::Value device_dictionary = tcp_adapter_device;
std::string name = device_dictionary["name"].asString();
std::string address_record = device_dictionary["address"].asString();
in_addr_t address = inet_addr(address_record.c_str());
@@ -153,10 +155,8 @@ bool TcpTransportAdapter::Restore() {
AddDevice(device);
const Json::Value applications_dictionary =
device_dictionary["applications"];
- for (Json::Value::const_iterator j = applications_dictionary.begin();
- j != applications_dictionary.end();
- ++j) {
- const Json::Value application_dictionary = *j;
+ for (const auto& application : applications_dictionary) {
+ const Json::Value application_dictionary = application;
std::string port_record = application_dictionary["port"].asString();
int port = atoi(port_record.c_str());
ApplicationHandle app_handle = tcp_device->AddDiscoveredApplication(port);
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 78a9840401..4e057aee63 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
@@ -70,7 +70,7 @@ TransportAdapterImpl::TransportAdapterImpl(
DeviceScanner* device_scanner,
ServerConnectionFactory* server_connection_factory,
ClientConnectionListener* client_connection_listener,
- resumption::LastState& last_state,
+ resumption::LastStateWrapperPtr last_state_wrapper,
const TransportManagerSettings& settings)
: listeners_()
, initialised_(0)
@@ -86,7 +86,7 @@ TransportAdapterImpl::TransportAdapterImpl(
device_scanner_(device_scanner)
, server_connection_factory_(server_connection_factory)
, client_connection_listener_(client_connection_listener)
- , last_state_(last_state)
+ , last_state_wrapper_(last_state_wrapper)
, settings_(settings) {
}
diff --git a/src/components/transport_manager/src/transport_manager_default.cc b/src/components/transport_manager/src/transport_manager_default.cc
index 0d58e24b5c..868fcc3f15 100644
--- a/src/components/transport_manager/src/transport_manager_default.cc
+++ b/src/components/transport_manager/src/transport_manager_default.cc
@@ -57,29 +57,29 @@ CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
TransportAdapterFactory::TransportAdapterFactory() {
#ifdef BLUETOOTH_SUPPORT
- ta_bluetooth_creator_ = [](resumption::LastState& last_state,
+ ta_bluetooth_creator_ = [](resumption::LastStateWrapperPtr last_state_wrapper,
const TransportManagerSettings& settings) {
- return new transport_adapter::BluetoothTransportAdapter(last_state,
+ return new transport_adapter::BluetoothTransportAdapter(last_state_wrapper,
settings);
};
#endif
ta_tcp_creator_ = [](const uint16_t port,
- resumption::LastState& last_state,
+ resumption::LastStateWrapperPtr last_state_wrapper,
const TransportManagerSettings& settings) {
return new transport_adapter::TcpTransportAdapter(
- port, last_state, settings);
+ port, last_state_wrapper, settings);
};
#if defined(USB_SUPPORT)
- ta_usb_creator_ = [](resumption::LastState& last_state,
+ ta_usb_creator_ = [](resumption::LastStateWrapperPtr last_state_wrapper,
const TransportManagerSettings& settings) {
- return new transport_adapter::UsbAoaAdapter(last_state, settings);
+ return new transport_adapter::UsbAoaAdapter(last_state_wrapper, settings);
};
#endif
#if defined(CLOUD_APP_WEBSOCKET_TRANSPORT_SUPPORT)
- ta_cloud_creator_ = [](resumption::LastState& last_state,
+ ta_cloud_creator_ = [](resumption::LastStateWrapperPtr last_state_wrapper,
const TransportManagerSettings& settings) {
- return new transport_adapter::CloudWebsocketTransportAdapter(last_state,
- settings);
+ return new transport_adapter::CloudWebsocketTransportAdapter(
+ last_state_wrapper, settings);
};
#endif
}
@@ -89,9 +89,10 @@ TransportManagerDefault::TransportManagerDefault(
const TransportAdapterFactory& ta_factory)
: TransportManagerImpl(settings), ta_factory_(ta_factory) {}
-int TransportManagerDefault::Init(resumption::LastState& last_state) {
+int TransportManagerDefault::Init(
+ resumption::LastStateWrapperPtr last_state_wrapper) {
LOG4CXX_TRACE(logger_, "enter");
- if (E_SUCCESS != TransportManagerImpl::Init(last_state)) {
+ if (E_SUCCESS != TransportManagerImpl::Init(last_state_wrapper)) {
LOG4CXX_TRACE(logger_,
"exit with E_TM_IS_NOT_INITIALIZED. Condition: E_SUCCESS != "
"TransportManagerImpl::Init()");
@@ -101,7 +102,8 @@ int TransportManagerDefault::Init(resumption::LastState& last_state) {
const auto& settings = get_settings();
#if defined(BLUETOOTH_SUPPORT)
- auto ta_bluetooth = ta_factory_.ta_bluetooth_creator_(last_state, settings);
+ auto ta_bluetooth =
+ ta_factory_.ta_bluetooth_creator_(last_state_wrapper, settings);
#ifdef TELEMETRY_MONITOR
if (metric_observer_) {
ta_bluetooth->SetTelemetryObserver(metric_observer_);
@@ -110,8 +112,10 @@ int TransportManagerDefault::Init(resumption::LastState& last_state) {
AddTransportAdapter(ta_bluetooth);
#endif // BLUETOOTH_SUPPORT
- auto ta_tcp = ta_factory_.ta_tcp_creator_(
- settings.transport_manager_tcp_adapter_port(), last_state, settings);
+ auto ta_tcp =
+ ta_factory_.ta_tcp_creator_(settings.transport_manager_tcp_adapter_port(),
+ last_state_wrapper,
+ settings);
#ifdef TELEMETRY_MONITOR
if (metric_observer_) {
ta_tcp->SetTelemetryObserver(metric_observer_);
@@ -120,7 +124,7 @@ int TransportManagerDefault::Init(resumption::LastState& last_state) {
AddTransportAdapter(ta_tcp);
#if defined(USB_SUPPORT)
- auto ta_usb = ta_factory_.ta_usb_creator_(last_state, settings);
+ auto ta_usb = ta_factory_.ta_usb_creator_(last_state_wrapper, settings);
#ifdef TELEMETRY_MONITOR
if (metric_observer_) {
ta_usb->SetTelemetryObserver(metric_observer_);
@@ -130,7 +134,7 @@ int TransportManagerDefault::Init(resumption::LastState& last_state) {
#endif // USB_SUPPORT
#if defined(CLOUD_APP_WEBSOCKET_TRANSPORT_SUPPORT)
- auto ta_cloud = ta_factory_.ta_cloud_creator_(last_state, settings);
+ auto ta_cloud = ta_factory_.ta_cloud_creator_(last_state_wrapper, settings);
#ifdef TELEMETRY_MONITOR
if (metric_observer_) {
ta_cloud->SetTelemetryObserver(metric_observer_);
@@ -144,14 +148,14 @@ int TransportManagerDefault::Init(resumption::LastState& last_state) {
transport_adapter::IAP2BluetoothEmulationTransportAdapter*
iap2_bt_emu_adapter =
new transport_adapter::IAP2BluetoothEmulationTransportAdapter(
- iap2_bt_emu_port, last_state, settings);
+ iap2_bt_emu_port, last_state_wrapper, settings);
AddTransportAdapter(iap2_bt_emu_adapter);
const uint16_t iap2_usb_emu_port = 34567;
transport_adapter::IAP2USBEmulationTransportAdapter* iap2_usb_emu_adapter =
new transport_adapter::IAP2USBEmulationTransportAdapter(
- iap2_usb_emu_port, last_state, settings);
+ iap2_usb_emu_port, last_state_wrapper, settings);
AddTransportAdapter(iap2_usb_emu_adapter);
#endif // BUILD_TEST
@@ -160,6 +164,10 @@ int TransportManagerDefault::Init(resumption::LastState& last_state) {
return E_SUCCESS;
}
+int TransportManagerDefault::Init(resumption::LastState&) {
+ return 1;
+}
+
TransportManagerDefault::~TransportManagerDefault() {}
} // namespace transport_manager
diff --git a/src/components/transport_manager/src/transport_manager_impl.cc b/src/components/transport_manager/src/transport_manager_impl.cc
index 07dd35bc2f..c6fd60a185 100644
--- a/src/components/transport_manager/src/transport_manager_impl.cc
+++ b/src/components/transport_manager/src/transport_manager_impl.cc
@@ -581,8 +581,18 @@ int TransportManagerImpl::SearchDevices() {
return transport_adapter_search;
}
+int TransportManagerImpl::Init(
+ resumption::LastStateWrapperPtr last_state_wrapper) {
+ // Last state wrapper required to initialize Transport adapters
+ UNUSED(last_state_wrapper);
+ LOG4CXX_TRACE(logger_, "enter");
+ is_initialized_ = true;
+ LOG4CXX_TRACE(logger_, "exit with E_SUCCESS");
+ return E_SUCCESS;
+}
+
int TransportManagerImpl::Init(resumption::LastState& last_state) {
- // Last state requred to initialize Transport adapters
+ // Last state required to initialize Transport adapters
UNUSED(last_state);
LOG4CXX_TRACE(logger_, "enter");
is_initialized_ = true;
diff --git a/src/components/transport_manager/src/usb/usb_aoa_adapter.cc b/src/components/transport_manager/src/usb/usb_aoa_adapter.cc
index d1e9c64c3b..9ce571eb6c 100644
--- a/src/components/transport_manager/src/usb/usb_aoa_adapter.cc
+++ b/src/components/transport_manager/src/usb/usb_aoa_adapter.cc
@@ -43,12 +43,12 @@ namespace transport_manager {
namespace transport_adapter {
CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
-UsbAoaAdapter::UsbAoaAdapter(resumption::LastState& last_state,
+UsbAoaAdapter::UsbAoaAdapter(resumption::LastStateWrapperPtr last_state_wrapper,
const TransportManagerSettings& settings)
: TransportAdapterImpl(new UsbDeviceScanner(this, settings),
new UsbConnectionFactory(this),
NULL,
- last_state,
+ last_state_wrapper,
settings)
, is_initialised_(false)
, usb_handler_(new UsbHandler()) {
diff --git a/src/components/transport_manager/test/include/transport_manager/cloud/mock_cloud_websocket_transport_adapter.h b/src/components/transport_manager/test/include/transport_manager/cloud/mock_cloud_websocket_transport_adapter.h
index 2d240ab3ff..6e74ae759f 100644
--- a/src/components/transport_manager/test/include/transport_manager/cloud/mock_cloud_websocket_transport_adapter.h
+++ b/src/components/transport_manager/test/include/transport_manager/cloud/mock_cloud_websocket_transport_adapter.h
@@ -45,9 +45,9 @@ class MockCloudWebsocketTransportAdapter
: public CloudWebsocketTransportAdapter {
public:
MockCloudWebsocketTransportAdapter(
- resumption::LastState& last_state,
+ resumption::LastStateWrapperPtr last_state_wrapper,
const transport_manager::TransportManagerSettings& settings)
- : CloudWebsocketTransportAdapter(last_state, settings) {}
+ : CloudWebsocketTransportAdapter(last_state_wrapper, settings) {}
MOCK_CONST_METHOD0(GetDeviceType, DeviceType());
MOCK_CONST_METHOD0(Store, void());
MOCK_METHOD0(Restore, bool());
diff --git a/src/components/transport_manager/test/include/transport_manager/tcp/mock_tcp_transport_adapter.h b/src/components/transport_manager/test/include/transport_manager/tcp/mock_tcp_transport_adapter.h
index fb84bce085..dbac183d32 100644
--- a/src/components/transport_manager/test/include/transport_manager/tcp/mock_tcp_transport_adapter.h
+++ b/src/components/transport_manager/test/include/transport_manager/tcp/mock_tcp_transport_adapter.h
@@ -45,9 +45,9 @@ class MockTCPTransportAdapter : public TcpTransportAdapter {
public:
MockTCPTransportAdapter(
uint16_t port,
- resumption::LastState& last_state,
+ resumption::LastStateWrapperPtr last_state_wrapper,
const transport_manager::TransportManagerSettings& settings)
- : TcpTransportAdapter(port, last_state, settings) {}
+ : TcpTransportAdapter(port, last_state_wrapper, settings) {}
MOCK_CONST_METHOD2(
FindEstablishedConnection,
ConnectionSPtr(const transport_manager::DeviceUID& device_handle,
diff --git a/src/components/transport_manager/test/include/transport_manager/transport_adapter/mock_transport_adapter_impl.h b/src/components/transport_manager/test/include/transport_manager/transport_adapter/mock_transport_adapter_impl.h
index 592ed855cc..7b1d720ba2 100644
--- a/src/components/transport_manager/test/include/transport_manager/transport_adapter/mock_transport_adapter_impl.h
+++ b/src/components/transport_manager/test/include/transport_manager/transport_adapter/mock_transport_adapter_impl.h
@@ -58,14 +58,21 @@ class MockTransportAdapterImpl : public TransportAdapterImpl {
DeviceScanner* device_scanner,
ServerConnectionFactory* server_connection_factory,
ClientConnectionListener* client_connection_listener,
- resumption::LastState& last_state,
+ resumption::LastStateWrapperPtr last_state_wrapper,
const transport_manager::TransportManagerSettings& settings)
: TransportAdapterImpl(device_scanner,
server_connection_factory,
client_connection_listener,
- last_state,
+ last_state_wrapper,
settings) {}
+ DEPRECATED
+ MockTransportAdapterImpl(DeviceScanner*,
+ ServerConnectionFactory*,
+ ClientConnectionListener*,
+ resumption::LastState&,
+ const transport_manager::TransportManagerSettings&);
+
ConnectionSPtr FindStatedConnection(const DeviceUID& device_handle,
const ApplicationHandle& app_handle) {
return this->FindEstablishedConnection(device_handle, app_handle);
diff --git a/src/components/transport_manager/test/include/transport_manager/usb/mock_usb_aoa_adapter.h b/src/components/transport_manager/test/include/transport_manager/usb/mock_usb_aoa_adapter.h
index 230f5ed170..affd6aee47 100644
--- a/src/components/transport_manager/test/include/transport_manager/usb/mock_usb_aoa_adapter.h
+++ b/src/components/transport_manager/test/include/transport_manager/usb/mock_usb_aoa_adapter.h
@@ -43,9 +43,9 @@ using namespace ::transport_manager::transport_adapter;
class MockUsbAoaAdapter : public UsbAoaAdapter {
public:
- MockUsbAoaAdapter(resumption::LastState& last_state,
+ MockUsbAoaAdapter(resumption::LastStateWrapperPtr last_state_wrapper,
const transport_manager::TransportManagerSettings& settings)
- : UsbAoaAdapter(last_state, settings) {}
+ : UsbAoaAdapter(last_state_wrapper, settings) {}
MOCK_CONST_METHOD0(GetDeviceType, DeviceType());
MOCK_CONST_METHOD0(IsInitialised, bool());
MOCK_METHOD1(AddListener, void(TransportAdapterListener* listener));
diff --git a/src/components/transport_manager/test/tcp_transport_adapter_test.cc b/src/components/transport_manager/test/tcp_transport_adapter_test.cc
index 0fbdc6d65f..cacdfb6fbd 100644
--- a/src/components/transport_manager/test/tcp_transport_adapter_test.cc
+++ b/src/components/transport_manager/test/tcp_transport_adapter_test.cc
@@ -34,6 +34,7 @@
#include "gtest/gtest.h"
#include "protocol/raw_message.h"
#include "resumption/last_state_impl.h"
+#include "resumption/last_state_wrapper_impl.h"
#include "transport_manager/mock_transport_manager_settings.h"
#include "transport_manager/tcp/mock_tcp_transport_adapter.h"
#include "transport_manager/transport_adapter/connection.h"
@@ -55,9 +56,13 @@ using namespace transport_manager::transport_adapter;
class TcpAdapterTest : public ::testing::Test {
protected:
- TcpAdapterTest() : last_state_("app_storage_folder", "app_info_storage") {}
+ TcpAdapterTest() {
+ last_state_wrapper_ = std::make_shared<resumption::LastStateWrapperImpl>(
+ std::make_shared<resumption::LastStateImpl>("app_storage_folder",
+ "app_info_storage"));
+ }
MockTransportManagerSettings transport_manager_settings;
- resumption::LastStateImpl last_state_;
+ std::shared_ptr<resumption::LastStateWrapperImpl> last_state_wrapper_;
const uint32_t port = 12345;
const std::string string_port = "12345";
std::string network_interface = "";
@@ -72,7 +77,7 @@ class TcpAdapterTest : public ::testing::Test {
TEST_F(TcpAdapterTest, StoreDataWithOneDeviceAndOneApplication) {
// Prepare
MockTCPTransportAdapter transport_adapter(
- port, last_state_, transport_manager_settings);
+ port, last_state_wrapper_, transport_manager_settings);
std::string uniq_id = "unique_device_name";
std::shared_ptr<MockTCPDevice> mockdev =
std::make_shared<MockTCPDevice>(port, uniq_id);
@@ -96,8 +101,9 @@ TEST_F(TcpAdapterTest, StoreDataWithOneDeviceAndOneApplication) {
transport_adapter.CallStore();
// Check that value is saved
- Json::Value& tcp_dict =
- last_state_.get_dictionary()["TransportManager"]["TcpAdapter"];
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ const Json::Value dictionary = accessor.GetData().dictionary();
+ const Json::Value& tcp_dict = dictionary["TransportManager"]["TcpAdapter"];
ASSERT_TRUE(tcp_dict.isObject());
ASSERT_FALSE(tcp_dict["devices"].isNull());
@@ -112,7 +118,7 @@ TEST_F(TcpAdapterTest, StoreDataWithOneDeviceAndOneApplication) {
TEST_F(TcpAdapterTest, StoreDataWithSeveralDevicesAndOneApplication) {
// Prepare
MockTCPTransportAdapter transport_adapter(
- port, last_state_, transport_manager_settings);
+ port, last_state_wrapper_, transport_manager_settings);
const uint32_t count_dev = 10;
std::shared_ptr<MockTCPDevice> mockdev[count_dev];
std::string uniq_id[count_dev];
@@ -148,8 +154,9 @@ TEST_F(TcpAdapterTest, StoreDataWithSeveralDevicesAndOneApplication) {
transport_adapter.CallStore();
// Check that values are saved
- Json::Value& tcp_dict =
- last_state_.get_dictionary()["TransportManager"]["TcpAdapter"];
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ const Json::Value dictionary = accessor.GetData().dictionary();
+ const Json::Value& tcp_dict = dictionary["TransportManager"]["TcpAdapter"];
ASSERT_TRUE(tcp_dict.isObject());
ASSERT_FALSE(tcp_dict["devices"].isNull());
@@ -166,7 +173,7 @@ TEST_F(TcpAdapterTest, StoreDataWithSeveralDevicesAndOneApplication) {
TEST_F(TcpAdapterTest, StoreDataWithSeveralDevicesAndSeveralApplications) {
// Prepare
MockTCPTransportAdapter transport_adapter(
- port, last_state_, transport_manager_settings);
+ port, last_state_wrapper_, transport_manager_settings);
const uint32_t count_dev = 10;
std::shared_ptr<MockTCPDevice> mockdev[count_dev];
@@ -206,8 +213,9 @@ TEST_F(TcpAdapterTest, StoreDataWithSeveralDevicesAndSeveralApplications) {
transport_adapter.CallStore();
// Check that value is saved
- Json::Value& tcp_dict =
- last_state_.get_dictionary()["TransportManager"]["TcpAdapter"];
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ const Json::Value dictionary = accessor.GetData().dictionary();
+ const Json::Value& tcp_dict = dictionary["TransportManager"]["TcpAdapter"];
ASSERT_TRUE(tcp_dict.isObject());
ASSERT_FALSE(tcp_dict["devices"].isNull());
@@ -225,7 +233,7 @@ TEST_F(TcpAdapterTest, StoreDataWithSeveralDevicesAndSeveralApplications) {
TEST_F(TcpAdapterTest, StoreData_ConnectionNotExist_DataNotStored) {
// Prepare
MockTCPTransportAdapter transport_adapter(
- port, last_state_, transport_manager_settings);
+ port, last_state_wrapper_, transport_manager_settings);
std::string uniq_id = "unique_device_name";
auto mockdev = std::make_shared<MockTCPDevice>(port, uniq_id);
transport_adapter.AddDevice(mockdev);
@@ -243,26 +251,32 @@ TEST_F(TcpAdapterTest, StoreData_ConnectionNotExist_DataNotStored) {
transport_adapter.CallStore();
// Check that value is not saved
- Json::Value& tcp_dict =
- last_state_.get_dictionary()["TransportManager"]["TcpAdapter"]["devices"];
+ resumption::LastStateAccessor accessor = last_state_wrapper_->get_accessor();
+ const Json::Value dictionary = accessor.GetData().dictionary();
+ const Json::Value& tcp_dict =
+ dictionary["TransportManager"]["TcpAdapter"]["devices"];
ASSERT_TRUE(tcp_dict.isNull());
}
TEST_F(TcpAdapterTest, RestoreData_DataNotStored) {
- Json::Value& tcp_adapter_dictionary =
- last_state_.get_dictionary()["TransportManager"]["TcpAdapter"];
-
- tcp_adapter_dictionary = Json::Value();
+ {
+ resumption::LastStateAccessor accessor =
+ last_state_wrapper_->get_accessor();
+ Json::Value dictionary = accessor.GetData().dictionary();
+ Json::Value& tcp_dictionary = dictionary["TransportManager"]["TcpAdapter"];
+ tcp_dictionary = Json::Value();
+ accessor.GetMutableData().set_dictionary(dictionary);
+ }
MockTCPTransportAdapter transport_adapter(
- port, last_state_, transport_manager_settings);
+ port, last_state_wrapper_, transport_manager_settings);
EXPECT_CALL(transport_adapter, Connect(_, _)).Times(0);
EXPECT_TRUE(transport_adapter.CallRestore());
}
TEST_F(TcpAdapterTest, StoreDataWithOneDevice_RestoreData) {
MockTCPTransportAdapter transport_adapter(
- port, last_state_, transport_manager_settings);
+ port, last_state_wrapper_, transport_manager_settings);
std::string uniq_id = "unique_device_name";
std::shared_ptr<MockTCPDevice> mockdev =
std::make_shared<MockTCPDevice>(port, uniq_id);
@@ -297,7 +311,7 @@ TEST_F(TcpAdapterTest, StoreDataWithOneDevice_RestoreData) {
TEST_F(TcpAdapterTest, StoreDataWithSeveralDevices_RestoreData) {
MockTCPTransportAdapter transport_adapter(
- port, last_state_, transport_manager_settings);
+ port, last_state_wrapper_, transport_manager_settings);
const uint32_t count_dev = 10;
std::shared_ptr<MockTCPDevice> mockdev[count_dev];
@@ -351,7 +365,7 @@ TEST_F(TcpAdapterTest, NotifyTransportConfigUpdated) {
MockTransportAdapterListener mock_adapter_listener;
TcpTransportAdapter transport_adapter(
- port, last_state_, transport_manager_settings);
+ port, last_state_wrapper_, transport_manager_settings);
transport_adapter.AddListener(&mock_adapter_listener);
TransportConfig config;
@@ -367,8 +381,8 @@ TEST_F(TcpAdapterTest, NotifyTransportConfigUpdated) {
}
TEST_F(TcpAdapterTest, GetTransportConfiguration) {
- TcpTransportAdapter transport_adapter(
- port, last_state_, transport_manager_settings);
+ MockTCPTransportAdapter transport_adapter(
+ port, last_state_wrapper_, transport_manager_settings);
TransportConfig config;
config[tc_enabled] = std::string("true");
diff --git a/src/components/transport_manager/test/transport_adapter_test.cc b/src/components/transport_manager/test/transport_adapter_test.cc
index 025c86f3ac..1773ecfb67 100644
--- a/src/components/transport_manager/test/transport_adapter_test.cc
+++ b/src/components/transport_manager/test/transport_adapter_test.cc
@@ -51,6 +51,7 @@
#include "config_profile/profile.h"
#include "resumption/last_state_impl.h"
+#include "resumption/last_state_wrapper_impl.h"
namespace test {
namespace components {
@@ -65,8 +66,11 @@ using namespace ::protocol_handler;
class TransportAdapterTest : public ::testing::Test {
protected:
- TransportAdapterTest()
- : last_state_("app_storage_folder", "app_info_storage") {}
+ TransportAdapterTest() {
+ last_state_wrapper_ = std::make_shared<resumption::LastStateWrapperImpl>(
+ std::make_shared<resumption::LastStateImpl>("app_storage_folder",
+ "app_info_storage"));
+ }
void SetUp() OVERRIDE {
dev_id = "device_id";
@@ -82,7 +86,7 @@ class TransportAdapterTest : public ::testing::Test {
}
NiceMock<MockTransportManagerSettings> transport_manager_settings;
- resumption::LastStateImpl last_state_;
+ std::shared_ptr<resumption::LastStateWrapperImpl> last_state_wrapper_;
std::string dev_id;
std::string uniq_id;
int app_handle;
@@ -228,7 +232,7 @@ TEST_F(TransportAdapterTest, Init) {
MockTransportAdapterImpl transport_adapter(dev_mock,
serverMock,
clientMock,
- last_state_,
+ last_state_wrapper_,
transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*dev_mock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -247,8 +251,11 @@ TEST_F(TransportAdapterTest, Init) {
TEST_F(TransportAdapterTest, SearchDevices_WithoutScanner) {
MockClientConnectionListener* clientMock = new MockClientConnectionListener();
MockServerConnectionFactory* serverMock = new MockServerConnectionFactory();
- MockTransportAdapterImpl transport_adapter(
- NULL, serverMock, clientMock, last_state_, transport_manager_settings);
+ MockTransportAdapterImpl transport_adapter(NULL,
+ serverMock,
+ clientMock,
+ last_state_wrapper_,
+ transport_manager_settings);
EXPECT_CALL(*clientMock, Init()).WillOnce(Return(TransportAdapter::OK));
EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -264,7 +271,7 @@ TEST_F(TransportAdapterTest, SearchDevices_WithoutScanner) {
TEST_F(TransportAdapterTest, SearchDevices_DeviceNotInitialized) {
MockDeviceScanner* dev_mock = new MockDeviceScanner();
MockTransportAdapterImpl transport_adapter(
- dev_mock, NULL, NULL, last_state_, transport_manager_settings);
+ dev_mock, NULL, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*dev_mock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -280,7 +287,7 @@ TEST_F(TransportAdapterTest, SearchDevices_DeviceNotInitialized) {
TEST_F(TransportAdapterTest, SearchDevices_DeviceInitialized) {
MockDeviceScanner* dev_mock = new MockDeviceScanner();
MockTransportAdapterImpl transport_adapter(
- dev_mock, NULL, NULL, last_state_, transport_manager_settings);
+ dev_mock, NULL, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*dev_mock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -296,7 +303,7 @@ TEST_F(TransportAdapterTest, SearchDevices_DeviceInitialized) {
TEST_F(TransportAdapterTest, SearchDeviceDone_DeviceExisting) {
MockTransportAdapterImpl transport_adapter(
- NULL, NULL, NULL, last_state_, transport_manager_settings);
+ NULL, NULL, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true));
transport_adapter.Init();
@@ -313,7 +320,7 @@ TEST_F(TransportAdapterTest, SearchDeviceDone_DeviceExisting) {
TEST_F(TransportAdapterTest, SearchDeviceFailed) {
MockTransportAdapterImpl transport_adapter(
- NULL, NULL, NULL, last_state_, transport_manager_settings);
+ NULL, NULL, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true));
transport_adapter.Init();
@@ -328,7 +335,7 @@ TEST_F(TransportAdapterTest, SearchDeviceFailed) {
TEST_F(TransportAdapterTest, AddDevice) {
MockTransportAdapterImpl transport_adapter(
- NULL, NULL, NULL, last_state_, transport_manager_settings);
+ NULL, NULL, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true));
transport_adapter.Init();
@@ -346,7 +353,7 @@ TEST_F(TransportAdapterTest, AddDevice) {
TEST_F(TransportAdapterTest, Connect_ServerNotSupported) {
MockClientConnectionListener* clientMock = new MockClientConnectionListener();
MockTransportAdapterImpl transport_adapter(
- NULL, NULL, clientMock, last_state_, transport_manager_settings);
+ NULL, NULL, clientMock, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*clientMock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -364,7 +371,7 @@ TEST_F(TransportAdapterTest, Connect_ServerNotSupported) {
TEST_F(TransportAdapterTest, Connect_ServerNotInitialized) {
MockServerConnectionFactory* serverMock = new MockServerConnectionFactory();
MockTransportAdapterImpl transport_adapter(
- NULL, serverMock, NULL, last_state_, transport_manager_settings);
+ NULL, serverMock, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -382,7 +389,7 @@ TEST_F(TransportAdapterTest, Connect_ServerNotInitialized) {
TEST_F(TransportAdapterTest, Connect_Success) {
MockServerConnectionFactory* serverMock = new MockServerConnectionFactory();
MockTransportAdapterImpl transport_adapter(
- NULL, serverMock, NULL, last_state_, transport_manager_settings);
+ NULL, serverMock, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -401,7 +408,7 @@ TEST_F(TransportAdapterTest, Connect_Success) {
TEST_F(TransportAdapterTest, Connect_DeviceAddedTwice) {
MockServerConnectionFactory* serverMock = new MockServerConnectionFactory();
MockTransportAdapterImpl transport_adapter(
- NULL, serverMock, NULL, last_state_, transport_manager_settings);
+ NULL, serverMock, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -424,7 +431,7 @@ TEST_F(TransportAdapterTest, Connect_DeviceAddedTwice) {
TEST_F(TransportAdapterTest, ConnectDevice_ServerNotAdded_DeviceAdded) {
MockTransportAdapterImpl transport_adapter(
- NULL, NULL, NULL, last_state_, transport_manager_settings);
+ NULL, NULL, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true));
transport_adapter.Init();
@@ -450,7 +457,7 @@ TEST_F(TransportAdapterTest, ConnectDevice_ServerNotAdded_DeviceAdded) {
TEST_F(TransportAdapterTest, ConnectDevice_DeviceNotAdded) {
MockServerConnectionFactory* serverMock = new MockServerConnectionFactory();
MockTransportAdapterImpl transport_adapter(
- NULL, serverMock, NULL, last_state_, transport_manager_settings);
+ NULL, serverMock, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK));
EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true));
@@ -471,7 +478,7 @@ TEST_F(TransportAdapterTest, ConnectDevice_DeviceNotAdded) {
TEST_F(TransportAdapterTest, ConnectDevice_DeviceAdded) {
MockServerConnectionFactory* serverMock = new MockServerConnectionFactory();
MockTransportAdapterImpl transport_adapter(
- NULL, serverMock, NULL, last_state_, transport_manager_settings);
+ NULL, serverMock, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -504,7 +511,7 @@ TEST_F(TransportAdapterTest, ConnectDevice_DeviceAdded) {
TEST_F(TransportAdapterTest, ConnectDevice_DeviceAdded_ConnectFailedRetry) {
MockServerConnectionFactory* server_mock = new MockServerConnectionFactory();
MockTransportAdapterImpl transport_adapter(
- NULL, server_mock, NULL, last_state_, transport_manager_settings);
+ NULL, server_mock, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*server_mock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -541,7 +548,7 @@ TEST_F(TransportAdapterTest, ConnectDevice_DeviceAdded_ConnectFailedRetry) {
TEST_F(TransportAdapterTest, ConnectDevice_DeviceAddedTwice) {
MockServerConnectionFactory* serverMock = new MockServerConnectionFactory();
MockTransportAdapterImpl transport_adapter(
- NULL, serverMock, NULL, last_state_, transport_manager_settings);
+ NULL, serverMock, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -585,7 +592,7 @@ TEST_F(TransportAdapterTest, ConnectDevice_DeviceAddedTwice) {
TEST_F(TransportAdapterTest, Disconnect_ConnectDoneSuccess) {
MockServerConnectionFactory* serverMock = new MockServerConnectionFactory();
MockTransportAdapterImpl transport_adapter(
- NULL, serverMock, NULL, last_state_, transport_manager_settings);
+ NULL, serverMock, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -618,7 +625,7 @@ TEST_F(TransportAdapterTest, Disconnect_ConnectDoneSuccess) {
TEST_F(TransportAdapterTest, FindPending) {
MockServerConnectionFactory* serverMock = new MockServerConnectionFactory();
MockTransportAdapterImpl transport_adapter(
- NULL, serverMock, NULL, last_state_, transport_manager_settings);
+ NULL, serverMock, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -661,7 +668,7 @@ TEST_F(TransportAdapterTest,
Pending_Connect_Disconnect_ConnectDoneSuccess_PendingDeviceAdded) {
MockServerConnectionFactory* serverMock = new MockServerConnectionFactory();
MockTransportAdapterImpl transport_adapter(
- NULL, serverMock, NULL, last_state_, transport_manager_settings);
+ NULL, serverMock, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -754,7 +761,7 @@ TEST_F(TransportAdapterTest,
TEST_F(TransportAdapterTest, WebsocketEndpointParsing_SUCCESS) {
std::shared_ptr<CloudWebsocketTransportAdapter> cta =
std::make_shared<CloudWebsocketTransportAdapter>(
- last_state_, transport_manager_settings);
+ last_state_wrapper_, transport_manager_settings);
for (auto protocol : kWebsocketProtocols) {
for (auto endpoint : kValidTestEndpoints) {
@@ -782,7 +789,7 @@ TEST_F(TransportAdapterTest, WebsocketEndpointParsing_SUCCESS) {
TEST_F(TransportAdapterTest, WebsocketEndpointParsing_INVALID) {
std::shared_ptr<CloudWebsocketTransportAdapter> cta =
std::make_shared<CloudWebsocketTransportAdapter>(
- last_state_, transport_manager_settings);
+ last_state_wrapper_, transport_manager_settings);
for (auto protocol : kWebsocketProtocols) {
for (auto endpoint : kInvalidTestEndpoints) {
@@ -802,7 +809,7 @@ TEST_F(TransportAdapterTest, WebsocketEndpointParsing_INVALID) {
TEST_F(TransportAdapterTest, WebsocketEndpointParsing_INCORRECT) {
std::shared_ptr<CloudWebsocketTransportAdapter> cta =
std::make_shared<CloudWebsocketTransportAdapter>(
- last_state_, transport_manager_settings);
+ last_state_wrapper_, transport_manager_settings);
for (auto protocol : kWebsocketProtocols) {
for (auto endpoint : kIncorrectTestEndpoints) {
@@ -832,7 +839,7 @@ TEST_F(TransportAdapterTest, WebsocketEndpointParsing_INCORRECT) {
TEST_F(TransportAdapterTest, DisconnectDevice_DeviceAddedConnectionCreated) {
MockServerConnectionFactory* serverMock = new MockServerConnectionFactory();
MockTransportAdapterImpl transport_adapter(
- NULL, serverMock, NULL, last_state_, transport_manager_settings);
+ NULL, serverMock, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -876,7 +883,7 @@ TEST_F(TransportAdapterTest, DisconnectDevice_DeviceAddedConnectionCreated) {
TEST_F(TransportAdapterTest, DeviceDisconnected) {
MockServerConnectionFactory* serverMock = new MockServerConnectionFactory();
MockTransportAdapterImpl transport_adapter(
- NULL, serverMock, NULL, last_state_, transport_manager_settings);
+ NULL, serverMock, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -926,7 +933,7 @@ TEST_F(TransportAdapterTest, DeviceDisconnected) {
TEST_F(TransportAdapterTest, AbortedConnectSuccess) {
MockServerConnectionFactory* serverMock = new MockServerConnectionFactory();
MockTransportAdapterImpl transport_adapter(
- NULL, serverMock, NULL, last_state_, transport_manager_settings);
+ NULL, serverMock, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -952,8 +959,11 @@ TEST_F(TransportAdapterTest, AbortedConnectSuccess) {
TEST_F(TransportAdapterTest, SendData) {
MockDeviceScanner* dev_mock = new MockDeviceScanner();
MockServerConnectionFactory* serverMock = new MockServerConnectionFactory();
- MockTransportAdapterImpl transport_adapter(
- dev_mock, serverMock, NULL, last_state_, transport_manager_settings);
+ MockTransportAdapterImpl transport_adapter(dev_mock,
+ serverMock,
+ NULL,
+ last_state_wrapper_,
+ transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*dev_mock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -995,7 +1005,7 @@ TEST_F(TransportAdapterTest, SendData_ConnectionNotEstablished) {
MockTransportAdapterImpl transport_adapter(dev_mock,
serverMock,
clientMock,
- last_state_,
+ last_state_wrapper_,
transport_manager_settings);
SetDefaultExpectations(transport_adapter);
@@ -1032,8 +1042,11 @@ TEST_F(TransportAdapterTest, SendData_ConnectionNotEstablished) {
TEST_F(TransportAdapterTest, StartClientListening_ClientNotInitialized) {
MockDeviceScanner* dev_mock = new MockDeviceScanner();
MockClientConnectionListener* clientMock = new MockClientConnectionListener();
- MockTransportAdapterImpl transport_adapter(
- dev_mock, NULL, clientMock, last_state_, transport_manager_settings);
+ MockTransportAdapterImpl transport_adapter(dev_mock,
+ NULL,
+ clientMock,
+ last_state_wrapper_,
+ transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*dev_mock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -1055,8 +1068,11 @@ TEST_F(TransportAdapterTest, StartClientListening_ClientNotInitialized) {
TEST_F(TransportAdapterTest, StartClientListening) {
MockDeviceScanner* dev_mock = new MockDeviceScanner();
MockClientConnectionListener* clientMock = new MockClientConnectionListener();
- MockTransportAdapterImpl transport_adapter(
- dev_mock, NULL, clientMock, last_state_, transport_manager_settings);
+ MockTransportAdapterImpl transport_adapter(dev_mock,
+ NULL,
+ clientMock,
+ last_state_wrapper_,
+ transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*dev_mock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -1083,7 +1099,7 @@ TEST_F(TransportAdapterTest, StopClientListening_Success) {
MockTransportAdapterImpl transport_adapter(dev_mock,
serverMock,
clientMock,
- last_state_,
+ last_state_wrapper_,
transport_manager_settings);
SetDefaultExpectations(transport_adapter);
@@ -1119,7 +1135,7 @@ TEST_F(TransportAdapterTest, FindNewApplicationsRequest) {
MockTransportAdapterImpl transport_adapter(dev_mock,
serverMock,
clientMock,
- last_state_,
+ last_state_wrapper_,
transport_manager_settings);
SetDefaultExpectations(transport_adapter);
@@ -1142,7 +1158,7 @@ TEST_F(TransportAdapterTest, FindNewApplicationsRequest) {
TEST_F(TransportAdapterTest, GetDeviceAndApplicationLists) {
MockTransportAdapterImpl transport_adapter(
- NULL, NULL, NULL, last_state_, transport_manager_settings);
+ NULL, NULL, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true));
transport_adapter.Init();
@@ -1167,7 +1183,7 @@ TEST_F(TransportAdapterTest, GetDeviceAndApplicationLists) {
TEST_F(TransportAdapterTest, FindEstablishedConnection) {
MockServerConnectionFactory* serverMock = new MockServerConnectionFactory();
MockTransportAdapterImpl transport_adapter(
- NULL, serverMock, NULL, last_state_, transport_manager_settings);
+ NULL, serverMock, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK));
@@ -1198,7 +1214,7 @@ TEST_F(TransportAdapterTest, RunAppOnDevice_NoDeviseWithAskedId_UNSUCCESS) {
const std::string bundle_id = "test_bundle_id";
MockTransportAdapterImpl transport_adapter(
- NULL, NULL, NULL, last_state_, transport_manager_settings);
+ NULL, NULL, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
std::shared_ptr<MockDevice> mock_device =
@@ -1218,7 +1234,7 @@ TEST_F(TransportAdapterTest, RunAppOnDevice_DeviseWithAskedIdWasFound_SUCCESS) {
const std::string device_uid = "test_device_uid";
MockTransportAdapterImpl transport_adapter(
- NULL, NULL, NULL, last_state_, transport_manager_settings);
+ NULL, NULL, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
std::shared_ptr<MockDevice> mock_device =
@@ -1235,7 +1251,7 @@ TEST_F(TransportAdapterTest, RunAppOnDevice_DeviseWithAskedIdWasFound_SUCCESS) {
TEST_F(TransportAdapterTest, StopDevice) {
MockTransportAdapterImpl transport_adapter(
- NULL, NULL, NULL, last_state_, transport_manager_settings);
+ NULL, NULL, NULL, last_state_wrapper_, transport_manager_settings);
EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true));
transport_adapter.Init();
@@ -1250,7 +1266,7 @@ TEST_F(TransportAdapterTest, StopDevice) {
TEST_F(TransportAdapterTest, TransportConfigUpdated) {
MockTransportAdapterImpl transport_adapter(
- NULL, NULL, NULL, last_state_, transport_manager_settings);
+ NULL, NULL, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true));
transport_adapter.Init();
@@ -1269,7 +1285,7 @@ TEST_F(TransportAdapterTest, TransportConfigUpdated) {
TEST_F(TransportAdapterTest, GetTransportConfigration) {
MockTransportAdapterImpl transport_adapter(
- NULL, NULL, NULL, last_state_, transport_manager_settings);
+ NULL, NULL, NULL, last_state_wrapper_, transport_manager_settings);
SetDefaultExpectations(transport_adapter);
EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true));
transport_adapter.Init();
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 8a7f95c74b..bedc1634cc 100644
--- a/src/components/transport_manager/test/transport_manager_default_test.cc
+++ b/src/components/transport_manager/test/transport_manager_default_test.cc
@@ -32,6 +32,7 @@
#include "transport_manager/transport_manager_default.h"
#include "gtest/gtest.h"
+#include "resumption/last_state_wrapper_impl.h"
#include "resumption/mock_last_state.h"
#include "transport_manager/bt/mock_bluetooth_transport_adapter.h"
#include "transport_manager/cloud/mock_cloud_websocket_transport_adapter.h"
@@ -86,10 +87,13 @@ class TestTransportManagerDefault : public ::testing::Test {
public:
TestTransportManagerDefault()
: transport_manager_settings_()
+ , mock_last_state_(std::make_shared<MockLastState>())
, unique_tcp_dev_name_("unique_tcp_device_name")
, dev_id_("device_id")
, tcp_adapter_port_(1u)
- , network_interface_("test_iface") {}
+ , network_interface_("test_iface")
+ , last_state_wrapper_(std::make_shared<resumption::LastStateWrapperImpl>(
+ mock_last_state_)) {}
void SetUp() OVERRIDE {
EXPECT_CALL(transport_manager_settings_,
@@ -100,43 +104,45 @@ class TestTransportManagerDefault : public ::testing::Test {
// to be able to check related function calls
mock_bt_ta_ = new MockBluetoothTransportAdapter();
mock_tcp_ta_ = new MockTCPTransportAdapter(
- tcp_adapter_port_, mock_last_state_, transport_manager_settings_);
+ tcp_adapter_port_, last_state_wrapper_, transport_manager_settings_);
mock_usb_aoa_ta_ =
- new MockUsbAoaAdapter(mock_last_state_, transport_manager_settings_);
+ new MockUsbAoaAdapter(last_state_wrapper_, transport_manager_settings_);
mock_cloud_websocket_ta_ = new MockCloudWebsocketTransportAdapter(
- mock_last_state_, transport_manager_settings_);
+ last_state_wrapper_, transport_manager_settings_);
TransportAdapterFactory ta_factory;
#ifdef BLUETOOTH_SUPPORT
ta_factory.ta_bluetooth_creator_ =
- [&](resumption::LastState& last_state,
+ [&](resumption::LastStateWrapperPtr& last_state_wrapper,
const TransportManagerSettings& settings) {
- UNUSED(last_state);
+ UNUSED(last_state_wrapper);
UNUSED(settings);
return mock_bt_ta_;
};
#endif
- ta_factory.ta_tcp_creator_ = [&](const uint16_t port,
- resumption::LastState& last_state,
- const TransportManagerSettings& settings) {
- UNUSED(port);
- UNUSED(last_state);
- UNUSED(settings);
- return mock_tcp_ta_;
- };
+ ta_factory.ta_tcp_creator_ =
+ [&](const uint16_t port,
+ resumption::LastStateWrapperPtr& last_state_wrapper,
+ const TransportManagerSettings& settings) {
+ UNUSED(port);
+ UNUSED(last_state_wrapper);
+ UNUSED(settings);
+ return mock_tcp_ta_;
+ };
#if defined(USB_SUPPORT)
- ta_factory.ta_usb_creator_ = [&](resumption::LastState& last_state,
- const TransportManagerSettings& settings) {
- UNUSED(last_state);
- UNUSED(settings);
- return mock_usb_aoa_ta_;
- };
+ ta_factory.ta_usb_creator_ =
+ [&](resumption::LastStateWrapperPtr& last_state_wrapper,
+ const TransportManagerSettings& settings) {
+ UNUSED(last_state_wrapper);
+ UNUSED(settings);
+ return mock_usb_aoa_ta_;
+ };
#endif
#if defined(CLOUD_APP_WEBSOCKET_TRANSPORT_SUPPORT)
ta_factory.ta_cloud_creator_ =
- [&](resumption::LastState& last_state,
+ [&](resumption::LastStateWrapperPtr& last_state_wrapper,
const TransportManagerSettings& settings) {
- UNUSED(last_state);
+ UNUSED(last_state_wrapper);
UNUSED(settings);
return mock_cloud_websocket_ta_;
};
@@ -154,7 +160,7 @@ class TestTransportManagerDefault : public ::testing::Test {
protected:
MockTransportManagerSettings transport_manager_settings_;
std::unique_ptr<TransportManagerDefault> transport_manager_;
- NiceMock<MockLastState> mock_last_state_;
+ std::shared_ptr<MockLastState> mock_last_state_;
Json::Value custom_dictionary_;
const std::string unique_tcp_dev_name_;
const std::string dev_id_;
@@ -166,6 +172,7 @@ class TestTransportManagerDefault : public ::testing::Test {
MockTCPTransportAdapter* mock_tcp_ta_;
MockUsbAoaAdapter* mock_usb_aoa_ta_;
MockCloudWebsocketTransportAdapter* mock_cloud_websocket_ta_;
+ std::shared_ptr<resumption::LastStateWrapperImpl> last_state_wrapper_;
};
void TestTransportManagerDefault::ExpectationsSettings_TM(
@@ -185,17 +192,16 @@ void TestTransportManagerDefault::ExpectationsSettings_TM(
custom_dictionary_[kTransportManager][kTcpAdapter][kDevices][0] = tcp_device;
custom_dictionary_[kTransportManager][kBluetoothAdapter][kDevices][0] =
bluetooth_device;
- ON_CALL(mock_last_state_, get_dictionary())
+ ON_CALL(*mock_last_state_, dictionary())
+ .WillByDefault(Return(custom_dictionary_));
+ ON_CALL(*mock_last_state_, get_dictionary())
.WillByDefault(ReturnRef(custom_dictionary_));
-
EXPECT_CALL(transport_manager_settings_, use_last_state())
.WillRepeatedly(Return(use_last_state));
EXPECT_CALL(transport_manager_settings_, transport_manager_tcp_adapter_port())
.WillRepeatedly(Return(tcp_adapter_port_));
-
EXPECT_CALL(transport_manager_settings_, bluetooth_uuid())
.WillRepeatedly(Return(kBTUUID.data()));
-
EXPECT_CALL(transport_manager_settings_, aoa_filter_manufacturer())
.WillRepeatedly(ReturnRef(dummy_parameter_));
EXPECT_CALL(transport_manager_settings_, aoa_filter_model_name())
@@ -271,7 +277,7 @@ TEST_F(TestTransportManagerDefault, Init_LastStateNotUsed) {
ExpectationsCloudWebsocket_TA();
// Act
- transport_manager_->Init(mock_last_state_);
+ transport_manager_->Init(last_state_wrapper_);
transport_manager_->Stop();
}
@@ -285,7 +291,7 @@ TEST_F(TestTransportManagerDefault, Init_LastStateUsed) {
ExpectationsCloudWebsocket_TA();
// Act
- transport_manager_->Init(mock_last_state_);
+ transport_manager_->Init(last_state_wrapper_);
transport_manager_->Stop();
}
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 ac9b801dbd..db4813be9a 100644
--- a/src/components/transport_manager/test/transport_manager_impl_test.cc
+++ b/src/components/transport_manager/test/transport_manager_impl_test.cc
@@ -35,6 +35,7 @@
#include "gtest/gtest.h"
#include "protocol/raw_message.h"
#include "resumption/last_state_impl.h"
+#include "resumption/last_state_wrapper_impl.h"
#include "transport_manager/common.h"
#include "transport_manager/mock_telemetry_observer.h"
#include "transport_manager/mock_transport_manager_impl.h"
@@ -79,9 +80,11 @@ class TransportManagerImplTest : public ::testing::Test {
device_handle_, mac_address_, device_name_, connection_type_) {}
void SetUp() OVERRIDE {
- resumption::LastStateImpl last_state_("app_storage_folder",
- "app_info_storage");
- tm_.Init(last_state_);
+ std::shared_ptr<resumption::LastStateWrapperImpl> wrapper =
+ std::make_shared<resumption::LastStateWrapperImpl>(
+ std::make_shared<resumption::LastStateImpl>("app_storage_folder",
+ "app_info_storage"));
+ tm_.Init(wrapper);
mock_adapter_ = new MockTransportAdapter();
tm_listener_ = std::make_shared<MockTransportManagerListener>();
diff --git a/src/components/transport_manager/test/websocket_connection_test.cc b/src/components/transport_manager/test/websocket_connection_test.cc
index 6f6baa82fd..a7ddb820a0 100644
--- a/src/components/transport_manager/test/websocket_connection_test.cc
+++ b/src/components/transport_manager/test/websocket_connection_test.cc
@@ -32,6 +32,7 @@
#include "gtest/gtest.h"
#include "resumption/last_state_impl.h"
+#include "resumption/last_state_wrapper_impl.h"
#include "transport_manager/cloud/cloud_websocket_transport_adapter.h"
#include "transport_manager/cloud/sample_websocket_server.h"
#include "transport_manager/cloud/websocket_client_connection.h"
@@ -99,7 +100,9 @@ class WebsocketConnectionTest : public ::testing::Test {
protected:
WebsocketConnectionTest()
- : last_state_("app_storage_folder", "app_info_storage") {}
+ : last_state_(std::make_shared<resumption::LastStateWrapperImpl>(
+ std::make_shared<resumption::LastStateImpl>("app_storage_folder",
+ "app_info_storage"))) {}
~WebsocketConnectionTest() {}
@@ -109,7 +112,7 @@ class WebsocketConnectionTest : public ::testing::Test {
}
NiceMock<MockTransportManagerSettings> transport_manager_settings;
- resumption::LastStateImpl last_state_;
+ resumption::LastStateWrapperPtr last_state_;
std::string dev_id;
std::string uniq_id;
std::shared_ptr<websocket::WSSession> ws_session;