summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIra Lytvynenko (GitHub) <ILytvynenko@luxoft.com>2020-02-14 20:32:24 +0200
committerGitHub <noreply@github.com>2020-02-14 13:32:24 -0500
commitece258838a44a5461d718c5eeae380ad11a3769b (patch)
tree455d6c08c2295caeaca682348e0bc88ab1950666
parent656cb05756bbc20625adad8e4b2dcb6f40359352 (diff)
downloadsdl_core-ece258838a44a5461d718c5eeae380ad11a3769b.tar.gz
Fix LastState methods thread safe access (#2626)
* Fix LastState instance thread safe access Fix LastState instance thread safe access and update dictionary usages in app launch and resumption. There was implemented LastStateWrapper class for providing exclusive thread safe access to LastState instance from all places in the program. Also passing LastState object was replaced with LastStateWrapper object to avoid direct access to LastState instance from another components. Thus there were a small updates in architecture of AM and TM classes. * Fixed mocks and unit tests related to LastState class * Add LastStateWrapper interface and LastStateWrapperPtr typedef * Fix tests after adding LastStateWrapper interface * Deprecate methods with changed signature * Adapt RCConsentManager according to LastState functionality There are some deprecated methods in LastState that are used by RCConsentManager. In addition, LastState::dictionary method returns reference to dictionary no more - only copy of latter. * Adapt AppServiceManager to new LastState usage * Adapt transport manager to new LastState usage * Adapt RPCPlugin to new LastState usage * Adapt AppServiceRPCPlugin to new LastState usage * Adapt RCRPCPlugin to new LastState usage * Adapt SDLRPCPlugin to new LastState usage * Adapt VehicleInfoPlugin to new LastState usage * Adapt existing unit tests * Fix ENABLE_LOG off build failure * Replace old-style loops with range based * Fix potential mutex deadlocks in resumption storage * Add Mutable Data Accessor. The entity that provides the thread-safe mutable access to data. * Fix submodule issues after merge Co-authored-by: Alexander Kutsan (GitHub) <akutsan@luxoft.com> Co-authored-by: Yaroslav Mamykin (GitHub) <33784535+YarikMamykin@users.noreply.github.com> Co-authored-by: Igor Gapchuk (GitHub) <41586842+IGapchuk@users.noreply.github.com> Co-authored-by: Jacob Keeler <jacob.keeler@livioradio.com>
-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/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_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/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/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/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
94 files changed, 1368 insertions, 604 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/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_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/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/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/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;