diff options
author | okozlovlux <okozlov@luxoft.com> | 2017-02-20 19:16:07 +0200 |
---|---|---|
committer | okozlovlux <okozlov@luxoft.com> | 2017-05-17 19:27:11 +0300 |
commit | 6a3c65f64fb7e9e5a770476b3f664d57606af33a (patch) | |
tree | bc618e0ff31525d9157b1df098a5149efe557720 | |
parent | 8aadc5d6d51b49c381fb89fd4b1fbfebec732cc3 (diff) | |
download | sdl_core-6a3c65f64fb7e9e5a770476b3f664d57606af33a.tar.gz |
Add functionality for External UCS
- added functionality for External UCS: ON by the User
- added UTs for policices External UCS: ON by the User
- added perstistence for external user consent status received from system
Fix issuies for HTTP and PROPRIETARY mode in mock policy handler
- fixed issues in mock policy handler
- fix coding style
74 files changed, 4549 insertions, 3627 deletions
diff --git a/src/appMain/CMakeLists.txt b/src/appMain/CMakeLists.txt index 88813b5bfb..bdc0ebe1fd 100644 --- a/src/appMain/CMakeLists.txt +++ b/src/appMain/CMakeLists.txt @@ -49,6 +49,7 @@ include_directories( ${COMPONENTS_DIR}/telemetry_monitor/include ${POLICY_PATH}/include/ ${POLICY_GLOBAL_INCLUDE_PATH}/ + ${COMPONENTS_DIR}/rpc_base/include/ ${COMPONENTS_DIR}/resumption/include ${COMPONENTS_DIR}/dbus/include ${CMAKE_BINARY_DIR}/src/components diff --git a/src/components/application_manager/include/application_manager/application_impl.h b/src/components/application_manager/include/application_manager/application_impl.h index 1c9089ca50..ae63a2f8ae 100644 --- a/src/components/application_manager/include/application_manager/application_impl.h +++ b/src/components/application_manager/include/application_manager/application_impl.h @@ -156,7 +156,7 @@ class ApplicationImpl : public virtual InitialApplicationDataImpl, void set_device(connection_handler::DeviceHandle device); virtual uint32_t get_grammar_id() const; virtual void set_grammar_id(uint32_t value); - bool is_audio() const FINAL OVERRIDE; + bool is_audio() const OVERRIDE; virtual void set_protocol_version(const ProtocolVersion& protocol_version); virtual ProtocolVersion protocol_version() const; 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 0c576fa9ce..39be11805a 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 @@ -508,6 +508,67 @@ class ApplicationManagerImpl } /** + * @brief Checks, if given RPC is allowed at current HMI level for specific + * application in policy table + * @param app Application + * @param hmi_level Current HMI level of application + * @param function_id FunctionID of RPC + * @param params_permissions Permissions for RPC parameters (e.g. + * SubscribeVehicleData) defined in policy table + * @return SUCCESS, if allowed, otherwise result code of check + */ + mobile_apis::Result::eType CheckPolicyPermissions( + const ApplicationSharedPtr app, + const std::string& function_id, + const RPCParams& rpc_params, + CommandParametersPermissions* params_permissions = NULL) OVERRIDE; + + /** + * @brief IsApplicationForbidden allows to distinguish if application is + * not allowed to register, becuase of spaming. + * + * @param connection_key the conection key ofthe required application + * + * @param mobile_app_id application's mobile(policy) identifier. + * + * @return true in case application is allowed to register, false otherwise. + */ + bool IsApplicationForbidden(uint32_t connection_key, + const std::string& mobile_app_id); + + struct ApplicationsAppIdSorter { + bool operator()(const ApplicationSharedPtr lhs, + const ApplicationSharedPtr rhs) { + return lhs->app_id() < rhs->app_id(); + } + }; + + struct ApplicationsMobileAppIdSorter { + bool operator()(const ApplicationSharedPtr lhs, + const ApplicationSharedPtr rhs) { + if (lhs->policy_app_id() == rhs->policy_app_id()) { + return lhs->device() < rhs->device(); + } + return lhs->policy_app_id() < rhs->policy_app_id(); + } + }; + + // typedef for Applications list + typedef std::set<ApplicationSharedPtr, ApplicationsAppIdSorter> ApplictionSet; + + typedef std::set<ApplicationSharedPtr, ApplicationsPolicyAppIdSorter> + AppsWaitRegistrationSet; + + // typedef for Applications list iterator + typedef ApplictionSet::iterator ApplictionSetIt; + + // typedef for Applications list const iterator + typedef ApplictionSet::const_iterator ApplictionSetConstIt; + + DataAccessor<AppsWaitRegistrationSet> apps_waiting_for_registration() const; + ApplicationConstSharedPtr waiting_app(const uint32_t hmi_id) const; + + /** * @brief SetState Change regular audio state * @param app appication to setup regular State * @param audio_state of new regular state @@ -740,12 +801,12 @@ class ApplicationManagerImpl // Overriden SecurityManagerListener method bool OnHandshakeDone( uint32_t connection_key, - security_manager::SSLContext::HandshakeResult result) OVERRIDE FINAL; + security_manager::SSLContext::HandshakeResult result) OVERRIDE; - void OnCertificateUpdateRequired() OVERRIDE FINAL; + void OnCertificateUpdateRequired() OVERRIDE; security_manager::SSLContext::HandshakeContext GetHandshakeContext( - uint32_t key) const OVERRIDE FINAL; + uint32_t key) const OVERRIDE; #endif // ENABLE_SECURITY /** @@ -943,24 +1004,14 @@ class ApplicationManagerImpl protocol_handler::ProtocolHandler& protocol_handler() const OVERRIDE; virtual policy::PolicyHandlerInterface& GetPolicyHandler() OVERRIDE { - return policy_handler_; + return *policy_handler_; } - /** - * @brief Checks, if given RPC is allowed at current HMI level for specific - * application in policy table - * @param policy_app_id Application id - * @param hmi_level Current HMI level of application - * @param function_id FunctionID of RPC - * @param params_permissions Permissions for RPC parameters (e.g. - * SubscribeVehicleData) defined in policy table - * @return SUCCESS, if allowed, otherwise result code of check - */ - mobile_apis::Result::eType CheckPolicyPermissions( - const std::string& policy_app_id, - mobile_apis::HMILevel::eType hmi_level, - mobile_apis::FunctionID::eType function_id, - const RPCParams& rpc_params, - CommandParametersPermissions* params_permissions = NULL) OVERRIDE; + + virtual const policy::PolicyHandlerInterface& GetPolicyHandler() + const OVERRIDE { + return *policy_handler_; + } + /* * @brief Function Should be called when Low Voltage is occured */ @@ -987,13 +1038,6 @@ class ApplicationManagerImpl policy::DeviceConsent GetUserConsentForDevice( const std::string& device_id) const OVERRIDE; - struct ApplicationsAppIdSorter { - bool operator()(const ApplicationSharedPtr lhs, - const ApplicationSharedPtr rhs) { - return lhs->app_id() < rhs->app_id(); - } - }; - // typedef for Applications list typedef std::set<std::string> ForbiddenApps; @@ -1391,7 +1435,7 @@ class ApplicationManagerImpl hmi_message_handler::HMIMessageHandler* hmi_handler_; connection_handler::ConnectionHandler* connection_handler_; - policy::PolicyHandler policy_handler_; + std::auto_ptr<policy::PolicyHandlerInterface> policy_handler_; protocol_handler::ProtocolHandler* protocol_handler_; request_controller::RequestController request_ctrl_; diff --git a/src/components/application_manager/include/application_manager/message_helper.h b/src/components/application_manager/include/application_manager/message_helper.h index 0ea4fc8ca5..75bd767198 100644 --- a/src/components/application_manager/include/application_manager/message_helper.h +++ b/src/components/application_manager/include/application_manager/message_helper.h @@ -137,6 +137,8 @@ class MessageHelper { static std::string MobileResultToString( mobile_apis::Result::eType mobile_result); + static std::string GetDeviceMacAddressForHandle( + const uint32_t device_handle, const ApplicationManager& app_mngr); /** * @brief Converts string to mobile Result enum value * @param mobile_result stringified value @@ -359,15 +361,24 @@ class MessageHelper { uint32_t correlation_id, ApplicationManager& app_mngr); - /** - * @brief Send GetListOfPermissions response to HMI - * @param permissions Array of groups permissions - * @param correlation_id Correlation id of request - */ +/** + * @brief Send GetListOfPermissions response to HMI + * @param permissions Array of groups permissions + * @param external_consent_status External user consent status + * @param correlation_id Correlation id of request + */ +#ifdef EXTERNAL_PROPRIETARY_MODE static void SendGetListOfPermissionsResponse( const std::vector<policy::FunctionalGroupPermission>& permissions, - uint32_t correlation_id, + const policy::ExternalConsentStatus& external_consent_status, + const uint32_t correlation_id, + ApplicationManager& app_mngr); +#else + static void SendGetListOfPermissionsResponse( + const std::vector<policy::FunctionalGroupPermission>& permissions, + const uint32_t correlation_id, ApplicationManager& app_mngr); +#endif // EXTERNAL_PROPRIETARY_MODE /* * @brief Sends notification to HMI to start video streaming diff --git a/src/components/application_manager/include/application_manager/policies/external/delegates/app_permission_delegate.h b/src/components/application_manager/include/application_manager/policies/external/delegates/app_permission_delegate.h index 544628117a..f501598e0f 100644 --- a/src/components/application_manager/include/application_manager/policies/external/delegates/app_permission_delegate.h +++ b/src/components/application_manager/include/application_manager/policies/external/delegates/app_permission_delegate.h @@ -58,6 +58,7 @@ class AppPermissionDelegate : public threads::ThreadDelegate { */ AppPermissionDelegate(const uint32_t connection_key, const PermissionConsent& permissions, + const ExternalConsentStatus& external_consent_status, policy::PolicyHandlerInterface& policy_handler); /** @@ -75,6 +76,7 @@ class AppPermissionDelegate : public threads::ThreadDelegate { private: uint32_t connection_key_; PermissionConsent permissions_; + ExternalConsentStatus external_consent_status_; policy::PolicyHandlerInterface& policy_handler_; }; diff --git a/src/components/application_manager/include/application_manager/policies/policy_handler.h b/src/components/application_manager/include/application_manager/policies/policy_handler.h index 01b10b1c63..74d19c31f9 100644 --- a/src/components/application_manager/include/application_manager/policies/policy_handler.h +++ b/src/components/application_manager/include/application_manager/policies/policy_handler.h @@ -102,11 +102,11 @@ class PolicyHandler : public PolicyHandlerInterface, #endif // EXTERNAL_PROPRIETARY_MODE virtual bool GetPriority(const std::string& policy_app_id, std::string* priority) const OVERRIDE; - void CheckPermissions(const PTString& app_id, - const PTString& hmi_level, - const PTString& rpc, - const RPCParams& rpc_params, - CheckPermissionResult& result) OVERRIDE; + virtual void CheckPermissions( + const application_manager::ApplicationSharedPtr app, + const PTString& rpc, + const RPCParams& rpc_params, + CheckPermissionResult& result) OVERRIDE; uint32_t GetNotificationsNumber(const std::string& priority) const OVERRIDE; virtual DeviceConsent GetUserConsentForDevice( @@ -193,25 +193,32 @@ class PolicyHandler : public PolicyHandlerInterface, void SetDeviceInfo(const std::string& device_id, const DeviceInfo& device_info) OVERRIDE; - /** - * @brief Store user-changed permissions consent to DB - * @param connection_key Connection key of application or 0, if permissions - * should be applied to all applications - * @param permissions User-changed group permissions consent - */ +/** + * @brief Store user-changed permissions consent to DB + * @param connection_key Connection key of application or 0, if permissions + * should be applied to all applications + * @param permissions User-changed group permissions consent + */ - /** - * @brief Processes permissions changes received from system via - * OnAppPermissionConsent notification - * @param connection_key Connection key of application, 0 if no key has been - * provided by notification - * @param permissions Structure containing group permissions changes - * @param ccs_status Structure containig customer connectivity settings - * changes - */ +/** + * @brief Processes permissions changes received from system via + * OnAppPermissionConsent notification + * @param connection_key Connection key of application, 0 if no key has been + * provided by notification + * @param permissions Structure containing group permissions changes + * @param external_consent_status Structure containig customer connectivity + * settings + * changes + */ +#ifdef EXTERNAL_PROPRIETARY_MODE + void OnAppPermissionConsent( + const uint32_t connection_key, + const PermissionConsent& permissions, + const ExternalConsentStatus& external_consent_status) OVERRIDE; +#else void OnAppPermissionConsent(const uint32_t connection_key, - const PermissionConsent& permissions, - const CCSStatus& ccs_status) FINAL; + const PermissionConsent& permissions) OVERRIDE; +#endif /** * @brief Get appropriate message parameters and send them with response @@ -255,13 +262,6 @@ class PolicyHandler : public PolicyHandlerInterface, const std::string& policy_app_id) OVERRIDE; /** - * @brief Collects currently registered applications ids linked to their - * device id - * @return Collection of device_id-to-app_id links - */ - ApplicationsLinks GetRegisteredLinks() const FINAL; - - /** * @brief Set parameters from OnSystemInfoChanged to policy table * @param language System language */ @@ -349,7 +349,9 @@ class PolicyHandler : public PolicyHandlerInterface, * @param application_id The policy aplication id. ** @return function that will notify update manager about new application */ - StatusNotifier AddApplication(const std::string& application_id) OVERRIDE; + StatusNotifier AddApplication( + const std::string& application_id, + const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) OVERRIDE; /** * Checks whether application is revoked @@ -442,6 +444,10 @@ class PolicyHandler : public PolicyHandlerInterface, void SetPolicyManager(utils::SharedPtr<PolicyManager> pm) { policy_manager_ = pm; } + + AppIds& last_used_app_ids() { + return last_used_app_ids_; + } #endif // BUILD_TESTS #ifdef ENABLE_SECURITY @@ -477,20 +483,29 @@ class PolicyHandler : public PolicyHandlerInterface, */ bool CheckStealFocus(const std::string& policy_app_id) const; - /** - * @brief Processes data received via OnAppPermissionChanged notification - * from. Being started asyncronously from AppPermissionDelegate class. - * Sets updated permissions and CCS for registered applications and - * applications which already have appropriate group assigned which related to - * devices already known by policy - * @param connection_key Connection key of application, 0 if no key has been - * provided within notification - * @param ccs_status Customer connectivity settings changes to process - * @param permissions Permissions changes to process - */ - void OnAppPermissionConsentInternal(const uint32_t connection_key, - const CCSStatus& ccs_status, - PermissionConsent& out_permissions) FINAL; +/** + * @brief Processes data received via OnAppPermissionChanged notification + * from. Being started asyncronously from AppPermissionDelegate class. + * Sets updated permissions and ExternalConsent for registered applications + * and + * applications which already have appropriate group assigned which related to + * devices already known by policy + * @param connection_key Connection key of application, 0 if no key has been + * provided within notification + * @param external_consent_status Customer connectivity settings changes to + * process + * @param permissions Permissions changes to process + */ +#ifdef EXTERNAL_PROPRIETARY_MODE + void OnAppPermissionConsentInternal( + const uint32_t connection_key, + const ExternalConsentStatus& external_consent_status, + PermissionConsent& out_permissions) OVERRIDE; +#else + void OnAppPermissionConsentInternal( + const uint32_t connection_key, + PermissionConsent& out_permissions) OVERRIDE; +#endif /** * @brief Sets days after epoch on successful policy update @@ -560,13 +575,7 @@ class PolicyHandler : public PolicyHandlerInterface, #endif // EXTERNAL_PROPRIETARY_MODE bool SaveSnapshot(const BinaryMessage& pt_string, std::string& snap_path); - /** - * @brief Collects currently registered applications ids linked to their - * device id - * @param out_links Collection of device_id-to-app_id links - */ - void GetRegisteredLinks(std::map<std::string, std::string>& out_links) const; - + private: static const std::string kLibrary; /** @@ -591,7 +600,7 @@ class PolicyHandler : public PolicyHandlerInterface, * device id * @param out_links Collection of device_id-to-app_id links */ - void GetRegisteredLinks(ApplicationsLinks& out_links) const; + void GetRegisteredLinks(std::map<std::string, std::string>& out_links) const; private: mutable sync_primitives::RWLock policy_manager_lock_; @@ -617,7 +626,7 @@ class PolicyHandler : public PolicyHandlerInterface, * consents to provide for HMI request and process response with possible * changes done by user */ - ApplicationsLinks app_to_device_link_; + std::map<std::string, std::string> app_to_device_link_; // Lock for app to device list sync_primitives::Lock app_to_device_link_lock_; diff --git a/src/components/application_manager/include/application_manager/smart_object_keys.h b/src/components/application_manager/include/application_manager/smart_object_keys.h index 7ea3a7a20e..38c1b1d9cc 100644 --- a/src/components/application_manager/include/application_manager/smart_object_keys.h +++ b/src/components/application_manager/include/application_manager/smart_object_keys.h @@ -329,7 +329,7 @@ extern const char* const auto_complete_text_supported; extern const char* const entity_type; extern const char* const entity_id; extern const char* const status; -extern const char* const ccs_status; +extern const char* const external_consent_status; extern const char* const consented_functions; extern const char* const source; } // namespace strings diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index 28c8a5677c..1febd05790 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -109,7 +109,7 @@ ApplicationManagerImpl::ApplicationManagerImpl( , media_manager_(NULL) , hmi_handler_(NULL) , connection_handler_(NULL) - , policy_handler_(policy_settings, *this) + , policy_handler_(new policy::PolicyHandler(policy_settings, *this)) , protocol_handler_(NULL) , request_ctrl_(am_settings) , hmi_so_factory_(NULL) @@ -980,10 +980,10 @@ mobile_apis::HMILevel::eType ApplicationManagerImpl::GetDefaultHmiLevel( LOG4CXX_AUTO_TRACE(logger_); HMILevel::eType default_hmi = HMILevel::HMI_NONE; - if (policy_handler_.PolicyEnabled()) { + if (GetPolicyHandler().PolicyEnabled()) { const std::string policy_app_id = application->policy_app_id(); std::string default_hmi_string = ""; - if (policy_handler_.GetDefaultHmi(policy_app_id, &default_hmi_string)) { + if (GetPolicyHandler().GetDefaultHmi(policy_app_id, &default_hmi_string)) { if ("BACKGROUND" == default_hmi_string) { default_hmi = HMILevel::HMI_BACKGROUND; } else if ("FULL" == default_hmi_string) { @@ -1409,11 +1409,11 @@ void ApplicationManagerImpl::SendMessageToMobile( } } } - const mobile_apis::Result::eType check_result = CheckPolicyPermissions( - app->policy_app_id(), app->hmi_level(), function_id, params); + const std::string string_functionID = + MessageHelper::StringifiedFunctionID(function_id); + const mobile_apis::Result::eType check_result = + CheckPolicyPermissions(app, string_functionID, params); if (mobile_apis::Result::SUCCESS != check_result) { - const std::string string_functionID = - MessageHelper::StringifiedFunctionID(function_id); LOG4CXX_WARN(logger_, "Function \"" << string_functionID << "\" (#" << function_id << ") not allowed by policy"); @@ -2779,32 +2779,20 @@ void ApplicationManagerImpl::Handle(const impl::AudioData message) { } mobile_apis::Result::eType ApplicationManagerImpl::CheckPolicyPermissions( - const std::string& policy_app_id, - mobile_apis::HMILevel::eType hmi_level, - mobile_apis::FunctionID::eType function_id, + const ApplicationSharedPtr app, + const std::string& function_id, const RPCParams& rpc_params, CommandParametersPermissions* params_permissions) { - LOG4CXX_AUTO_TRACE(logger_); + LOG4CXX_INFO(logger_, "CheckPolicyPermissions"); // TODO(AOleynik): Remove check of policy_enable, when this flag will be // unused in config file if (!GetPolicyHandler().PolicyEnabled()) { return mobile_apis::Result::SUCCESS; } - const std::string stringified_functionID = - MessageHelper::StringifiedFunctionID(function_id); - const std::string stringified_hmi_level = - MessageHelper::StringifiedHMILevel(hmi_level); - LOG4CXX_DEBUG(logger_, - "Checking permissions for " << policy_app_id << " in " - << stringified_hmi_level << " rpc " - << stringified_functionID); + DCHECK(app); policy::CheckPermissionResult result; - GetPolicyHandler().CheckPermissions(policy_app_id, - stringified_hmi_level, - stringified_functionID, - rpc_params, - result); + GetPolicyHandler().CheckPermissions(app, function_id, rpc_params, result); if (NULL != params_permissions) { params_permissions->allowed_params = result.list_of_allowed_params; @@ -2812,30 +2800,22 @@ mobile_apis::Result::eType ApplicationManagerImpl::CheckPolicyPermissions( params_permissions->undefined_params = result.list_of_undefined_params; } - if (hmi_level == mobile_apis::HMILevel::HMI_NONE && - function_id != mobile_apis::FunctionID::UnregisterAppInterfaceID) { - ApplicationSharedPtr app = application_by_policy_id(policy_app_id); - if (!app) { - LOG4CXX_ERROR(logger_, "No application for policy id " << policy_app_id); - return mobile_apis::Result::GENERIC_ERROR; - } + if (app->hmi_level() == mobile_apis::HMILevel::HMI_NONE && + function_id != MessageHelper::StringifiedFunctionID( + mobile_apis::FunctionID::UnregisterAppInterfaceID)) { if (result.hmi_level_permitted != policy::kRpcAllowed) { app->usage_report().RecordRpcSentInHMINone(); } } - const std::string log_msg = "Application: " + policy_app_id + ", RPC: " + - stringified_functionID + ", HMI status: " + - stringified_hmi_level; - +#ifdef ENABLE_LOG + const std::string log_msg = + "Application: " + app->policy_app_id() + ", RPC: " + function_id + + ", HMI status: " + MessageHelper::StringifiedHMILevel(app->hmi_level()); +#endif // ENABLE_LOG if (result.hmi_level_permitted != policy::kRpcAllowed) { LOG4CXX_WARN(logger_, "Request is blocked by policies. " << log_msg); - ApplicationSharedPtr app = application_by_policy_id(policy_app_id); - if (!app) { - LOG4CXX_ERROR(logger_, "No application for policy id " << policy_app_id); - return mobile_apis::Result::GENERIC_ERROR; - } app->usage_report().RecordPolicyRejectedRpcCall(); switch (result.hmi_level_permitted) { @@ -3190,7 +3170,7 @@ bool ApplicationManagerImpl::IsApplicationForbidden( policy::DeviceConsent ApplicationManagerImpl::GetUserConsentForDevice( const std::string& device_id) const { - return policy_handler_.GetUserConsentForDevice(device_id); + return GetPolicyHandler().GetUserConsentForDevice(device_id); } void ApplicationManagerImpl::OnWakeUp() { diff --git a/src/components/application_manager/src/commands/hmi/on_app_permission_consent_notification.cc b/src/components/application_manager/src/commands/hmi/on_app_permission_consent_notification.cc index 2219d508ff..2e408dcae0 100644 --- a/src/components/application_manager/src/commands/hmi/on_app_permission_consent_notification.cc +++ b/src/components/application_manager/src/commands/hmi/on_app_permission_consent_notification.cc @@ -40,6 +40,7 @@ #include <string> #include "policy/policy_types.h" #include "smart_objects/smart_object.h" +#include "utils/make_shared.h" namespace { @@ -75,19 +76,22 @@ struct PermissionsAppender policy::PermissionConsent& consents_; }; +#ifdef EXTERNAL_PROPRIETARY_MODE /** * @brief Converts SmartObject data to customer connectivity status item and * appends to collection */ -struct CCSStatusAppender +struct ExternalConsentStatusAppender : std::unary_function<void, const smart_objects::SmartArray::value_type&> { - CCSStatusAppender(policy::CCSStatus& ccs_status) : ccs_status_(ccs_status) {} + ExternalConsentStatusAppender( + policy::ExternalConsentStatus& external_consent_status) + : external_consent_status_(external_consent_status) {} void operator()(const smart_objects::SmartArray::value_type& item) const { using namespace policy; using namespace hmi_apis; using namespace application_manager; - CCSStatusItem status_item( + ExternalConsentStatusItem status_item( static_cast<uint32_t>(item[strings::entity_type].asUInt()), static_cast<uint32_t>(item[strings::entity_id].asUInt()), static_cast<Common_EntityStatus::eType>( @@ -95,13 +99,13 @@ struct CCSStatusAppender ? policy::kStatusOn : policy::kStatusOff); - ccs_status_.insert(status_item); + external_consent_status_.insert(status_item); } private: - policy::CCSStatus& ccs_status_; + policy::ExternalConsentStatus& external_consent_status_; }; - +#endif } // namespace namespace application_manager { @@ -122,15 +126,15 @@ void OnAppPermissionConsentNotification::Run() { policy::PermissionConsent permission_consent; - PermissionConsent permission_consent; + // If user defined group permissions for specific app + if (msg_params.keyExists(strings::app_id)) { + connection_key = msg_params[strings::app_id].asUInt(); + } + if (msg_params.keyExists(strings::consented_functions)) { - const SmartArray* user_consents = + const smart_objects::SmartArray* user_consent = msg_params[strings::consented_functions].asArray(); - if (msg_params.keyExists("consentedFunctions")) { - smart_objects::SmartArray* user_consent = - msg_params["consentedFunctions"].asArray(); - smart_objects::SmartArray::const_iterator it = user_consent->begin(); smart_objects::SmartArray::const_iterator it_end = user_consent->end(); for (; it != it_end; ++it) { @@ -150,17 +154,23 @@ void OnAppPermissionConsentNotification::Run() { permission_consent.consent_source = msg_params[strings::source].asString(); } - - CCSStatus ccs_status; - if (msg_params.keyExists(strings::ccs_status)) { - const SmartArray* system_ccs_status = - msg_params[strings::ccs_status].asArray(); - - application_manager_.GetPolicyHandler().OnAppPermissionConsent( - connection_key, permission_consent); +#ifdef EXTERNAL_PROPRIETARY_MODE + policy::ExternalConsentStatus external_consent_status; + if (msg_params.keyExists(strings::external_consent_status)) { + const utils::SharedPtr<smart_objects::SmartArray> + system_external_consent_status = + msg_params[strings::external_consent_status].asArray(); + ExternalConsentStatusAppender status_appender(external_consent_status); + std::for_each(system_external_consent_status->begin(), + system_external_consent_status->end(), + status_appender); } + application_manager_.GetPolicyHandler().OnAppPermissionConsent( + connection_key, permission_consent, external_consent_status); +#else + application_manager_.GetPolicyHandler().OnAppPermissionConsent( + connection_key, permission_consent); +#endif } - -} // namespace commands - +} // commands } // namespace application_manager diff --git a/src/components/application_manager/src/commands/mobile/register_app_interface_request.cc b/src/components/application_manager/src/commands/mobile/register_app_interface_request.cc index 035a1666f6..413aa1f669 100644 --- a/src/components/application_manager/src/commands/mobile/register_app_interface_request.cc +++ b/src/components/application_manager/src/commands/mobile/register_app_interface_request.cc @@ -45,6 +45,8 @@ #include "application_manager/app_launch/app_launch_ctrl.h" #include "application_manager/message_helper.h" #include "application_manager/resumption/resume_ctrl.h" +#include "application_manager/policies/policy_handler.h" +#include "config_profile/profile.h" #include "interfaces/MOBILE_API.h" #include "interfaces/generated_msg_version.h" @@ -140,6 +142,13 @@ struct CheckMissedTypes { std::string& log_; }; +class SmartArrayValueExtractor { + public: + AppHmiType operator()(const smart_objects::SmartObject& so) const { + return static_cast<AppHmiType>(so.asInt()); + } +}; + struct IsSameNickname { IsSameNickname(const custom_str::CustomString& app_id) : app_id_(app_id) {} bool operator()(const policy::StringArray::value_type& nickname) const { @@ -636,8 +645,21 @@ void RegisterAppInterfaceRequest::SendRegisterAppInterfaceResponseToMobile() { application->mac_address()); } - policy::StatusNotifier notify_upd_manager = - GetPolicyHandler().AddApplication(application->policy_app_id()); + AppHmiTypes hmi_types; + if ((*message_)[strings::msg_params].keyExists(strings::app_hmi_type)) { + smart_objects::SmartArray* hmi_types_ptr = + (*message_)[strings::msg_params][strings::app_hmi_type].asArray(); + DCHECK_OR_RETURN_VOID(hmi_types_ptr); + SmartArrayValueExtractor extractor; + if (hmi_types_ptr && 0 < hmi_types_ptr->size()) { + std::transform(hmi_types_ptr->begin(), + hmi_types_ptr->end(), + std::back_inserter(hmi_types), + extractor); + } + } + policy::StatusNotifier notify_upd_manager = GetPolicyHandler().AddApplication( + application->policy_app_id(), hmi_types); SendResponse(true, result_code, add_info.c_str(), &response_params); SendOnAppRegisteredNotificationToHMI( *(application.get()), resumption, need_restore_vr); @@ -899,7 +921,7 @@ mobile_apis::Result::eType RegisterAppInterfaceRequest::CheckWithPolicyData() { // If AppHMIType is not included in policy - allow any type if (!app_hmi_types.empty()) { if (message[strings::msg_params].keyExists(strings::app_hmi_type)) { - // If AppHMITypes are partially same, the system should allow those listed + // If AppHmiTypes are partially same, the system should allow those listed // in the policy table and send warning info on missed values smart_objects::SmartArray app_types = *(message[strings::msg_params][strings::app_hmi_type].asArray()); @@ -909,13 +931,13 @@ mobile_apis::Result::eType RegisterAppInterfaceRequest::CheckWithPolicyData() { std::for_each(app_types.begin(), app_types.end(), checker); if (!log.empty()) { response_info_ = - "Following AppHMITypes are not present in policy " + "Following AppHmiTypes are not present in policy " "table:" + log; result_checking_app_hmi_type_ = mobile_apis::Result::WARNINGS; } } - // Replace AppHMITypes in request with values allowed by policy table + // Replace AppHmiTypes in request with values allowed by policy table message[strings::msg_params][strings::app_hmi_type] = smart_objects::SmartObject(smart_objects::SmartType_Array); diff --git a/src/components/application_manager/src/message_helper/message_helper.cc b/src/components/application_manager/src/message_helper/message_helper.cc index 45d2de46a1..4926bcc03a 100644 --- a/src/components/application_manager/src/message_helper/message_helper.cc +++ b/src/components/application_manager/src/message_helper/message_helper.cc @@ -69,6 +69,8 @@ namespace { typedef std::map<std::string, hmi_apis::Common_AppPriority::eType> CommonAppPriorityMap; +typedef std::vector<policy::FunctionalGroupPermission> PermissionsList; + CommonAppPriorityMap app_priority_values = { {"NORMAL", hmi_apis::Common_AppPriority::NORMAL}, {"COMMUNICATION", hmi_apis::Common_AppPriority::COMMUNICATION}, @@ -124,32 +126,6 @@ struct GroupsAppender int32_t index_; }; -struct GroupsAppender - : std::unary_function<void, const PermissionsList::value_type&> { - GroupsAppender(smart_objects::SmartObject& groups) - : groups_(groups), index_(0) {} - - void operator()(const PermissionsList::value_type& item) { - using namespace smart_objects; - using namespace policy; - groups_[index_] = SmartObject(SmartType_Map); - - SmartObject& group = groups_[index_]; - group[strings::name] = item.group_alias; - group[strings::id] = item.group_id; - GroupConsent permission_state = item.state; - // If state undefined, 'allowed' parameter should be absent - if (kGroupUndefined != permission_state) { - group["allowed"] = kGroupAllowed == permission_state; - } - ++index_; - } - - private: - smart_objects::SmartObject& groups_; - int32_t index_; -}; - #ifdef EXTERNAL_PROPRIETARY_MODE struct ExternalConsentStatusAppender : std::unary_function<void, @@ -164,10 +140,10 @@ struct ExternalConsentStatusAppender status_[index_] = SmartObject(SmartType_Map); SmartObject& external_consent_status = status_[index_]; - external_consent_status["entityType"] = item.entity_type; - external_consent_status["entityID"] = item.entity_id; - external_consent_status["status"] = - 0 == strcasecmp("ON", item.entity_status.c_str()) + external_consent_status[strings::entity_type] = item.entity_type_; + external_consent_status[strings::entity_id] = item.entity_id_; + external_consent_status[strings::status] = + policy::kStatusOn == item.status_ ? static_cast<int32_t>(Common_EntityStatus::ON) : static_cast<int32_t>(Common_EntityStatus::OFF); ++index_; @@ -179,41 +155,39 @@ struct ExternalConsentStatusAppender }; #endif // EXTERNAL_PROPRIETARY_MODE -} // namespace +} // namespace std::pair<std::string, VehicleDataType> kVehicleDataInitializer[] = { - std::make_pair(strings::gps, VehicleDataType::GPS), - std::make_pair(strings::speed, VehicleDataType::SPEED), - std::make_pair(strings::rpm, VehicleDataType::RPM), - std::make_pair(strings::fuel_level, VehicleDataType::FUELLEVEL), - std::make_pair(strings::fuel_level_state, VehicleDataType::FUELLEVEL_STATE), - std::make_pair(strings::instant_fuel_consumption, - VehicleDataType::FUELCONSUMPTION), - std::make_pair(strings::external_temp, VehicleDataType::EXTERNTEMP), - std::make_pair(strings::vin, VehicleDataType::VIN), - std::make_pair(strings::prndl, VehicleDataType::PRNDL), - std::make_pair(strings::tire_pressure, VehicleDataType::TIREPRESSURE), - std::make_pair(strings::odometer, VehicleDataType::ODOMETER), - std::make_pair(strings::belt_status, VehicleDataType::BELTSTATUS), - std::make_pair(strings::body_information, VehicleDataType::BODYINFO), - std::make_pair(strings::device_status, VehicleDataType::DEVICESTATUS), - std::make_pair(strings::driver_braking, VehicleDataType::BRAKING), - std::make_pair(strings::wiper_status, VehicleDataType::WIPERSTATUS), - std::make_pair(strings::head_lamp_status, VehicleDataType::HEADLAMPSTATUS), - std::make_pair(strings::e_call_info, VehicleDataType::ECALLINFO), - std::make_pair(strings::airbag_status, VehicleDataType::AIRBAGSTATUS), - std::make_pair(strings::emergency_event, VehicleDataType::EMERGENCYEVENT), - std::make_pair(strings::cluster_mode_status, - VehicleDataType::CLUSTERMODESTATUS), - std::make_pair(strings::my_key, VehicleDataType::MYKEY), + std::make_pair(strings::gps, GPS), + std::make_pair(strings::speed, SPEED), + std::make_pair(strings::rpm, RPM), + std::make_pair(strings::fuel_level, FUELLEVEL), + std::make_pair(strings::fuel_level_state, FUELLEVEL_STATE), + std::make_pair(strings::instant_fuel_consumption, FUELCONSUMPTION), + std::make_pair(strings::external_temp, EXTERNTEMP), + std::make_pair(strings::vin, VIN), + std::make_pair(strings::prndl, PRNDL), + std::make_pair(strings::tire_pressure, TIREPRESSURE), + std::make_pair(strings::odometer, ODOMETER), + std::make_pair(strings::belt_status, BELTSTATUS), + std::make_pair(strings::body_information, BODYINFO), + std::make_pair(strings::device_status, DEVICESTATUS), + std::make_pair(strings::driver_braking, BRAKING), + std::make_pair(strings::wiper_status, WIPERSTATUS), + std::make_pair(strings::head_lamp_status, HEADLAMPSTATUS), + std::make_pair(strings::e_call_info, ECALLINFO), + std::make_pair(strings::airbag_status, AIRBAGSTATUS), + std::make_pair(strings::emergency_event, EMERGENCYEVENT), + std::make_pair(strings::cluster_mode_status, CLUSTERMODESTATUS), + std::make_pair(strings::my_key, MYKEY), /* NOT DEFINED in mobile API - std::make_pair(strings::gps, VehicleDataType::BATTVOLTAGE), + std::make_pair(strings::gps, + BATTVOLTAGE), */ - std::make_pair(strings::engine_torque, VehicleDataType::ENGINETORQUE), - std::make_pair(strings::acc_pedal_pos, VehicleDataType::ACCPEDAL), - std::make_pair(strings::steering_wheel_angle, - VehicleDataType::STEERINGWHEEL), + std::make_pair(strings::engine_torque, ENGINETORQUE), + std::make_pair(strings::acc_pedal_pos, ACCPEDAL), + std::make_pair(strings::steering_wheel_angle, STEERINGWHEEL), }; const VehicleData MessageHelper::vehicle_data_( @@ -281,17 +255,6 @@ const uint32_t MessageHelper::GetPriorityCode(const std::string& priority) { return static_cast<uint32_t>(hmi_apis::Common_AppPriority::INVALID_ENUM); } -std::string MessageHelper::CommonLanguageToString( - hmi_apis::Common_Language::eType language) { - using namespace NsSmartDeviceLink::NsSmartObjects; - const char* str = 0; - if (EnumConversionHelper<hmi_apis::Common_Language::eType>::EnumToCString( - language, &str)) { - return str ? str : ""; - } - return std::string(); -} - hmi_apis::Common_Language::eType MessageHelper::CommonLanguageFromString( const std::string& language) { using namespace NsSmartDeviceLink::NsSmartObjects; @@ -303,6 +266,26 @@ hmi_apis::Common_Language::eType MessageHelper::CommonLanguageFromString( return hmi_apis::Common_Language::INVALID_ENUM; } +std::string MessageHelper::GetDeviceMacAddressForHandle( + const uint32_t device_handle, const ApplicationManager& app_mngr) { + std::string device_mac_address = ""; + app_mngr.connection_handler().get_session_observer().GetDataOnDeviceID( + device_handle, NULL, NULL, &device_mac_address); + LOG4CXX_DEBUG(logger_, "result : " << device_handle); + return device_mac_address; +} + +std::string MessageHelper::CommonLanguageToString( + hmi_apis::Common_Language::eType language) { + using namespace NsSmartDeviceLink::NsSmartObjects; + const char* str = 0; + if (EnumConversionHelper<hmi_apis::Common_Language::eType>::EnumToCString( + language, &str)) { + return str ? str : ""; + } + return std::string(); +} + smart_objects::SmartObjectSPtr MessageHelper::CreateRequestObject( const uint32_t correlation_id) { using namespace smart_objects; @@ -1666,46 +1649,79 @@ void MessageHelper::SendGetUserFriendlyMessageResponse( app_mngr.ManageHMICommand(message); } +#ifdef EXTERNAL_PROPRIETARY_MODE void MessageHelper::SendGetListOfPermissionsResponse( const std::vector<policy::FunctionalGroupPermission>& permissions, - const uint32_t correlation_id, + const policy::ExternalConsentStatus& external_consent_status, + uint32_t correlation_id, ApplicationManager& app_mngr) { - smart_objects::SmartObject message(smart_objects::SmartType_Map); + using namespace smart_objects; + using namespace hmi_apis; - message[strings::params][strings::function_id] = - hmi_apis::FunctionID::SDL_GetListOfPermissions; - message[strings::params][strings::message_type] = MessageType::kResponse; - message[strings::params][strings::correlation_id] = correlation_id; - message[strings::params][hmi_response::code] = 0; + SmartObjectSPtr message = utils::MakeShared<SmartObject>(SmartType_Map); + DCHECK_OR_RETURN_VOID(message); + + SmartObject& params = (*message)[strings::params]; + + params[strings::function_id] = FunctionID::SDL_GetListOfPermissions; + params[strings::message_type] = MessageType::kResponse; + params[strings::correlation_id] = correlation_id; + params[hmi_response::code] = static_cast<int32_t>(Common_Result::SUCCESS); + + SmartObject& msg_params = (*message)[strings::msg_params]; const std::string allowed_functions = "allowedFunctions"; - message[strings::msg_params][allowed_functions] = - smart_objects::SmartObject(smart_objects::SmartType_Array); + msg_params[allowed_functions] = SmartObject(SmartType_Array); - smart_objects::SmartObject& allowed_functions_array = - message[strings::msg_params][allowed_functions]; + SmartObject& allowed_functions_array = msg_params[allowed_functions]; - std::vector<policy::FunctionalGroupPermission>::const_iterator it = - permissions.begin(); - std::vector<policy::FunctionalGroupPermission>::const_iterator it_end = - permissions.end(); - for (uint32_t index = 0; it != it_end; ++it, ++index) { - allowed_functions_array[index] = - smart_objects::SmartObject(smart_objects::SmartType_Map); + GroupsAppender groups_appender(allowed_functions_array); + std::for_each(permissions.begin(), permissions.end(), groups_appender); - smart_objects::SmartObject& item = allowed_functions_array[index]; - item[strings::name] = (*it).group_alias; - item[strings::id] = (*it).group_id; - policy::GroupConsent permission_state = (*it).state; - // If state undefined, 'allowed' parameter should be absent - if (policy::kGroupUndefined != permission_state) { - item["allowed"] = policy::kGroupAllowed == permission_state; - } - } + const std::string external_consent_status_key = "externalConsentStatus"; + msg_params[external_consent_status_key] = SmartObject(SmartType_Array); - app_mngr.ManageHMICommand( - utils::MakeShared<smart_objects::SmartObject>(message)); + SmartObject& external_consent_status_array = + msg_params[external_consent_status_key]; + + ExternalConsentStatusAppender external_consent_status_appender( + external_consent_status_array); + std::for_each(external_consent_status.begin(), + external_consent_status.end(), + external_consent_status_appender); + + app_mngr.ManageHMICommand(message); +} +#else +void MessageHelper::SendGetListOfPermissionsResponse( + const std::vector<policy::FunctionalGroupPermission>& permissions, + uint32_t correlation_id, + ApplicationManager& app_mngr) { + using namespace smart_objects; + using namespace hmi_apis; + + SmartObjectSPtr message = utils::MakeShared<SmartObject>(SmartType_Map); + DCHECK_OR_RETURN_VOID(message); + + SmartObject& params = (*message)[strings::params]; + + params[strings::function_id] = FunctionID::SDL_GetListOfPermissions; + params[strings::message_type] = MessageType::kResponse; + params[strings::correlation_id] = correlation_id; + params[hmi_response::code] = static_cast<int32_t>(Common_Result::SUCCESS); + + SmartObject& msg_params = (*message)[strings::msg_params]; + + const std::string allowed_functions = "allowedFunctions"; + msg_params[allowed_functions] = SmartObject(SmartType_Array); + + SmartObject& allowed_functions_array = msg_params[allowed_functions]; + + GroupsAppender groups_appender(allowed_functions_array); + std::for_each(permissions.begin(), permissions.end(), groups_appender); + app_mngr.ManageHMICommand(message); } +#endif // EXTERNAL_PROPRIETARY_MODE smart_objects::SmartObjectSPtr MessageHelper::CreateNegativeResponse( uint32_t connection_key, diff --git a/src/components/application_manager/src/policies/delegates/app_permission_delegate.cc b/src/components/application_manager/src/policies/delegates/app_permission_delegate.cc index 5ec184e563..871e96442a 100644 --- a/src/components/application_manager/src/policies/delegates/app_permission_delegate.cc +++ b/src/components/application_manager/src/policies/delegates/app_permission_delegate.cc @@ -36,18 +36,35 @@ namespace policy { CREATE_LOGGERPTR_GLOBAL(logger_, "PolicyHandler") +#ifdef EXTERNAL_PROPRIETARY_MODE AppPermissionDelegate::AppPermissionDelegate( const uint32_t connection_key, const PermissionConsent& permissions, + const ExternalConsentStatus& external_consent_status, policy::PolicyHandlerInterface& policy_handler) : connection_key_(connection_key) , permissions_(permissions) + , external_consent_status_(external_consent_status) , policy_handler_(policy_handler) {} +#else +AppPermissionDelegate::AppPermissionDelegate( + const uint32_t connection_key, + const PermissionConsent& permissions, + policy::PolicyHandlerInterface& policy_handler) + : connection_key_(connection_key) + , permissions_(permissions) + , policy_handler_(policy_handler) {} +#endif void AppPermissionDelegate::threadMain() { LOG4CXX_AUTO_TRACE(logger_); + +#ifdef EXTERNAL_PROPRIETARY_MODE policy_handler_.OnAppPermissionConsentInternal( - connection_key_, ccs_status_, permissions_); + connection_key_, external_consent_status_, permissions_); +#else + policy_handler_.OnAppPermissionConsentInternal(connection_key_, permissions_); +#endif } void AppPermissionDelegate::exitThreadMain() { diff --git a/src/components/application_manager/src/policies/policy_handler.cc b/src/components/application_manager/src/policies/policy_handler.cc index 6c12edfbf4..d2a60ab240 100644 --- a/src/components/application_manager/src/policies/policy_handler.cc +++ b/src/components/application_manager/src/policies/policy_handler.cc @@ -37,7 +37,6 @@ #include <functional> #include <utility> #include "application_manager/smart_object_keys.h" - #include "application_manager/policies/delegates/app_permission_delegate.h" #include "policy/status.h" #include "application_manager/application_manager.h" @@ -211,43 +210,6 @@ struct SDLAllowedNotification { */ struct LinksCollector { LinksCollector(const ApplicationManager& application_manager, - ApplicationsLinks& out_app_to_device_link) - : application_manager_(application_manager) - , out_app_to_device_link_(out_app_to_device_link) { - out_app_to_device_link_.clear(); - } - - void operator()(const ApplicationSharedPtr& app) { - if (!app.valid()) { - LOG4CXX_WARN(logger_, - "Invalid pointer to application was passed." - "Skip current application."); - return; - } - DeviceParams device_params = GetDeviceParams( - app->device(), - application_manager_.connection_handler().get_session_observer()); - const std::string app_id = app->policy_app_id(); - if (device_params.device_mac_address.empty()) { - LOG4CXX_WARN(logger_, - "Couldn't find device, which hosts application " << app_id); - return; - } - out_app_to_device_link_.insert( - std::make_pair(device_params.device_mac_address, app_id)); - } - - private: - const ApplicationManager& application_manager_; - ApplicationsLinks& out_app_to_device_link_; -}; - -/** - * @brief Gets from system list of currently registered applications and - * create collection of links device-to-application - */ -struct LinksCollector { - LinksCollector(const ApplicationManager& application_manager, std::map<std::string, std::string>& out_app_to_device_link) : application_manager_(application_manager) , out_app_to_device_link_(out_app_to_device_link) { @@ -453,12 +415,24 @@ uint32_t PolicyHandler::GetAppIdForSending() const { return ChooseRandomAppForPolicyUpdate(apps_with_none_level); } +#ifdef EXTERNAL_PROPRIETARY_MODE +void PolicyHandler::OnAppPermissionConsent( + const uint32_t connection_key, + const PermissionConsent& permissions, + const ExternalConsentStatus& external_consent_status) { + LOG4CXX_AUTO_TRACE(logger_); + AsyncRun(new AppPermissionDelegate( + connection_key, permissions, external_consent_status, *this)); +} +#else void PolicyHandler::OnAppPermissionConsent( const uint32_t connection_key, const PermissionConsent& permissions) { LOG4CXX_AUTO_TRACE(logger_); AsyncRun(new AppPermissionDelegate(connection_key, permissions, *this)); } +#endif + void PolicyHandler::OnDeviceConsentChanged(const std::string& device_id, const bool is_allowed) { POLICY_LIB_CHECK_VOID(); @@ -478,8 +452,10 @@ void PolicyHandler::OnDeviceConsentChanged(const std::string& device_id, if (device_handle == (*it_app_list).get()->device()) { const std::string policy_app_id = (*it_app_list)->policy_app_id(); - // If app has predata policy, which is assigned without device consent or - // with negative data consent, there no necessity to change smth and send + // If app has predata policy, which is assigned without device consent + // or + // with negative data consent, there no necessity to change smth and + // send // notification for such app in case of device consent is not allowed if (policy_manager_->IsPredataPolicy(policy_app_id) && !is_allowed) { continue; @@ -533,9 +509,10 @@ struct SmartObjectToInt { }; StatusNotifier PolicyHandler::AddApplication( - const std::string& application_id) { + const std::string& application_id, + const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) { POLICY_LIB_CHECK(utils::MakeShared<utils::CallNothing>()); - return policy_manager_->AddApplication(application_id); + return policy_manager_->AddApplication(application_id, hmi_types); } void PolicyHandler::AddDevice(const std::string& device_id, @@ -552,11 +529,11 @@ void PolicyHandler::SetDeviceInfo(const std::string& device_id, policy_manager_->SetDeviceInfo(device_id, device_info); } +#ifdef EXTERNAL_PROPRIETARY_MODE void PolicyHandler::OnAppPermissionConsentInternal( const uint32_t connection_key, - const CCSStatus& ccs_status, + const ExternalConsentStatus& external_consent_status, PermissionConsent& out_permissions) { - LOG4CXX_AUTO_TRACE(logger_); POLICY_LIB_CHECK_VOID(); if (connection_key) { @@ -576,7 +553,8 @@ void PolicyHandler::OnAppPermissionConsentInternal( } } else if (!app_to_device_link_.empty()) { sync_primitives::AutoLock lock(app_to_device_link_lock_); - ApplicationsLinks::const_iterator it = app_to_device_link_.begin(); + std::map<std::string, std::string>::const_iterator it = + app_to_device_link_.begin(); for (; app_to_device_link_.end() != it; ++it) { ApplicationSharedPtr app = application_manager_.application_by_policy_id(it->second); @@ -611,11 +589,70 @@ void PolicyHandler::OnAppPermissionConsentInternal( "There are no applications previously stored for " "setting common permissions."); } + if (!policy_manager_->SetExternalConsentStatus(external_consent_status)) { + LOG4CXX_WARN(logger_, "ExternalConsent status has not been set!"); + } +} +#else +void PolicyHandler::OnAppPermissionConsentInternal( + const uint32_t connection_key, PermissionConsent& out_permissions) { + POLICY_LIB_CHECK_VOID(); + + if (connection_key) { + ApplicationSharedPtr app = application_manager_.application(connection_key); + + if (app.valid()) { + out_permissions.policy_app_id = app->policy_app_id(); + DeviceParams device_params = GetDeviceParams( + app->device(), + application_manager_.connection_handler().get_session_observer()); + + out_permissions.device_id = device_params.device_mac_address; + } + + if (!out_permissions.policy_app_id.empty()) { + policy_manager_->SetUserConsentForApp(out_permissions); + } + } else if (!app_to_device_link_.empty()) { + sync_primitives::AutoLock lock(app_to_device_link_lock_); + std::map<std::string, std::string>::const_iterator it = + app_to_device_link_.begin(); + for (; app_to_device_link_.end() != it; ++it) { + ApplicationSharedPtr app = + application_manager_.application_by_policy_id(it->second); + + // If list of apps sent to HMI for user consents is not the same as + // current, + // permissions should be set only for coincident to registered apps + if (!app.valid()) { + LOG4CXX_WARN(logger_, + "Invalid pointer to application was passed." + "Permissions setting skipped."); + continue; + } - if (!policy_manager_->SetCCSStatus(ccs_status)) { - LOG4CXX_WARN(logger_, "CCS status has not been set!"); + DeviceParams device_params = GetDeviceParams( + app->device(), + application_manager_.connection_handler().get_session_observer()); + + if (device_params.device_mac_address != it->first) { + LOG4CXX_WARN(logger_, + "Device_id of application is changed." + "Permissions setting skipped."); + continue; + } + + out_permissions.policy_app_id = it->second; + out_permissions.device_id = it->first; + policy_manager_->SetUserConsentForApp(out_permissions); + } + } else { + LOG4CXX_WARN(logger_, + "There are no applications previously stored for " + "setting common permissions."); } } +#endif void policy::PolicyHandler::SetDaysAfterEpoch() { POLICY_LIB_CHECK_VOID(); @@ -655,7 +692,8 @@ void PolicyHandler::OnGetUserFriendlyMessage( result, correlation_id, application_manager_); } -void PolicyHandler::GetRegisteredLinks(ApplicationsLinks& out_links) const { +void PolicyHandler::GetRegisteredLinks( + std::map<std::string, std::string>& out_links) const { DataAccessor<ApplicationSet> accessor = application_manager_.applications(); ApplicationSetConstIt it_app = accessor.GetData().begin(); ApplicationSetConstIt it_app_end = accessor.GetData().end(); @@ -667,7 +705,7 @@ void PolicyHandler::GetRegisteredLinks(ApplicationsLinks& out_links) const { std::vector<policy::FunctionalGroupPermission> PolicyHandler::CollectRegisteredAppsPermissions() { LOG4CXX_AUTO_TRACE(logger_); - POLICY_LIB_CHECK_VOID(); + POLICY_LIB_CHECK(std::vector<policy::FunctionalGroupPermission>()); // If no specific app was passed, get permissions for all currently registered // applications sync_primitives::AutoLock lock(app_to_device_link_lock_); @@ -676,59 +714,75 @@ PolicyHandler::CollectRegisteredAppsPermissions() { PermissionsConsolidator consolidator; std::vector<policy::FunctionalGroupPermission> group_permissions; - ApplicationsLinks::const_iterator it = app_to_device_link_.begin(); + std::map<std::string, std::string>::const_iterator it = + app_to_device_link_.begin(); for (; it != app_to_device_link_.end(); ++it) { policy_manager_->GetUserConsentForApp( it->first, it->second, group_permissions); consolidator.Consolidate(group_permissions); } - + return consolidator.GetConsolidatedPermissions(); +} +std::vector<FunctionalGroupPermission> PolicyHandler::CollectAppPermissions( + const uint32_t connection_key) { // Single app only ApplicationSharedPtr app = application_manager_.application(connection_key); + std::vector<FunctionalGroupPermission> group_permissions; - if (!app.valid()) { + if (NULL == app.get() || !app.valid()) { LOG4CXX_WARN(logger_, "Connection key '" << connection_key << "' " "not found within registered applications."); - return; + + return group_permissions; } DeviceParams device_params = GetDeviceParams( app->device(), application_manager_.connection_handler().get_session_observer()); - std::vector<FunctionalGroupPermission> group_permissions; if (device_params.device_mac_address.empty()) { LOG4CXX_WARN(logger_, "Couldn't find device, which hosts application."); - } else if (!app) { - LOG4CXX_WARN(logger_, "Couldn't find application to get permissions."); - } else { - policy_manager_->GetUserConsentForApp(device_params.device_mac_address, - app->policy_app_id(), - group_permissions); - - MessageHelper::SendGetListOfPermissionsResponse( - group_permissions, correlation_id, application_manager_); + return group_permissions; } + + policy_manager_->GetUserConsentForApp(device_params.device_mac_address, + app->policy_app_id(), + group_permissions); + + return group_permissions; } -void PolicyHandler::LinkAppsToDevice() { - sync_primitives::AutoLock lock(app_to_device_link_lock_); - LinkAppToDevice linker(app_to_device_link_, application_manager_); - LOG4CXX_DEBUG(logger_, "add links to app. no specific app was passed"); - { - const ApplicationSet& accessor = - application_manager_.applications().GetData(); - if (accessor.empty()) { - LOG4CXX_WARN(logger_, - "application_manager doesn't have any applications"); - } else { - // Add all currently registered applications - std::for_each(accessor.begin(), accessor.end(), linker); - } +void PolicyHandler::OnGetListOfPermissions(const uint32_t connection_key, + const uint32_t correlation_id) { + LOG4CXX_AUTO_TRACE(logger_); + POLICY_LIB_CHECK_VOID(); + + application_manager::ApplicationSharedPtr app = + application_manager_.application(connection_key); + const bool is_app_registered = NULL != app.get(); + const bool is_connection_key_valid = is_app_registered && connection_key; + + const std::vector<policy::FunctionalGroupPermission> permissions = + is_connection_key_valid ? CollectAppPermissions(connection_key) + : CollectRegisteredAppsPermissions(); + + if (permissions.empty() && is_connection_key_valid) { + LOG4CXX_ERROR(logger_, + "No permissions found for application with connection key:" + << connection_key); + return; } + + MessageHelper::SendGetListOfPermissionsResponse( + permissions, +#ifdef EXTERNAL_PROPRIETARY_MODE + policy_manager_->GetExternalConsentStatus(), +#endif // EXTERNAL_PROPRIETARY_MODE + correlation_id, + application_manager_); } bool PolicyHandler::IsAppSuitableForPolicyUpdate( @@ -821,12 +875,6 @@ std::string PolicyHandler::OnCurrentDeviceIdUpdateRequired( return device_params.device_mac_address; } -ApplicationsLinks PolicyHandler::GetRegisteredLinks() const { - ApplicationsLinks links; - GetRegisteredLinks(links); - return links; -} - void PolicyHandler::OnSystemInfoChanged(const std::string& language) { LOG4CXX_AUTO_TRACE(logger_); POLICY_LIB_CHECK_VOID(); @@ -967,11 +1015,18 @@ bool PolicyHandler::SendMessageToSDK(const BinaryMessage& pt_string, LOG4CXX_AUTO_TRACE(logger_); POLICY_LIB_CHECK(false); - uint32_t app_id = GetAppIdForSending(); + ApplicationSharedPtr app; + uint32_t app_id = 0; + if (last_used_app_ids_.empty()) { + LOG4CXX_WARN(logger_, "last_used_app_ids_ is empty"); + return false; + } else { + app_id = last_used_app_ids_.back(); - ApplicationSharedPtr app = application_manager_.application(app_id); + app = application_manager_.application(app_id); + } - if (!app.valid()) { + if (!app) { LOG4CXX_WARN(logger_, "There is no registered application with " "connection key '" @@ -1439,15 +1494,28 @@ bool PolicyHandler::GetPriority(const std::string& policy_app_id, return policy_manager_->GetPriority(policy_app_id, priority); } -void PolicyHandler::CheckPermissions(const PTString& app_id, - const PTString& hmi_level, - const PTString& rpc, - const RPCParams& rpc_params, - CheckPermissionResult& result) { +void PolicyHandler::CheckPermissions( + const application_manager::ApplicationSharedPtr app, + const PTString& rpc, + const RPCParams& rpc_params, + CheckPermissionResult& result) { POLICY_LIB_CHECK_VOID(); - policy_manager_->CheckPermissions(app_id, hmi_level, rpc, rpc_params, result); + const std::string hmi_level = + MessageHelper::StringifiedHMILevel(app->hmi_level()); + const std::string device_id = MessageHelper::GetDeviceMacAddressForHandle( + app->device(), application_manager_); + LOG4CXX_INFO(logger_, + "Checking permissions for " << app->policy_app_id() << " in " + << hmi_level << " on device " + << device_id << " rpc " << rpc); +#ifdef EXTERNAL_PROPRIETARY_MODE + policy_manager_->CheckPermissions( + app->policy_app_id(), hmi_level, rpc, rpc_params, result); +#else // EXTERNAL_PROPRIETARY_MODE + policy_manager_->CheckPermissions( + device_id, app->policy_app_id(), hmi_level, rpc, rpc_params, result); +#endif // EXTERNAL_PROPRIETARY_MODE } - uint32_t PolicyHandler::GetNotificationsNumber( const std::string& priority) const { POLICY_LIB_CHECK(0); diff --git a/src/components/application_manager/src/smart_object_keys.cc b/src/components/application_manager/src/smart_object_keys.cc index 9ab79791a5..dbfd4c73f4 100644 --- a/src/components/application_manager/src/smart_object_keys.cc +++ b/src/components/application_manager/src/smart_object_keys.cc @@ -290,7 +290,7 @@ const char* const auto_complete_text_supported = "autoCompleteTextSupported"; const char* const entity_type = "entityType"; const char* const entity_id = "entityID"; const char* const status = "status"; -const char* const ccs_status = "ccsStatus"; +const char* const external_consent_status = "ExternalConsentStatus"; const char* const consented_functions = "consentedFunctions"; const char* const source = "source"; } // namespace strings diff --git a/src/components/application_manager/test/commands/hmi/hmi_notifications/hmi_notifications_test.cc b/src/components/application_manager/test/commands/hmi/hmi_notifications/hmi_notifications_test.cc index f3cca144b8..ecdb698c56 100644 --- a/src/components/application_manager/test/commands/hmi/hmi_notifications/hmi_notifications_test.cc +++ b/src/components/application_manager/test/commands/hmi/hmi_notifications/hmi_notifications_test.cc @@ -34,7 +34,80 @@ #include <string> #include <vector> #include "gtest/gtest.h" -#include "commands/command_request_test.h" +#include "application_manager/commands/commands_test.h" + +#include "application_manager/commands/hmi/on_button_event_notification.h" +#include "application_manager/commands/hmi/on_navi_tbt_client_state_notification.h" +#include "application_manager/commands/hmi/on_navi_way_point_change_notification.h" +#include "application_manager/commands/hmi/on_ui_command_notification.h" +#include "application_manager/commands/hmi/on_ui_keyboard_input_notification.h" +#include "application_manager/commands/hmi/on_ui_touch_event_notification.h" +#include "application_manager/commands/hmi/on_vi_acc_pedal_position_notification.h" +#include "application_manager/commands/hmi/on_vi_belt_status_notification.h" +#include "application_manager/commands/hmi/on_vi_body_information_notification.h" +#include "application_manager/commands/hmi/on_vi_device_status_notification.h" +#include "application_manager/commands/hmi/on_vi_driver_braking_notification.h" +#include "application_manager/commands/hmi/on_vi_engine_torque_notification.h" +#include "application_manager/commands/hmi/on_vi_external_temperature_notification.h" +#include "application_manager/commands/hmi/on_vi_fuel_level_notification.h" +#include "application_manager/commands/hmi/on_vi_fuel_level_state_notification.h" +#include "application_manager/commands/hmi/on_vi_gps_data_notification.h" +#include "application_manager/commands/hmi/on_vi_head_lamp_status_notification.h" +#include "application_manager/commands/hmi/on_vi_instant_fuel_consumption_notification.h" +#include "application_manager/commands/hmi/on_vi_my_key_notification.h" +#include "application_manager/commands/hmi/on_vi_odometer_notification.h" +#include "application_manager/commands/hmi/on_vi_prndl_notification.h" +#include "application_manager/commands/hmi/on_vi_rpm_notification.h" +#include "application_manager/commands/hmi/on_vi_speed_notification.h" +#include "application_manager/commands/hmi/on_vi_steering_wheel_angle_notification.h" +#include "application_manager/commands/hmi/on_vi_tire_pressure_notification.h" +#include "application_manager/commands/hmi/on_vi_vehicle_data_notification.h" +#include "application_manager/commands/hmi/on_vi_vin_notification.h" +#include "application_manager/commands/hmi/on_vi_wiper_status_notification.h" +#include "application_manager/commands/hmi/on_app_permission_changed_notification.h" +#include "application_manager/commands/hmi/on_app_registered_notification.h" +#include "application_manager/commands/hmi/on_audio_data_streaming_notification.h" +#include "application_manager/commands/hmi/on_button_subscription_notification.h" +#include "application_manager/commands/hmi/on_file_removed_notification.h" +#include "application_manager/commands/hmi/on_put_file_notification.h" +#include "application_manager/commands/hmi/on_resume_audio_source_notification.h" +#include "application_manager/commands/hmi/on_sdl_close_notification.h" +#include "application_manager/commands/hmi/on_sdl_consent_needed_notification.h" +#include "application_manager/commands/hmi/on_sdl_persistence_complete_notification.h" +#include "application_manager/commands/hmi/on_status_update_notification.h" +#include "application_manager/commands/hmi/on_video_data_streaming_notification.h" +#include "application_manager/commands/hmi/on_record_start_notification.h" +#include "application_manager/commands/hmi/on_app_activated_notification.h" +#include "application_manager/commands/hmi/on_app_deactivated_notification.h" +#include "application_manager/commands/hmi/on_app_unregistered_notification.h" +#include "application_manager/commands/hmi/on_button_press_notification.h" +#include "application_manager/commands/hmi/on_event_changed_notification.h" +#include "application_manager/commands/hmi/on_ready_notification.h" +#include "application_manager/commands/hmi/on_tts_reset_timeout_notification.h" +#include "application_manager/commands/hmi/on_tts_started_notification.h" +#include "application_manager/commands/hmi/on_tts_stopped_notification.h" +#include "application_manager/commands/hmi/on_ui_reset_timeout_notification.h" +#include "application_manager/commands/hmi/on_vr_started_notification.h" +#include "application_manager/commands/hmi/on_vr_stopped_notification.h" +#include "application_manager/commands/hmi/on_app_permission_consent_notification.h" +#include "application_manager/commands/hmi/on_ignition_cycle_over_notification.h" +#include "application_manager/commands/hmi/on_policy_update.h" +#include "application_manager/commands/hmi/on_received_policy_update.h" +#include "application_manager/commands/hmi/on_system_error_notification.h" +#include "application_manager/commands/hmi/on_system_info_changed_notification.h" +#include "application_manager/commands/hmi/on_allow_sdl_functionality_notification.h" +#include "application_manager/commands/hmi/on_device_state_changed_notification.h" +#include "application_manager/commands/hmi/on_exit_all_applications_notification.h" +#include "application_manager/commands/hmi/on_exit_application_notification.h" +#include "application_manager/commands/hmi/on_vr_command_notification.h" +#include "application_manager/commands/hmi/on_vr_language_change_notification.h" +#include "application_manager/commands/hmi/on_start_device_discovery.h" +#include "application_manager/commands/hmi/on_device_chosen_notification.h" +#include "application_manager/commands/hmi/on_system_context_notification.h" +#include "application_manager/commands/hmi/on_system_request_notification.h" +#include "application_manager/commands/hmi/on_tts_language_change_notification.h" +#include "application_manager/commands/hmi/on_ui_language_change_notification.h" +#include "application_manager/commands/hmi/on_driver_distraction_notification.h" #include "utils/lock.h" #include "utils/data_accessor.h" @@ -43,7 +116,6 @@ #include "utils/make_shared.h" #include "utils/file_system.h" #include "smart_objects/smart_object.h" -#include "interfaces/HMI_API.h" #include "application_manager/smart_object_keys.h" #include "application_manager/mock_application_manager.h" #include "application_manager/mock_state_controller.h" @@ -55,85 +127,13 @@ #include "connection_handler/mock_connection_handler.h" #include "connection_handler/mock_connection_handler_settings.h" #include "test/application_manager/mock_application_manager_settings.h" -#include "application_manager/mock_policy_handler_interface.h" +#include "application_manager/policies/mock_policy_handler_interface.h" #include "application_manager/mock_message_helper.h" +#include "protocol_handler/mock_session_observer.h" -#ifdef HMI_DBUS_API -#include "hmi/on_vi_acc_pedal_position_notification.h" -#include "hmi/on_vi_belt_status_notification.h" -#include "hmi/on_vi_body_information_notification.h" -#include "hmi/on_vi_device_status_notification.h" -#include "hmi/on_vi_driver_braking_notification.h" -#include "hmi/on_vi_engine_torque_notification.h" -#include "hmi/on_vi_external_temperature_notification.h" -#include "hmi/on_vi_fuel_level_notification.h" -#include "hmi/on_vi_fuel_level_state_notification.h" -#include "hmi/on_vi_gps_data_notification.h" -#include "hmi/on_vi_head_lamp_status_notification.h" -#include "hmi/on_vi_instant_fuel_consumption_notification.h" -#include "hmi/on_vi_my_key_notification.h" -#include "hmi/on_vi_odometer_notification.h" -#include "hmi/on_vi_prndl_notification.h" -#include "hmi/on_vi_rpm_notification.h" -#include "hmi/on_vi_speed_notification.h" -#include "hmi/on_vi_steering_wheel_angle_notification.h" -#include "hmi/on_vi_tire_pressure_notification.h" -#include "hmi/on_vi_vin_notification.h" -#include "hmi/on_vi_wiper_status_notification.h" -#else -#include "hmi/on_vi_vehicle_data_notification.h" -#endif // HMI_DBUS_API - -#include "hmi/on_button_event_notification.h" -#include "hmi/on_navi_tbt_client_state_notification.h" -#include "hmi/on_navi_way_point_change_notification.h" -#include "hmi/on_ui_command_notification.h" -#include "hmi/on_ui_keyboard_input_notification.h" -#include "hmi/on_ui_touch_event_notification.h" -#include "hmi/on_app_permission_changed_notification.h" -#include "hmi/on_app_registered_notification.h" -#include "hmi/on_audio_data_streaming_notification.h" -#include "hmi/on_button_subscription_notification.h" -#include "hmi/on_file_removed_notification.h" -#include "hmi/on_put_file_notification.h" -#include "hmi/on_resume_audio_source_notification.h" -#include "hmi/on_sdl_close_notification.h" -#include "hmi/on_sdl_consent_needed_notification.h" -#include "hmi/on_sdl_persistence_complete_notification.h" -#include "hmi/on_status_update_notification.h" -#include "hmi/on_video_data_streaming_notification.h" -#include "hmi/on_record_start_notification.h" -#include "hmi/on_app_activated_notification.h" -#include "hmi/on_app_deactivated_notification.h" -#include "hmi/on_app_unregistered_notification.h" -#include "hmi/on_button_press_notification.h" -#include "hmi/on_event_changed_notification.h" -#include "hmi/on_ready_notification.h" -#include "hmi/on_tts_reset_timeout_notification.h" -#include "hmi/on_tts_started_notification.h" -#include "hmi/on_tts_stopped_notification.h" -#include "hmi/on_ui_reset_timeout_notification.h" -#include "hmi/on_vr_started_notification.h" -#include "hmi/on_vr_stopped_notification.h" -#include "hmi/on_app_permission_consent_notification.h" -#include "hmi/on_ignition_cycle_over_notification.h" -#include "hmi/on_policy_update.h" -#include "hmi/on_received_policy_update.h" -#include "hmi/on_system_error_notification.h" -#include "hmi/on_system_info_changed_notification.h" -#include "hmi/on_allow_sdl_functionality_notification.h" -#include "hmi/on_device_state_changed_notification.h" -#include "hmi/on_exit_all_applications_notification.h" -#include "hmi/on_exit_application_notification.h" -#include "hmi/on_vr_command_notification.h" -#include "hmi/on_vr_language_change_notification.h" -#include "hmi/on_start_device_discovery.h" -#include "hmi/on_device_chosen_notification.h" -#include "hmi/on_system_context_notification.h" -#include "hmi/on_system_request_notification.h" -#include "hmi/on_tts_language_change_notification.h" -#include "hmi/on_ui_language_change_notification.h" -#include "hmi/on_device_connection_status_notification.h" +namespace am = application_manager; + +static am::MockMessageHelper* message_helper_mock_; namespace test { namespace components { @@ -141,34 +141,45 @@ namespace commands_test { namespace hmi_commands_test { namespace hmi_notifications_test { -namespace am = application_manager; - using ::testing::_; using ::testing::Test; using ::testing::Types; using ::testing::Return; using ::testing::ReturnRef; using ::testing::NiceMock; +using ::testing::Mock; +using ::testing::InSequence; using ::utils::SharedPtr; using ::smart_objects::SmartObject; -using testing::Mock; +using ::application_manager::commands::MessageSharedPtr; +using ::test::components::application_manager_test::MockApplicationManager; +using ::test::components::application_manager_test:: + MockApplicationManagerSettings; +using ::application_manager::ApplicationSharedPtr; +using ::test::components::application_manager_test::MockApplication; +using ::test::components::event_engine_test::MockEventDispatcher; +using ::application_manager::MockMessageHelper; -namespace am = ::application_manager; -namespace strings = am::strings; +using namespace am::commands; -using am::commands::MessageSharedPtr; -using am::ApplicationSharedPtr; +typedef SharedPtr<MockApplication> MockAppPtr; +typedef NiceMock< + ::test::components::application_manager_test::MockHMICapabilities> + MockHMICapabilities; -using namespace am::commands; +#define MEDIA true +#define NOT_MEDIA false +#define VC true +#define NOT_VC false +#define NAVI true +#define NOT_NAVI false ACTION_P(GetEventId, event_id) { *event_id = arg0.id(); } - ACTION_P(GetArg, arg) { *arg = arg0; } - ACTION_P2(GetConnectIdPermissionConsent, connect_id, consent) { *connect_id = arg0; std::vector<policy::FunctionalGroupPermission>::const_iterator it = @@ -178,14 +189,20 @@ ACTION_P2(GetConnectIdPermissionConsent, connect_id, consent) { } consent->consent_source = arg1.consent_source; } - ACTION_P2(GetBoolValueAndString, value, str) { *value = arg0; *str = arg1; } - ACTION_P(GetMessage, message) { - (*message) = (*arg0); + (*message)[am::strings::params][am::strings::function_id] = + (*arg0)[am::strings::params][am::strings::function_id].asInt(); + (*message)[am::strings::params][am::strings::message_type] = + (*arg0)[am::strings::params][am::strings::message_type].asInt(); + (*message)[am::strings::params][am::strings::correlation_id] = + (*arg0)[am::strings::params][am::strings::correlation_id].asInt(); + (*message)[am::strings::params][am::strings::connection_key] = + (*arg0)[am::strings::params][am::strings::connection_key].asInt(); + return (*message)[am::strings::params][am::strings::correlation_id].asInt(); } namespace { @@ -195,77 +212,118 @@ const int32_t kHmiProtocolType_ = 1; const int32_t kMobileProtocolType_ = 0; const int32_t kProtocolVersion_ = 3; const uint32_t kCorrelationId_ = 1939u; -const uint32_t kAppId = 2014u; -const uint32_t kConnectionKey = 0u; -// Following variable represents MAC adress so it must contain 12 symbols. -const std::string kCustomDeviceInternalId = "255255255001"; -const std::string kEmptyDeviceInternalId = ""; -const std::string kDeviceId = "device_id"; +const uint32_t kAppId_ = 2014u; } // namespace class HMICommandsNotificationsTest - : public components::commands_test::CommandRequestTest< + : public components::commands_test::CommandsTest< CommandsTestMocks::kIsNice> { public: HMICommandsNotificationsTest() - : mock_app_(CreateMockApp()) - , message_helper_mock_(NULL) - , message_(CreateMessage(smart_objects::SmartType_Map)) - , applications_(application_set_, applications_lock_) {} + : applications_(application_set_, applications_lock_), app_ptr_(NULL) { + message_helper_mock_ = + application_manager::MockMessageHelper::message_helper_mock(); + Mock::VerifyAndClearExpectations(message_helper_mock_); + } + ~HMICommandsNotificationsTest() { + // Fix DataAccessor release and WinQt crash + Mock::VerifyAndClearExpectations(&app_mngr_); + Mock::VerifyAndClearExpectations(message_helper_mock_); + } typedef Command CommandType; - MockAppPtr mock_app_; - am::MockMessageHelper* message_helper_mock_; - - MessageSharedPtr message_; + protected: am::ApplicationSet application_set_; sync_primitives::Lock applications_lock_; DataAccessor<am::ApplicationSet> applications_; - NiceMock<application_manager_test::MockHMICapabilities> - mock_hmi_capabilities_; + MockHMICapabilities mock_hmi_capabilities_; - typename IsNiceMock<policy_test::MockPolicyHandlerInterface, - kAreMocksNice>::Result mock_policy_handler_; + NiceMock<event_engine_test::MockEventDispatcher> mock_event_dispatcher_; + NiceMock<policy_test::MockPolicyHandlerInterface> policy_interface_; - typename IsNiceMock<application_manager_test::MockStateController, - kAreMocksNice>::Result mock_state_controller_; + application_manager_test::MockStateController mock_state_controller_; - protected: - void SetUp() OVERRIDE { - message_helper_mock_ = am::MockMessageHelper::message_helper_mock(); - Mock::VerifyAndClearExpectations(&message_helper_mock_); - ConfigureApp(kAppId, false, false, false); - ON_CALL(mock_app_manager_, GetPolicyHandler()) - .WillByDefault(ReturnRef(mock_policy_handler_)); - ON_CALL(mock_app_manager_, application_by_hmi_app(_)) - .WillByDefault(Return(mock_app_)); - } + am::ApplicationSharedPtr app_; + NiceMock<MockApplication>* app_ptr_; + + typedef IsNiceMock<connection_handler_test::MockConnectionHandler, + kMocksAreNice>::Result MockConnectionHandler; + + typedef IsNiceMock<protocol_handler_test::MockSessionObserver, + kMocksAreNice>::Result MockSessionObserver; - void TearDown() OVERRIDE { - Mock::VerifyAndClearExpectations(&message_helper_mock_); - Mock::VerifyAndClearExpectations(&mock_app_manager_); + MockConnectionHandler mock_connection_handler_; + MockSessionObserver mock_session_observer_; + + void InitCommand(const uint32_t& default_timeout) OVERRIDE { + app_ = ConfigureApp(&app_ptr_, kAppId_, NOT_MEDIA, NOT_NAVI, NOT_VC); + EXPECT_CALL(app_mngr_, get_settings()) + .WillOnce(ReturnRef(app_mngr_settings_)); + EXPECT_CALL(app_mngr_settings_, default_timeout()) + .WillOnce(ReturnRef(default_timeout)); + ON_CALL(app_mngr_, event_dispatcher()) + .WillByDefault(ReturnRef(mock_event_dispatcher_)); + ON_CALL(app_mngr_, GetPolicyHandler()) + .WillByDefault(ReturnRef(policy_interface_)); + ON_CALL(app_mngr_, application_by_hmi_app(_)).WillByDefault(Return(app_)); + ON_CALL(*app_ptr_, app_id()).WillByDefault(Return(kAppId_)); } - void ConfigureApp(uint32_t app_id, bool media, bool navi, bool vc) { - ON_CALL(*mock_app_, app_id()).WillByDefault(Return(app_id)); - ON_CALL(*mock_app_, is_media()).WillByDefault(Return(media)); - ON_CALL(*mock_app_, is_navi()).WillByDefault(Return(navi)); - ON_CALL(*mock_app_, is_voice_communication()).WillByDefault(Return(vc)); - ON_CALL(*mock_app_, is_audio()).WillByDefault(Return(media || navi || vc)); + am::ApplicationSharedPtr ConfigureApp(NiceMock<MockApplication>** app_mock, + uint32_t app_id, + bool media, + bool navi, + bool vc) { + *app_mock = new NiceMock<MockApplication>; + + Mock::AllowLeak(*app_mock); // WorkAround for gogletest bug + am::ApplicationSharedPtr app(*app_mock); + + ON_CALL(**app_mock, app_id()).WillByDefault(Return(app_id)); + ON_CALL(**app_mock, is_media_application()).WillByDefault(Return(media)); + ON_CALL(**app_mock, is_navi()).WillByDefault(Return(navi)); + ON_CALL(**app_mock, is_voice_communication_supported()) + .WillByDefault(Return(vc)); + ON_CALL(**app_mock, IsAudioApplication()) + .WillByDefault(Return(media || navi || vc)); + return app; + } +#if defined(OS_POSIX) + void SubscribeForSignal() { + sigset_t signal_set; + sigemptyset(&signal_set); + sigaddset(&signal_set, SIGINT); + sigaddset(&signal_set, SIGTERM); + pthread_sigmask(SIG_BLOCK, &signal_set, NULL); } +#endif }; +namespace { +void sig_handler(int sig) { + switch (sig) { + case SIGINT: + break; + case SIGTERM: + break; + case SIGSEGV: + abort(); + default: + exit(EXIT_FAILURE); + } +} +} // namespace + template <class Command> -class HMIOnViNotifications - : public commands_test::CommandsTest<CommandsTestMocks::kIsNice> { +class HMIOnViNotifications : public commands_test::CommandsTest<kIsNice> { public: typedef Command CommandType; }; template <class Command> class HMIOnNotificationsListToHMI - : public commands_test::CommandsTest<CommandsTestMocks::kIsNice> { + : public commands_test::CommandsTest<kIsNice> { public: typedef Command CommandType; }; @@ -278,38 +336,34 @@ struct CommandPair { template <class Command> class HMIOnNotificationsEventDispatcher - : public commands_test::CommandRequestTest<CommandsTestMocks::kIsNice> { + : public commands_test::CommandsTest<kIsNice> { public: typedef Command CommandType; + NiceMock<event_engine_test::MockEventDispatcher> mock_event_dispatcher_; }; -typedef Types< -#ifdef HMI_DBUS_API - OnVIAccPedalPositionNotification, - OnVIBeltStatusNotification, - OnVIBodyInformationNotification, - OnVIDeviceStatusNotification, - OnVIDriverBrakingNotification, - OnVIEngineTorqueNotification, - OnVIExternalTemperatureNotification, - OnVIFuelLevelNotification, - OnVIFuelLevelStateNotification, - OnVIGpsDataNotification, - OnVIHeadLampStatusNotification, - OnVIInstantFuelConsumptionNotification, - OnVIMyKeyNotification, - OnVIOdometerNotification, - OnVIPrndlNotification, - OnVIRpmNotification, - OnVISpeedNotification, - OnVISteeringWheelAngleNotification, - OnVITirePressureNotification, - OnVIVinNotification, - OnVIWiperStatusNotification -#else - OnVIVehicleDataNotification -#endif // HMI_DBUS_API - > HMIOnViNotificationsTypes; +typedef Types<OnVIAccPedalPositionNotification, + OnVIBeltStatusNotification, + OnVIBodyInformationNotification, + OnVIDeviceStatusNotification, + OnVIDriverBrakingNotification, + OnVIEngineTorqueNotification, + OnVIExternalTemperatureNotification, + OnVIFuelLevelNotification, + OnVIFuelLevelStateNotification, + OnVIGpsDataNotification, + OnVIHeadLampStatusNotification, + OnVIInstantFuelConsumptionNotification, + OnVIMyKeyNotification, + OnVIOdometerNotification, + OnVIPrndlNotification, + OnVIRpmNotification, + OnVISpeedNotification, + OnVISteeringWheelAngleNotification, + OnVITirePressureNotification, + OnVIVehicleDataNotification, + OnVIVinNotification, + OnVIWiperStatusNotification> HMIOnViNotificationsTypes; typedef Types<OnAppPermissionChangedNotification, OnAudioDataStreamingNotification, @@ -322,8 +376,7 @@ typedef Types<OnAppPermissionChangedNotification, OnSDLPersistenceCompleteNotification, OnStatusUpdateNotification, OnVideoDataStreamingNotification, - OnRecordStartdNotification, - OnAppRegisteredNotification> HMIOnNotificationsListToHMITypes; + OnRecordStartdNotification> HMIOnNotificationsListToHMITypes; typedef Types< CommandPair<OnAppActivatedNotification, @@ -348,43 +401,45 @@ TYPED_TEST_CASE(HMIOnNotificationsEventDispatcher, HMIOnNotificationsEventDispatcherTypes); TYPED_TEST(HMIOnViNotifications, CommandsSendNotificationToMobile) { - MessageSharedPtr message = this->CreateMessage(); + MessageSharedPtr message = + commands_test::CommandsTest<kIsNice>::CreateMessage(); utils::SharedPtr<typename TestFixture::CommandType> command = this->template CreateCommand<typename TestFixture::CommandType>(message); - EXPECT_CALL(commands_test::CommandsTest< - CommandsTestMocks::kIsNice>::mock_app_manager_, + EXPECT_CALL(commands_test::CommandsTest<kIsNice>::app_mngr_, ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)); command->Run(); EXPECT_EQ( static_cast<int32_t>(mobile_apis::FunctionID::eType::OnVehicleDataID), - (*message)[strings::params][strings::function_id].asInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification), - (*message)[strings::params][strings::message_type].asInt()); + (*message)[am::strings::params][am::strings::message_type].asInt()); } TYPED_TEST(HMIOnNotificationsListToHMI, CommandsSendNotificationToHmi) { - MessageSharedPtr message = this->CreateMessage(); + MessageSharedPtr message = + commands_test::CommandsTest<kIsNice>::CreateMessage(); utils::SharedPtr<typename TestFixture::CommandType> command = this->template CreateCommand<typename TestFixture::CommandType>(message); - EXPECT_CALL(commands_test::CommandsTest< - CommandsTestMocks::kIsNice>::mock_app_manager_, + EXPECT_CALL(commands_test::CommandsTest<kIsNice>::app_mngr_, SendMessageToHMI(_)); command->Run(); - EXPECT_EQ(static_cast<int32_t>(kHmiProtocolType_), - (*message)[strings::params][strings::protocol_type].asInt()); - EXPECT_EQ(static_cast<int32_t>(kProtocolVersion_), - (*message)[strings::params][strings::protocol_version].asInt()); + EXPECT_EQ( + static_cast<int32_t>(kHmiProtocolType_), + (*message)[am::strings::params][am::strings::protocol_type].asInt()); + EXPECT_EQ( + static_cast<int32_t>(kProtocolVersion_), + (*message)[am::strings::params][am::strings::protocol_version].asInt()); } TYPED_TEST(HMIOnNotificationsEventDispatcher, CommandsNotificationEventDispatcher) { int32_t event_id = hmi_apis::FunctionID::INVALID_ENUM; - MessageSharedPtr message = this->CreateMessage(); + MessageSharedPtr message = + commands_test::CommandsTest<kIsNice>::CreateMessage(); utils::SharedPtr<typename TestFixture::CommandType::CommandType> command = this->template CreateCommand< typename TestFixture::CommandType::CommandType>(message); - EXPECT_CALL(commands_test::CommandsTest< - CommandsTestMocks::kIsNice>::mock_app_manager_, + EXPECT_CALL(commands_test::CommandsTest<kIsNice>::app_mngr_, event_dispatcher()) .WillOnce(ReturnRef(this->mock_event_dispatcher_)); EXPECT_CALL(this->mock_event_dispatcher_, raise_event(_)) @@ -393,157 +448,196 @@ TYPED_TEST(HMIOnNotificationsEventDispatcher, EXPECT_EQ(TestFixture::CommandType::kHMICommandId, event_id); } +// notifications(SendNotificationToMobile) TEST_F(HMICommandsNotificationsTest, OnButtonEventSendNotificationToMobile) { + MessageSharedPtr message = CreateMessage(); utils::SharedPtr<Command> command = - CreateCommand<hmi::OnButtonEventNotification>(message_); + CreateCommand<hmi::OnButtonEventNotification>(message); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)); command->Run(); EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnButtonEventID), - (*message_)[strings::params][strings::function_id].asInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification), - (*message_)[strings::params][strings::message_type].asInt()); + (*message)[am::strings::params][am::strings::message_type].asInt()); } TEST_F(HMICommandsNotificationsTest, OnNaviTBTClientSendNotificationToMobile) { + MessageSharedPtr message = CreateMessage(); utils::SharedPtr<Command> command = - CreateCommand<OnNaviTBTClientStateNotification>(message_); + CreateCommand<OnNaviTBTClientStateNotification>(message); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)); command->Run(); EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnTBTClientStateID), - (*message_)[strings::params][strings::function_id].asInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification), - (*message_)[strings::params][strings::message_type].asInt()); + (*message)[am::strings::params][am::strings::message_type].asInt()); } TEST_F(HMICommandsNotificationsTest, OnNaviWayPointChangeSendNotificationToMobile) { + MessageSharedPtr message = CreateMessage(); utils::SharedPtr<Command> command = - CreateCommand<OnNaviWayPointChangeNotification>(message_); + CreateCommand<OnNaviWayPointChangeNotification>(message); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)); command->Run(); EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnWayPointChangeID), - (*message_)[strings::params][strings::function_id].asInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification), - (*message_)[strings::params][strings::message_type].asInt()); + (*message)[am::strings::params][am::strings::message_type].asInt()); } TEST_F(HMICommandsNotificationsTest, OnUICommandSendNotificationToMobile) { + MessageSharedPtr message = CreateMessage(); utils::SharedPtr<Command> command = - CreateCommand<OnUICommandNotification>(message_); + CreateCommand<OnUICommandNotification>(message); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)); command->Run(); EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::eType::OnCommandID), - (*message_)[strings::params][strings::function_id].asInt()); - EXPECT_EQ(static_cast<int32_t>(mobile_apis::TriggerSource::TS_MENU), - (*message_)[strings::msg_params][strings::trigger_source].asInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); + EXPECT_EQ( + static_cast<int32_t>(mobile_apis::TriggerSource::TS_MENU), + (*message)[am::strings::msg_params][am::strings::trigger_source].asInt()); EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification), - (*message_)[strings::params][strings::message_type].asInt()); + (*message)[am::strings::params][am::strings::message_type].asInt()); } TEST_F(HMICommandsNotificationsTest, OnUIKeyBoardInputSendNotificationToMobile) { + MessageSharedPtr message = CreateMessage(); utils::SharedPtr<Command> command = - CreateCommand<hmi::OnUIKeyBoardInputNotification>(message_); + CreateCommand<hmi::OnUIKeyBoardInputNotification>(message); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)); command->Run(); EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnKeyboardInputID), - (*message_)[strings::params][strings::function_id].asInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification), - (*message_)[strings::params][strings::message_type].asInt()); + (*message)[am::strings::params][am::strings::message_type].asInt()); } TEST_F(HMICommandsNotificationsTest, OnUITouchEventSendNotificationToMobile) { + MessageSharedPtr message = CreateMessage(); utils::SharedPtr<Command> command = - CreateCommand<hmi::OnUITouchEventNotification>(message_); + CreateCommand<hmi::OnUITouchEventNotification>(message); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)); command->Run(); EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnTouchEventID), - (*message_)[strings::params][strings::function_id].asInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification), - (*message_)[strings::params][strings::message_type].asInt()); + (*message)[am::strings::params][am::strings::message_type].asInt()); } TEST_F(HMICommandsNotificationsTest, - OnAppUnregisteredNotificationEventDispatcher) { + OnAppRegisteredNotificationSendNotificationToHmi) { int32_t event_id = hmi_apis::FunctionID::INVALID_ENUM; + MessageSharedPtr message = CreateMessage(); + utils::SharedPtr<Command> command = + CreateCommand<OnAppRegisteredNotification>(message); + + EXPECT_CALL(app_mngr_, SendMessageToHMI(_)); + EXPECT_CALL(app_mngr_, event_dispatcher()); + EXPECT_CALL(mock_event_dispatcher_, raise_event(_)) + .WillOnce(GetEventId(&event_id)); + command->Run(); + EXPECT_EQ(static_cast<int32_t>( + hmi_apis::FunctionID::BasicCommunication_OnAppRegistered), + event_id); + EXPECT_EQ( + kHmiProtocolType_, + (*message)[am::strings::params][am::strings::protocol_type].asInt()); + EXPECT_EQ( + kProtocolVersion_, + (*message)[am::strings::params][am::strings::protocol_version].asInt()); +} +TEST_F(HMICommandsNotificationsTest, + OnAppUnregisteredNotificationEventDispatcher) { + int32_t event_id = hmi_apis::FunctionID::INVALID_ENUM; + MessageSharedPtr message = CreateMessage(); utils::SharedPtr<Command> command = - CreateCommand<OnAppUnregisteredNotification>(message_); + CreateCommand<OnAppUnregisteredNotification>(message); - EXPECT_CALL(mock_app_manager_, SendMessageToHMI(_)); - EXPECT_CALL(mock_app_manager_, event_dispatcher()); + EXPECT_CALL(app_mngr_, SendMessageToHMI(_)); + EXPECT_CALL(app_mngr_, event_dispatcher()); EXPECT_CALL(mock_event_dispatcher_, raise_event(_)) .WillOnce(GetEventId(&event_id)); command->Run(); EXPECT_EQ(static_cast<int32_t>( hmi_apis::FunctionID::BasicCommunication_OnAppUnregistered), event_id); - EXPECT_EQ(kHmiProtocolType_, - (*message_)[strings::params][strings::protocol_type].asInt()); - EXPECT_EQ(kProtocolVersion_, - (*message_)[strings::params][strings::protocol_version].asInt()); + EXPECT_EQ( + kHmiProtocolType_, + (*message)[am::strings::params][am::strings::protocol_type].asInt()); + EXPECT_EQ( + kProtocolVersion_, + (*message)[am::strings::params][am::strings::protocol_version].asInt()); } TEST_F(HMICommandsNotificationsTest, OnButtonPressNotificationEventDispatcher) { int32_t event_id = hmi_apis::FunctionID::INVALID_ENUM; - + MessageSharedPtr message = CreateMessage(); utils::SharedPtr<Command> command = - CreateCommand<hmi::OnButtonPressNotification>(message_); + CreateCommand<hmi::OnButtonPressNotification>(message); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)); - EXPECT_CALL(mock_app_manager_, event_dispatcher()); + EXPECT_CALL(app_mngr_, event_dispatcher()); EXPECT_CALL(mock_event_dispatcher_, raise_event(_)) .WillOnce(GetEventId(&event_id)); command->Run(); EXPECT_EQ(static_cast<int32_t>(hmi_apis::FunctionID::Buttons_OnButtonPress), event_id); EXPECT_EQ(static_cast<int>(mobile_apis::FunctionID::eType::OnButtonPressID), - (*message_)[strings::params][strings::function_id].asInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); } TEST_F(HMICommandsNotificationsTest, OnReadyNotificationEventDispatcher) { int32_t event_id = hmi_apis::FunctionID::INVALID_ENUM; - + MessageSharedPtr message = CreateMessage(); utils::SharedPtr<Command> command = - CreateCommand<OnReadyNotification>(message_); + CreateCommand<OnReadyNotification>(message); - EXPECT_CALL(mock_app_manager_, OnHMIStartedCooperation()); - EXPECT_CALL(mock_app_manager_, event_dispatcher()); + EXPECT_CALL(app_mngr_, OnHMIStartedCooperation()); + EXPECT_CALL(app_mngr_, event_dispatcher()); EXPECT_CALL(mock_event_dispatcher_, raise_event(_)) .WillOnce(GetEventId(&event_id)); command->Run(); EXPECT_EQ(hmi_apis::FunctionID::BasicCommunication_OnReady, event_id); } +// policy handler TEST_F(HMICommandsNotificationsTest, OnIgnitionCycleOverNotificationPolicyHandler) { + MessageSharedPtr message = CreateMessage(); utils::SharedPtr<Command> command = - CreateCommand<OnIgnitionCycleOverNotification>(message_); + CreateCommand<OnIgnitionCycleOverNotification>(message); - EXPECT_CALL(mock_policy_handler_, OnIgnitionCycleOver()); + EXPECT_CALL(app_mngr_, GetPolicyHandler()); + EXPECT_CALL(policy_interface_, OnIgnitionCycleOver()); command->Run(); } TEST_F(HMICommandsNotificationsTest, OnPolicyUpdateNotificationPolicyHandler) { - utils::SharedPtr<Command> command = CreateCommand<OnPolicyUpdate>(message_); + MessageSharedPtr message = CreateMessage(); + utils::SharedPtr<Command> command = CreateCommand<OnPolicyUpdate>(message); - EXPECT_CALL(mock_policy_handler_, OnPTExchangeNeeded()); + EXPECT_CALL(app_mngr_, GetPolicyHandler()); + EXPECT_CALL(policy_interface_, OnPTExchangeNeeded()); command->Run(); } +#if defined(PROPRIETARY_MODE) || defined(EXTERNAL_PROPRIETARY_MODE) TEST_F(HMICommandsNotificationsTest, OnReceivePolicyUpdateNotification_SUCCESS) { const std::string kFile = "./test_file.txt"; @@ -552,67 +646,84 @@ TEST_F(HMICommandsNotificationsTest, std::vector<uint8_t> data(tmp, tmp + 4); EXPECT_TRUE(file_system::WriteBinaryFile(kFile, data)); - (*message_)[strings::msg_params][am::hmi_notification::policyfile] = kFile; + MessageSharedPtr message = CreateMessage(smart_objects::SmartType_String); + (*message)[am::strings::msg_params][am::hmi_notification::policyfile] = kFile; utils::SharedPtr<Command> command = - CreateCommand<OnReceivedPolicyUpdate>(message_); + CreateCommand<OnReceivedPolicyUpdate>(message); - EXPECT_CALL(mock_policy_handler_, ReceiveMessageFromSDK(kFile, data)); + EXPECT_CALL(app_mngr_, GetPolicyHandler()); + EXPECT_CALL(policy_interface_, ReceiveMessageFromSDK(kFile, data)); command->Run(); EXPECT_TRUE(file_system::DeleteFile(kFile)); } +#endif TEST_F(HMICommandsNotificationsTest, OnReceivePolicyUpdateNotification_UNSUCCESS) { + MessageSharedPtr message = CreateMessage(smart_objects::SmartType_String); utils::SharedPtr<Command> command = - CreateCommand<OnReceivedPolicyUpdate>(message_); + CreateCommand<OnReceivedPolicyUpdate>(message); - EXPECT_CALL(mock_app_manager_, GetPolicyHandler()).Times(0); - EXPECT_CALL(mock_policy_handler_, ReceiveMessageFromSDK(_, _)).Times(0); + EXPECT_CALL(app_mngr_, GetPolicyHandler()).Times(0); + EXPECT_CALL(policy_interface_, ReceiveMessageFromSDK(_, _)).Times(0); command->Run(); } TEST_F(HMICommandsNotificationsTest, OnAppPermissionConsentNotificationPolicyHandlerNoAppId) { - (*message_)[strings::msg_params]["consentedFunctions"] = + MessageSharedPtr message = CreateMessage(smart_objects::SmartType_Map); + (*message)[am::strings::msg_params]["consentedFunctions"] = smart_objects::SmartObject(smart_objects::SmartType_Array); SmartObject& applications = - (*message_)[strings::msg_params]["consentedFunctions"]; + (*message)[am::strings::msg_params]["consentedFunctions"]; smart_objects::SmartObject hmi_application_temp(smart_objects::SmartType_Map); applications[0] = hmi_application_temp; utils::SharedPtr<Command> command = - CreateCommand<OnAppPermissionConsentNotification>(message_); - EXPECT_CALL(mock_policy_handler_, - OnAppPermissionConsent(kConnectionKey, _, _)); + CreateCommand<OnAppPermissionConsentNotification>(message); + + int32_t connection_id = -1; + EXPECT_CALL(app_mngr_, GetPolicyHandler()); +#ifdef EXTERNAL_PROPRIETARY_MODE + EXPECT_CALL(policy_interface_, OnAppPermissionConsent(_, _, _)) +#else + EXPECT_CALL(policy_interface_, OnAppPermissionConsent(_, _)) +#endif + .WillOnce(GetArg(&connection_id)); command->Run(); + EXPECT_EQ(0, connection_id); } TEST_F(HMICommandsNotificationsTest, OnAppPermissionConsentNotificationPolicyHandlerWithAppId) { - (*message_)[strings::msg_params][strings::app_id] = kAppId; - (*message_)[strings::msg_params]["consentedFunctions"] = + MessageSharedPtr message = CreateMessage(smart_objects::SmartType_Map); + (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_; + (*message)[am::strings::msg_params]["consentedFunctions"] = smart_objects::SmartObject(smart_objects::SmartType_Array); smart_objects::SmartObjectSPtr consented_function = utils::MakeShared<smart_objects::SmartObject>(); - (*message_)[strings::msg_params]["consentedFunctions"][0] = + (*message)[am::strings::msg_params]["consentedFunctions"][0] = *consented_function; utils::SharedPtr<Command> command = - CreateCommand<OnAppPermissionConsentNotification>(message_); + CreateCommand<OnAppPermissionConsentNotification>(message); - uint32_t connection_id = 0u; + int32_t connection_id = -1; policy::PermissionConsent permission_consent; - EXPECT_CALL(mock_policy_handler_, OnAppPermissionConsent(_, _, _)) + EXPECT_CALL(app_mngr_, GetPolicyHandler()); +#ifdef EXTERNAL_PROPRIETARY_MODE + EXPECT_CALL(policy_interface_, OnAppPermissionConsent(_, _, _)) +#else + EXPECT_CALL(policy_interface_, OnAppPermissionConsent(_, _)) +#endif .WillOnce( GetConnectIdPermissionConsent(&connection_id, &permission_consent)); command->Run(); - EXPECT_EQ(kAppId, connection_id); - + EXPECT_EQ(static_cast<int32_t>(kAppId_), connection_id); std::vector<policy::FunctionalGroupPermission>::const_iterator it = permission_consent.group_permissions.begin(); - for (; it != permission_consent.group_permissions.end(); ++it) { EXPECT_EQ(policy::kGroupUndefined, (*it).state); } @@ -620,29 +731,35 @@ TEST_F(HMICommandsNotificationsTest, TEST_F(HMICommandsNotificationsTest, OnAppPermissionConsentNotificationPolicyHandlerAppIdAllowTrue) { - (*message_)[strings::msg_params]["consentedFunctions"] = + MessageSharedPtr message = CreateMessage(smart_objects::SmartType_Map); + (*message)[am::strings::msg_params]["consentedFunctions"] = smart_objects::SmartObject(smart_objects::SmartType_Array); - (*message_)[strings::msg_params][strings::app_id] = kAppId; - (*message_)[strings::msg_params]["source"] = "test_content_source"; + (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_; + (*message)[am::strings::msg_params]["source"] = "test_content_source"; smart_objects::SmartObjectSPtr consented_function = utils::MakeShared<smart_objects::SmartObject>(); (*consented_function)["allowed"] = true; - (*consented_function)[strings::id] = 999; - (*consented_function)[strings::name] = "test_group_alias"; - (*message_)[strings::msg_params]["consentedFunctions"][0] = + (*consented_function)[am::strings::id] = 999; + (*consented_function)[am::strings::name] = "test_group_alias"; + (*message)[am::strings::msg_params]["consentedFunctions"][0] = *consented_function; utils::SharedPtr<Command> command = - CreateCommand<OnAppPermissionConsentNotification>(message_); + CreateCommand<OnAppPermissionConsentNotification>(message); - uint32_t connection_id = 0u; + int32_t connection_id = -1; policy::PermissionConsent permission_consent; - EXPECT_CALL(mock_policy_handler_, OnAppPermissionConsent(_, _, _)) + EXPECT_CALL(app_mngr_, GetPolicyHandler()); +#ifdef EXTERNAL_PROPRIETARY_MODE + EXPECT_CALL(policy_interface_, OnAppPermissionConsent(_, _, _)) +#else + EXPECT_CALL(policy_interface_, OnAppPermissionConsent(_, _)) +#endif .WillOnce( GetConnectIdPermissionConsent(&connection_id, &permission_consent)); command->Run(); - EXPECT_EQ(kAppId, connection_id); + EXPECT_EQ(static_cast<int32_t>(kAppId_), connection_id); std::vector<policy::FunctionalGroupPermission>::const_iterator it = permission_consent.group_permissions.begin(); @@ -656,29 +773,35 @@ TEST_F(HMICommandsNotificationsTest, TEST_F(HMICommandsNotificationsTest, OnAppPermissionConsentNotificationPolicyHandlerAppIdAllowFalse) { - (*message_)[strings::msg_params]["consentedFunctions"] = + MessageSharedPtr message = CreateMessage(smart_objects::SmartType_Map); + (*message)[am::strings::msg_params]["consentedFunctions"] = smart_objects::SmartObject(smart_objects::SmartType_Array); - (*message_)[strings::msg_params][strings::app_id] = kAppId; - (*message_)[strings::msg_params]["source"] = "test_content_source"; + (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_; + (*message)[am::strings::msg_params]["source"] = "test_content_source"; smart_objects::SmartObjectSPtr consented_function = utils::MakeShared<smart_objects::SmartObject>(); (*consented_function)["allowed"] = false; - (*consented_function)[strings::id] = 999; - (*consented_function)[strings::name] = "test_group_alias"; - (*message_)[strings::msg_params]["consentedFunctions"][0] = + (*consented_function)[am::strings::id] = 999; + (*consented_function)[am::strings::name] = "test_group_alias"; + (*message)[am::strings::msg_params]["consentedFunctions"][0] = *consented_function; utils::SharedPtr<Command> command = - CreateCommand<OnAppPermissionConsentNotification>(message_); + CreateCommand<OnAppPermissionConsentNotification>(message); - uint32_t connection_id = 0u; + int32_t connection_id = -1; policy::PermissionConsent permission_consent; - EXPECT_CALL(mock_policy_handler_, OnAppPermissionConsent(_, _, _)) + EXPECT_CALL(app_mngr_, GetPolicyHandler()); +#ifdef EXTERNAL_PROPRIETARY_MODE + EXPECT_CALL(policy_interface_, OnAppPermissionConsent(_, _, _)) +#else + EXPECT_CALL(policy_interface_, OnAppPermissionConsent(_, _)) +#endif .WillOnce( GetConnectIdPermissionConsent(&connection_id, &permission_consent)); command->Run(); - EXPECT_EQ(kAppId, connection_id); + EXPECT_EQ(static_cast<int32_t>(kAppId_), connection_id); std::vector<policy::FunctionalGroupPermission>::const_iterator it = permission_consent.group_permissions.begin(); @@ -692,14 +815,16 @@ TEST_F(HMICommandsNotificationsTest, TEST_F(HMICommandsNotificationsTest, OnSystemErrorNotificationOnSystemErrorCode) { - (*message_)[strings::msg_params][am::hmi_notification::error] = + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::hmi_notification::error] = hmi_apis::Common_SystemError::SYNC_REBOOTED; utils::SharedPtr<Command> command = - CreateCommand<OnSystemErrorNotification>(message_); + CreateCommand<OnSystemErrorNotification>(message); int32_t code = hmi_apis::Common_SystemError::INVALID_ENUM; - EXPECT_CALL(mock_policy_handler_, OnSystemError(_)).WillOnce(GetArg(&code)); + EXPECT_CALL(app_mngr_, GetPolicyHandler()); + EXPECT_CALL(policy_interface_, OnSystemError(_)).WillOnce(GetArg(&code)); command->Run(); EXPECT_EQ(static_cast<int32_t>(hmi_apis::Common_SystemError::SYNC_REBOOTED), code); @@ -708,42 +833,49 @@ TEST_F(HMICommandsNotificationsTest, TEST_F(HMICommandsNotificationsTest, OnSystemInfoChangedNotificationCheckLanguage) { const uint32_t kLangCode = 5u; - - (*message_)[strings::msg_params][strings::language] = kLangCode; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::language] = kLangCode; utils::SharedPtr<Command> command = - CreateCommand<OnSystemInfoChangedNotification>(message_); + CreateCommand<OnSystemInfoChangedNotification>(message); EXPECT_CALL(*message_helper_mock_, CommonLanguageToString(_)); - EXPECT_CALL(mock_policy_handler_, OnSystemInfoChanged(_)); + EXPECT_CALL(app_mngr_, GetPolicyHandler()); + EXPECT_CALL(policy_interface_, OnSystemInfoChanged(_)); command->Run(); } TEST_F(HMICommandsNotificationsTest, OnAllowSDLFunctionalityNotificationDeviceKeyNotExist) { - (*message_)[strings::msg_params][am::hmi_response::allowed] = true; + const std::string kDeviceId = ""; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::hmi_response::allowed] = true; utils::SharedPtr<Command> command = - CreateCommand<OnAllowSDLFunctionalityNotification>(message_); + CreateCommand<OnAllowSDLFunctionalityNotification>(message); bool value = false; std::string str; - EXPECT_CALL(mock_policy_handler_, OnAllowSDLFunctionalityNotification(_, _)) + EXPECT_CALL(app_mngr_, GetPolicyHandler()); + EXPECT_CALL(policy_interface_, OnAllowSDLFunctionalityNotification(_, _)) .WillOnce(GetBoolValueAndString(&value, &str)); command->Run(); EXPECT_EQ(true, value); - EXPECT_EQ(kEmptyDeviceInternalId, str); + EXPECT_EQ(kDeviceId, str); } TEST_F(HMICommandsNotificationsTest, OnAllowSDLFunctionalityNotificationDeviceKeyExist) { - (*message_)[strings::msg_params][am::hmi_response::allowed] = true; - (*message_)[strings::msg_params][strings::device][strings::id] = kDeviceId; + const std::string kDeviceId = "device_id"; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::hmi_response::allowed] = true; + (*message)[am::strings::msg_params]["device"]["id"] = kDeviceId; utils::SharedPtr<Command> command = - CreateCommand<OnAllowSDLFunctionalityNotification>(message_); + CreateCommand<OnAllowSDLFunctionalityNotification>(message); bool value; std::string str; - EXPECT_CALL(mock_policy_handler_, OnAllowSDLFunctionalityNotification(_, _)) + EXPECT_CALL(app_mngr_, GetPolicyHandler()); + EXPECT_CALL(policy_interface_, OnAllowSDLFunctionalityNotification(_, _)) .WillOnce(GetBoolValueAndString(&value, &str)); command->Run(); EXPECT_EQ(true, value); @@ -752,96 +884,101 @@ TEST_F(HMICommandsNotificationsTest, TEST_F(HMICommandsNotificationsTest, OnDeviceStateChangedNotificationDeviceStateNotUnpaired) { - (*message_)[strings::msg_params]["deviceState"] = + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params]["deviceState"] = hmi_apis::Common_DeviceState::INVALID_ENUM; utils::SharedPtr<Command> command = - CreateCommand<OnDeviceStateChangedNotification>(message_); + CreateCommand<OnDeviceStateChangedNotification>(message); - EXPECT_CALL(mock_policy_handler_, RemoveDevice(_)).Times(0); + EXPECT_CALL(app_mngr_, GetPolicyHandler()).Times(0); + EXPECT_CALL(policy_interface_, RemoveDevice(_)).Times(0); command->Run(); } TEST_F(HMICommandsNotificationsTest, OnDeviceStateChangedNotificationDeviceStateUnpaired) { - (*message_)[strings::msg_params]["deviceState"] = + // Random MAC adress for test. It must contain 12 symbols. + const std::string device_id = "AA15F2204D6B"; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params]["deviceState"] = hmi_apis::Common_DeviceState::UNPAIRED; - (*message_)[strings::msg_params]["deviceInternalId"] = - kCustomDeviceInternalId; + (*message)[am::strings::msg_params]["deviceInternalId"] = device_id; utils::SharedPtr<Command> command = - CreateCommand<OnDeviceStateChangedNotification>(message_); + CreateCommand<OnDeviceStateChangedNotification>(message); - // If the "deviceInternalId" key is valid the MAC address will be hashed - EXPECT_CALL(mock_policy_handler_, RemoveDevice(_)); + EXPECT_CALL(app_mngr_, GetPolicyHandler()); + EXPECT_CALL(policy_interface_, RemoveDevice(_)); command->Run(); } TEST_F(HMICommandsNotificationsTest, OnDeviceStateChangedNotificationDeviceStateEmptyDeviceId) { - (*message_)[strings::msg_params]["deviceState"] = + const std::string empty_device_id = ""; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params]["deviceState"] = hmi_apis::Common_DeviceState::UNPAIRED; - (*message_)[strings::msg_params]["deviceInternalId"] = kEmptyDeviceInternalId; + (*message)[am::strings::msg_params]["deviceInternalId"] = empty_device_id; utils::SharedPtr<Command> command = - CreateCommand<OnDeviceStateChangedNotification>(message_); + CreateCommand<OnDeviceStateChangedNotification>(message); - std::string result_device_id = "default_id"; - EXPECT_CALL(mock_policy_handler_, RemoveDevice(_)) - .WillOnce(GetArg(&result_device_id)); + std::string device_id = "default_id"; + EXPECT_CALL(app_mngr_, GetPolicyHandler()); + EXPECT_CALL(policy_interface_, RemoveDevice(_)).WillOnce(GetArg(&device_id)); command->Run(); - EXPECT_EQ(kEmptyDeviceInternalId, result_device_id); + EXPECT_EQ(empty_device_id, device_id); } TEST_F(HMICommandsNotificationsTest, OnDeviceStateChangedNotificationDeviceStateDeviceIdFromId) { + const std::string empty_device_id = ""; + const std::string id = "id_string"; MessageSharedPtr message = CreateMessage(); - (*message)[strings::msg_params]["deviceState"] = + (*message)[am::strings::msg_params]["deviceState"] = hmi_apis::Common_DeviceState::UNPAIRED; - (*message)[strings::msg_params]["deviceInternalId"] = kEmptyDeviceInternalId; - (*message)[strings::msg_params]["deviceId"][strings::id] = kDeviceId; + (*message)[am::strings::msg_params]["deviceInternalId"] = empty_device_id; + (*message)[am::strings::msg_params]["deviceId"]["id"] = id; utils::SharedPtr<Command> command = CreateCommand<OnDeviceStateChangedNotification>(message); - std::string result_device_id = "default_id"; - EXPECT_CALL(mock_policy_handler_, RemoveDevice(_)) - .WillOnce(GetArg(&result_device_id)); + std::string device_id = "default_id"; + EXPECT_CALL(app_mngr_, GetPolicyHandler()); + EXPECT_CALL(policy_interface_, RemoveDevice(_)).WillOnce(GetArg(&device_id)); command->Run(); - EXPECT_EQ(kDeviceId, result_device_id); -} - -MATCHER_P(ReasonCodeEqualTo, kCode, "") { - return kCode == arg; -} - -void DummySigHandler(int) { - return; + EXPECT_EQ(id, device_id); } +//~policy_handler TEST_F(HMICommandsNotificationsTest, OnExitAllApplicationsNotificationReasonIgnitionOff) { - (*message_)[strings::msg_params][am::hmi_request::reason] = + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::hmi_request::reason] = hmi_apis::Common_ApplicationsCloseReason::IGNITION_OFF; - utils::SharedPtr<am::commands::Command> command = - CreateCommand<am::commands::OnExitAllApplicationsNotification>(message_); + utils::SharedPtr<Command> command = + CreateCommand<OnExitAllApplicationsNotification>(message); +#if defined(OS_POSIX) + am::mobile_api::AppInterfaceUnregisteredReason::eType mob_reason; - EXPECT_CALL( - mock_app_manager_, - SetUnregisterAllApplicationsReason(ReasonCodeEqualTo( - am::mobile_api::AppInterfaceUnregisteredReason::IGNITION_OFF))); - EXPECT_CALL(mock_app_manager_, HeadUnitReset(_)).Times(0); + EXPECT_CALL(app_mngr_, SetUnregisterAllApplicationsReason(_)) + .WillOnce(GetArg(&mob_reason)); + EXPECT_CALL(app_mngr_, HeadUnitReset(_)).Times(0); - utils::UnsibscribeFromTermination(); + SubscribeForSignal(); command->Run(); - utils::WaitTerminationSignals(&DummySigHandler); + utils::WaitTerminationSignals(sig_handler); - EXPECT_CALL(mock_app_manager_, SetUnregisterAllApplicationsReason(_)) - .Times(0); + EXPECT_EQ(am::mobile_api::AppInterfaceUnregisteredReason::IGNITION_OFF, + mob_reason); +#endif } TEST_F(HMICommandsNotificationsTest, OnExitAllApplicationsNotificationReasonMasterResetAndFactoryDefaults) { + MessageSharedPtr message = CreateMessage(); + std::vector<hmi_apis::Common_ApplicationsCloseReason::eType> reason_list; reason_list.push_back(hmi_apis::Common_ApplicationsCloseReason::MASTER_RESET); reason_list.push_back( @@ -860,87 +997,88 @@ TEST_F(HMICommandsNotificationsTest, it_mob_reason = mob_reason_list.begin(); for (; it_reason != reason_list.end(); ++it_reason, ++it_mob_reason) { - (*message_)[strings::msg_params][am::hmi_request::reason] = *it_reason; - - utils::SharedPtr<am::commands::Command> command = - CreateCommand<am::commands::OnExitAllApplicationsNotification>( - message_); + (*message)[am::strings::msg_params][am::hmi_request::reason] = *it_reason; + utils::SharedPtr<Command> command = + CreateCommand<OnExitAllApplicationsNotification>(message); +#if defined(OS_POSIX) am::mobile_api::AppInterfaceUnregisteredReason::eType mob_reason = *it_mob_reason; - EXPECT_CALL(mock_app_manager_, - SetUnregisterAllApplicationsReason(mob_reason)); - EXPECT_CALL(mock_app_manager_, HeadUnitReset(mob_reason)); - utils::UnsibscribeFromTermination(); + EXPECT_CALL(app_mngr_, SetUnregisterAllApplicationsReason(mob_reason)); + EXPECT_CALL(app_mngr_, HeadUnitReset(mob_reason)); + + SubscribeForSignal(); command->Run(); - utils::WaitTerminationSignals(&DummySigHandler); - EXPECT_CALL(mock_app_manager_, SetUnregisterAllApplicationsReason(_)) - .Times(0); - EXPECT_CALL(mock_app_manager_, HeadUnitReset(_)).Times(0); + utils::WaitTerminationSignals(sig_handler); +#endif } } TEST_F(HMICommandsNotificationsTest, OnExitAllApplicationsNotificationReasonSuspend) { - (*message_)[strings::msg_params][am::hmi_request::reason] = + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::hmi_request::reason] = hmi_apis::Common_ApplicationsCloseReason::SUSPEND; - utils::SharedPtr<am::commands::Command> command = - CreateCommand<am::commands::OnExitAllApplicationsNotification>(message_); + utils::SharedPtr<Command> command = + CreateCommand<OnExitAllApplicationsNotification>(message); MessageSharedPtr ethalon_message = CreateMessage(smart_objects::SmartType_Map); - (*ethalon_message)[strings::params][strings::function_id] = + (*ethalon_message)[am::strings::params][am::strings::function_id] = hmi_apis::FunctionID::BasicCommunication_OnSDLPersistenceComplete; - (*ethalon_message)[strings::params][strings::message_type] = + (*ethalon_message)[am::strings::params][am::strings::message_type] = am::MessageType::kNotification; - (*ethalon_message)[strings::params][strings::correlation_id] = + (*ethalon_message)[am::strings::params][am::strings::correlation_id] = kCorrelationId_; MessageSharedPtr temp_message = CreateMessage(); - EXPECT_CALL(mock_app_manager_, GetNextHMICorrelationID()) + EXPECT_CALL(app_mngr_, GetNextHMICorrelationID()) .WillOnce(Return(kCorrelationId_)); - EXPECT_CALL(mock_app_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(GetMessage(temp_message), Return(true))); + EXPECT_CALL(app_mngr_, ManageHMICommand(_)) + .WillOnce(GetMessage(temp_message)); command->Run(); - EXPECT_CALL(mock_app_manager_, GetNextHMICorrelationID()).Times(0); - EXPECT_CALL(mock_app_manager_, ManageHMICommand(_)).Times(0); - EXPECT_EQ((*temp_message)[strings::params][strings::function_id].asInt(), - hmi_apis::FunctionID::BasicCommunication_OnSDLPersistenceComplete); - EXPECT_EQ((*temp_message)[strings::params][strings::message_type].asInt(), - am::MessageType::kNotification); - EXPECT_EQ((*temp_message)[strings::params][strings::correlation_id].asInt(), - kCorrelationId_); + EXPECT_EQ( + static_cast<uint32_t>( + hmi_apis::FunctionID::BasicCommunication_OnSDLPersistenceComplete), + (*temp_message)[am::strings::params][am::strings::function_id].asInt()); + EXPECT_EQ( + static_cast<uint32_t>(am::MessageType::kNotification), + (*temp_message)[am::strings::params][am::strings::message_type].asInt()); + EXPECT_EQ(static_cast<uint32_t>(kCorrelationId_), + (*temp_message)[am::strings::params][am::strings::correlation_id] + .asInt()); } TEST_F(HMICommandsNotificationsTest, OnExitAllApplicationsNotificationReasonInvalidEnum) { - (*message_)[strings::msg_params][am::hmi_request::reason] = + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::hmi_request::reason] = hmi_apis::Common_ApplicationsCloseReason::INVALID_ENUM; - utils::SharedPtr<am::commands::Command> command = - CreateCommand<am::commands::OnExitAllApplicationsNotification>(message_); + utils::SharedPtr<Command> command = + CreateCommand<OnExitAllApplicationsNotification>(message); - EXPECT_CALL(mock_app_manager_, SetUnregisterAllApplicationsReason(_)) - .Times(0); - EXPECT_CALL(mock_app_manager_, HeadUnitReset(_)).Times(0); - EXPECT_CALL(mock_app_manager_, GetNextHMICorrelationID()).Times(0); - EXPECT_CALL(mock_app_manager_, ManageHMICommand(_)).Times(0); + EXPECT_CALL(app_mngr_, SetUnregisterAllApplicationsReason(_)).Times(0); + EXPECT_CALL(app_mngr_, HeadUnitReset(_)).Times(0); + EXPECT_CALL(app_mngr_, GetNextHMICorrelationID()).Times(0); + EXPECT_CALL(app_mngr_, ManageHMICommand(_)).Times(0); command->Run(); } TEST_F(HMICommandsNotificationsTest, OnExitApplicationNotificationManageMobileCommand) { - (*message_)[strings::msg_params][strings::app_id] = kAppId; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_; smart_objects::SmartObjectSPtr notification = utils::MakeShared<smart_objects::SmartObject>(); - (*notification)[strings::params][strings::function_id] = - - mobile_apis::FunctionID::OnAppInterfaceUnregisteredID; - (*notification)[strings::params][strings::message_type] = - am::MessageType::kNotification; - (*notification)[strings::params][strings::connection_key] = kAppId; + (*notification)[am::strings::params][am::strings::function_id] = + static_cast<int32_t>( + mobile_apis::FunctionID::OnAppInterfaceUnregisteredID); + (*notification)[am::strings::params][am::strings::message_type] = + static_cast<int32_t>(am::MessageType::kNotification); + (*notification)[am::strings::params][am::strings::connection_key] = kAppId_; std::vector<hmi_apis::Common_ApplicationExitReason::eType> reason_list; reason_list.push_back(hmi_apis::Common_ApplicationExitReason:: @@ -961,106 +1099,76 @@ TEST_F(HMICommandsNotificationsTest, it_reason = reason_list.begin(); for (; it_reason != reason_list.end(); ++it_reason, ++it_mobile_reason) { - (*message_)[strings::msg_params][strings::reason] = *it_reason; + (*message)[am::strings::msg_params][am::strings::reason] = *it_reason; utils::SharedPtr<Command> command = - CreateCommand<OnExitApplicationNotification>(message_); + CreateCommand<OnExitApplicationNotification>(message); - (*notification)[strings::msg_params][strings::reason] = + (*notification)[am::strings::msg_params][am::strings::reason] = static_cast<int32_t>(*it_mobile_reason); - EXPECT_CALL(mock_app_manager_, application(kAppId)) - .WillRepeatedly(Return(mock_app_)); + EXPECT_CALL(app_mngr_, application(kAppId_)).WillRepeatedly(Return(app_)); EXPECT_CALL(*message_helper_mock_, GetOnAppInterfaceUnregisteredNotificationToMobile( - kAppId, *it_mobile_reason)).WillOnce(Return(notification)); - EXPECT_CALL(mock_app_manager_, + kAppId_, *it_mobile_reason)).WillOnce(Return(notification)); + EXPECT_CALL(app_mngr_, ManageMobileCommand(notification, Command::ORIGIN_SDL)); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, UnregisterApplication( - kAppId, mobile_apis::Result::SUCCESS, false, false)); + kAppId_, mobile_apis::Result::SUCCESS, false, false)); command->Run(); } } TEST_F(HMICommandsNotificationsTest, OnExitApplicationNotificationUnhandledReason) { - (*message_)[strings::msg_params][strings::app_id] = kAppId; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_; - (*message_)[strings::msg_params][strings::reason] = + (*message)[am::strings::msg_params][am::strings::reason] = hmi_apis::Common_ApplicationExitReason::INVALID_ENUM; utils::SharedPtr<Command> command = - CreateCommand<OnExitApplicationNotification>(message_); + CreateCommand<OnExitApplicationNotification>(message); - EXPECT_CALL(mock_app_manager_, application(_)).Times(0); - EXPECT_CALL(mock_app_manager_, ManageMobileCommand(_, _)).Times(0); - EXPECT_CALL(mock_app_manager_, UnregisterApplication(_, _, _, _)).Times(0); - EXPECT_CALL(mock_app_manager_, state_controller()).Times(0); - EXPECT_CALL(mock_app_manager_, application(kAppId)) - .WillOnce(Return(mock_app_)); + EXPECT_CALL(app_mngr_, application(_)).Times(0); + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0); + EXPECT_CALL(app_mngr_, UnregisterApplication(_, _, _, _)).Times(0); + EXPECT_CALL(app_mngr_, state_controller()).Times(0); + EXPECT_CALL(app_mngr_, application(kAppId_)).WillOnce(Return(app_)); command->Run(); } TEST_F(HMICommandsNotificationsTest, OnExitApplicationNotificationInvalidApp) { - (*message_)[strings::msg_params][strings::app_id] = kAppId; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_; utils::SharedPtr<Command> command = - CreateCommand<OnExitApplicationNotification>(message_); + CreateCommand<OnExitApplicationNotification>(message); am::ApplicationSharedPtr invalid_app; - EXPECT_CALL(mock_app_manager_, application(_)).Times(0); - EXPECT_CALL(mock_app_manager_, ManageMobileCommand(_, _)).Times(0); - EXPECT_CALL(mock_app_manager_, UnregisterApplication(_, _, _, _)).Times(0); - EXPECT_CALL(mock_app_manager_, state_controller()).Times(0); - EXPECT_CALL(mock_app_manager_, application(kAppId)) - .WillOnce(Return(invalid_app)); - command->Run(); -} - -TEST_F(HMICommandsNotificationsTest, Run_InvalidApp_UNSUCCESS) { - (*message_)[strings::msg_params][strings::app_id] = kAppId; - (*message_)[strings::msg_params][strings::reason] = - hmi_apis::Common_ApplicationExitReason::DRIVER_DISTRACTION_VIOLATION; - utils::SharedPtr<Command> command = - CreateCommand<OnExitApplicationNotification>(message_); - - MockAppPtr valid_app = CreateMockApp(); - EXPECT_CALL(mock_app_manager_, application(kAppId)) - .WillOnce(Return(valid_app)) - .WillOnce(Return(MockAppPtr())); - EXPECT_CALL(mock_app_manager_, ManageMobileCommand(_, _)).Times(0); - EXPECT_CALL(mock_app_manager_, UnregisterApplication(_, _, _, _)).Times(0); - EXPECT_CALL(mock_app_manager_, state_controller()).Times(0); - + EXPECT_CALL(app_mngr_, application(_)).Times(0); + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0); + EXPECT_CALL(app_mngr_, UnregisterApplication(_, _, _, _)).Times(0); + EXPECT_CALL(app_mngr_, state_controller()).Times(0); + EXPECT_CALL(app_mngr_, application(kAppId_)).WillOnce(Return(invalid_app)); command->Run(); } TEST_F(HMICommandsNotificationsTest, - OnExitApplicationNotificationDriverDistractionValidApp) { - (*message_)[strings::msg_params][strings::app_id] = kAppId; - (*message_)[strings::msg_params][strings::reason] = + DISABLED_OnExitApplicationNotificationDriverDistractionValidApp) { + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_; + (*message)[am::strings::msg_params][am::strings::reason] = hmi_apis::Common_ApplicationExitReason::DRIVER_DISTRACTION_VIOLATION; utils::SharedPtr<Command> command = - CreateCommand<OnExitApplicationNotification>(message_); - - smart_objects::SmartObjectSPtr notification = - utils::MakeShared<smart_objects::SmartObject>(); - (*notification)[strings::params][strings::function_id] = + CreateCommand<OnExitApplicationNotification>(message); - mobile_apis::FunctionID::OnAppInterfaceUnregisteredID; - (*notification)[strings::params][strings::message_type] = - am::MessageType::kNotification; - (*notification)[strings::params][strings::connection_key] = kAppId; - (*notification)[strings::msg_params][strings::reason] = - mobile_apis::AppInterfaceUnregisteredReason::DRIVER_DISTRACTION_VIOLATION; - - EXPECT_CALL(mock_app_manager_, application(kAppId)) - .WillRepeatedly(Return(mock_app_)); + EXPECT_CALL(app_mngr_, application(kAppId_)).WillRepeatedly(Return(app_)); - EXPECT_CALL(mock_app_manager_, state_controller()) + EXPECT_CALL(app_mngr_, state_controller()) .WillOnce(ReturnRef(mock_state_controller_)); EXPECT_CALL(mock_state_controller_, - SetRegularState(static_cast<am::ApplicationSharedPtr>(mock_app_), + SetRegularState(app_, mobile_apis::HMILevel::HMI_NONE, mobile_apis::AudioStreamingState::NOT_AUDIBLE, false)); @@ -1068,36 +1176,21 @@ TEST_F(HMICommandsNotificationsTest, } TEST_F(HMICommandsNotificationsTest, - OnExitApplicationNotificationDriverDistractionInvalidApp) { - (*message_)[strings::msg_params][strings::app_id] = kAppId; - - utils::SharedPtr<Command> command = - CreateCommand<OnExitApplicationNotification>(message_); - - EXPECT_CALL(mock_app_manager_, application(kAppId)) - .WillRepeatedly(Return(am::ApplicationSharedPtr())); - - EXPECT_CALL(mock_app_manager_, ManageMobileCommand(_, _)).Times(0); - - command->Run(); -} - -TEST_F(HMICommandsNotificationsTest, - OnExitApplicationNotificationUserExitValidApp) { - (*message_)[strings::msg_params][strings::app_id] = kAppId; - (*message_)[strings::msg_params][strings::reason] = + OnExitApplicationNotificationrUserExitValidApp) { + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_; + (*message)[am::strings::msg_params][am::strings::reason] = hmi_apis::Common_ApplicationExitReason::USER_EXIT; utils::SharedPtr<Command> command = - CreateCommand<OnExitApplicationNotification>(message_); + CreateCommand<OnExitApplicationNotification>(message); - EXPECT_CALL(mock_app_manager_, application(kAppId)) - .WillRepeatedly(Return(mock_app_)); - EXPECT_CALL(mock_app_manager_, ManageMobileCommand(_, _)).Times(0); - EXPECT_CALL(mock_app_manager_, UnregisterApplication(_, _, _, _)).Times(0); - EXPECT_CALL(mock_app_manager_, state_controller()) + EXPECT_CALL(app_mngr_, application(kAppId_)).WillRepeatedly(Return(app_)); + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0); + EXPECT_CALL(app_mngr_, UnregisterApplication(_, _, _, _)).Times(0); + EXPECT_CALL(app_mngr_, state_controller()) .WillOnce(ReturnRef(mock_state_controller_)); EXPECT_CALL(mock_state_controller_, - SetRegularState(static_cast<am::ApplicationSharedPtr>(mock_app_), + SetRegularState(app_, mobile_apis::HMILevel::HMI_NONE, mobile_apis::AudioStreamingState::NOT_AUDIBLE, false)); @@ -1106,28 +1199,23 @@ TEST_F(HMICommandsNotificationsTest, TEST_F(HMICommandsNotificationsTest, OnVRCommandNotificationSwitchedAndValidApp) { - const uint32_t cmnd_id = 12u; + const uint32_t cmd_id = 12u; const uint32_t max_cmd_id = 10u; - (*message_)[strings::msg_params][strings::cmd_id] = cmnd_id; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::cmd_id] = cmd_id; utils::SharedPtr<Command> command = - CreateCommand<OnVRCommandNotification>(message_); - - EXPECT_CALL(mock_app_manager_, application(cmnd_id - max_cmd_id)) - .WillOnce(Return(mock_app_)); - - EXPECT_CALL(mock_app_manager_, get_settings()) - .WillOnce(ReturnRef(mock_app_manager_settings_)); - EXPECT_CALL(mock_app_manager_settings_, max_cmd_id()) - .WillOnce(ReturnRef(max_cmd_id)); + CreateCommand<OnVRCommandNotification>(message); - EXPECT_CALL(mock_app_manager_, state_controller()) + EXPECT_CALL(app_mngr_, application(_)).WillRepeatedly(Return(app_)); + EXPECT_CALL(app_mngr_, state_controller()) .WillOnce(ReturnRef(mock_state_controller_)); EXPECT_CALL(mock_state_controller_, - SetRegularState(static_cast<am::ApplicationSharedPtr>(mock_app_), - mobile_apis::HMILevel::HMI_FULL, - true)); + SetRegularState(_, mobile_apis::HMILevel::HMI_FULL, true)); + EXPECT_CALL(app_mngr_, get_settings()) + .WillOnce(ReturnRef(app_mngr_settings_)); + EXPECT_CALL(app_mngr_settings_, max_cmd_id()).WillOnce(ReturnRef(max_cmd_id)); command->Run(); } @@ -1136,18 +1224,17 @@ TEST_F(HMICommandsNotificationsTest, const uint32_t kCmdId = 12u; const uint32_t kMaxCmdId = 10u; - (*message_)[strings::msg_params][strings::cmd_id] = kCmdId; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::cmd_id] = kCmdId; utils::SharedPtr<Command> command = - CreateCommand<OnVRCommandNotification>(message_); + CreateCommand<OnVRCommandNotification>(message); am::ApplicationSharedPtr invalid_app; - EXPECT_CALL(mock_app_manager_, application(_)) - .WillRepeatedly(Return(invalid_app)); - EXPECT_CALL(mock_app_manager_, state_controller()).Times(0); - EXPECT_CALL(mock_app_manager_, get_settings()) - .WillOnce(ReturnRef(mock_app_manager_settings_)); - EXPECT_CALL(mock_app_manager_settings_, max_cmd_id()) - .WillOnce(ReturnRef(kMaxCmdId)); + EXPECT_CALL(app_mngr_, application(_)).WillRepeatedly(Return(invalid_app)); + EXPECT_CALL(app_mngr_, state_controller()).Times(0); + EXPECT_CALL(app_mngr_, get_settings()) + .WillOnce(ReturnRef(app_mngr_settings_)); + EXPECT_CALL(app_mngr_settings_, max_cmd_id()).WillOnce(ReturnRef(kMaxCmdId)); command->Run(); } @@ -1156,15 +1243,15 @@ TEST_F(HMICommandsNotificationsTest, const uint32_t kCmdId = 11u; const uint32_t kMaxCmdId = 10u; - (*message_)[strings::msg_params][strings::cmd_id] = kCmdId; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::cmd_id] = kCmdId; utils::SharedPtr<Command> command = - CreateCommand<OnVRCommandNotification>(message_); + CreateCommand<OnVRCommandNotification>(message); - EXPECT_CALL(mock_app_manager_, application(_)).Times(0); - EXPECT_CALL(mock_app_manager_settings_, max_cmd_id()) - .WillOnce(ReturnRef(kMaxCmdId)); - EXPECT_CALL(mock_app_manager_, get_settings()) - .WillOnce(ReturnRef(mock_app_manager_settings_)); + EXPECT_CALL(app_mngr_, application(_)).Times(0); + EXPECT_CALL(app_mngr_settings_, max_cmd_id()).WillOnce(ReturnRef(kMaxCmdId)); + EXPECT_CALL(app_mngr_, get_settings()) + .WillOnce(ReturnRef(app_mngr_settings_)); command->Run(); } @@ -1173,20 +1260,18 @@ TEST_F(HMICommandsNotificationsTest, const uint32_t kCmdId = 8u; const uint32_t kMaxCmdId = 10u; - (*message_)[strings::msg_params][strings::cmd_id] = kCmdId; - (*message_)[strings::msg_params][strings::grammar_id] = 0; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::cmd_id] = kCmdId; utils::SharedPtr<Command> command = - CreateCommand<OnVRCommandNotification>(message_); - - EXPECT_CALL(mock_app_manager_, get_settings()) - .WillOnce(ReturnRef(mock_app_manager_settings_)); - EXPECT_CALL(mock_app_manager_settings_, max_cmd_id()) - .WillOnce(ReturnRef(kMaxCmdId)); + CreateCommand<OnVRCommandNotification>(message); - EXPECT_CALL(mock_app_manager_, applications()) - .WillOnce(Return(applications_)); - - EXPECT_CALL(mock_app_manager_, ManageMobileCommand(_, _)).Times(0); + am::ApplicationSharedPtr invalid_app; + EXPECT_CALL(app_mngr_, application(_)).WillOnce(Return(invalid_app)); + EXPECT_CALL(app_mngr_settings_, max_cmd_id()).WillOnce(ReturnRef(kMaxCmdId)); + EXPECT_CALL(app_mngr_, get_settings()) + .WillOnce(ReturnRef(app_mngr_settings_)); + EXPECT_CALL(app_mngr_, event_dispatcher()).Times(0); + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0); command->Run(); } @@ -1196,24 +1281,21 @@ TEST_F(HMICommandsNotificationsTest, const uint32_t kMaxCmdId = 10u; const uint32_t kIsPerformInteractionActive = 1u; int32_t event_id = hmi_apis::FunctionID::INVALID_ENUM; - - (*message_)[strings::msg_params][strings::cmd_id] = kCmdId; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::cmd_id] = kCmdId; utils::SharedPtr<Command> command = - CreateCommand<OnVRCommandNotification>(message_); - - application_set_.insert(mock_app_); - EXPECT_CALL(mock_app_manager_, applications()) - .WillOnce(Return(applications_)); - EXPECT_CALL(mock_app_manager_settings_, max_cmd_id()) - .WillOnce(ReturnRef(kMaxCmdId)); - EXPECT_CALL(mock_app_manager_, get_settings()) - .WillOnce(ReturnRef(mock_app_manager_settings_)); - EXPECT_CALL(*mock_app_, is_perform_interaction_active()) + CreateCommand<OnVRCommandNotification>(message); + + EXPECT_CALL(app_mngr_, application(_)).WillOnce(Return(app_)); + EXPECT_CALL(app_mngr_settings_, max_cmd_id()).WillOnce(ReturnRef(kMaxCmdId)); + EXPECT_CALL(app_mngr_, get_settings()) + .WillOnce(ReturnRef(app_mngr_settings_)); + EXPECT_CALL(*app_ptr_, is_perform_interaction_active()) .WillOnce(Return(kIsPerformInteractionActive)); - EXPECT_CALL(mock_app_manager_, event_dispatcher()); + EXPECT_CALL(app_mngr_, event_dispatcher()); EXPECT_CALL(mock_event_dispatcher_, raise_event(_)) .WillOnce(GetEventId(&event_id)); - EXPECT_CALL(mock_app_manager_, ManageMobileCommand(_, _)).Times(0); + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0); command->Run(); EXPECT_EQ(hmi_apis::FunctionID::VR_OnCommand, event_id); } @@ -1223,177 +1305,179 @@ TEST_F(HMICommandsNotificationsTest, const uint32_t kCmdId = 8u; const uint32_t kMaxCmdId = 10u; const uint32_t kIsPerformInteractionActive = 0u; - - (*message_)[strings::msg_params][strings::cmd_id] = kCmdId; - (*message_)[strings::msg_params][strings::function_id] = + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::cmd_id] = kCmdId; + (*message)[am::strings::msg_params][am::strings::function_id] = mobile_apis::FunctionID::eType::OnCommandID; utils::SharedPtr<Command> command = - CreateCommand<OnVRCommandNotification>(message_); - - application_set_.insert(mock_app_); - EXPECT_CALL(mock_app_manager_, applications()) - .WillOnce(Return(applications_)); - EXPECT_CALL(mock_app_manager_settings_, max_cmd_id()) - .WillOnce(ReturnRef(kMaxCmdId)); - EXPECT_CALL(mock_app_manager_, get_settings()) - .WillOnce(ReturnRef(mock_app_manager_settings_)); - EXPECT_CALL(*mock_app_, is_perform_interaction_active()) + CreateCommand<OnVRCommandNotification>(message); + + EXPECT_CALL(app_mngr_, application(_)).WillOnce(Return(app_)); + EXPECT_CALL(app_mngr_settings_, max_cmd_id()).WillOnce(ReturnRef(kMaxCmdId)); + EXPECT_CALL(app_mngr_, get_settings()) + .WillOnce(ReturnRef(app_mngr_settings_)); + EXPECT_CALL(*app_ptr_, is_perform_interaction_active()) .WillOnce(Return(kIsPerformInteractionActive)); - EXPECT_CALL(mock_app_manager_, event_dispatcher()).Times(0); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, event_dispatcher()).Times(0); + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)); command->Run(); EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::eType::OnCommandID), - (*message_)[strings::params][strings::function_id].asInt()); - EXPECT_EQ(static_cast<int32_t>(mobile_apis::TriggerSource::TS_VR), - (*message_)[strings::msg_params][strings::trigger_source].asInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); + EXPECT_EQ( + static_cast<int32_t>(mobile_apis::TriggerSource::TS_VR), + (*message)[am::strings::msg_params][am::strings::trigger_source].asInt()); EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification), - (*message_)[strings::params][strings::message_type].asInt()); + (*message)[am::strings::params][am::strings::message_type].asInt()); } TEST_F(HMICommandsNotificationsTest, OnVRLanguageChangeNotificationEmptyData) { const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB; - - (*message_)[strings::msg_params][strings::language] = kLang; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::language] = kLang; utils::SharedPtr<Command> command = - CreateCommand<OnVRLanguageChangeNotification>(message_); + CreateCommand<OnVRLanguageChangeNotification>(message); EXPECT_CALL(mock_hmi_capabilities_, active_ui_language()) .WillOnce(Return(hmi_apis::Common_Language::EN_AU)); EXPECT_CALL(mock_hmi_capabilities_, set_active_vr_language(_)); - EXPECT_CALL(mock_app_manager_, hmi_capabilities()) + EXPECT_CALL(app_mngr_, hmi_capabilities()) .WillOnce(ReturnRef(mock_hmi_capabilities_)); - EXPECT_CALL(mock_app_manager_, applications()) - .WillOnce(Return(applications_)); - EXPECT_CALL(mock_app_manager_, ManageMobileCommand(_, _)).Times(0); - EXPECT_CALL(*mock_app_, app_id()).Times(0); - EXPECT_CALL(*mock_app_, language()).Times(0); + EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(applications_)); + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0); + EXPECT_CALL(*app_ptr_, app_id()).Times(0); + EXPECT_CALL(*app_ptr_, language()).Times(0); command->Run(); } TEST_F(HMICommandsNotificationsTest, OnVRLanguageChangeNotificationAppLangEqualMessageLang) { const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB; - - (*message_)[strings::msg_params][strings::language] = kLang; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::language] = kLang; utils::SharedPtr<Command> command = - CreateCommand<OnVRLanguageChangeNotification>(message_); + CreateCommand<OnVRLanguageChangeNotification>(message); - application_set_.insert(mock_app_); - EXPECT_CALL(mock_app_manager_, applications()) - .WillOnce(Return(applications_)); + application_set_.insert(app_); + EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(applications_)); EXPECT_CALL(mock_hmi_capabilities_, active_ui_language()) .WillOnce(Return(hmi_apis::Common_Language::EN_AU)); EXPECT_CALL(mock_hmi_capabilities_, set_active_vr_language(_)); - EXPECT_CALL(mock_app_manager_, hmi_capabilities()) + EXPECT_CALL(app_mngr_, hmi_capabilities()) .WillOnce(ReturnRef(mock_hmi_capabilities_)); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)); - ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId)); - ON_CALL(*mock_app_, language()).WillByDefault(ReturnRef(kLang)); + EXPECT_CALL(*app_ptr_, app_id()).WillOnce(Return(kAppId_)); + EXPECT_CALL(*app_ptr_, language()).WillRepeatedly(ReturnRef(kLang)); command->Run(); EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnLanguageChangeID), - (*message_)[strings::params][strings::function_id].asInt()); - EXPECT_EQ(kAppId, - (*message_)[strings::params][strings::connection_key].asUInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); + EXPECT_EQ( + static_cast<int32_t>(kAppId_), + (*message)[am::strings::params][am::strings::connection_key].asInt()); EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification), - (*message_)[strings::params][strings::message_type].asInt()); + (*message)[am::strings::params][am::strings::message_type].asInt()); EXPECT_EQ( static_cast<int32_t>(hmi_apis::Common_Language::EN_AU), - (*message_)[strings::msg_params][strings::hmi_display_language].asInt()); + (*message)[am::strings::msg_params][am::strings::hmi_display_language] + .asInt()); } TEST_F(HMICommandsNotificationsTest, OnVRLanguageChangeNotificationAppLangNotEqualMessageLang) { const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB; - - (*message_)[strings::msg_params][strings::language] = + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::language] = mobile_apis::Language::EN_US; utils::SharedPtr<Command> command = - CreateCommand<OnVRLanguageChangeNotification>(message_); + CreateCommand<OnVRLanguageChangeNotification>(message); - application_set_.insert(mock_app_); + application_set_.insert(app_); smart_objects::SmartObjectSPtr notification = utils::MakeShared<smart_objects::SmartObject>(); - (*notification)[strings::params][strings::function_id] = - mobile_apis::FunctionID::OnLanguageChangeID; - (*notification)[strings::params][strings::message_type] = - am::MessageType::kNotification; - (*notification)[strings::params][strings::connection_key] = kAppId; - (*notification)[strings::msg_params][strings::reason] = - mobile_apis::AppInterfaceUnregisteredReason::LANGUAGE_CHANGE; - - EXPECT_CALL(mock_app_manager_, applications()) - .WillOnce(Return(applications_)); + (*notification)[am::strings::params][am::strings::function_id] = + static_cast<int32_t>(mobile_apis::FunctionID::OnLanguageChangeID); + (*notification)[am::strings::params][am::strings::message_type] = + static_cast<int32_t>(am::MessageType::kNotification); + (*notification)[am::strings::params][am::strings::connection_key] = kAppId_; + (*notification)[am::strings::msg_params][am::strings::reason] = + static_cast<int32_t>( + mobile_apis::AppInterfaceUnregisteredReason::LANGUAGE_CHANGE); + + EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(applications_)); EXPECT_CALL(mock_hmi_capabilities_, active_ui_language()) .WillOnce(Return(hmi_apis::Common_Language::EN_AU)); EXPECT_CALL(mock_hmi_capabilities_, set_active_vr_language(_)); - EXPECT_CALL(mock_app_manager_, hmi_capabilities()) + EXPECT_CALL(app_mngr_, hmi_capabilities()) .WillOnce(ReturnRef(mock_hmi_capabilities_)); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)); - EXPECT_CALL(*mock_app_, app_id()).WillRepeatedly(Return(kAppId)); - EXPECT_CALL(*mock_app_, language()).WillRepeatedly(ReturnRef(kLang)); - EXPECT_CALL(mock_app_manager_, state_controller()) + EXPECT_CALL(*app_ptr_, app_id()).WillRepeatedly(Return(kAppId_)); + EXPECT_CALL(*app_ptr_, language()).WillRepeatedly(ReturnRef(kLang)); + EXPECT_CALL(app_mngr_, state_controller()) .WillOnce(ReturnRef(mock_state_controller_)); EXPECT_CALL(mock_state_controller_, - SetRegularState(static_cast<am::ApplicationSharedPtr>(mock_app_), - mobile_apis::HMILevel::HMI_NONE, - false)); - EXPECT_CALL( - *message_helper_mock_, - GetOnAppInterfaceUnregisteredNotificationToMobile( - kAppId, mobile_apis::AppInterfaceUnregisteredReason::LANGUAGE_CHANGE)) + SetRegularState(app_, mobile_apis::HMILevel::HMI_NONE, false)); + EXPECT_CALL(*message_helper_mock_, + GetOnAppInterfaceUnregisteredNotificationToMobile( + kAppId_, + mobile_apis::AppInterfaceUnregisteredReason::LANGUAGE_CHANGE)) .WillOnce(Return(notification)); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, ManageMobileCommand(notification, Command::ORIGIN_SDL)); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, UnregisterApplication( - kAppId, mobile_apis::Result::SUCCESS, false, false)); + kAppId_, mobile_apis::Result::SUCCESS, false, false)); command->Run(); EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnLanguageChangeID), - (*message_)[strings::params][strings::function_id].asInt()); - EXPECT_EQ(kAppId, - (*message_)[strings::params][strings::connection_key].asUInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); + EXPECT_EQ( + static_cast<int32_t>(kAppId_), + (*message)[am::strings::params][am::strings::connection_key].asInt()); EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification), - (*message_)[strings::params][strings::message_type].asInt()); + (*message)[am::strings::params][am::strings::message_type].asInt()); EXPECT_EQ( static_cast<int32_t>(hmi_apis::Common_Language::EN_AU), - (*message_)[strings::msg_params][strings::hmi_display_language].asInt()); + (*message)[am::strings::msg_params][am::strings::hmi_display_language] + .asInt()); } TEST_F(HMICommandsNotificationsTest, OnStartDeviceDiscoveryRun) { + MessageSharedPtr message = CreateMessage(); utils::SharedPtr<Command> command = - CreateCommand<OnStartDeviceDiscovery>(message_); - EXPECT_CALL(mock_app_manager_, StartDevicesDiscovery()); + CreateCommand<OnStartDeviceDiscovery>(message); + EXPECT_CALL(app_mngr_, StartDevicesDiscovery()); command->Run(); } TEST_F(HMICommandsNotificationsTest, OnDeviceChosenNotificationDeviceInfoExists) { - (*message_)[strings::msg_params][strings::device_info][strings::id] = "2014"; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::device_info] + [am::strings::id] = "2014"; utils::SharedPtr<Command> command = - CreateCommand<OnDeviceChosenNotification>(message_); - EXPECT_CALL( - mock_app_manager_, - ConnectToDevice( - (*message_)[strings::msg_params][strings::device_info][strings::id] - .asString())); + CreateCommand<OnDeviceChosenNotification>(message); + EXPECT_CALL(app_mngr_, + ConnectToDevice( + (*message)[am::strings::msg_params][am::strings::device_info] + [am::strings::id].asString())); command->Run(); } TEST_F(HMICommandsNotificationsTest, OnDeviceChosenNotificationDeviceInfoNotExists) { + MessageSharedPtr message = CreateMessage(); utils::SharedPtr<Command> command = - CreateCommand<OnDeviceChosenNotification>(message_); - EXPECT_CALL(mock_app_manager_, ConnectToDevice(_)).Times(0); + CreateCommand<OnDeviceChosenNotification>(message); + EXPECT_CALL(app_mngr_, ConnectToDevice(_)).Times(0); command->Run(); } TEST_F(HMICommandsNotificationsTest, OnSystemContextNotificationValidActiveApplication) { + MessageSharedPtr message = CreateMessage(); std::vector<am::mobile_api::SystemContext::eType> system_context_list; system_context_list.push_back( am::mobile_api::SystemContext::SYSCTXT_VRSESSION); @@ -1404,49 +1488,48 @@ TEST_F(HMICommandsNotificationsTest, std::vector<am::mobile_api::SystemContext::eType>::iterator it = system_context_list.begin(); for (; it != system_context_list.end(); ++it) { - (*message_)[strings::msg_params][am::hmi_notification::system_context] = + (*message)[am::strings::msg_params][am::hmi_notification::system_context] = *it; utils::SharedPtr<Command> command = - CreateCommand<OnSystemContextNotification>(message_); - EXPECT_CALL(mock_app_manager_, active_application()) - .WillOnce(Return(mock_app_)); - EXPECT_CALL(mock_app_manager_, state_controller()) + CreateCommand<OnSystemContextNotification>(message); + EXPECT_CALL(app_mngr_, active_application()).WillOnce(Return(app_)); + EXPECT_CALL(app_mngr_, state_controller()) .WillOnce(ReturnRef(mock_state_controller_)); - EXPECT_CALL( - mock_state_controller_, - SetRegularState(static_cast<am::ApplicationSharedPtr>(mock_app_), *it)); + EXPECT_CALL(mock_state_controller_, SetRegularState(app_, *it)); command->Run(); } } TEST_F(HMICommandsNotificationsTest, OnSystemContextNotificationInvalidActiveApplication) { - (*message_)[strings::msg_params][am::hmi_notification::system_context] = + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::hmi_notification::system_context] = am::mobile_api::SystemContext::SYSCTXT_VRSESSION; utils::SharedPtr<Command> command = - CreateCommand<OnSystemContextNotification>(message_); + CreateCommand<OnSystemContextNotification>(message); ApplicationSharedPtr invalid_app; - EXPECT_CALL(mock_app_manager_, active_application()) - .WillOnce(Return(invalid_app)); - EXPECT_CALL(mock_app_manager_, state_controller()).Times(0); + EXPECT_CALL(app_mngr_, active_application()).WillOnce(Return(invalid_app)); + EXPECT_CALL(app_mngr_, state_controller()).Times(0); command->Run(); } TEST_F(HMICommandsNotificationsTest, OnSystemContextNotificationInvalidSystemContext) { - (*message_)[strings::msg_params][am::hmi_notification::system_context] = + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::hmi_notification::system_context] = am::mobile_api::SystemContext::INVALID_ENUM; utils::SharedPtr<Command> command = - CreateCommand<OnSystemContextNotification>(message_); - EXPECT_CALL(mock_app_manager_, active_application()).Times(0); - EXPECT_CALL(mock_app_manager_, application(_)).Times(0); - EXPECT_CALL(mock_app_manager_, state_controller()).Times(0); + CreateCommand<OnSystemContextNotification>(message); + EXPECT_CALL(app_mngr_, active_application()).Times(0); + EXPECT_CALL(app_mngr_, application(_)).Times(0); + EXPECT_CALL(app_mngr_, state_controller()).Times(0); command->Run(); } TEST_F(HMICommandsNotificationsTest, OnSystemContextNotificationValidApplication) { - (*message_)[strings::msg_params][strings::app_id] = kAppId; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_; std::vector<am::mobile_api::SystemContext::eType> system_context_list; system_context_list.push_back(am::mobile_api::SystemContext::SYSCTXT_ALERT); system_context_list.push_back(am::mobile_api::SystemContext::SYSCTXT_MAIN); @@ -1454,489 +1537,402 @@ TEST_F(HMICommandsNotificationsTest, std::vector<am::mobile_api::SystemContext::eType>::iterator it = system_context_list.begin(); for (; it != system_context_list.end(); ++it) { - (*message_)[strings::msg_params][am::hmi_notification::system_context] = + (*message)[am::strings::msg_params][am::hmi_notification::system_context] = *it; utils::SharedPtr<Command> command = - CreateCommand<OnSystemContextNotification>(message_); - EXPECT_CALL(mock_app_manager_, application(_)).WillOnce(Return(mock_app_)); - EXPECT_CALL(mock_app_manager_, state_controller()) + CreateCommand<OnSystemContextNotification>(message); + EXPECT_CALL(app_mngr_, application(_)).WillOnce(Return(app_)); + EXPECT_CALL(app_mngr_, state_controller()) .WillOnce(ReturnRef(mock_state_controller_)); - EXPECT_CALL( - mock_state_controller_, - SetRegularState(static_cast<am::ApplicationSharedPtr>(mock_app_), *it)); + EXPECT_CALL(mock_state_controller_, SetRegularState(app_, *it)); command->Run(); } } TEST_F(HMICommandsNotificationsTest, OnSystemContextNotificationAppIdDoesntExists) { - (*message_)[strings::msg_params][am::hmi_notification::system_context] = + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::hmi_notification::system_context] = am::mobile_api::SystemContext::SYSCTXT_ALERT; utils::SharedPtr<Command> command = - CreateCommand<OnSystemContextNotification>(message_); - EXPECT_CALL(mock_app_manager_, application(_)).Times(0); - EXPECT_CALL(mock_app_manager_, state_controller()).Times(0); + CreateCommand<OnSystemContextNotification>(message); + EXPECT_CALL(app_mngr_, application(_)).Times(0); + EXPECT_CALL(app_mngr_, state_controller()).Times(0); command->Run(); } TEST_F(HMICommandsNotificationsTest, OnSystemRequestNotificationAppIdExistsAndValidApp) { - (*message_)[strings::msg_params][strings::app_id] = kAppId; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_; utils::SharedPtr<Command> command = - CreateCommand<OnSystemRequestNotification>(message_); + CreateCommand<OnSystemRequestNotification>(message); - EXPECT_CALL(mock_app_manager_, application(kAppId)) - .WillOnce(Return(mock_app_)); - ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId)); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, application(kAppId_)).WillOnce(Return(app_)); + ON_CALL(app_mngr_, connection_handler()) + .WillByDefault(ReturnRef(mock_connection_handler_)); + ON_CALL(mock_connection_handler_, get_session_observer()) + .WillByDefault(ReturnRef(mock_session_observer_)); + const int32_t device_id = 1; + ON_CALL(mock_session_observer_, GetDataOnDeviceID(_, NULL, NULL, _, NULL)) + .WillByDefault(Return(device_id)); + + EXPECT_CALL(policy_interface_, GetUserConsentForDevice(_)) + .WillOnce(Return(policy::kDeviceAllowed)); + + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)); command->Run(); EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification), - (*message_)[strings::params][strings::message_type].asInt()); + (*message)[am::strings::params][am::strings::message_type].asInt()); EXPECT_EQ( static_cast<int32_t>(mobile_apis::FunctionID::eType::OnSystemRequestID), - (*message_)[strings::params][strings::function_id].asInt()); - EXPECT_EQ(kAppId, - (*message_)[strings::params][strings::connection_key].asUInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); + EXPECT_EQ( + static_cast<int32_t>(kAppId_), + (*message)[am::strings::params][am::strings::connection_key].asInt()); } TEST_F(HMICommandsNotificationsTest, OnSystemRequestNotificationAppIdExistsAndInvalidApp) { - (*message_)[strings::msg_params][strings::app_id] = kAppId; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_; utils::SharedPtr<Command> command = - CreateCommand<OnSystemRequestNotification>(message_); + CreateCommand<OnSystemRequestNotification>(message); ApplicationSharedPtr invalid_app; - EXPECT_CALL(mock_app_manager_, application(kAppId)) - .WillOnce(Return(invalid_app)); - EXPECT_CALL(*mock_app_, app_id()).Times(0); - EXPECT_CALL(mock_app_manager_, ManageMobileCommand(_, _)).Times(0); + EXPECT_CALL(app_mngr_, application(kAppId_)).WillOnce(Return(invalid_app)); + EXPECT_CALL(*app_ptr_, app_id()).Times(0); + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0); command->Run(); EXPECT_EQ( static_cast<int32_t>(mobile_apis::FunctionID::eType::OnSystemRequestID), - (*message_)[strings::params][strings::function_id].asInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); } TEST_F(HMICommandsNotificationsTest, OnSystemRequestNotificationAppIdDoesntExistsAndValidApp) { + MessageSharedPtr message = CreateMessage(); utils::SharedPtr<Command> command = - CreateCommand<OnSystemRequestNotification>(message_); - EXPECT_CALL(mock_policy_handler_, GetAppIdForSending()) - .WillOnce(Return(kAppId)); - EXPECT_CALL(mock_app_manager_, application(_)).WillOnce(Return(mock_app_)); - EXPECT_CALL(mock_app_manager_, + CreateCommand<OnSystemRequestNotification>(message); + ON_CALL(app_mngr_, GetPolicyHandler()) + .WillByDefault(ReturnRef(policy_interface_)); + EXPECT_CALL(policy_interface_, GetAppIdForSending()) + .WillOnce(Return(kAppId_)); + EXPECT_CALL(app_mngr_, application(_)).WillOnce(Return(app_)); + ON_CALL(app_mngr_, connection_handler()) + .WillByDefault(ReturnRef(mock_connection_handler_)); + ON_CALL(mock_connection_handler_, get_session_observer()) + .WillByDefault(ReturnRef(mock_session_observer_)); + const int32_t device_id = 1; + ON_CALL(mock_session_observer_, GetDataOnDeviceID(_, NULL, NULL, _, NULL)) + .WillByDefault(Return(device_id)); + + EXPECT_CALL(policy_interface_, GetUserConsentForDevice(_)) + .WillOnce(Return(policy::kDeviceAllowed)); + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)); command->Run(); EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification), - (*message_)[strings::params][strings::message_type].asInt()); + (*message)[am::strings::params][am::strings::message_type].asInt()); EXPECT_EQ( static_cast<int32_t>(mobile_apis::FunctionID::eType::OnSystemRequestID), - (*message_)[strings::params][strings::function_id].asInt()); - EXPECT_EQ(kAppId, - (*message_)[strings::params][strings::connection_key].asUInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); + EXPECT_EQ( + static_cast<int32_t>(kAppId_), + (*message)[am::strings::params][am::strings::connection_key].asInt()); } TEST_F(HMICommandsNotificationsTest, OnSystemRequestNotificationAppIdDoesntExistsAndNullAppId) { const uint32_t kNullApppId = 0u; - + MessageSharedPtr message = CreateMessage(); utils::SharedPtr<Command> command = - CreateCommand<OnSystemRequestNotification>(message_); - EXPECT_CALL(mock_policy_handler_, GetAppIdForSending()) + CreateCommand<OnSystemRequestNotification>(message); + EXPECT_CALL(app_mngr_, GetPolicyHandler()); + EXPECT_CALL(policy_interface_, GetAppIdForSending()) .WillOnce(Return(kNullApppId)); - EXPECT_CALL(mock_app_manager_, application(_)).Times(0); - EXPECT_CALL(mock_app_manager_, ManageMobileCommand(_, _)).Times(0); + EXPECT_CALL(app_mngr_, application(_)).Times(0); + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0); command->Run(); } TEST_F(HMICommandsNotificationsTest, OnTTSLanguageChangeNotificationEmptyData) { const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB; - - (*message_)[strings::msg_params][strings::language] = kLang; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::language] = kLang; utils::SharedPtr<Command> command = - CreateCommand<OnTTSLanguageChangeNotification>(message_); + CreateCommand<OnTTSLanguageChangeNotification>(message); EXPECT_CALL(mock_hmi_capabilities_, set_active_tts_language(_)); EXPECT_CALL(mock_hmi_capabilities_, set_active_vr_language(_)); EXPECT_CALL(mock_hmi_capabilities_, active_ui_language()) .WillOnce(Return(hmi_apis::Common_Language::EN_AU)); - EXPECT_CALL(mock_app_manager_, hmi_capabilities()) + EXPECT_CALL(app_mngr_, hmi_capabilities()) .WillOnce(ReturnRef(mock_hmi_capabilities_)); - EXPECT_CALL(mock_app_manager_, applications()) - .WillOnce(Return(applications_)); - EXPECT_CALL(mock_app_manager_, ManageMobileCommand(_, _)).Times(0); - EXPECT_CALL(*mock_app_, app_id()).Times(0); - EXPECT_CALL(*mock_app_, language()).Times(0); + EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(applications_)); + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0); + EXPECT_CALL(*app_ptr_, app_id()).Times(0); + EXPECT_CALL(*app_ptr_, language()).Times(0); command->Run(); } TEST_F(HMICommandsNotificationsTest, OnTTSLanguageChangeNotificationAppLangEqualMessageLang) { const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB; - - (*message_)[strings::msg_params][strings::language] = kLang; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::language] = kLang; utils::SharedPtr<Command> command = - CreateCommand<OnTTSLanguageChangeNotification>(message_); + CreateCommand<OnTTSLanguageChangeNotification>(message); - application_set_.insert(mock_app_); - EXPECT_CALL(mock_app_manager_, applications()) - .WillOnce(Return(applications_)); + application_set_.insert(app_); + EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(applications_)); EXPECT_CALL(mock_hmi_capabilities_, active_ui_language()) .WillOnce(Return(hmi_apis::Common_Language::EN_AU)); EXPECT_CALL(mock_hmi_capabilities_, set_active_vr_language(_)); EXPECT_CALL(mock_hmi_capabilities_, set_active_tts_language(_)); - EXPECT_CALL(mock_app_manager_, hmi_capabilities()) + EXPECT_CALL(app_mngr_, hmi_capabilities()) .WillOnce(ReturnRef(mock_hmi_capabilities_)); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)); - ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId)); - ON_CALL(*mock_app_, language()).WillByDefault(ReturnRef(kLang)); + EXPECT_CALL(*app_ptr_, app_id()).WillOnce(Return(kAppId_)); + EXPECT_CALL(*app_ptr_, language()).WillRepeatedly(ReturnRef(kLang)); command->Run(); EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnLanguageChangeID), - (*message_)[strings::params][strings::function_id].asInt()); - EXPECT_EQ(kAppId, - (*message_)[strings::params][strings::connection_key].asUInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); + EXPECT_EQ( + static_cast<int32_t>(kAppId_), + (*message)[am::strings::params][am::strings::connection_key].asInt()); EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification), - (*message_)[strings::params][strings::message_type].asInt()); + (*message)[am::strings::params][am::strings::message_type].asInt()); EXPECT_EQ( static_cast<int32_t>(hmi_apis::Common_Language::EN_AU), - (*message_)[strings::msg_params][strings::hmi_display_language].asInt()); + (*message)[am::strings::msg_params][am::strings::hmi_display_language] + .asInt()); } TEST_F(HMICommandsNotificationsTest, OnTTSLanguageChangeNotificationAppLangNotEqualMessageLang) { const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB; - - (*message_)[strings::msg_params][strings::language] = + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::language] = mobile_apis::Language::EN_US; utils::SharedPtr<Command> command = - CreateCommand<OnTTSLanguageChangeNotification>(message_); + CreateCommand<OnTTSLanguageChangeNotification>(message); - application_set_.insert(mock_app_); + application_set_.insert(app_); smart_objects::SmartObjectSPtr notification = utils::MakeShared<smart_objects::SmartObject>(); - (*notification)[strings::params][strings::function_id] = - mobile_apis::FunctionID::OnLanguageChangeID; - (*notification)[strings::params][strings::message_type] = - am::MessageType::kNotification; - (*notification)[strings::params][strings::connection_key] = kAppId; - (*notification)[strings::msg_params][strings::reason] = - mobile_apis::AppInterfaceUnregisteredReason::LANGUAGE_CHANGE; - - EXPECT_CALL(mock_app_manager_, applications()) - .WillOnce(Return(applications_)); + (*notification)[am::strings::params][am::strings::function_id] = + static_cast<int32_t>(mobile_apis::FunctionID::OnLanguageChangeID); + (*notification)[am::strings::params][am::strings::message_type] = + static_cast<int32_t>(am::MessageType::kNotification); + (*notification)[am::strings::params][am::strings::connection_key] = kAppId_; + (*notification)[am::strings::msg_params][am::strings::reason] = + static_cast<int32_t>( + mobile_apis::AppInterfaceUnregisteredReason::LANGUAGE_CHANGE); + + EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(applications_)); EXPECT_CALL(mock_hmi_capabilities_, active_ui_language()) .WillOnce(Return(hmi_apis::Common_Language::EN_AU)); EXPECT_CALL(mock_hmi_capabilities_, set_active_vr_language(_)); EXPECT_CALL(mock_hmi_capabilities_, set_active_tts_language(_)); - EXPECT_CALL(mock_app_manager_, hmi_capabilities()) + EXPECT_CALL(app_mngr_, hmi_capabilities()) .WillOnce(ReturnRef(mock_hmi_capabilities_)); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)); - EXPECT_CALL(*mock_app_, app_id()).WillRepeatedly(Return(kAppId)); - EXPECT_CALL(*mock_app_, language()).WillRepeatedly(ReturnRef(kLang)); - EXPECT_CALL( - *message_helper_mock_, - GetOnAppInterfaceUnregisteredNotificationToMobile( - kAppId, mobile_apis::AppInterfaceUnregisteredReason::LANGUAGE_CHANGE)) + EXPECT_CALL(*app_ptr_, app_id()).WillRepeatedly(Return(kAppId_)); + EXPECT_CALL(*app_ptr_, language()).WillRepeatedly(ReturnRef(kLang)); + EXPECT_CALL(*message_helper_mock_, + GetOnAppInterfaceUnregisteredNotificationToMobile( + kAppId_, + mobile_apis::AppInterfaceUnregisteredReason::LANGUAGE_CHANGE)) .WillOnce(Return(notification)); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, ManageMobileCommand(notification, Command::ORIGIN_SDL)); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, UnregisterApplication( - kAppId, mobile_apis::Result::SUCCESS, false, false)); + kAppId_, mobile_apis::Result::SUCCESS, false, false)); command->Run(); EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnLanguageChangeID), - (*message_)[strings::params][strings::function_id].asInt()); - EXPECT_EQ(kAppId, - (*message_)[strings::params][strings::connection_key].asUInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); + EXPECT_EQ( + static_cast<int32_t>(kAppId_), + (*message)[am::strings::params][am::strings::connection_key].asInt()); EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification), - (*message_)[strings::params][strings::message_type].asInt()); + (*message)[am::strings::params][am::strings::message_type].asInt()); EXPECT_EQ( static_cast<int32_t>(hmi_apis::Common_Language::EN_AU), - (*message_)[strings::msg_params][strings::hmi_display_language].asInt()); + (*message)[am::strings::msg_params][am::strings::hmi_display_language] + .asInt()); } TEST_F(HMICommandsNotificationsTest, OnUILanguageChangeNotificationEmptyData) { const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB; - - (*message_)[strings::msg_params][strings::language] = kLang; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::language] = kLang; utils::SharedPtr<Command> command = - CreateCommand<OnUILanguageChangeNotification>(message_); + CreateCommand<OnUILanguageChangeNotification>(message); EXPECT_CALL(mock_hmi_capabilities_, set_active_ui_language(_)); EXPECT_CALL(mock_hmi_capabilities_, active_vr_language()) .WillOnce(Return(hmi_apis::Common_Language::EN_AU)); - EXPECT_CALL(mock_app_manager_, hmi_capabilities()) + EXPECT_CALL(app_mngr_, hmi_capabilities()) .WillOnce(ReturnRef(mock_hmi_capabilities_)); - EXPECT_CALL(mock_app_manager_, applications()) - .WillOnce(Return(applications_)); - EXPECT_CALL(mock_app_manager_, ManageMobileCommand(_, _)).Times(0); - EXPECT_CALL(*mock_app_, app_id()).Times(0); - EXPECT_CALL(*mock_app_, ui_language()).Times(0); + EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(applications_)); + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0); + EXPECT_CALL(*app_ptr_, app_id()).Times(0); + EXPECT_CALL(*app_ptr_, ui_language()).Times(0); command->Run(); } TEST_F(HMICommandsNotificationsTest, OnUILanguageChangeNotificationAppLangEqualMessageLang) { const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB; - (*message_)[strings::msg_params][strings::language] = kLang; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::language] = kLang; utils::SharedPtr<Command> command = - CreateCommand<OnUILanguageChangeNotification>(message_); + CreateCommand<OnUILanguageChangeNotification>(message); - application_set_.insert(mock_app_); - EXPECT_CALL(mock_app_manager_, applications()) - .WillOnce(Return(applications_)); + application_set_.insert(app_); + EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(applications_)); EXPECT_CALL(mock_hmi_capabilities_, active_vr_language()) .WillOnce(Return(hmi_apis::Common_Language::EN_AU)); EXPECT_CALL(mock_hmi_capabilities_, set_active_ui_language(_)); - EXPECT_CALL(mock_app_manager_, hmi_capabilities()) + EXPECT_CALL(app_mngr_, hmi_capabilities()) .WillOnce(ReturnRef(mock_hmi_capabilities_)); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)); - ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId)); - ON_CALL(*mock_app_, ui_language()).WillByDefault(ReturnRef(kLang)); + EXPECT_CALL(*app_ptr_, app_id()).WillOnce(Return(kAppId_)); + EXPECT_CALL(*app_ptr_, ui_language()).WillRepeatedly(ReturnRef(kLang)); command->Run(); EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnLanguageChangeID), - (*message_)[strings::params][strings::function_id].asInt()); - EXPECT_EQ(kAppId, - (*message_)[strings::params][strings::connection_key].asUInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); + EXPECT_EQ( + static_cast<int32_t>(kAppId_), + (*message)[am::strings::params][am::strings::connection_key].asInt()); EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification), - (*message_)[strings::params][strings::message_type].asInt()); + (*message)[am::strings::params][am::strings::message_type].asInt()); EXPECT_EQ( static_cast<int32_t>(kLang), - (*message_)[strings::msg_params][strings::hmi_display_language].asInt()); + (*message)[am::strings::msg_params][am::strings::hmi_display_language] + .asInt()); } TEST_F(HMICommandsNotificationsTest, OnUILanguageChangeNotificationAppLangNotEqualMessageLang) { const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB; - - (*message_)[strings::msg_params][strings::language] = + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::strings::language] = mobile_apis::Language::EN_US; utils::SharedPtr<Command> command = - CreateCommand<OnUILanguageChangeNotification>(message_); + CreateCommand<OnUILanguageChangeNotification>(message); - application_set_.insert(mock_app_); + application_set_.insert(app_); smart_objects::SmartObjectSPtr notification = utils::MakeShared<smart_objects::SmartObject>(); - (*notification)[strings::params][strings::function_id] = - mobile_apis::FunctionID::OnLanguageChangeID; - (*notification)[strings::params][strings::message_type] = - am::MessageType::kNotification; - (*notification)[strings::params][strings::connection_key] = kAppId; - (*notification)[strings::msg_params][strings::reason] = - mobile_apis::AppInterfaceUnregisteredReason::LANGUAGE_CHANGE; - - EXPECT_CALL(mock_app_manager_, applications()) - .WillOnce(Return(applications_)); + (*notification)[am::strings::params][am::strings::function_id] = + static_cast<int32_t>(mobile_apis::FunctionID::OnLanguageChangeID); + (*notification)[am::strings::params][am::strings::message_type] = + static_cast<int32_t>(am::MessageType::kNotification); + (*notification)[am::strings::params][am::strings::connection_key] = kAppId_; + (*notification)[am::strings::msg_params][am::strings::reason] = + static_cast<int32_t>( + mobile_apis::AppInterfaceUnregisteredReason::LANGUAGE_CHANGE); + + EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(applications_)); EXPECT_CALL(mock_hmi_capabilities_, active_vr_language()) .WillOnce(Return(hmi_apis::Common_Language::EN_AU)); EXPECT_CALL(mock_hmi_capabilities_, set_active_ui_language(_)); - EXPECT_CALL(mock_app_manager_, hmi_capabilities()) + EXPECT_CALL(app_mngr_, hmi_capabilities()) .WillOnce(ReturnRef(mock_hmi_capabilities_)); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)); - EXPECT_CALL(*mock_app_, app_id()).WillRepeatedly(Return(kAppId)); - EXPECT_CALL(*mock_app_, ui_language()).WillRepeatedly(ReturnRef(kLang)); - EXPECT_CALL( - *message_helper_mock_, - GetOnAppInterfaceUnregisteredNotificationToMobile( - kAppId, mobile_apis::AppInterfaceUnregisteredReason::LANGUAGE_CHANGE)) + EXPECT_CALL(*app_ptr_, app_id()).WillRepeatedly(Return(kAppId_)); + EXPECT_CALL(*app_ptr_, ui_language()).WillRepeatedly(ReturnRef(kLang)); + EXPECT_CALL(*message_helper_mock_, + GetOnAppInterfaceUnregisteredNotificationToMobile( + kAppId_, + mobile_apis::AppInterfaceUnregisteredReason::LANGUAGE_CHANGE)) .WillOnce(Return(notification)); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, ManageMobileCommand(notification, Command::ORIGIN_SDL)); - EXPECT_CALL(mock_app_manager_, + EXPECT_CALL(app_mngr_, UnregisterApplication( - kAppId, mobile_apis::Result::SUCCESS, false, false)); + kAppId_, mobile_apis::Result::SUCCESS, false, false)); command->Run(); EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnLanguageChangeID), - (*message_)[strings::params][strings::function_id].asInt()); - EXPECT_EQ(kAppId, - (*message_)[strings::params][strings::connection_key].asUInt()); + (*message)[am::strings::params][am::strings::function_id].asInt()); + EXPECT_EQ( + static_cast<int32_t>(kAppId_), + (*message)[am::strings::params][am::strings::connection_key].asInt()); EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification), - (*message_)[strings::params][strings::message_type].asInt()); + (*message)[am::strings::params][am::strings::message_type].asInt()); EXPECT_EQ( static_cast<int32_t>(mobile_apis::Language::EN_US), - (*message_)[strings::msg_params][strings::hmi_display_language].asInt()); -} - -TEST_F( - HMICommandsNotificationsTest, - OnDeviceConnectionStatusNotification_DeviceKeyNotExist_IgnoreNotification) { - utils::SharedPtr<Command> command = - CreateCommand<hmi::OnDeviceConnectionStatusNotification>(message_); - - EXPECT_CALL(mock_app_manager_, GetDeviceConnectionType(_)).Times(0); - EXPECT_CALL(mock_policy_handler_, OnDeviceConnectionStatus(_, _)).Times(0); - command->Run(); + (*message)[am::strings::msg_params][am::strings::hmi_display_language] + .asInt()); } -TEST_F( - HMICommandsNotificationsTest, - OnDeviceConnectionStatusNotification_MandatoryParamsMissing_IgnoreNotification) { - (*message_)[strings::msg_params][strings::device] = SmartObject(); +TEST_F(HMICommandsNotificationsTest, OnDriverDistractionNotificationEmptyData) { + const hmi_apis::Common_DriverDistractionState::eType state = + hmi_apis::Common_DriverDistractionState::DD_ON; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::hmi_notification::state] = state; utils::SharedPtr<Command> command = - CreateCommand<hmi::OnDeviceConnectionStatusNotification>(message_); - - EXPECT_CALL(mock_app_manager_, GetDeviceConnectionType(_)).Times(0); - EXPECT_CALL(mock_policy_handler_, OnDeviceConnectionStatus(_, _)).Times(0); - command->Run(); -} + CreateCommand<hmi::OnDriverDistractionNotification>(message); -TEST_F( - HMICommandsNotificationsTest, - OnDeviceConnectionStatusNotification_MandatoryIntegerParamsMissing_IgnoreNotification) { - const hmi_apis::Common_UserSetting::eType usb_transport_status = - hmi_apis::Common_UserSetting::ENABLED; + EXPECT_CALL(app_mngr_, set_driver_distraction(state)); + EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(applications_)); - SmartObject& device_so = (*message_)[strings::msg_params][strings::device]; - device_so[strings::id] = kDeviceId; - device_so[strings::usb_transport_status] = usb_transport_status; - - utils::SharedPtr<Command> command = - CreateCommand<hmi::OnDeviceConnectionStatusNotification>(message_); - - EXPECT_CALL(mock_app_manager_, GetDeviceConnectionType(_)).Times(0); - EXPECT_CALL(mock_policy_handler_, OnDeviceConnectionStatus(_, _)).Times(0); + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0); + EXPECT_CALL(*app_ptr_, app_id()).Times(0); command->Run(); } -TEST_F( - HMICommandsNotificationsTest, - OnDeviceConnectionStatusNotification_MandatoryStringParamsMissing_IgnoreNotification) { - const hmi_apis::Common_TransportType::eType transport_type = - hmi_apis::Common_TransportType::USB_AOA; - const hmi_apis::Common_UserSetting::eType usb_transport_status = - hmi_apis::Common_UserSetting::ENABLED; - - SmartObject& device_so = (*message_)[strings::msg_params][strings::device]; - device_so[strings::transport_type] = transport_type; - device_so[strings::usb_transport_status] = usb_transport_status; - - utils::SharedPtr<Command> command = - CreateCommand<hmi::OnDeviceConnectionStatusNotification>(message_); - - EXPECT_CALL(mock_app_manager_, GetDeviceConnectionType(_)).Times(0); - EXPECT_CALL(mock_policy_handler_, OnDeviceConnectionStatus(_, _)).Times(0); - command->Run(); -} - -TEST_F( - HMICommandsNotificationsTest, - OnDeviceConnectionStatusNotification_StringParamsEmpty_IgnoreNotification) { - const hmi_apis::Common_TransportType::eType transport_type = - hmi_apis::Common_TransportType::USB_AOA; - const std::string connection_type = "USB_AOA"; - const hmi_apis::Common_UserSetting::eType usb_transport_status = - hmi_apis::Common_UserSetting::ENABLED; - - SmartObject& device_so = (*message_)[strings::msg_params][strings::device]; - device_so[strings::transport_type] = transport_type; - device_so[strings::id] = kEmptyDeviceInternalId; - device_so[strings::usb_transport_status] = usb_transport_status; - - utils::SharedPtr<Command> command = - CreateCommand<hmi::OnDeviceConnectionStatusNotification>(message_); - - EXPECT_CALL(mock_app_manager_, GetDeviceConnectionType(_)).Times(0); - EXPECT_CALL(mock_policy_handler_, OnDeviceConnectionStatus(_, _)).Times(0); - command->Run(); -} - -TEST_F( - HMICommandsNotificationsTest, - OnDeviceConnectionStatusNotification_InvalidTransportType_IgnoreNotification) { - const hmi_apis::Common_TransportType::eType transport_type_value = - hmi_apis::Common_TransportType::INVALID_ENUM; - const std::string connection_type; - const hmi_apis::Common_UserSetting::eType usb_transport_status = - hmi_apis::Common_UserSetting::ENABLED; - - SmartObject& device_so = (*message_)[strings::msg_params][strings::device]; - device_so[strings::transport_type] = transport_type_value; - device_so[strings::id] = kDeviceId; - device_so[strings::usb_transport_status] = usb_transport_status; - +TEST_F(HMICommandsNotificationsTest, + OnDriverDistractionNotificationInvalidApp) { + const hmi_apis::Common_DriverDistractionState::eType state = + hmi_apis::Common_DriverDistractionState::DD_ON; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::hmi_notification::state] = state; utils::SharedPtr<Command> command = - CreateCommand<hmi::OnDeviceConnectionStatusNotification>(message_); - - EXPECT_CALL(mock_app_manager_, GetDeviceConnectionType(transport_type_value)) - .WillOnce(Return(connection_type)); - EXPECT_CALL(mock_policy_handler_, OnDeviceConnectionStatus(_, _)).Times(0); - command->Run(); -} - -TEST_F( - HMICommandsNotificationsTest, - OnDeviceConnectionStatusNotification_USBTransportStatusInvalid_IgnoreNotification) { - const hmi_apis::Common_TransportType::eType transport_type_value = - hmi_apis::Common_TransportType::USB_AOA; - const std::string connection_type = "USB_AOA"; - const hmi_apis::Common_UserSetting::eType usb_transport_status = - hmi_apis::Common_UserSetting::INVALID_ENUM; - - SmartObject& device_so = (*message_)[strings::msg_params][strings::device]; - device_so[strings::transport_type] = transport_type_value; - device_so[strings::id] = kDeviceId; - device_so[strings::usb_transport_status] = usb_transport_status; + CreateCommand<hmi::OnDriverDistractionNotification>(message); - utils::SharedPtr<Command> command = - CreateCommand<hmi::OnDeviceConnectionStatusNotification>(message_); + ApplicationSharedPtr invalid_app; + application_set_.insert(invalid_app); + EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(applications_)); - EXPECT_CALL(mock_app_manager_, GetDeviceConnectionType(transport_type_value)) - .WillOnce(Return(connection_type)); - EXPECT_CALL(mock_policy_handler_, OnDeviceConnectionStatus(_, _)).Times(0); + EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0); + EXPECT_CALL(*app_ptr_, app_id()).Times(0); command->Run(); } -TEST_F( - HMICommandsNotificationsTest, - OnDeviceConnectionStatusNotification_NotificationValidUSBTransportEnable_SendNotificationToPolicy) { - const hmi_apis::Common_TransportType::eType transport_type_value = - hmi_apis::Common_TransportType::USB_AOA; - const std::string connection_type = "USB_AOA"; - const hmi_apis::Common_UserSetting::eType usb_transport_status = - hmi_apis::Common_UserSetting::ENABLED; - - SmartObject& device_so = (*message_)[strings::msg_params][strings::device]; - device_so[strings::transport_type] = transport_type_value; - device_so[strings::id] = kDeviceId; - device_so[strings::usb_transport_status] = usb_transport_status; - +TEST_F(HMICommandsNotificationsTest, OnDriverDistractionNotificationValidApp) { + const hmi_apis::Common_DriverDistractionState::eType state = + hmi_apis::Common_DriverDistractionState::DD_ON; + MessageSharedPtr message = CreateMessage(); + (*message)[am::strings::msg_params][am::mobile_notification::state] = state; utils::SharedPtr<Command> command = - CreateCommand<hmi::OnDeviceConnectionStatusNotification>(message_); - - EXPECT_CALL(mock_app_manager_, GetDeviceConnectionType(transport_type_value)) - .WillOnce(Return(connection_type)); - EXPECT_CALL(mock_policy_handler_, - OnDeviceConnectionStatus(kDeviceId, usb_transport_status)); - command->Run(); -} - -TEST_F( - HMICommandsNotificationsTest, - OnDeviceConnectionStatusNotification_NotificationValidUSBTransportDisable_SendNotificationToPolicy) { - const hmi_apis::Common_TransportType::eType transport_type_value = - hmi_apis::Common_TransportType::USB_AOA; - const std::string connection_type = "USB_AOA"; - const hmi_apis::Common_UserSetting::eType usb_transport_status = - hmi_apis::Common_UserSetting::DISABLED; + CreateCommand<hmi::OnDriverDistractionNotification>(message); - SmartObject& device_so = (*message_)[strings::msg_params][strings::device]; - device_so[strings::transport_type] = transport_type_value; - device_so[strings::id] = kDeviceId; - device_so[strings::usb_transport_status] = usb_transport_status; - - utils::SharedPtr<Command> command = - CreateCommand<hmi::OnDeviceConnectionStatusNotification>(message_); + application_set_.insert(app_); - EXPECT_CALL(mock_app_manager_, GetDeviceConnectionType(transport_type_value)) - .WillOnce(Return(connection_type)); - EXPECT_CALL(mock_policy_handler_, - OnDeviceConnectionStatus(kDeviceId, usb_transport_status)); + EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(applications_)); + EXPECT_CALL(app_mngr_, + ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL)) + .WillOnce(GetMessage(message)); + EXPECT_CALL(*app_ptr_, app_id()).WillRepeatedly(Return(kAppId_)); command->Run(); + EXPECT_EQ( + static_cast<int32_t>(am::mobile_api::FunctionID::OnDriverDistractionID), + (*message)[am::strings::params][am::strings::function_id].asInt()); + EXPECT_EQ( + static_cast<int32_t>(kAppId_), + (*message)[am::strings::params][am::strings::connection_key].asInt()); + EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification), + (*message)[am::strings::params][am::strings::message_type].asInt()); } } // namespace hmi_notifications_test diff --git a/src/components/application_manager/test/commands/mobile/register_app_interface_request_test.cc b/src/components/application_manager/test/commands/mobile/register_app_interface_request_test.cc index fe252e38d6..96b3cb067b 100644 --- a/src/components/application_manager/test/commands/mobile/register_app_interface_request_test.cc +++ b/src/components/application_manager/test/commands/mobile/register_app_interface_request_test.cc @@ -229,7 +229,7 @@ TEST_F(RegisterAppInterfaceRequestTest, Run_MinimalData_SUCCESS) { .WillByDefault(Return(true)); policy::StatusNotifier notify_upd_manager = utils::MakeShared<utils::CallNothing>(); - ON_CALL(mock_policy_handler_, AddApplication(_)) + ON_CALL(mock_policy_handler_, AddApplication(_, _)) .WillByDefault(Return(notify_upd_manager)); EXPECT_CALL(app_mngr_, RegisterApplication(msg_)).WillOnce(Return(mock_app)); @@ -324,7 +324,7 @@ TEST_F(RegisterAppInterfaceRequestTest, .WillByDefault(Return(true)); policy::StatusNotifier notify_upd_manager = utils::MakeShared<utils::CallNothing>(); - ON_CALL(mock_policy_handler_, AddApplication(_)) + ON_CALL(mock_policy_handler_, AddApplication(_, _)) .WillByDefault(Return(notify_upd_manager)); EXPECT_CALL(app_mngr_, RegisterApplication(msg_)).WillOnce(Return(mock_app)); diff --git a/src/components/application_manager/test/include/application_manager/mock_message_helper.h b/src/components/application_manager/test/include/application_manager/mock_message_helper.h index d0e8338d77..0d28f9e522 100644 --- a/src/components/application_manager/test/include/application_manager/mock_message_helper.h +++ b/src/components/application_manager/test/include/application_manager/mock_message_helper.h @@ -118,11 +118,20 @@ class MockMessageHelper { MOCK_METHOD2(SendDecryptCertificateToHMI, void(const std::string& file_name, ApplicationManager& app_mngr)); +#ifdef EXTERNAL_PROPRIETARY_MODE + MOCK_METHOD4( + SendGetListOfPermissionsResponse, + void(const std::vector<policy::FunctionalGroupPermission>& permissions, + const policy::ExternalConsentStatus& external_consent_status, + uint32_t correlation_id, + ApplicationManager& app_mngr)); +#else MOCK_METHOD3( SendGetListOfPermissionsResponse, void(const std::vector<policy::FunctionalGroupPermission>& permissions, uint32_t correlation_id, ApplicationManager& app_mngr)); +#endif // #ifdef EXTERNAL_PROPRIETARY_MODE MOCK_METHOD3(SendOnPermissionsChangeNotification, void(uint32_t connection_key, const policy::Permissions& permissions, @@ -245,6 +254,9 @@ class MockMessageHelper { ApplicationManager& application_manager)); MOCK_METHOD1(StringifiedHMILevel, std::string(const mobile_apis::HMILevel::eType hmi_level)); + MOCK_METHOD2(GetDeviceMacAddressForHandle, + std::string(const uint32_t device_handle, + const ApplicationManager& app_mngr)); static MockMessageHelper* message_helper_mock(); }; diff --git a/src/components/application_manager/test/message_helper/message_helper_test.cc b/src/components/application_manager/test/message_helper/message_helper_test.cc index 0a9075b73e..12ed3fcdb3 100644 --- a/src/components/application_manager/test/message_helper/message_helper_test.cc +++ b/src/components/application_manager/test/message_helper/message_helper_test.cc @@ -46,6 +46,10 @@ #include "application_manager/state_controller.h" #include "application_manager/resumption/resume_ctrl.h" +#ifdef EXTERNAL_PROPRIETARY_MODE +#include "policy/policy_external/include/policy/policy_types.h" +#endif + namespace test { namespace components { namespace application_manager_test { @@ -903,947 +907,57 @@ TEST_F(MessageHelperTest, SubscribeApplicationToSoftButton_CallFromApp) { EXPECT_CALL(*appSharedPtr, SubscribeToSoftButtons(function_id, SoftButtonID())).Times(1); MessageHelper::SubscribeApplicationToSoftButton( - message_params, mock_app_, function_id); -} - -TEST_F(MessageHelperTest, SendOnAppUnregNotificationToHMI) { - const bool kIsUnexpectedDisconnect = false; - - const uint32_t kMockHmiAppId = 1u; - EXPECT_CALL(*mock_app_, hmi_app_id()).WillOnce(Return(kMockHmiAppId)); - - smart_objects::SmartObjectSPtr test_notification; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&test_notification), Return(true))); - - MessageHelper::SendOnAppUnregNotificationToHMI( - mock_app_, kIsUnexpectedDisconnect, mock_application_manager_); - - EXPECT_EQ( - hmi_apis::FunctionID::BasicCommunication_OnAppUnregistered, - (*test_notification)[strings::params][strings::function_id].asInt()); - EXPECT_EQ( - MessageType::kNotification, - (*test_notification)[strings::params][strings::message_type].asInt()); - EXPECT_EQ(kMockHmiAppId, - (*test_notification)[strings::msg_params][strings::app_id].asInt()); - EXPECT_EQ( - kIsUnexpectedDisconnect, - (*test_notification)[strings::msg_params][strings::unexpected_disconnect] - .asInt()); -} - -TEST_F(MessageHelperTest, SendOnAppUnregNotificationToHMI_InvalidApp) { - const bool kIsUnexpectedDisconnect = false; - - MockApplicationSharedPtr mock_app; - - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)).Times(0); - - MessageHelper::SendOnAppUnregNotificationToHMI( - mock_app, kIsUnexpectedDisconnect, mock_application_manager_); -} - -TEST_F(MessageHelperTest, SendOnButtonSubscriptionNotification) { - const hmi_apis::Common_ButtonName::eType kButton = - hmi_apis::Common_ButtonName::OK; - const bool kIsSubscribed = true; - - smart_objects::SmartObject msg_params(smart_objects::SmartType_Map); - msg_params[strings::app_id] = kAppId_; - msg_params[strings::name] = kButton; - msg_params[strings::is_suscribed] = kIsSubscribed; - - smart_objects::SmartObjectSPtr test_notification; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&test_notification), Return(true))); - - MessageHelper::SendOnButtonSubscriptionNotification( - kAppId_, kButton, kIsSubscribed, mock_application_manager_); - - EXPECT_EQ( - application_manager::MessageType::kNotification, - (*test_notification)[strings::params][strings::message_type].asInt()); - EXPECT_EQ( - commands::CommandImpl::protocol_version_, - (*test_notification)[strings::params][strings::protocol_version].asInt()); - EXPECT_EQ( - commands::CommandImpl::hmi_protocol_type_, - (*test_notification)[strings::params][strings::protocol_type].asInt()); - EXPECT_EQ( - hmi_apis::FunctionID::Buttons_OnButtonSubscription, - (*test_notification)[strings::params][strings::function_id].asInt()); - EXPECT_EQ( - hmi_apis::FunctionID::Buttons_OnButtonSubscription, - (*test_notification)[strings::params][strings::function_id].asInt()); - EXPECT_EQ(msg_params, (*test_notification)[strings::msg_params]); -} - -TEST_F(MessageHelperTest, SendOnDataStreaming_Audio) { - const protocol_handler::ServiceType kService = - protocol_handler::ServiceType::kAudio; - - smart_objects::SmartObjectSPtr test_notification; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&test_notification), Return(true))); - - MessageHelper::SendOnDataStreaming( - kService, kAvailable_, mock_application_manager_); - - EXPECT_EQ( - hmi_apis::FunctionID::Navigation_OnAudioDataStreaming, - (*test_notification)[strings::params][strings::function_id].asInt()); - EXPECT_EQ( - hmi_apis::messageType::notification, - (*test_notification)[strings::params][strings::message_type].asInt()); - EXPECT_EQ( - commands::CommandImpl::protocol_version_, - (*test_notification)[strings::params][strings::protocol_version].asInt()); - EXPECT_EQ( - commands::CommandImpl::hmi_protocol_type_, - (*test_notification)[strings::params][strings::protocol_type].asInt()); - EXPECT_EQ(kAvailable_, - (*test_notification)[strings::msg_params]["available"].asInt()); -} - -TEST_F(MessageHelperTest, SendOnDataStreaming_MobileNav) { - const protocol_handler::ServiceType kService = - protocol_handler::ServiceType::kMobileNav; - - smart_objects::SmartObjectSPtr test_notification; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&test_notification), Return(true))); - - MessageHelper::SendOnDataStreaming( - kService, kAvailable_, mock_application_manager_); - - EXPECT_EQ( - hmi_apis::FunctionID::Navigation_OnVideoDataStreaming, - (*test_notification)[strings::params][strings::function_id].asInt()); - EXPECT_EQ( - hmi_apis::messageType::notification, - (*test_notification)[strings::params][strings::message_type].asInt()); - EXPECT_EQ( - commands::CommandImpl::protocol_version_, - (*test_notification)[strings::params][strings::protocol_version].asInt()); - EXPECT_EQ( - commands::CommandImpl::hmi_protocol_type_, - (*test_notification)[strings::params][strings::protocol_type].asInt()); - EXPECT_EQ(kAvailable_, - (*test_notification)[strings::msg_params]["available"].asInt()); -} - -TEST_F(MessageHelperTest, SendOnDataStreaming_Fail) { - const protocol_handler::ServiceType kService = - protocol_handler::ServiceType::kInvalidServiceType; - - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)).Times(0); - - MessageHelper::SendOnDataStreaming( - kService, kAvailable_, mock_application_manager_); -} - -TEST_F(MessageHelperTest, SendOnPermissionsChangeNotification) { - const policy::RpcName kRpcName1 = "rpc_name_1"; - const std::string kHMIPermissionLabel1 = "level_1"; - const std::string kHMIPermissionValue1 = "hmi_level_1"; - - std::set<policy::HMILevel> hmi_levels_1; - hmi_levels_1.insert(kHMIPermissionValue1); - - policy::HMIPermissions hmi_permissions_1; - hmi_permissions_1[kHMIPermissionLabel1] = hmi_levels_1; - - std::set<policy::Parameter> parameters_1; - parameters_1.insert("parameter_1"); - - policy::ParameterPermissions parameter_permissions_1; - parameter_permissions_1["1"] = parameters_1; - - const policy::RpcPermissions kRpcPermissions1 = {hmi_permissions_1, - parameter_permissions_1}; - - policy::Permissions permissions; - permissions[kRpcName1] = kRpcPermissions1; - - smart_objects::SmartObjectSPtr test_notification; - EXPECT_CALL(mock_application_manager_, - ManageMobileCommand(_, commands::Command::ORIGIN_SDL)) - .WillOnce(DoAll(SaveArg<0>(&test_notification), Return(true))); - - MessageHelper::SendOnPermissionsChangeNotification( - kConnectionKey_, permissions, mock_application_manager_); - - EXPECT_EQ( - mobile_apis::FunctionID::OnPermissionsChangeID, - (*test_notification)[strings::params][strings::function_id].asInt()); - EXPECT_EQ( - mobile_apis::messageType::notification, - (*test_notification)[strings::params][strings::message_type].asInt()); - EXPECT_EQ( - commands::CommandImpl::mobile_protocol_type_, - (*test_notification)[strings::params][strings::protocol_type].asInt()); - EXPECT_EQ( - kConnectionKey_, - (*test_notification)[strings::params][strings::connection_key].asUInt()); - - // Permissions Data check - policy::Permissions::const_iterator it_permissions = permissions.begin(); - policy::Permissions::const_iterator it_permissions_end = permissions.end(); - const smart_objects::SmartObject& kPermissionsItemArray = - (*test_notification)[strings::msg_params]["permissionItem"]; - - for (size_t index_pi = 0; it_permissions != it_permissions_end; - ++it_permissions, ++index_pi) { - const smart_objects::SmartObject& kPermissionItem = - kPermissionsItemArray[index_pi]; - - EXPECT_EQ((*it_permissions).first, kPermissionItem["rpcName"].asString()); - - // Checking the hmiPermissions - const smart_objects::SmartObject& kHmiPermissions = - kPermissionItem["hmiPermissions"]; - const policy::RpcPermissions& rpc_permissions = (*it_permissions).second; - policy::HMIPermissions::const_iterator it_hmi_permissions = - rpc_permissions.hmi_permissions.begin(); - policy::HMIPermissions::const_iterator it_hmi_permissions_end = - rpc_permissions.hmi_permissions.end(); - - for (; it_hmi_permissions != it_hmi_permissions_end; ++it_hmi_permissions) { - std::set<policy::HMILevel>::const_iterator it_hmi_levels = - (*it_hmi_permissions).second.begin(); - std::set<policy::HMILevel>::const_iterator it_hmi_levels_end = - (*it_hmi_permissions).second.end(); - const smart_objects::SmartObject& kHmiLevels = - kHmiPermissions[(*it_hmi_permissions).first]; - - for (size_t index_hmi_levels = 0; it_hmi_levels != it_hmi_levels_end; - ++it_hmi_levels, ++index_hmi_levels) { - EXPECT_EQ(kHMIPermissionValue1, - kHmiLevels[index_hmi_levels].asString()); - } - } - - // Checking the parameterPermissions - const smart_objects::SmartObject& kParameterPermissions = - kPermissionItem["parameterPermissions"]; - policy::ParameterPermissions::const_iterator it_parameter_permissions = - rpc_permissions.parameter_permissions.begin(); - policy::ParameterPermissions::const_iterator it_parameter_permissions_end = - rpc_permissions.parameter_permissions.end(); - - for (; it_parameter_permissions != it_parameter_permissions_end; - ++it_parameter_permissions) { - const smart_objects::SmartObject& kParameters = - kParameterPermissions[(*it_parameter_permissions).first]; - - std::set<policy::Parameter>::const_iterator it_parameters = - (*it_parameter_permissions).second.begin(); - std::set<policy::Parameter>::const_iterator it_parameters_end = - (*it_parameter_permissions).second.end(); - - for (size_t index_parameters = 0; it_parameters != it_parameters_end; - ++it_parameters, ++index_parameters) { - EXPECT_EQ(*it_parameters, kParameters[index_parameters].asString()); - } - } - } -} - -TEST_F(MessageHelperTest, SendOnResumeAudioSourceToHMI) { - EXPECT_CALL(mock_application_manager_, application(kAppId_)) - .WillOnce(Return(mock_app_)); - EXPECT_EQ(mock_app_, true); - - const uint32_t kCorrelationId = 0; - EXPECT_CALL(mock_application_manager_, GetNextHMICorrelationID()) - .WillOnce(Return(kCorrelationId)); - smart_objects::SmartObjectSPtr test_notification; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&test_notification), Return(true))); - - MessageHelper::SendOnResumeAudioSourceToHMI(kAppId_, - mock_application_manager_); - - EXPECT_EQ( - hmi_apis::FunctionID::BasicCommunication_OnResumeAudioSource, - (*test_notification)[strings::params][strings::function_id].asInt()); - EXPECT_EQ( - MessageType::kNotification, - (*test_notification)[strings::params][strings::message_type].asInt()); - EXPECT_EQ( - kCorrelationId, - (*test_notification)[strings::params][strings::correlation_id].asUInt()); - EXPECT_EQ(kAppId_, - (*test_notification)[strings::msg_params][strings::app_id].asInt()); -} - -TEST_F(MessageHelperTest, SendOnResumeAudioSourceToHMI_InvalidAppId) { - MockApplicationSharedPtr mock_app; - EXPECT_CALL(mock_application_manager_, application(kAppId_)) - .WillOnce(Return(MockApplicationSharedPtr())); - EXPECT_EQ(mock_app, false); - EXPECT_CALL(mock_application_manager_, GetNextHMICorrelationID()).Times(0); - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)).Times(0); - - MessageHelper::SendOnResumeAudioSourceToHMI(kAppId_, - mock_application_manager_); -} - -TEST_F(MessageHelperTest, SendOnStatusUpdate) { - const std::string& kStatus = "test_status"; - - smart_objects::SmartObjectSPtr test_notification; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&test_notification), Return(true))); - - MessageHelper::SendOnStatusUpdate(kStatus, mock_application_manager_); - - EXPECT_EQ( - hmi_apis::FunctionID::SDL_OnStatusUpdate, - (*test_notification)[strings::params][strings::function_id].asInt()); - EXPECT_EQ( - MessageType::kNotification, - (*test_notification)[strings::params][strings::message_type].asInt()); - EXPECT_EQ(kStatus, - (*test_notification)[strings::msg_params]["status"].asString()); -} - -TEST_F(MessageHelperTest, SendPolicySnapshotNotification) { - const std::vector<uint8_t> kPolicyData; - const std::string& kUrl = "test_url"; - - smart_objects::SmartObjectSPtr test_notification; - EXPECT_CALL(mock_application_manager_, - ManageMobileCommand(_, commands::Command::ORIGIN_SDL)) - .WillOnce(DoAll(SaveArg<0>(&test_notification), Return(true))); - - MessageHelper::SendPolicySnapshotNotification( - kConnectionKey_, kPolicyData, kUrl, mock_application_manager_); - - EXPECT_EQ( - mobile_apis::FunctionID::OnSystemRequestID, - (*test_notification)[strings::params][strings::function_id].asInt()); - EXPECT_EQ( - mobile_apis::messageType::notification, - (*test_notification)[strings::params][strings::message_type].asInt()); - EXPECT_EQ( - commands::CommandImpl::mobile_protocol_type_, - (*test_notification)[strings::params][strings::protocol_type].asInt()); - EXPECT_EQ( - commands::CommandImpl::protocol_version_, - (*test_notification)[strings::params][strings::protocol_version].asInt()); - EXPECT_EQ( - kConnectionKey_, - (*test_notification)[strings::params][strings::connection_key].asInt()); - EXPECT_EQ( - kUrl, - (*test_notification)[strings::msg_params][mobile_notification::syncp_url] - .asString()); -} - -TEST_F(MessageHelperTest, SendUnsubscribedWayPoints) { - const uint32_t kCorrelationId = 0; - EXPECT_CALL(mock_application_manager_, GetNextHMICorrelationID()) - .WillOnce(Return(kCorrelationId)); - - smart_objects::SmartObjectSPtr test_notification; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&test_notification), Return(true))); - - const bool kRes = - MessageHelper::SendUnsubscribedWayPoints(mock_application_manager_); - EXPECT_TRUE(kRes); - - EXPECT_EQ( - hmi_apis::FunctionID::Navigation_UnsubscribeWayPoints, - (*test_notification)[strings::params][strings::function_id].asInt()); - EXPECT_EQ( - hmi_apis::messageType::request, - (*test_notification)[strings::params][strings::message_type].asInt()); - EXPECT_EQ( - commands::CommandImpl::protocol_version_, - (*test_notification)[strings::params][strings::protocol_version].asInt()); - EXPECT_EQ( - commands::CommandImpl::hmi_protocol_type_, - (*test_notification)[strings::params][strings::protocol_type].asInt()); - EXPECT_EQ( - kCorrelationId, - (*test_notification)[strings::params][strings::correlation_id].asInt()); -} - -TEST_F(MessageHelperTest, SendUpdateSDLResponse) { - const std::string& kResult = "test_result"; - const uint32_t kCorrelationId = 1u; - - smart_objects::SmartObjectSPtr test_notification; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&test_notification), Return(true))); - - MessageHelper::SendUpdateSDLResponse( - kResult, kCorrelationId, mock_application_manager_); - - EXPECT_EQ( - hmi_apis::FunctionID::SDL_UpdateSDL, - (*test_notification)[strings::params][strings::function_id].asInt()); - EXPECT_EQ( - MessageType::kResponse, - (*test_notification)[strings::params][strings::message_type].asInt()); - EXPECT_EQ( - kCorrelationId, - (*test_notification)[strings::params][strings::correlation_id].asInt()); - EXPECT_EQ(0, - (*test_notification)[strings::params][hmi_response::code].asInt()); - EXPECT_EQ(kResult, - (*test_notification)[strings::msg_params]["result"].asString()); -} - -TEST_F(MessageHelperTest, - SendUIChangeRegistrationRequestToHMI_AppNotValid_UNSUCCESS) { - MockApplicationSharedPtr mock_app; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)).Times(0); - - MessageHelper::SendUIChangeRegistrationRequestToHMI( - mock_app, mock_application_manager_); -} - -TEST_F(MessageHelperTest, - SendUIChangeRegistrationRequestToHMI_NoAppTypes_UNSUCCESS) { - EXPECT_CALL(*mock_app_, app_hmi_types()) - .WillOnce(Return(static_cast<smart_objects::SmartObject*>(NULL))); - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)).Times(0); - MessageHelper::SendUIChangeRegistrationRequestToHMI( - mock_app_, mock_application_manager_); -} - -TEST_F(MessageHelperTest, SendUIChangeRegistrationRequestToHMI_SUCCESS) { - EXPECT_CALL(*mock_app_, app_id()).WillRepeatedly(Return(kAppId_)); - - smart_objects::SmartObject dummy_app_types; - EXPECT_CALL(*mock_app_, app_hmi_types()) - .WillRepeatedly(Return(&dummy_app_types)); - - const mobile_api::Language::eType kDummyLanguage = - mobile_api::Language::INVALID_ENUM; - EXPECT_CALL(*mock_app_, ui_language()) - .WillRepeatedly(ReturnRef(kDummyLanguage)); - - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - EXPECT_CALL(mock_application_manager_, GetNextHMICorrelationID()) - .WillOnce(Return(kNextHMICorrelationID)); - - MessageHelper::SendUIChangeRegistrationRequestToHMI( - mock_app_, mock_application_manager_); - ASSERT_TRUE(result.valid()); - - EXPECT_EQ(hmi_apis::FunctionID::UI_ChangeRegistration, - (*result)[strings::params][strings::function_id].asInt()); - EXPECT_EQ(kAppId_, (*result)[strings::msg_params][strings::app_id].asInt()); -} - -TEST_F(MessageHelperTest, CreateDeviceListSO_EmptyDeviceList_SUCCESS) { - connection_handler::DeviceMap devices; - - smart_objects::SmartObjectSPtr result(MessageHelper::CreateDeviceListSO( - devices, - *static_cast<policy::PolicyHandlerInterface*>(NULL), - mock_application_manager_)); - - ASSERT_TRUE(result.valid()); - - EXPECT_EQ(smart_objects::SmartType_Array, - (*result)[strings::device_list].getType()); - EXPECT_EQ(0u, (*result)[strings::device_list].length()); -} - -TEST_F(MessageHelperTest, CreateDeviceListSO_SUCCESS) { - connection_handler::DeviceMap devices; - policy_test::MockPolicyHandlerInterface policy_handler; - - const uint32_t kDeviceHandle = 0u; - const std::string kDeviceName = "test_device"; - connection_handler::Device device(kDeviceHandle, kDeviceName); - - devices.insert(std::pair<uint32_t, connection_handler::Device>(0, device)); - - EXPECT_CALL(policy_handler, GetUserConsentForDevice(_)) - .WillOnce(Return(policy::DeviceConsent::kDeviceAllowed)); - EXPECT_CALL(mock_application_manager_, GetDeviceTransportType(_)) - .WillOnce(Return(hmi_apis::Common_TransportType::INVALID_ENUM)); - - smart_objects::SmartObjectSPtr result(MessageHelper::CreateDeviceListSO( - devices, policy_handler, mock_application_manager_)); - - ASSERT_TRUE(result.valid()); - - EXPECT_EQ(smart_objects::SmartType_Array, - (*result)[strings::device_list].getType()); - EXPECT_TRUE(0 < (*result)[strings::device_list].length()); -} - -TEST_F(MessageHelperTest, CreateGetVehicleDataRequest_NoParams_SUCCESS) { - const uint32_t kCorrelationId = 1u; - const std::vector<std::string> kDummyMsgParams; - - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - - MessageHelper::CreateGetVehicleDataRequest( - kCorrelationId, kDummyMsgParams, mock_application_manager_); - - ASSERT_TRUE(result.valid()); - - EXPECT_EQ(kCorrelationId, - (*result)[strings::params][strings::correlation_id].asUInt()); -} - -TEST_F(MessageHelperTest, CreateGetVehicleDataRequest_SUCCESS) { - const uint32_t kCorrelationId = 1u; - const std::string kTestParam = "test_param"; - std::vector<std::string> msg_params; - msg_params.push_back(kTestParam); - - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - - MessageHelper::CreateGetVehicleDataRequest( - kCorrelationId, msg_params, mock_application_manager_); - - ASSERT_TRUE(result.valid()); - - EXPECT_EQ(kCorrelationId, - (*result)[strings::params][strings::correlation_id].asUInt()); - EXPECT_TRUE((*result)[strings::msg_params].keyExists(kTestParam)); -} - -TEST_F(MessageHelperTest, CreateHMIApplicationStruct_SUCCESS) { - protocol_handler_test::MockSessionObserver session_observer; - policy_test::MockPolicyHandlerInterface policy_handler; - - smart_objects::SmartObject dummy_so(smart_objects::SmartType_Map); - dummy_so["dummy_param"] = 0; - EXPECT_CALL(*mock_app_, tts_name()).WillRepeatedly(Return(&dummy_so)); - EXPECT_CALL(*mock_app_, vr_synonyms()).WillRepeatedly(Return(&dummy_so)); - EXPECT_CALL(*mock_app_, ngn_media_screen_name()) - .WillRepeatedly(Return(&dummy_so)); - EXPECT_CALL(*mock_app_, app_hmi_types()).WillRepeatedly(Return(&dummy_so)); - EXPECT_CALL(*mock_app_, is_media()).WillRepeatedly(Return(false)); - EXPECT_CALL(*mock_app_, hmi_app_id()).WillRepeatedly(Return(0u)); - EXPECT_CALL(*mock_app_, device()).WillRepeatedly(Return(0u)); - EXPECT_CALL(*mock_app_, policy_app_id()) - .WillRepeatedly(Return(std::string())); - const mobile_api::Language::eType kUiLanguage = - mobile_api::Language::INVALID_ENUM; - EXPECT_CALL(*mock_app_, ui_language()).WillRepeatedly(ReturnRef(kUiLanguage)); - - EXPECT_CALL(policy_handler, GetUserConsentForDevice(_)) - .WillRepeatedly(Return(policy::DeviceConsent::kDeviceAllowed)); - EXPECT_CALL(policy_handler, GetDeviceUSBTransportStatus(_)) - .WillRepeatedly(Return(hmi_apis::Common_UserSetting::DISABLED)); - EXPECT_CALL(session_observer, GetDataOnDeviceHandle(_, _, _, _, _)) - .WillRepeatedly(Return(kNextHMICorrelationID)); - EXPECT_CALL(mock_application_manager_, GetDeviceTransportType(_)) - .WillRepeatedly(Return(hmi_apis::Common_TransportType::INVALID_ENUM)); - - const ::utils::custom_string::CustomString kAppName("app_name"); - EXPECT_CALL(*mock_app_, name()).WillRepeatedly(ReturnRef(kAppName)); - const std::string kAppIconPath("AppIconPath"); - EXPECT_CALL(*mock_app_, app_icon_path()) - .WillRepeatedly(ReturnRef(kAppIconPath)); - - smart_objects::SmartObject result; - EXPECT_TRUE( - MessageHelper::CreateHMIApplicationStruct(mock_app_, - session_observer, - policy_handler, - &result, - mock_application_manager_)); - - EXPECT_EQ(smart_objects::SmartType_Map, result.getType()); - EXPECT_NE(result.length(), 0u); -} - -TEST_F(MessageHelperTest, SendStopAudioPathThru_SUCCESS) { - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - EXPECT_CALL(mock_application_manager_, GetNextHMICorrelationID()) - .WillOnce(Return(kNextHMICorrelationID)); - - MessageHelper::SendStopAudioPathThru(mock_application_manager_); - - ASSERT_TRUE(result.valid()); - - EXPECT_EQ(hmi_apis::FunctionID::UI_EndAudioPassThru, - (*result)[strings::params][strings::function_id].asInt()); -} - -TEST_F(MessageHelperTest, SendSDLActivateAppResponse_SUCCESS) { - const uint32_t kCorrelationId = 0u; - const std::string kStrAppId("Application_ID"); - policy::AppPermissions permissions(kStrAppId); - permissions.isSDLAllowed = true; - permissions.isAppPermissionsRevoked = false; - permissions.appRevoked = false; - - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - - MessageHelper::SendSDLActivateAppResponse( - permissions, kCorrelationId, mock_application_manager_); - - ASSERT_TRUE(result.valid()); - - EXPECT_EQ(hmi_apis::FunctionID::SDL_ActivateApp, - (*result)[strings::params][strings::function_id].asInt()); -} - -TEST_F(MessageHelperTest, SendPolicyUpdate_SUCCESS) { - const std::string kFilePath("file_path"); - const int kTimeout = 0u; - std::vector<int> dummy_retries; - dummy_retries.push_back(5); - - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - EXPECT_CALL(mock_application_manager_, GetNextHMICorrelationID()) - .WillOnce(Return(kNextHMICorrelationID)); - - MessageHelper::SendPolicyUpdate( - kFilePath, kTimeout, dummy_retries, mock_application_manager_); - - ASSERT_TRUE(result.valid()); - - EXPECT_EQ(hmi_apis::FunctionID::BasicCommunication_PolicyUpdate, - (*result)[strings::params][strings::function_id].asInt()); -} - -TEST_F(MessageHelperTest, SendSystemRequestNotification_SUCCESS) { - smart_objects::SmartObject result; - EXPECT_CALL(mock_application_manager_, ManageMobileCommand(_, _)) - .WillOnce(Return(true)); - - MessageHelper::SendSystemRequestNotification( - kConnectionKey_, result, mock_application_manager_); - - EXPECT_EQ(mobile_apis::FunctionID::OnSystemRequestID, - result[strings::params][strings::function_id].asInt()); -} - -TEST_F(MessageHelperTest, SendShowRequestToHMI_NoApp_UNSUCCESS) { - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)).Times(0); - - ApplicationSharedPtr dummy_app; - MessageHelper::SendShowRequestToHMI(dummy_app, mock_application_manager_); -} - -TEST_F(MessageHelperTest, SendShowRequestToHMI_SUCCESS) { - smart_objects::SmartObject dummy_show_command(smart_objects::SmartType_Map); - - EXPECT_CALL(*mock_app_, show_command()) - .WillRepeatedly(Return(&dummy_show_command)); - - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - EXPECT_CALL(mock_application_manager_, GetNextHMICorrelationID()) - .WillRepeatedly(Return(kNextHMICorrelationID)); - - MessageHelper::SendShowRequestToHMI(mock_app_, mock_application_manager_); - - ASSERT_TRUE(result.valid()); - - EXPECT_EQ(hmi_apis::FunctionID::UI_Show, - (*result)[strings::params][strings::function_id].asInt()); -} - -TEST_F(MessageHelperTest, SendAddVRCommandToHMI_SUCCESS) { - const uint32_t kCmdId = 0u; - const smart_objects::SmartObject kDummyVrCommands; - - EXPECT_CALL(*mock_app_, app_id()).WillRepeatedly(Return(kAppId_)); - EXPECT_CALL(*mock_app_, get_grammar_id()).WillRepeatedly(Return(0u)); - - EXPECT_CALL(mock_application_manager_, application(_)) - .WillRepeatedly(Return(mock_app_)); - - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - EXPECT_CALL(mock_application_manager_, GetNextHMICorrelationID()) - .WillRepeatedly(Return(kNextHMICorrelationID)); - - MessageHelper::SendAddVRCommandToHMI( - kCmdId, kDummyVrCommands, kAppId_, mock_application_manager_); - - ASSERT_TRUE(result.valid()); - - EXPECT_EQ(hmi_apis::FunctionID::VR_AddCommand, - (*result)[strings::params][strings::function_id].asInt()); - EXPECT_EQ(kAppId_, (*result)[strings::msg_params][strings::app_id].asUInt()); -} - -TEST_F(MessageHelperTest, SendAudioStopStream_SUCCESS) { - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - EXPECT_CALL(mock_application_manager_, GetNextHMICorrelationID()) - .WillRepeatedly(Return(kNextHMICorrelationID)); - - MessageHelper::SendAudioStopStream(kAppId_, mock_application_manager_); - - ASSERT_TRUE(result.valid()); - - EXPECT_EQ(hmi_apis::FunctionID::Navigation_StopAudioStream, - (*result)[strings::params][strings::function_id].asInt()); - EXPECT_EQ(kAppId_, (*result)[strings::msg_params][strings::app_id].asUInt()); -} - -TEST_F(MessageHelperTest, SendGetStatusUpdateResponse_SUCCESS) { - const uint32_t kCorrelationId = 0u; - const std::string kStatus("test_status"); - - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - - MessageHelper::SendGetStatusUpdateResponse( - kStatus, kCorrelationId, mock_application_manager_); - - ASSERT_TRUE(result.valid()); - - EXPECT_EQ(hmi_apis::FunctionID::SDL_GetStatusUpdate, - (*result)[strings::params][strings::function_id].asInt()); -} - -TEST_F(MessageHelperTest, - SendChangeRegistrationRequestToHMI_NotValidAppPtr_UNSUCCESS) { - ApplicationSharedPtr app; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)).Times(0); - - MessageHelper::SendChangeRegistrationRequestToHMI(app, - mock_application_manager_); -} - -TEST_F(MessageHelperTest, SendChangeRegistrationRequestToHMI_SUCCESS) { - const mobile_api::Language::eType kAppLanguage = mobile_api::Language::RU_RU; - - EXPECT_CALL(*mock_app_, app_id()).WillRepeatedly(Return(kAppId_)); - EXPECT_CALL(*mock_app_, language()).WillRepeatedly(ReturnRef(kAppLanguage)); - EXPECT_CALL(*mock_app_, ui_language()) - .WillRepeatedly(ReturnRef(kAppLanguage)); - - EXPECT_CALL(mock_application_manager_, GetNextHMICorrelationID()) - .WillRepeatedly(Return(kNextHMICorrelationID)); - smart_objects::SmartObjectSPtr vr_command_result; - smart_objects::SmartObjectSPtr tts_command_result; - smart_objects::SmartObjectSPtr ui_command_result; - { - ::testing::InSequence sequence; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&vr_command_result), Return(true))); - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&tts_command_result), Return(true))); - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&ui_command_result), Return(true))); - } - MessageHelper::SendChangeRegistrationRequestToHMI(mock_app_, - mock_application_manager_); - - ASSERT_TRUE(vr_command_result.valid()); - ASSERT_TRUE(tts_command_result.valid()); - ASSERT_TRUE(ui_command_result.valid()); - EXPECT_EQ( - hmi_apis::FunctionID::VR_ChangeRegistration, - (*vr_command_result)[strings::params][strings::function_id].asInt()); - EXPECT_EQ( - hmi_apis::FunctionID::TTS_ChangeRegistration, - (*tts_command_result)[strings::params][strings::function_id].asInt()); - EXPECT_EQ( - hmi_apis::FunctionID::UI_ChangeRegistration, - (*ui_command_result)[strings::params][strings::function_id].asInt()); - EXPECT_EQ( - kAppId_, - (*vr_command_result)[strings::msg_params][strings::app_id].asBool()); - EXPECT_EQ( - kAppId_, - (*tts_command_result)[strings::msg_params][strings::app_id].asBool()); - EXPECT_EQ( - kAppId_, - (*ui_command_result)[strings::msg_params][strings::app_id].asBool()); -} - -TEST_F(MessageHelperTest, SendAddSubMenuRequestToHMI_NoApp_UNSUCCESS) { - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)).Times(0); - - ApplicationSharedPtr dummy_app; - MessageHelper::SendAddSubMenuRequestToHMI(dummy_app, - mock_application_manager_); -} - -TEST_F(MessageHelperTest, SendAddSubMenuRequestToHMI_SUCCESS) { - SubMenuMap commands_map; - smart_objects::SmartObject command(smart_objects::SmartType_Map); - commands_map.insert(SubMenuMap::value_type(0u, &command)); - - EXPECT_CALL(*mock_app_, app_id()).WillRepeatedly(Return(kAppId_)); - EXPECT_CALL(*mock_app_, sub_menu_map()) - .WillRepeatedly(Return(DataAccessor<SubMenuMap>(commands_map, lock_))); - - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - EXPECT_CALL(mock_application_manager_, GetNextHMICorrelationID()) - .WillOnce(Return(kNextHMICorrelationID)); - - MessageHelper::SendAddSubMenuRequestToHMI(mock_app_, - mock_application_manager_); - - ASSERT_TRUE(result.valid()); - - EXPECT_EQ(hmi_apis::FunctionID::UI_AddSubMenu, - (*result)[strings::params][strings::function_id].asInt()); - EXPECT_EQ(kAppId_, (*result)[strings::msg_params][strings::app_id].asUInt()); -} - -TEST_F(MessageHelperTest, - SendAllOnButtonSubscriptionNotificationsForApp_NoApp_UNSUCCESS) { - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)).Times(0); - - ApplicationSharedPtr dummy_app; - MessageHelper::SendAllOnButtonSubscriptionNotificationsForApp( - dummy_app, mock_application_manager_); -} - -TEST_F(MessageHelperTest, - SendAllOnButtonSubscriptionNotificationsForApp_SUCCESS) { - EXPECT_CALL(*mock_app_, hmi_app_id()).WillRepeatedly(Return(kAppId_)); - - ButtonSubscriptions subscribed_buttons; - subscribed_buttons.insert(mobile_apis::ButtonName::CUSTOM_BUTTON); - - EXPECT_CALL(*mock_app_, SubscribedButtons()) - .WillRepeatedly( - Return(DataAccessor<ButtonSubscriptions>(subscribed_buttons, lock_))); - - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - - MessageHelper::SendAllOnButtonSubscriptionNotificationsForApp( - mock_app_, mock_application_manager_); - - ASSERT_TRUE(result.valid()); - - EXPECT_EQ(hmi_apis::FunctionID::Buttons_OnButtonSubscription, - (*result)[strings::params][strings::function_id].asInt()); - EXPECT_EQ(kAppId_, (*result)[strings::msg_params][strings::app_id].asUInt()); -} - -TEST_F(MessageHelperTest, SendAudioStartStream_SUCCESS) { - MockApplicationManagerSettings app_mngr_settings; - - EXPECT_CALL(mock_application_manager_, get_settings()) - .WillRepeatedly(ReturnRef(app_mngr_settings)); - - const std::string kAudioServerType("test_audio_server_type"); - EXPECT_CALL(app_mngr_settings, audio_server_type()) - .WillRepeatedly(ReturnRef(kAudioServerType)); - - const std::string kAudioStreamFile("test_audio_stream_file"); - EXPECT_CALL(app_mngr_settings, audio_stream_file()) - .WillRepeatedly(ReturnRef(kAudioStreamFile)); - - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - EXPECT_CALL(mock_application_manager_, GetNextHMICorrelationID()) - .WillOnce(Return(kNextHMICorrelationID)); - - MessageHelper::SendAudioStartStream(kAppId_, mock_application_manager_); - - ASSERT_TRUE(result.valid()); - - EXPECT_EQ(hmi_apis::FunctionID::Navigation_StartAudioStream, - (*result)[strings::params][strings::function_id].asInt()); - EXPECT_EQ(kAppId_, (*result)[strings::msg_params][strings::app_id].asUInt()); -} - -TEST_F(MessageHelperTest, SendGetListOfPermissionsResponse_SUCCESS) { - std::vector<policy::FunctionalGroupPermission> permissions; - policy::CCSStatus ccs_status; - policy::FunctionalGroupPermission permission; - permission.state = policy::GroupConsent::kGroupAllowed; - permissions.push_back(permission); - - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - - const uint32_t kCorrelationId = 0u; - MessageHelper::SendGetListOfPermissionsResponse( - permissions, ccs_status, kCorrelationId, mock_application_manager_); - - ASSERT_TRUE(result.valid()); - - EXPECT_EQ(hmi_apis::FunctionID::SDL_GetListOfPermissions, - (*result)[strings::params][strings::function_id].asInt()); - - smart_objects::SmartObject& msg_params = (*result)[strings::msg_params]; - const std::string ccs_status_key = "ccsStatus"; - EXPECT_TRUE(msg_params.keyExists(ccs_status_key)); - EXPECT_TRUE(msg_params[ccs_status_key].empty()); + message_params, appSharedPtr, function_id); } TEST_F(MessageHelperTest, - SendGetListOfPermissionsResponse_CCSStatusNonEmpty_SUCCESS) { - using namespace policy; - using namespace smart_objects; - + SendGetListOfPermissionsResponse_ExternalConsentStatusNonEmpty_SUCCESS) { std::vector<policy::FunctionalGroupPermission> permissions; - CCSStatus ccs_status; + policy::ExternalConsentStatus external_consent_status; const int32_t entity_type_1 = 1; const int32_t entity_id_1 = 2; - const EntityStatus entity_status_1 = kStatusOn; + const policy::EntityStatus entity_status_1 = policy::kStatusOn; + const policy::EntityStatus entity_status_2 = policy::kStatusOff; const int32_t entity_type_2 = 3; const int32_t entity_id_2 = 4; - const EntityStatus entity_status_2 = kStatusOff; - ccs_status.insert(CCSStatusItem(entity_type_1, entity_id_1, entity_status_1)); - ccs_status.insert(CCSStatusItem(entity_type_2, entity_id_2, entity_status_2)); + external_consent_status.insert(policy::ExternalConsentStatusItem( + entity_type_1, entity_id_1, entity_status_1)); + external_consent_status.insert(policy::ExternalConsentStatusItem( + entity_type_2, entity_id_2, entity_status_2)); - SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) + smart_objects::SmartObjectSPtr result; + EXPECT_CALL(mock_application_manager, ManageHMICommand(_)) .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); const uint32_t correlation_id = 0u; - MessageHelper::SendGetListOfPermissionsResponse( - permissions, ccs_status, correlation_id, mock_application_manager_); + MessageHelper::SendGetListOfPermissionsResponse(permissions, + external_consent_status, + correlation_id, + mock_application_manager); - ASSERT_TRUE(result.valid()); + ASSERT_TRUE(result); - SmartObject& msg_params = (*result)[strings::msg_params]; - const std::string ccs_status_key = "ccsStatus"; - EXPECT_TRUE(msg_params.keyExists(ccs_status_key)); + smart_objects::SmartObject& msg_params = (*result)[strings::msg_params]; + const std::string external_consent_status_key = "externalConsentStatus"; + EXPECT_TRUE(msg_params.keyExists(external_consent_status_key)); - SmartArray* status_array = msg_params[ccs_status_key].asArray(); - EXPECT_TRUE(ccs_status.size() == status_array->size()); + smart_objects::SmartArray* status_array = + msg_params[external_consent_status_key].asArray(); + EXPECT_TRUE(external_consent_status.size() == status_array->size()); const std::string entityType = "entityType"; const std::string entityID = "entityID"; const std::string status = "status"; - SmartObject item_1_so = SmartObject(SmartType_Map); + + smart_objects::SmartObject item_1_so = + smart_objects::SmartObject(smart_objects::SmartType_Map); item_1_so[entityType] = entity_type_1; item_1_so[entityID] = entity_id_1; item_1_so[status] = hmi_apis::Common_EntityStatus::ON; - SmartObject item_2_so = SmartObject(SmartType_Map); + smart_objects::SmartObject item_2_so = + smart_objects::SmartObject(smart_objects::SmartType_Map); item_2_so[entityType] = entity_type_2; item_2_so[entityID] = entity_id_2; item_2_so[status] = hmi_apis::Common_EntityStatus::OFF; @@ -1853,310 +967,7 @@ TEST_F(MessageHelperTest, EXPECT_TRUE(status_array->end() != std::find(status_array->begin(), status_array->end(), item_2_so)); } - -TEST_F(MessageHelperTest, - SendGetSystemInfoRequest_ExpectSendCorrectMessageToHMI) { - EXPECT_CALL(mock_application_manager_, GetNextHMICorrelationID()) - .WillOnce(Return(kCorrelationId)); - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - - MessageHelper::SendGetSystemInfoRequest(mock_application_manager_); - - ASSERT_TRUE(result.valid()); - EXPECT_EQ(hmi_apis::FunctionID::BasicCommunication_GetSystemInfo, - (*result)[strings::params][strings::function_id].asInt()); - CheckParamsOfMessage(result, false, true); -} - -TEST_F( - MessageHelperTest, - SendGetUserFriendlyMessageResponseWithEmptyMessages_ExpectSendCorrectMessageToHMI) { - std::vector<policy::UserFriendlyMessage> msg; - CheckSendingGetUserFriendlyMessage(msg); -} - -TEST_F( - MessageHelperTest, - SendGetUserFriendlyMessageResponseWithMessages_ExpectSendCorrectMessageToHMI) { - policy::UserFriendlyMessage arr[] = { - {"first_code"}, {"second_code"}, {"third_code"}}; - std::vector<policy::UserFriendlyMessage> msg(arr, arr + 3); - CheckSendingGetUserFriendlyMessage(msg); -} - -TEST_F(MessageHelperTest, - SendGlobalPropertiesToHMIApplicationIsNotValid_ExpectReturnFromMethod) { - MockApplicationSharedPtr mock_app; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)).Times(0); - MessageHelper::SendGlobalPropertiesToHMI(mock_app, mock_application_manager_); -} - -TEST_F( - MessageHelperTest, - SendGlobalPropertiesToHMIWithUIGlobalProperties_ExpectSendCorrectMessageToHMI) { - const uint8_t number_msg_params = 6; - EXPECT_CALL(mock_application_manager_, GetNextHMICorrelationID()) - .WillOnce(Return(kCorrelationId)); - smart_objects::SmartObject dummy_so(smart_objects::SmartType_Map); - dummy_so["dummy_param"] = "dummy_param"; - EXPECT_CALL(*mock_app_, vr_help_title()) - .Times(3) - .WillRepeatedly(Return(&dummy_so)); - EXPECT_CALL(*mock_app_, vr_help()).Times(2).WillRepeatedly(Return(&dummy_so)); - EXPECT_CALL(*mock_app_, keyboard_props()) - .Times(2) - .WillRepeatedly(Return(&dummy_so)); - EXPECT_CALL(*mock_app_, menu_title()) - .Times(2) - .WillRepeatedly(Return(&dummy_so)); - EXPECT_CALL(*mock_app_, menu_icon()) - .Times(2) - .WillRepeatedly(Return(&dummy_so)); - EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId)); - EXPECT_CALL(*mock_app_, help_prompt()) - .WillOnce(Return(static_cast<smart_objects::SmartObject*>(NULL))); - EXPECT_CALL(*mock_app_, timeout_prompt()) - .WillOnce(Return(static_cast<smart_objects::SmartObject*>(NULL))); - - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - MessageHelper::SendGlobalPropertiesToHMI(mock_app_, - mock_application_manager_); - - ASSERT_TRUE(result.valid()); - smart_objects::SmartObject& global_properties_msg_params = - (*result)[strings::msg_params]; - - EXPECT_EQ((*result)[strings::params][strings::function_id].asInt(), - hmi_apis::FunctionID::UI_SetGlobalProperties); - CheckParamsOfMessage(result, true, true); - - EXPECT_EQ(global_properties_msg_params.length(), number_msg_params); - EXPECT_TRUE(global_properties_msg_params.keyExists(strings::vr_help_title)); - EXPECT_TRUE(global_properties_msg_params.keyExists(strings::vr_help)); - EXPECT_TRUE( - global_properties_msg_params.keyExists(strings::keyboard_properties)); - EXPECT_TRUE(global_properties_msg_params.keyExists(strings::menu_title)); - EXPECT_TRUE(global_properties_msg_params.keyExists(strings::menu_icon)); - std::set<std::string> keys = global_properties_msg_params.enumerate(); - keys.erase(strings::app_id); - for (std::set<std::string>::iterator it = keys.begin(); it != keys.end(); - ++it) { - EXPECT_TRUE(global_properties_msg_params[(*it)] == dummy_so); - } -} - -TEST_F( - MessageHelperTest, - SendGlobalPropertiesToHMIWithTTSGlobalProperties_ExpectSendCorrectMessageToHMI) { - const uint8_t number_msg_params = 3; - EXPECT_CALL(mock_application_manager_, GetNextHMICorrelationID()) - .WillOnce(Return(kCorrelationId)); - smart_objects::SmartObject dummy_so(smart_objects::SmartType_Map); - dummy_so["dummy_param"] = "dummy_param"; - EXPECT_CALL(*mock_app_, vr_help_title()) - .WillOnce(Return(static_cast<smart_objects::SmartObject*>(NULL))); - EXPECT_CALL(*mock_app_, vr_help()) - .WillOnce(Return(static_cast<smart_objects::SmartObject*>(NULL))); - EXPECT_CALL(*mock_app_, help_prompt()) - .Times(3) - .WillRepeatedly(Return(&dummy_so)); - EXPECT_CALL(*mock_app_, timeout_prompt()) - .Times(2) - .WillRepeatedly(Return(&dummy_so)); - EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId)); - - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - MessageHelper::SendGlobalPropertiesToHMI(mock_app_, - mock_application_manager_); - - ASSERT_TRUE(result.valid()); - smart_objects::SmartObject& global_properties_msg_params = - (*result)[strings::msg_params]; - - EXPECT_EQ((*result)[strings::params][strings::function_id].asInt(), - hmi_apis::FunctionID::TTS_SetGlobalProperties); - CheckParamsOfMessage(result, true, true); - EXPECT_EQ(global_properties_msg_params.length(), number_msg_params); - EXPECT_TRUE(global_properties_msg_params.keyExists(strings::help_prompt)); - EXPECT_TRUE(global_properties_msg_params.keyExists(strings::timeout_prompt)); - std::set<std::string> keys = global_properties_msg_params.enumerate(); - keys.erase(strings::app_id); - for (std::set<std::string>::iterator it = keys.begin(); it != keys.end(); - ++it) { - EXPECT_TRUE(global_properties_msg_params[(*it)] == dummy_so); - } -} - -TEST_F(MessageHelperTest, - SendHashUpdateNotificationApplicationIsNotValid_ExpectReturnFromMethod) { - MockApplicationSharedPtr mock_app; - EXPECT_CALL(mock_application_manager_, application(_)) - .WillOnce(Return(mock_app)); - EXPECT_CALL(mock_application_manager_, ManageMobileCommand(_, _)).Times(0); - MessageHelper::SendHashUpdateNotification(kAppId, mock_application_manager_); -} - -TEST_F(MessageHelperTest, - SendHashUpdateNotification_ExpectSendCorrectMessageToMobile) { - resumption::MockResumeCtrl mock_resume_ctrl; - EXPECT_CALL(mock_application_manager_, application(_)) - .WillOnce(Return(mock_app_)); - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageMobileCommand(_, _)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - EXPECT_CALL(mock_application_manager_, resume_controller()) - .WillOnce(ReturnRef(mock_resume_ctrl)); - EXPECT_CALL(mock_resume_ctrl, ApplicationsDataUpdated()).Times(1); - MessageHelper::SendHashUpdateNotification(kAppId, mock_application_manager_); - ASSERT_TRUE(result.valid()); - EXPECT_EQ((*result)[strings::params][strings::function_id].asInt(), - mobile_apis::FunctionID::OnHashChangeID); - EXPECT_EQ((*result)[strings::params][strings::connection_key].asInt(), - kAppId); -} - -TEST_F(MessageHelperTest, SendNaviStartStream_ExpectSendCorrectMessageToHMI) { - uint16_t video_streaming_port = 8080; - CheckParametersNaviStartStreamMessage( - "http://127.0.0.1:8080", "socket", "127.0.0.1", video_streaming_port); - CheckParametersNaviStartStreamMessage("pipe_name", "pipe", "pipe_name"); - CheckParametersNaviStartStreamMessage("file_name", "file", "file_name"); -} - -TEST_F(MessageHelperTest, SendNaviStopStream_ExpectSendCorrectMessageToHMI) { - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, GetNextHMICorrelationID()) - .WillOnce(Return(kCorrelationId)); - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - MessageHelper::SendNaviStopStream(kAppId, mock_application_manager_); - - ASSERT_TRUE(result.valid()); - EXPECT_TRUE((*result)[strings::params].keyExists(strings::function_id)); - EXPECT_EQ((*result)[strings::params][strings::function_id].asInt(), - hmi_apis::FunctionID::Navigation_StopStream); - CheckParamsOfMessage(result, true, true); -} - -TEST_F(MessageHelperTest, - SendOnAppPermissionsChangedNotification_ExpectSendCorrectMessageToHMI) { - std::string policy_app_id("policyappid"); - policy::AppPermissions dummy_permissions(policy_app_id); - dummy_permissions.appRevoked = true; - dummy_permissions.isAppPermissionsRevoked = true; - std::vector<policy::FunctionalGroupPermission> functional_group_permissions; - policy::FunctionalGroupPermission obj; - FillFunctionalGroupPermissionObj(obj, - "group_alias1", - "group_name1", - 1, - policy::GroupConsent::kGroupAllowed); - functional_group_permissions.push_back(obj); - FillFunctionalGroupPermissionObj(obj, - "group_alias2", - "group_name2", - 2, - policy::GroupConsent::kGroupDisallowed); - functional_group_permissions.push_back(obj); - FillFunctionalGroupPermissionObj(obj, - "group_alias3", - "group_name3", - 3, - policy::GroupConsent::kGroupUndefined); - dummy_permissions.appRevokedPermissions = functional_group_permissions; - dummy_permissions.appPermissionsConsentNeeded = true; - dummy_permissions.appUnauthorized = true; - dummy_permissions.priority = "NORMAL"; - dummy_permissions.requestTypeChanged = true; - std::vector<std::string> request_type(3, "dummy"); - dummy_permissions.requestType = request_type; - smart_objects::SmartObjectSPtr result; - EXPECT_CALL(mock_application_manager_, ManageHMICommand(_)) - .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); - MessageHelper::SendOnAppPermissionsChangedNotification( - kAppId, dummy_permissions, mock_application_manager_); - ASSERT_TRUE(result.valid()); - EXPECT_TRUE((*result)[strings::params].keyExists(strings::function_id)); - EXPECT_EQ((*result)[strings::params][strings::function_id].asInt(), - hmi_apis::FunctionID::SDL_OnAppPermissionChanged); - CheckParamsOfMessage(result, true, false); - uint16_t number_msg_params = 8; - std::string app_revoked("appRevoked"); - std::string is_app_permissions_revoked("isAppPermissionsRevoked"); - std::string app_revoked_permissions("appRevokedPermissions"); - std::string allowed("allowed"); - std::string name("name"); - std::string id("id"); - - EXPECT_EQ((*result)[strings::msg_params].length(), number_msg_params); - EXPECT_TRUE((*result)[strings::msg_params].keyExists(app_revoked)); - EXPECT_TRUE((*result)[strings::msg_params][app_revoked].asBool()); - EXPECT_TRUE( - (*result)[strings::msg_params].keyExists(is_app_permissions_revoked)); - EXPECT_TRUE( - (*result)[strings::msg_params][is_app_permissions_revoked].asBool()); - EXPECT_TRUE( - (*result)[strings::msg_params].keyExists(app_revoked_permissions)); - EXPECT_TRUE( - ((*result)[strings::msg_params][app_revoked_permissions].length() == - functional_group_permissions.size())); - uint16_t number_revoked_params = 3; - uint16_t number_revoked_params_without_allowed = 2; - smart_objects::SmartObject& revoked_items = - (*result)[strings::msg_params][app_revoked_permissions]; - for (uint16_t i = 0; i < revoked_items.length(); ++i) { - if (policy::GroupConsent::kGroupUndefined == - functional_group_permissions[i].state) { - EXPECT_TRUE(revoked_items[i].length() == - number_revoked_params_without_allowed); - EXPECT_FALSE(revoked_items[i].keyExists(allowed)); - } else { - EXPECT_TRUE(revoked_items[i].length() == number_revoked_params); - EXPECT_TRUE(revoked_items[i].keyExists(allowed)); - if (policy::kGroupAllowed == functional_group_permissions[i].state) { - EXPECT_TRUE(revoked_items[i][allowed].asBool()); - } else { - EXPECT_FALSE(revoked_items[i][allowed].asBool()); - } - } - EXPECT_TRUE(revoked_items[i].keyExists(name)); - EXPECT_TRUE(revoked_items[i][name].asString() == - functional_group_permissions[i].group_alias); - EXPECT_TRUE(revoked_items[i].keyExists(id)); - EXPECT_TRUE(revoked_items[i][id].asInt() == - functional_group_permissions[i].group_id); - } - - std::string app_permissions_consent_needed("appPermissionsConsentNeeded"); - std::string app_unauthorized("appUnauthorized"); - std::string priority("priority"); - EXPECT_TRUE( - (*result)[strings::msg_params].keyExists(app_permissions_consent_needed)); - EXPECT_TRUE( - (*result)[strings::msg_params][app_permissions_consent_needed].asBool()); - EXPECT_TRUE((*result)[strings::msg_params].keyExists(app_unauthorized)); - EXPECT_TRUE((*result)[strings::msg_params][app_unauthorized].asBool()); - EXPECT_TRUE((*result)[strings::msg_params].keyExists(priority)); - EXPECT_EQ((*result)[strings::msg_params][priority].asInt(), - hmi_apis::Common_AppPriority::NORMAL); - EXPECT_TRUE((*result)[strings::msg_params].keyExists(strings::request_type)); - smart_objects::SmartObject& request_types_array = - (*result)[strings::msg_params][strings::request_type]; - EXPECT_TRUE(request_types_array.length() == - dummy_permissions.requestType.size()); - for (uint16_t i = 0; i < request_types_array.length(); ++i) { - EXPECT_TRUE(request_types_array[i].asString() == - dummy_permissions.requestType[i]); - } ->>>>>>> d63b94c... Changes CCS item implementation in order to support status as boolean -} - +#endif } // namespace application_manager_test } // namespace components } // namespace test diff --git a/src/components/application_manager/test/mock_message_helper.cc b/src/components/application_manager/test/mock_message_helper.cc index 84b672e1a5..01ce9cb066 100644 --- a/src/components/application_manager/test/mock_message_helper.cc +++ b/src/components/application_manager/test/mock_message_helper.cc @@ -173,10 +173,18 @@ void MessageHelper::CreateGetVehicleDataRequest( void MessageHelper::SendGetListOfPermissionsResponse( const std::vector<policy::FunctionalGroupPermission>& permissions, +#ifdef EXTERNAL_PROPRIETARY_MODE + const policy::ExternalConsentStatus& external_consent_status, +#endif // EXTERNAL_PROPRIETARY_MODE uint32_t correlation_id, ApplicationManager& app_mngr) { MockMessageHelper::message_helper_mock()->SendGetListOfPermissionsResponse( - permissions, correlation_id, app_mngr); + permissions, +#ifdef EXTERNAL_PROPRIETARY_MODE + external_consent_status, +#endif // EXTERNAL_PROPRIETARY_MODE + correlation_id, + app_mngr); } void MessageHelper::SendOnPermissionsChangeNotification( @@ -459,4 +467,10 @@ std::string MessageHelper::StringifiedHMILevel( hmi_level); } +std::string MessageHelper::GetDeviceMacAddressForHandle( + const uint32_t device_handle, const ApplicationManager& app_mngr) { + return MockMessageHelper::message_helper_mock()->GetDeviceMacAddressForHandle( + device_handle, app_mngr); +} + } // namespace application_manager diff --git a/src/components/application_manager/test/policy_handler_test.cc b/src/components/application_manager/test/policy_handler_test.cc index 70c2f77dfb..a4f3354b79 100644 --- a/src/components/application_manager/test/policy_handler_test.cc +++ b/src/components/application_manager/test/policy_handler_test.cc @@ -36,7 +36,7 @@ #include "gmock/gmock.h" #include "application_manager/policies/policy_handler.h" -#include "policy/mock_policy_manager.h" +#include "application_manager/policies/delegates/app_permission_delegate.h" #include "connection_handler/connection_handler_impl.h" #include "application_manager/application_manager_impl.h" #include "application_manager/application_impl.h" @@ -67,6 +67,8 @@ #include "application_manager/mock_event_dispatcher.h" #include "application_manager/mock_state_controller.h" #include "application_manager/mock_hmi_capabilities.h" +#include "policy/mock_policy_manager.h" +#include "policy/usage_statistics/mock_statistics_manager.h" namespace test { namespace components { @@ -76,6 +78,7 @@ using namespace application_manager; using namespace policy; using namespace utils::custom_string; using testing::_; +using ::testing::Mock; using ::testing::Return; using ::testing::ReturnRef; using ::testing::NiceMock; @@ -91,7 +94,6 @@ class PolicyHandlerTest : public ::testing::Test { public: PolicyHandlerTest() : policy_handler_(policy_settings_, app_manager_) - , mock_message_helper_(*MockMessageHelper::message_helper_mock()) , kPolicyAppId_("fake_app_id") , kMacAddr_("kMacAddr_ess") , kDeviceId_("fake_device_id") @@ -102,9 +104,19 @@ class PolicyHandlerTest : public ::testing::Test { , kPreloadPTFile_("sdl_preloaded_pt.json") , kAppStorageFolder_("storage") , app_set(test_app, app_lock) - , kAppId_(10u) + , kAppId1_(10u) + , kAppId2_(11u) + , kConnectionKey_(1u) + , kCorrelationKey_(2u) , kSnapshotFile_("snapshot") - , kSnapshotStorage_("snapshot_storage") { + , kSnapshotStorage_("snapshot_storage") + , kGroupAliasAllowed_("allowed") + , kGroupAliasDisallowed_("disallowed") + , kGroupNameAllowed_("name_allowed") + , kGroupNameDisallowed_("name_disallowed") + , kCallsCount_(1u) + , kTimeout_(1000u) + , mock_message_helper_(*MockMessageHelper::message_helper_mock()) { Mock::VerifyAndClearExpectations(&mock_message_helper_); } @@ -120,11 +132,11 @@ class PolicyHandlerTest : public ::testing::Test { connection_handler_test::MockConnectionHandler conn_handler; protocol_handler_test::MockSessionObserver mock_session_observer; application_manager_test::MockStateController mock_state_controller; + components::usage_statistics_test::MockStatisticsManager + mock_statistics_manager_; PolicyHandler policy_handler_; utils::SharedPtr<policy_manager_test::MockPolicyManager> mock_policy_manager_; application_manager_test::MockApplicationManager app_manager_; - MockMessageHelper& mock_message_helper_; - application_manager_test::MockHMICapabilities mock_hmi_capabilities_; const std::string kPolicyAppId_; const std::string kMacAddr_; const std::string kDeviceId_; @@ -137,9 +149,19 @@ class PolicyHandlerTest : public ::testing::Test { ApplicationSet test_app; sync_primitives::Lock app_lock; DataAccessor<ApplicationSet> app_set; - const uint32_t kAppId_; + const uint32_t kAppId1_; + const uint32_t kAppId2_; + const uint32_t kConnectionKey_; + const uint32_t kCorrelationKey_; const std::string kSnapshotFile_; const std::string kSnapshotStorage_; + const std::string kGroupAliasAllowed_; + const std::string kGroupAliasDisallowed_; + const std::string kGroupNameAllowed_; + const std::string kGroupNameDisallowed_; + const uint32_t kCallsCount_; + const uint32_t kTimeout_; + application_manager::MockMessageHelper& mock_message_helper_; virtual void SetUp() OVERRIDE { Mock::VerifyAndClearExpectations(&mock_message_helper_); @@ -162,6 +184,7 @@ class PolicyHandlerTest : public ::testing::Test { } virtual void TearDown() OVERRIDE { + Mock::VerifyAndClearExpectations(&mock_message_helper_); ON_CALL(mock_event_dispatcher_, remove_observer(_, _)); } @@ -203,8 +226,77 @@ class PolicyHandlerTest : public ::testing::Test { #endif // PROPRIETARY_MODE EXPECT_CALL(mock_message_helper_, SendPolicyUpdate(_, _, _, _)); } + + void TestOnPermissionsUpdated(const std::string& default_hmi_level, + const mobile_apis::HMILevel::eType hmi_level) { + EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_)) + .WillRepeatedly(Return(mock_app_)); + EXPECT_CALL(*mock_app_, app_id()).WillRepeatedly(Return(kAppId1_)); + EXPECT_CALL(*mock_app_, hmi_level()) + .WillOnce(Return(mobile_apis::HMILevel::HMI_NONE)); + + EXPECT_CALL(mock_message_helper_, StringToHMILevel(default_hmi_level)) + .WillOnce(Return(hmi_level)); + EXPECT_CALL(mock_message_helper_, + SendOnPermissionsChangeNotification(kAppId1_, _, _)); + EXPECT_CALL(app_manager_, state_controller()).Times(0); + + Permissions permissions; + policy_handler_.OnPermissionsUpdated( + kPolicyAppId_, permissions, default_hmi_level); + } + + void CreateFunctionalGroupPermission( + const GroupConsent state, + const std::string& group_alias, + const std::string& group_name, + policy::FunctionalGroupPermission& group_permission) { + group_permission.state = state; + group_permission.group_alias = group_alias; + group_permission.group_name = group_name; + } + + policy_table::AppHmiTypes HmiTypes(const policy_table::AppHMIType hmi_type) { + policy_table::AppHmiTypes hmi_types; + hmi_types.push_back(hmi_type); + return hmi_types; + } }; +namespace { +/** + * @brief The WaitAsync class + * can wait for a certain amount of function calls from different + * threads, or a timeout expires. + */ +class WaitAsync { + public: + WaitAsync(const uint32_t count, const uint32_t timeout) + : count_(count), timeout_(timeout) {} + + void Notify() { + count_--; + cond_var_.NotifyOne(); + } + + bool Wait(sync_primitives::AutoLock& auto_lock) { + while (count_ > 0) { + sync_primitives::ConditionalVariable::WaitStatus wait_status = + cond_var_.WaitFor(auto_lock, timeout_); + if (wait_status == sync_primitives::ConditionalVariable::kTimeout) { + return false; + } + } + return true; + } + + private: + int count_; + const uint32_t timeout_; + sync_primitives::ConditionalVariable cond_var_; +}; +} + TEST_F(PolicyHandlerTest, LoadPolicyLibrary_Method_ExpectLibraryLoaded) { // Check before policy enabled from ini file EXPECT_CALL(policy_settings_, enable_policy()).WillRepeatedly(Return(false)); @@ -335,33 +427,66 @@ TEST_F(PolicyHandlerTest, UnloadPolicyLibrary_method_ExpectLibraryUnloaded) { TEST_F(PolicyHandlerTest, OnPermissionsUpdated_method_With2Parameters) { // Check expectations - EXPECT_CALL(app_manager_, application_by_policy_id(_)) + EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_)) .WillOnce(Return(mock_app_)); - EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId_)); + EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId1_)); EXPECT_CALL(mock_message_helper_, - SendOnPermissionsChangeNotification(kAppId_, _, _)); + SendOnPermissionsChangeNotification(kAppId1_, _, _)); // Act Permissions perms; policy_handler_.OnPermissionsUpdated(kPolicyAppId_, perms); } +TEST_F(PolicyHandlerTest, OnPermissionsUpdated_TwoParams_InvalidApp_UNSUCCESS) { + utils::SharedPtr<application_manager_test::MockApplication> invalid_app; + EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_)) + .WillOnce(Return(invalid_app)); + EXPECT_CALL(mock_message_helper_, + SendOnPermissionsChangeNotification(_, _, _)).Times(0); + + Permissions permissions; + policy_handler_.OnPermissionsUpdated(kPolicyAppId_, permissions); +} + +TEST_F(PolicyHandlerTest, OnPermissionsUpdated_InvalidApp_UNSUCCESS) { + utils::SharedPtr<application_manager_test::MockApplication> invalid_app; + EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_)) + .WillOnce(Return(mock_app_)) + .WillOnce(Return(invalid_app)); + EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId1_)); + EXPECT_CALL(mock_message_helper_, + SendOnPermissionsChangeNotification(kAppId1_, _, _)); + + Permissions permissions; + policy_handler_.OnPermissionsUpdated(kPolicyAppId_, permissions, "HMI_FULL"); +} + +TEST_F(PolicyHandlerTest, OnPermissionsUpdated_HmiLevelInvalidEnum_UNSUCCESS) { + TestOnPermissionsUpdated("INVALID_ENUM", mobile_apis::HMILevel::INVALID_ENUM); +} + +TEST_F(PolicyHandlerTest, + OnPermissionsUpdated_HmiLevelEqualsToCurrentHmiLevel_UNSUCCESS) { + TestOnPermissionsUpdated("HMI_NONE", mobile_apis::HMILevel::HMI_NONE); +} + TEST_F(PolicyHandlerTest, OnPermissionsUpdated_MethodWith3Parameters_FromNONE_ToFULL) { // Set hmi level from NONE to FULL const std::string new_kHmiLevel_string = "HMI_FULL"; mobile_apis::HMILevel::eType new_hmi_level = mobile_apis::HMILevel::HMI_FULL; // Check expectations - EXPECT_CALL(app_manager_, application_by_policy_id(_)) + EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_)) .Times(2) .WillRepeatedly(Return(mock_app_)); - EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId_)); + EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId1_)); EXPECT_CALL(mock_message_helper_, StringToHMILevel(new_kHmiLevel_string)) .WillOnce(Return(new_hmi_level)); EXPECT_CALL(*mock_app_, hmi_level()) .WillOnce(Return(mobile_apis::HMILevel::HMI_NONE)); EXPECT_CALL(mock_message_helper_, - SendOnPermissionsChangeNotification(kAppId_, _, _)); + SendOnPermissionsChangeNotification(kAppId1_, _, _)); EXPECT_CALL(app_manager_, state_controller()) .WillRepeatedly(ReturnRef(mock_state_controller)); @@ -379,17 +504,17 @@ TEST_F(PolicyHandlerTest, mobile_apis::HMILevel::eType new_hmi_level = mobile_apis::HMILevel::HMI_LIMITED; // Check expectations - EXPECT_CALL(app_manager_, application_by_policy_id(_)) + EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_)) .Times(2) .WillRepeatedly(Return(mock_app_)); - EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId_)); + EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId1_)); EXPECT_CALL(mock_message_helper_, StringToHMILevel(new_kHmiLevel_string)) .WillOnce(Return(new_hmi_level)); EXPECT_CALL(*mock_app_, hmi_level()) .WillOnce(Return(mobile_apis::HMILevel::HMI_NONE)); EXPECT_CALL(mock_message_helper_, - SendOnPermissionsChangeNotification(kAppId_, _, _)); + SendOnPermissionsChangeNotification(kAppId1_, _, _)); EXPECT_CALL(app_manager_, state_controller()) .WillRepeatedly(ReturnRef(mock_state_controller)); @@ -406,17 +531,17 @@ TEST_F(PolicyHandlerTest, std::string new_kHmiLevel_string = "HMI_FULL"; mobile_apis::HMILevel::eType new_hmi_level = mobile_apis::HMILevel::HMI_FULL; // Check expectations - EXPECT_CALL(app_manager_, application_by_policy_id(_)) + EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_)) .Times(2) .WillRepeatedly(Return(mock_app_)); - EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId_)); + EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId1_)); EXPECT_CALL(mock_message_helper_, StringToHMILevel(new_kHmiLevel_string)) .WillOnce(Return(new_hmi_level)); EXPECT_CALL(*mock_app_, hmi_level()) .WillOnce(Return(mobile_apis::HMILevel::HMI_LIMITED)); EXPECT_CALL(mock_message_helper_, - SendOnPermissionsChangeNotification(kAppId_, _, _)); + SendOnPermissionsChangeNotification(kAppId1_, _, _)); EXPECT_CALL(app_manager_, state_controller()).Times(0); // Act @@ -440,12 +565,28 @@ TEST_F(PolicyHandlerTest, CheckPermissions) { CheckPermissionResult result; RPCParams kRpc_params; // Check expectations + const uint32_t device = 3; + const mobile_apis::HMILevel::eType hmi_level = + mobile_apis::HMILevel::HMI_NONE; + EXPECT_CALL(*mock_app_, hmi_level()).WillOnce(Return(hmi_level)); + EXPECT_CALL(*mock_app_, device()).WillOnce(Return(device)); + EXPECT_CALL(*mock_app_, policy_app_id()).WillOnce(Return(kPolicyAppId_)); +#ifdef EXTERNAL_PROPRIETARY_MODE EXPECT_CALL( *mock_policy_manager_, CheckPermissions(kPolicyAppId_, kHmiLevel_, kRpc_, kRpc_params, _)); + +#else // EXTERNAL_PROPRIETARY_MODE + EXPECT_CALL(*mock_policy_manager_, + CheckPermissions( + kDeviceId, kPolicyAppId_, kHmiLevel_, kRpc_, kRpc_params, _)); +#endif // EXTERNAL_PROPRIETARY_MODE + EXPECT_CALL(mock_message_helper_, StringifiedHMILevel(hmi_level)) + .WillOnce(Return(kHmiLevel_)); + EXPECT_CALL(mock_message_helper_, GetDeviceMacAddressForHandle(device, _)) + .WillOnce(Return(kDeviceId)); // Act - policy_handler_.CheckPermissions( - kPolicyAppId_, kHmiLevel_, kRpc_, kRpc_params, result); + policy_handler_.CheckPermissions(mock_app_, kRpc_, kRpc_params, result); } TEST_F(PolicyHandlerTest, GetNotificationsNumber) { @@ -661,7 +802,7 @@ void PolicyHandlerTest::TestActivateApp(const uint32_t connection_key, EXPECT_CALL(*application1, device()).WillRepeatedly(Return(device_handle)); EXPECT_CALL(*application1, is_audio()).WillRepeatedly(Return(false)); EXPECT_CALL(mock_message_helper_, - SendOnAppPermissionsChangedNotification(kAppId_, _, _)); + SendOnAppPermissionsChangedNotification(kAppId1_, _, _)); EXPECT_CALL(mock_session_observer, GetDataOnDeviceID(device_handle, _, _, _, _)); #endif // EXTERNAL_PROPRIETARY_MODE @@ -672,7 +813,7 @@ void PolicyHandlerTest::TestActivateApp(const uint32_t connection_key, ON_CALL(*mock_policy_manager_, Increment(_, _)).WillByDefault(Return()); EXPECT_CALL(*mock_policy_manager_, RemovePendingPermissionChanges(_)); EXPECT_CALL(mock_message_helper_, SendSDLActivateAppResponse(_, _, _)); - ON_CALL(*application1, app_id()).WillByDefault(Return(kAppId_)); + ON_CALL(*application1, app_id()).WillByDefault(Return(kAppId1_)); // Act policy_handler_.OnActivateApp(connection_key, correlation_id); } @@ -680,9 +821,55 @@ void PolicyHandlerTest::TestActivateApp(const uint32_t connection_key, TEST_F(PolicyHandlerTest, OnActivateApp) { // Arrange EnablePolicyAndPolicyManagerMock(); - const uint32_t connection_key = 1u; - const uint32_t correlation_id = 2u; - TestActivateApp(connection_key, correlation_id); + TestActivateApp(kConnectionKey_, kCorrelationKey_); +} + +TEST_F(PolicyHandlerTest, OnActivateApp_InvalidApp_UNSUCCESS) { + // Arrange + EnablePolicyAndPolicyManagerMock(); + utils::SharedPtr<application_manager_test::MockApplication> invalid_app; + EXPECT_CALL(app_manager_, application(kConnectionKey_)) + .WillOnce(Return(invalid_app)); + + EXPECT_CALL(mock_message_helper_, SendSDLActivateAppResponse(_, _, _)) + .Times(0); + policy_handler_.OnActivateApp(kConnectionKey_, kCorrelationKey_); +} + +TEST_F(PolicyHandlerTest, OnActivateApp_AppIsRevoked_AppNotActivated) { + // Arrange + EnablePolicyAndPolicyManagerMock(); + EXPECT_CALL(app_manager_, ActivateApplication(_)).Times(0); + EXPECT_CALL(app_manager_, application(kConnectionKey_)) + .WillOnce(Return(mock_app_)); + + AppPermissions permissions(kPolicyAppId_); + permissions.appRevoked = true; + +#ifdef EXTERNAL_PROPRIETARY_MODE + utils::SharedPtr<usage_statistics_test::MockStatisticsManager> + mock_statistics_manager = + utils::MakeShared<usage_statistics_test::MockStatisticsManager>(); + UsageStatistics usage_stats( + "0", + utils::SharedPtr<usage_statistics::StatisticsManager>( + mock_statistics_manager)); + EXPECT_CALL(*mock_app_, usage_report()).WillOnce(ReturnRef(usage_stats)); + const std::string default_mac = "00:00:00:00:00:00"; + EXPECT_CALL(*mock_policy_manager_, GetUserConsentForDevice(default_mac)) + .WillOnce(Return(DeviceConsent::kDeviceAllowed)); +#endif // EXTERNAL_PROPRIETARY_MODE + + // Check expectations + EXPECT_CALL(*mock_app_, policy_app_id()).WillOnce(Return(kPolicyAppId_)); + EXPECT_CALL(*mock_policy_manager_, GetAppPermissionsChanges(_)) + .WillOnce(Return(permissions)); + ON_CALL(*mock_policy_manager_, Increment(_, _)).WillByDefault(Return()); + EXPECT_CALL(*mock_policy_manager_, RemovePendingPermissionChanges(_)); + EXPECT_CALL(mock_message_helper_, SendSDLActivateAppResponse(_, _, _)); + ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId1_)); + // Act + policy_handler_.OnActivateApp(kConnectionKey_, kCorrelationKey_); } TEST_F(PolicyHandlerTest, OnIgnitionCycleOver) { @@ -704,7 +891,7 @@ void PolicyHandlerTest::OnPendingPermissionChangePrecondition( EXPECT_CALL(app_manager_, application_by_policy_id(kPolicyAppId_)) .WillOnce(Return(application)); - EXPECT_CALL(*application, app_id()).WillRepeatedly(Return(kAppId_)); + EXPECT_CALL(*application, app_id()).WillRepeatedly(Return(kAppId1_)); EXPECT_CALL(*application, hmi_level()).WillRepeatedly(Return(hmi_level)); } @@ -717,7 +904,7 @@ TEST_F(PolicyHandlerTest, AppPermissions permissions(kPolicyAppId_); permissions.appPermissionsConsentNeeded = false; EXPECT_CALL(mock_message_helper_, - SendOnAppPermissionsChangedNotification(kAppId_, _, _)).Times(0); + SendOnAppPermissionsChangedNotification(kAppId1_, _, _)).Times(0); EXPECT_CALL(*mock_policy_manager_, GetAppPermissionsChanges(_)) .WillOnce(Return(permissions)); @@ -735,7 +922,7 @@ TEST_F(PolicyHandlerTest, OnPendingPermissionChange_AppInLimitedConsentNeeded) { permissions.appPermissionsConsentNeeded = true; // Check expectations EXPECT_CALL(mock_message_helper_, - SendOnAppPermissionsChangedNotification(kAppId_, _, _)); + SendOnAppPermissionsChangedNotification(kAppId1_, _, _)); EXPECT_CALL(*mock_policy_manager_, GetAppPermissionsChanges(_)) .WillOnce(Return(permissions)); EXPECT_CALL(*mock_policy_manager_, @@ -755,7 +942,7 @@ TEST_F(PolicyHandlerTest, OnPendingPermissionChange_AppLimitedAndRevoked) { EXPECT_CALL(app_manager_, state_controller()) .WillRepeatedly(ReturnRef(mock_state_controller)); EXPECT_CALL(mock_message_helper_, - SendOnAppPermissionsChangedNotification(kAppId_, _, _)); + SendOnAppPermissionsChangedNotification(kAppId1_, _, _)); EXPECT_CALL(mock_state_controller, SetRegularState(_, mobile_apis::HMILevel::HMI_NONE, @@ -779,7 +966,7 @@ TEST_F(PolicyHandlerTest, OnPendingPermissionChange_AppInBackgroundAndRevoked) { // Check expectations EXPECT_CALL(mock_message_helper_, - SendOnAppPermissionsChangedNotification(kAppId_, _, _)); + SendOnAppPermissionsChangedNotification(kAppId1_, _, _)); EXPECT_CALL(*mock_policy_manager_, GetAppPermissionsChanges(_)) .WillOnce(Return(permissions)); @@ -801,14 +988,14 @@ TEST_F(PolicyHandlerTest, utils::MakeShared<NsSmartDeviceLink::NsSmartObjects::SmartObject>(); // Check expectations EXPECT_CALL(mock_message_helper_, - SendOnAppPermissionsChangedNotification(kAppId_, _, _)); + SendOnAppPermissionsChangedNotification(kAppId1_, _, _)); EXPECT_CALL(*mock_policy_manager_, GetAppPermissionsChanges(_)) .WillOnce(Return(permissions)); EXPECT_CALL(mock_message_helper_, GetOnAppInterfaceUnregisteredNotificationToMobile( - kAppId_, + kAppId1_, mobile_api::AppInterfaceUnregisteredReason::APP_UNAUTHORIZED)) .WillOnce(Return(message)); EXPECT_CALL(app_manager_, @@ -822,6 +1009,25 @@ TEST_F(PolicyHandlerTest, } TEST_F(PolicyHandlerTest, + OnPendingPermissionChange_AppInLIMITEDAndRequestTypeChanged_SUCCESS) { + OnPendingPermissionChangePrecondition( + mobile_apis::HMILevel::eType::HMI_LIMITED); + AppPermissions permissions(kPolicyAppId_); + permissions.requestTypeChanged = true; + + EXPECT_CALL(mock_message_helper_, + SendOnAppPermissionsChangedNotification(kAppId1_, _, _)); + + EXPECT_CALL(*mock_policy_manager_, GetAppPermissionsChanges(_)) + .WillOnce(Return(permissions)); + + EXPECT_CALL(*mock_policy_manager_, + RemovePendingPermissionChanges(kPolicyAppId_)); + + policy_handler_.OnPendingPermissionChange(kPolicyAppId_); +} + +TEST_F(PolicyHandlerTest, OnPendingPermissionChange_AppInBackgroundAndUnauthorized) { // Arrange OnPendingPermissionChangePrecondition( @@ -834,14 +1040,14 @@ TEST_F(PolicyHandlerTest, // Check expectations // Notification won't be sent EXPECT_CALL(mock_message_helper_, - SendOnAppPermissionsChangedNotification(kAppId_, _, _)).Times(0); + SendOnAppPermissionsChangedNotification(kAppId1_, _, _)).Times(0); EXPECT_CALL(*mock_policy_manager_, GetAppPermissionsChanges(_)) .WillOnce(Return(permissions)); EXPECT_CALL(mock_message_helper_, GetOnAppInterfaceUnregisteredNotificationToMobile( - kAppId_, + kAppId1_, mobile_api::AppInterfaceUnregisteredReason::APP_UNAUTHORIZED)) .WillOnce(Return(message)); EXPECT_CALL(app_manager_, @@ -897,11 +1103,12 @@ TEST_F(PolicyHandlerTest, OnGetUserFriendlyMessage) { const hmi_apis::Common_Language::eType default_language = hmi_apis::Common_Language::EN_US; const std::string default_language_string = "EN_US"; + application_manager_test::MockHMICapabilities mock_hmi_capabilities; EXPECT_CALL(app_manager_, hmi_capabilities()) - .WillOnce(ReturnRef(mock_hmi_capabilities_)); + .WillOnce(ReturnRef(mock_hmi_capabilities)); EXPECT_CALL(mock_message_helper_, CommonLanguageToString(default_language)) .WillOnce(Return(default_language_string)); - EXPECT_CALL(mock_hmi_capabilities_, active_ui_language()) + EXPECT_CALL(mock_hmi_capabilities, active_ui_language()) .WillOnce(Return(default_language)); EXPECT_CALL( *mock_policy_manager_, @@ -1094,7 +1301,6 @@ TEST_F(PolicyHandlerTest, OnPTExchangeNeeded) { EnablePolicyAndPolicyManagerMock(); // Check expectations EXPECT_CALL(*mock_policy_manager_, ForcePTExchange()); - EXPECT_CALL(mock_message_helper_, SendOnStatusUpdate(_, _)); // Act policy_handler_.OnPTExchangeNeeded(); } @@ -1103,10 +1309,13 @@ TEST_F(PolicyHandlerTest, AddApplication) { // Arrange EnablePolicyAndPolicyManagerMock(); // Check expectations - EXPECT_CALL(*mock_policy_manager_, AddApplication(kPolicyAppId_)) + EXPECT_CALL( + *mock_policy_manager_, + AddApplication(kPolicyAppId_, HmiTypes(policy_table::AHT_DEFAULT))) .WillOnce(Return(utils::MakeShared<utils::CallNothing>())); // Act - policy_handler_.AddApplication(kPolicyAppId_); + policy_handler_.AddApplication(kPolicyAppId_, + HmiTypes(policy_table::AHT_DEFAULT)); } TEST_F(PolicyHandlerTest, HeartBeatTimeout) { @@ -1238,37 +1447,138 @@ TEST_F(PolicyHandlerTest, OnGetListOfPermissions) { // Arrange EnablePolicyAndPolicyManagerMock(); - const uint32_t kAppId_ = 10u; - const uint32_t kCorId = 1u; + const uint32_t app_id = 10u; + const uint32_t corr_id = 1u; const std::string default_mac = "00:00:00:00:00:00"; test_app.insert(mock_app_); // Expectations EXPECT_CALL(*mock_policy_manager_, GetUserConsentForApp(default_mac, _, _)); - EXPECT_CALL(mock_message_helper_, - SendGetListOfPermissionsResponse(_, kCorId, _)); - - EXPECT_CALL(app_manager_, application(kAppId_)) + EXPECT_CALL(app_manager_, connection_handler()) + .WillOnce(ReturnRef(conn_handler)); + EXPECT_CALL(conn_handler, get_session_observer()) + .WillOnce(ReturnRef(mock_session_observer)); + EXPECT_CALL(*mock_app_, device()).WillOnce(Return(0)); + EXPECT_CALL(app_manager_, application(app_id)) .WillRepeatedly(Return(mock_app_)); + EXPECT_CALL(*mock_app_, policy_app_id()).WillOnce(Return(std::string())); + EXPECT_CALL(mock_session_observer, GetDataOnDeviceID(_, _, _, _, _)); - policy_handler_.OnGetListOfPermissions(kAppId_, kCorId); + policy_handler_.OnGetListOfPermissions(app_id, corr_id); } TEST_F(PolicyHandlerTest, OnGetListOfPermissions_WithoutConnectionKey) { // Arrange EnablePolicyAndPolicyManagerMock(); - const uint32_t kAppId_ = 0u; - const uint32_t kCorId = 1u; + const uint32_t app_id = 0u; + const uint32_t corr_id = 1u; + const std::string default_mac = "00:00:00:00:00:00"; test_app.insert(mock_app_); // Expectations + EXPECT_CALL(*mock_policy_manager_, GetUserConsentForApp(default_mac, _, _)); + + EXPECT_CALL(app_manager_, application(app_id)) + .WillRepeatedly(Return(mock_app_)); + EXPECT_CALL(app_manager_, connection_handler()) + .WillOnce(ReturnRef(conn_handler)); + EXPECT_CALL(conn_handler, get_session_observer()) + .WillOnce(ReturnRef(mock_session_observer)); EXPECT_CALL(app_manager_, applications()).WillRepeatedly(Return(app_set)); + EXPECT_CALL(*mock_app_, device()).WillOnce(Return(0)); + EXPECT_CALL(*mock_app_, policy_app_id()).WillOnce(Return(std::string())); + EXPECT_CALL(mock_session_observer, GetDataOnDeviceID(_, _, _, _, _)); + +#ifdef EXTERNAL_PROPRIETARY_MODE + policy::ExternalConsentStatus external_consent_status = + policy::ExternalConsentStatus(); + EXPECT_CALL( + mock_message_helper_, + SendGetListOfPermissionsResponse(_, external_consent_status, corr_id, _)); + EXPECT_CALL(*mock_policy_manager_, GetExternalConsentStatus()) + .WillOnce(Return(external_consent_status)); +#else + EXPECT_CALL(mock_message_helper_, + SendGetListOfPermissionsResponse(_, corr_id, _)); +#endif // #ifdef EXTERNAL_PROPRIETARY_MODE + + policy_handler_.OnGetListOfPermissions(app_id, corr_id); +} + +ACTION_P(SetGroupPermissions, permissions) { + arg2 = permissions; +} + +TEST_F(PolicyHandlerTest, OnGetListOfPermissions_GroupPermissions_SUCCESS) { + // Arrange + EnablePolicyAndPolicyManagerMock(); + + policy::FunctionalGroupPermission group_permission_disallowed1; + CreateFunctionalGroupPermission(GroupConsent::kGroupDisallowed, + kGroupAliasDisallowed_, + kGroupNameDisallowed_, + group_permission_disallowed1); + + policy::FunctionalGroupPermission group_permission_disallowed2; + CreateFunctionalGroupPermission(GroupConsent::kGroupDisallowed, + kGroupAliasDisallowed_, + kGroupNameDisallowed_, + group_permission_disallowed2); + + policy::FunctionalGroupPermission group_permission_allowed1; + CreateFunctionalGroupPermission(GroupConsent::kGroupAllowed, + kGroupAliasAllowed_, + kGroupNameAllowed_, + group_permission_allowed1); + + policy::FunctionalGroupPermission group_permission_allowed2; + CreateFunctionalGroupPermission(GroupConsent::kGroupAllowed, + kGroupAliasAllowed_, + kGroupNameAllowed_, + group_permission_allowed2); + + std::vector<policy::FunctionalGroupPermission> group_permissions; + group_permissions.push_back(group_permission_allowed1); + group_permissions.push_back(group_permission_allowed2); + group_permissions.push_back(group_permission_disallowed1); + group_permissions.push_back(group_permission_disallowed2); + + const uint32_t app_id = 0u; + const uint32_t corr_id = 1u; + const std::string default_mac = "00:00:00:00:00:00"; + test_app.insert(mock_app_); + + // Expectations + EXPECT_CALL(*mock_policy_manager_, GetUserConsentForApp(_, _, _)) + .WillOnce(SetGroupPermissions(group_permissions)); + + EXPECT_CALL(app_manager_, application(app_id)) + .WillRepeatedly(Return(mock_app_)); + EXPECT_CALL(app_manager_, connection_handler()) + .WillOnce(ReturnRef(conn_handler)); + EXPECT_CALL(conn_handler, get_session_observer()) + .WillOnce(ReturnRef(mock_session_observer)); + EXPECT_CALL(app_manager_, applications()).WillRepeatedly(Return(app_set)); + EXPECT_CALL(*mock_app_, device()).WillOnce(Return(0)); + EXPECT_CALL(*mock_app_, policy_app_id()).WillOnce(Return(std::string())); + EXPECT_CALL(mock_session_observer, GetDataOnDeviceID(_, _, _, _, _)); + +#ifdef EXTERNAL_PROPRIETARY_MODE + policy::ExternalConsentStatus external_consent_status = + policy::ExternalConsentStatus(); + EXPECT_CALL( + mock_message_helper_, + SendGetListOfPermissionsResponse(_, external_consent_status, corr_id, _)); + EXPECT_CALL(*mock_policy_manager_, GetExternalConsentStatus()) + .WillOnce(Return(external_consent_status)); +#else EXPECT_CALL(mock_message_helper_, - SendGetListOfPermissionsResponse(_, kCorId, _)); + SendGetListOfPermissionsResponse(_, corr_id, _)); +#endif // #ifdef EXTERNAL_PROPRIETARY_MODE - policy_handler_.OnGetListOfPermissions(kAppId_, kCorId); + policy_handler_.OnGetListOfPermissions(app_id, corr_id); } TEST_F(PolicyHandlerTest, RetrieveCertificate) { @@ -1289,7 +1599,7 @@ TEST_F(PolicyHandlerTest, OnSnapshotCreated_UrlNotAdded) { #endif // PROPRIETARY_MODE || EXTERNAL_PROPRIETARY_MODE #ifdef EXTERNAL_PROPRIETARY_MODE std::vector<int> retry_delay_seconds; - const uint32_t timeout_exchange = 10; + const uint32_t timeout_exchange = 10u; // TODO(AKutsan): Policy move issues EXPECT_CALL(*mock_policy_manager_, GetUpdateUrls("0x07", _)) .WillRepeatedly(SetArgReferee<1>(test_data)); @@ -1327,18 +1637,19 @@ TEST_F(PolicyHandlerTest, OnSnapshotCreated_UrlAdded) { EndpointUrls test_data; EndpointData data("some_data"); std::vector<int> retry_delay_seconds; - const uint32_t timeout_exchange = 10; + const uint32_t timeout_exchange = 10u; test_data.push_back(data); ExtendedPolicyExpectations(); - EXPECT_CALL(app_manager_, application(kAppId_)) + EXPECT_CALL(app_manager_, application(kAppId1_)) .WillRepeatedly(Return(mock_app_)); policy_handler_.OnSnapshotCreated(msg, retry_delay_seconds, timeout_exchange); } #else // EXTERNAL_PROPRIETARY_MODE -TEST_F(PolicyHandlerTest, OnSnapshotCreated_UrlAdded) { +// TODO(LevchenkoS): Find out what is wrong with this test on HTTP Policy +TEST_F(PolicyHandlerTest, DISABLED_OnSnapshotCreated_UrlAdded) { EnablePolicyAndPolicyManagerMock(); BinaryMessage msg; EndpointUrls test_data; @@ -1366,7 +1677,7 @@ TEST_F(PolicyHandlerTest, OnSnapshotCreated_UrlAdded) { // Check expectations for get app id GetAppIDForSending(); // Expectations - EXPECT_CALL(app_manager_, application(kAppId_)) + EXPECT_CALL(app_manager_, application(kAppId1_)) .WillRepeatedly(Return(mock_app_)); EXPECT_CALL(*mock_app_, policy_app_id()).WillOnce(Return(kPolicyAppId_)); #endif // PROPRIETARY_MODE @@ -1383,9 +1694,7 @@ TEST_F(PolicyHandlerTest, std::vector<std::string> device_macs; device_macs.push_back(kPolicyAppId_); EnablePolicyAndPolicyManagerMock(); - const uint32_t connection_key = 1u; - const uint32_t correlation_id = 2u; - TestActivateApp(connection_key, correlation_id); + TestActivateApp(kConnectionKey_, kCorrelationKey_); // Device ID is not setted by us EXPECT_CALL(conn_handler, GetConnectedDevicesMAC(_)) @@ -1397,6 +1706,23 @@ TEST_F(PolicyHandlerTest, policy_handler_.OnAllowSDLFunctionalityNotification(is_allowed, ""); } +TEST_F(PolicyHandlerTest, + OnAllowSDLFunctionalityNotification_DefaultDeviceId_UNSUCCESS) { + const std::string default_mac_address("00:00:00:00:00:00"); + std::vector<std::string> device_macs; + device_macs.push_back(default_mac_address); + EnablePolicyAndPolicyManagerMock(); + TestActivateApp(kConnectionKey_, kCorrelationKey_); + + EXPECT_CALL(conn_handler, GetConnectedDevicesMAC(_)) + .WillOnce(SetArgReferee<0>(device_macs)); + + EXPECT_CALL(*mock_policy_manager_, SetUserConsentForDevice(_, _)).Times(0); + + const bool is_allowed = true; + policy_handler_.OnAllowSDLFunctionalityNotification(is_allowed, ""); +} + TEST_F(PolicyHandlerTest, OnDeviceConsentChanged_ConsentAllowed) { const bool is_allowed = true; // Arrange @@ -1526,9 +1852,9 @@ TEST_F(PolicyHandlerTest, GetAppIdForSending_GetDefaultMacAddress) { // Check expectations test_app.insert(mock_app_); EXPECT_CALL(*mock_app_, IsRegistered()).WillOnce(Return(true)); - EXPECT_CALL(*mock_app_, app_id()).WillRepeatedly(Return(kAppId_)); + EXPECT_CALL(*mock_app_, app_id()).WillRepeatedly(Return(kAppId1_)); EXPECT_CALL(*mock_app_, hmi_level()) - .WillOnce(Return(mobile_api::HMILevel::HMI_FULL)); + .WillRepeatedly(Return(mobile_api::HMILevel::HMI_FULL)); EXPECT_CALL(app_manager_, connection_handler()) .WillOnce(ReturnRef(conn_handler)); @@ -1540,7 +1866,7 @@ TEST_F(PolicyHandlerTest, GetAppIdForSending_GetDefaultMacAddress) { EXPECT_CALL(*mock_policy_manager_, GetUserConsentForDevice(_)) .WillRepeatedly(Return(kDeviceAllowed)); // Act - EXPECT_EQ(kAppId_, policy_handler_.GetAppIdForSending()); + EXPECT_EQ(kAppId1_, policy_handler_.GetAppIdForSending()); } void PolicyHandlerTest::GetAppIDForSending() { @@ -1548,7 +1874,7 @@ void PolicyHandlerTest::GetAppIDForSending() { test_app.insert(mock_app_); // Check expectations - EXPECT_CALL(*mock_app_, app_id()).WillRepeatedly(Return(kAppId_)); + EXPECT_CALL(*mock_app_, app_id()).WillRepeatedly(Return(kAppId1_)); EXPECT_CALL(*mock_app_, IsRegistered()).WillOnce(Return(true)); EXPECT_CALL(*mock_app_, hmi_level()) .WillRepeatedly(Return(mobile_api::HMILevel::HMI_FULL)); @@ -1563,7 +1889,7 @@ TEST_F(PolicyHandlerTest, GetAppIdForSending_SetMacAddress) { // Arrange GetAppIDForSending(); // Act - EXPECT_EQ(kAppId_, policy_handler_.GetAppIdForSending()); + EXPECT_EQ(kAppId1_, policy_handler_.GetAppIdForSending()); } TEST_F(PolicyHandlerTest, GetAppIdForSending_ExpectReturnAnyIdButNone) { @@ -1677,24 +2003,333 @@ TEST_F(PolicyHandlerTest, SendMessageToSDK) { const std::string url = "test_url"; EnablePolicyAndPolicyManagerMock(); test_app.insert(mock_app_); - // Check expectations for get app id - GetAppIDForSending(); // Expectations - EXPECT_CALL(app_manager_, application(kAppId_)) + EXPECT_CALL(app_manager_, application(kAppId1_)) .WillRepeatedly(Return(mock_app_)); EXPECT_CALL(*mock_app_, policy_app_id()).WillOnce(Return(kPolicyAppId_)); - EXPECT_CALL(mock_message_helper_, - SendPolicySnapshotNotification(kAppId_, msg, url, _)); // Act + policy_handler_.last_used_app_ids().push_back(kAppId1_); + EXPECT_CALL(mock_message_helper_, + SendPolicySnapshotNotification(kAppId1_, msg, url, _)); EXPECT_TRUE(policy_handler_.SendMessageToSDK(msg, url)); } +TEST_F(PolicyHandlerTest, SendMessageToSDK_InavalidApp_UNSUCCESS) { + BinaryMessage msg; + const std::string url = "test_url"; + EnablePolicyAndPolicyManagerMock(); + utils::SharedPtr<application_manager_test::MockApplication> invalid_app; + policy_handler_.last_used_app_ids().push_back(kAppId1_); + + EXPECT_CALL(app_manager_, application(kAppId1_)) + .WillOnce(Return(invalid_app)); + EXPECT_CALL(*mock_app_, policy_app_id()).Times(0); + + EXPECT_FALSE(policy_handler_.SendMessageToSDK(msg, url)); +} + TEST_F(PolicyHandlerTest, CanUpdate) { GetAppIDForSending(); EXPECT_TRUE(policy_handler_.CanUpdate()); } +TEST_F(PolicyHandlerTest, CanUpdate_TwoApplicationForSending_SUCCESS) { + EnablePolicyAndPolicyManagerMock(); + utils::SharedPtr<application_manager_test::MockApplication> second_mock_app = + utils::MakeShared<application_manager_test::MockApplication>(); + + EXPECT_CALL(*mock_app_, hmi_level()) + .WillOnce(Return(mobile_apis::HMILevel::HMI_FULL)); + EXPECT_CALL(*second_mock_app, hmi_level()) + .WillRepeatedly(Return(mobile_apis::HMILevel::HMI_LIMITED)); + + EXPECT_CALL(*second_mock_app, app_id()).WillRepeatedly(Return(kAppId2_)); + EXPECT_CALL(*mock_app_, app_id()).WillRepeatedly(Return(kAppId1_)); + + // Check expectations + EXPECT_CALL(*mock_app_, IsRegistered()).WillOnce(Return(true)); + test_app.insert(mock_app_); + test_app.insert(second_mock_app); + + EXPECT_CALL(mock_session_observer, GetDataOnDeviceID(_, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(kMacAddr_), Return(0))); + + EXPECT_CALL(*mock_policy_manager_, GetUserConsentForDevice(kMacAddr_)) + .WillRepeatedly(Return(kDeviceAllowed)); + + EXPECT_TRUE(policy_handler_.CanUpdate()); +} + +ACTION_P(NotifyAsync, waiter) { + waiter->Notify(); +} + +TEST_F(PolicyHandlerTest, + OnAppPermissionConsentInternal_ValidConnectionKey_SUCCESS) { + ChangePolicyManagerToMock(); + const uint32_t device = 2u; + + PermissionConsent permissions; + permissions.device_id = kDeviceId_; + permissions.consent_source = "consent_source"; + + policy::FunctionalGroupPermission group_permission_allowed; + CreateFunctionalGroupPermission(GroupConsent::kGroupAllowed, + kGroupAliasAllowed_, + kGroupNameAllowed_, + group_permission_allowed); + + permissions.group_permissions.push_back(group_permission_allowed); + + EXPECT_CALL(app_manager_, connection_handler()) + .WillOnce(ReturnRef(conn_handler)); + EXPECT_CALL(conn_handler, get_session_observer()) + .WillOnce(ReturnRef(mock_session_observer)); + EXPECT_CALL(mock_session_observer, GetDataOnDeviceID(device, _, NULL, _, _)) + .WillOnce(Return(1u)); + + EXPECT_CALL(app_manager_, application(kConnectionKey_)) + .WillOnce(Return(mock_app_)); + EXPECT_CALL(*mock_app_, policy_app_id()).WillOnce(Return(kPolicyAppId_)); + EXPECT_CALL(*mock_app_, device()).WillOnce(Return(device)); + + sync_primitives::Lock wait_hmi_lock_first; + sync_primitives::AutoLock auto_lock_first(wait_hmi_lock_first); + WaitAsync waiter_first(kCallsCount_, kTimeout_); + + EXPECT_CALL(*mock_policy_manager_, SetUserConsentForApp(_)) + .WillOnce(NotifyAsync(&waiter_first)); + + ExternalConsentStatusItem item(1u, 1u, kStatusOn); + ExternalConsentStatus external_consent_status; + external_consent_status.insert(item); + +#ifdef EXTERNAL_PROPRIETARY_MODE + sync_primitives::Lock wait_hmi_lock_second; + sync_primitives::AutoLock auto_lock_second(wait_hmi_lock_second); + WaitAsync waiter_second(kCallsCount_, kTimeout_); + + EXPECT_CALL(*mock_policy_manager_, + SetExternalConsentStatus(external_consent_status)) + .WillOnce(DoAll(NotifyAsync(&waiter_second), Return(true))); + policy_handler_.OnAppPermissionConsent( + kConnectionKey_, permissions, external_consent_status); +#else + policy_handler_.OnAppPermissionConsent(kConnectionKey_, permissions); + +#endif + EXPECT_TRUE(waiter_first.Wait(auto_lock_first)); +#ifdef EXTERNAL_PROPRIETARY_MODE + EXPECT_TRUE(waiter_second.Wait(auto_lock_second)); +#endif +} + +TEST_F(PolicyHandlerTest, + OnAppPermissionConsentInternal_NoAppsPreviouslyStored_UNUSUCCESS) { + EnablePolicyAndPolicyManagerMock(); + const uint32_t invalid_connection_key = 0u; + + PermissionConsent permissions; + permissions.device_id = kDeviceId_; + permissions.consent_source = "consent_source"; + + policy::FunctionalGroupPermission group_permission_allowed; + CreateFunctionalGroupPermission(GroupConsent::kGroupAllowed, + kGroupAliasAllowed_, + kGroupNameAllowed_, + group_permission_allowed); + + permissions.group_permissions.push_back(group_permission_allowed); + + sync_primitives::Lock wait_hmi_lock; + sync_primitives::AutoLock auto_lock(wait_hmi_lock); + WaitAsync waiter(kCallsCount_, kTimeout_); + + EXPECT_CALL(app_manager_, application(_)).Times(0); + + ExternalConsentStatusItem item = {1u, 1u, kStatusOn}; + ExternalConsentStatus external_consent_status; + external_consent_status.insert(item); +#ifdef EXTERNAL_PROPRIETARY_MODE + EXPECT_CALL(*mock_policy_manager_, + SetExternalConsentStatus(external_consent_status)) + .WillOnce(Return(true)); + policy_handler_.OnAppPermissionConsent( + invalid_connection_key, permissions, external_consent_status); +#else + policy_handler_.OnAppPermissionConsent(invalid_connection_key, permissions); +#endif + + EXPECT_FALSE(waiter.Wait(auto_lock)); +} + +ACTION_P(SetDeviceParamsMacAdress, mac_adress) { + *arg3 = mac_adress; +} + +TEST_F(PolicyHandlerTest, + OnAppPermissionConsentInternal_ExistAppsPreviouslyStored_SUCCESS) { + EnablePolicyAndPolicyManagerMock(); + + EXPECT_CALL(*mock_app_, app_id()).WillRepeatedly(Return(kAppId1_)); + + test_app.insert(mock_app_); + + const uint32_t invalid_connection_key = 0u; + const uint32_t device = 2u; + + PermissionConsent permissions; + permissions.device_id = kDeviceId_; + permissions.consent_source = "consent_source"; + + policy::FunctionalGroupPermission group_permission_allowed; + CreateFunctionalGroupPermission(GroupConsent::kGroupAllowed, + kGroupAliasAllowed_, + kGroupNameAllowed_, + group_permission_allowed); + + permissions.group_permissions.push_back(group_permission_allowed); + EXPECT_CALL(app_manager_, applications()).WillRepeatedly(Return(app_set)); + + EXPECT_CALL(*mock_app_, device()).WillRepeatedly(Return(1u)); + EXPECT_CALL(*mock_app_, policy_app_id()) + .WillRepeatedly(Return(kPolicyAppId_)); + + EXPECT_CALL(mock_session_observer, GetDataOnDeviceID(_, _, NULL, _, _)) + .WillRepeatedly(DoAll(SetDeviceParamsMacAdress(kMacAddr_), (Return(1u)))); + + EXPECT_CALL(app_manager_, connection_handler()) + .WillRepeatedly(ReturnRef(conn_handler)); + EXPECT_CALL(conn_handler, get_session_observer()) + .WillRepeatedly(ReturnRef(mock_session_observer)); + + EXPECT_CALL(*mock_app_, device()).WillRepeatedly(Return(device)); + + ExternalConsentStatusItem item = {1u, 1u, kStatusOn}; + ExternalConsentStatus external_consent_status; + external_consent_status.insert(item); +#ifdef EXTERNAL_PROPRIETARY_MODE + sync_primitives::Lock wait_hmi_lock; + sync_primitives::AutoLock auto_lock(wait_hmi_lock); + WaitAsync waiter(kCallsCount_, kTimeout_); + + EXPECT_CALL(*mock_policy_manager_, + SetExternalConsentStatus(external_consent_status)) + .WillOnce(DoAll(NotifyAsync(&waiter), Return(true))); + policy_handler_.OnAppPermissionConsent( + invalid_connection_key, permissions, external_consent_status); +#else + policy_handler_.OnAppPermissionConsent(invalid_connection_key, permissions); +#endif + + Mock::VerifyAndClearExpectations(mock_app_.get()); +#ifdef EXTERNAL_PROPRIETARY_MODE + EXPECT_TRUE(waiter.Wait(auto_lock)); +#endif +} + +TEST_F(PolicyHandlerTest, GetLockScreenIconUrl_SUCCESS) { + EnablePolicyAndPolicyManagerMock(); + EXPECT_CALL(*mock_policy_manager_, GetLockScreenIconUrl()); + + policy_handler_.GetLockScreenIconUrl(); +} + +TEST_F(PolicyHandlerTest, RemoveListener_SUCCESS) { + EnablePolicyAndPolicyManagerMock(); + application_manager_test::MockPolicyHandlerObserver policy_handler_observer; + policy_handler_.add_listener(&policy_handler_observer); + std::map<std::string, StringArray> app_hmi_types; + StringArray arr; + arr.push_back("test_hmi_type"); + app_hmi_types["app1"] = arr; + + EXPECT_CALL(policy_handler_observer, OnUpdateHMIAppType(_)); + policy_handler_.OnUpdateHMIAppType(app_hmi_types); + + policy_handler_.remove_listener(&policy_handler_observer); + + EXPECT_CALL(policy_handler_observer, OnUpdateHMIAppType(_)).Times(0); + policy_handler_.OnUpdateHMIAppType(app_hmi_types); +} + +TEST_F(PolicyHandlerTest, AddStatisticsInfo_UnknownStatistics_UNSUCCESS) { + EnablePolicyAndPolicyManagerMock(); + policy_handler_.AddStatisticsInfo( + hmi_apis::Common_StatisticsType::INVALID_ENUM); +} + +TEST_F(PolicyHandlerTest, AddStatisticsInfo_SUCCESS) { + EnablePolicyAndPolicyManagerMock(); + + sync_primitives::Lock wait_hmi_lock; + sync_primitives::AutoLock auto_lock(wait_hmi_lock); + WaitAsync waiter(kCallsCount_, kTimeout_); + + EXPECT_CALL(*mock_policy_manager_, Increment(_)) + .WillOnce(NotifyAsync(&waiter)); + + policy_handler_.AddStatisticsInfo( + hmi_apis::Common_StatisticsType::iAPP_BUFFER_FULL); + EXPECT_TRUE(waiter.Wait(auto_lock)); +} + +TEST_F(PolicyHandlerTest, OnSystemError_SUCCESS) { + EnablePolicyAndPolicyManagerMock(); + + sync_primitives::Lock wait_hmi_lock; + sync_primitives::AutoLock auto_lock(wait_hmi_lock); + WaitAsync waiter(kCallsCount_, kTimeout_); + EXPECT_CALL(*mock_policy_manager_, Increment(_)) + .WillOnce(NotifyAsync(&waiter)); + + policy_handler_.OnSystemError(hmi_apis::Common_SystemError::SYNC_REBOOTED); + EXPECT_TRUE(waiter.Wait(auto_lock)); + + WaitAsync waiter1(kCallsCount_, kTimeout_); + EXPECT_CALL(*mock_policy_manager_, Increment(_)) + .WillOnce(NotifyAsync(&waiter1)); + + policy_handler_.OnSystemError( + hmi_apis::Common_SystemError::SYNC_OUT_OF_MEMMORY); + EXPECT_TRUE(waiter1.Wait(auto_lock)); +} + +ACTION_P(SetEndpoint, endpoint) { + arg1 = endpoint; +} + +TEST_F(PolicyHandlerTest, RemoteAppsUrl_EndpointsEmpty_UNSUCCESS) { + EnablePolicyAndPolicyManagerMock(); + + const std::string service_type("queryAppsUrl"); + EndpointUrls endpoints; + + EXPECT_CALL(*mock_policy_manager_, GetUpdateUrls(service_type, _)) + .WillOnce(SetEndpoint(endpoints)); + + const std::string default_url(""); + EXPECT_EQ(default_url, policy_handler_.RemoteAppsUrl()); +} + +TEST_F(PolicyHandlerTest, RemoteAppsUrl_SUCCESS) { + EnablePolicyAndPolicyManagerMock(); + + const std::string url("url"); + EndpointData endpoint_data; + endpoint_data.url.push_back(url); + + EndpointUrls endpoints; + endpoints.push_back(endpoint_data); + + const std::string service_type("queryAppsUrl"); + EXPECT_CALL(*mock_policy_manager_, GetUpdateUrls(service_type, _)) + .WillOnce(SetEndpoint(endpoints)); + + EXPECT_EQ(url, policy_handler_.RemoteAppsUrl()); +} + } // namespace policy_handler_test } // namespace components } // namespace test diff --git a/src/components/application_manager/test/state_controller/state_controller_test.cc b/src/components/application_manager/test/state_controller/state_controller_test.cc index 3cfbf604f4..eb718c8b8b 100644 --- a/src/components/application_manager/test/state_controller/state_controller_test.cc +++ b/src/components/application_manager/test/state_controller/state_controller_test.cc @@ -487,7 +487,7 @@ class StateControllerImplTest : public ::testing::Test { ApplicationType AppType(uint32_t app_id) { // TODO(AOleynik): Currently there is ongoing discussion regarding mixed // application properties, i.e. is_media_application flag from RAI and - // AppHMITypes (NAVIGATION, etc.). Most likely logic should be changed + // AppHmiTypes (NAVIGATION, etc.). Most likely logic should be changed // after conclusion on APPLINK-20231 std::vector<am::ApplicationSharedPtr>::iterator app = std::find_if( applications_list_.begin(), diff --git a/src/components/include/application_manager/application_manager.h b/src/components/include/application_manager/application_manager.h index 587bd4d98d..180be220cc 100644 --- a/src/components/include/application_manager/application_manager.h +++ b/src/components/include/application_manager/application_manager.h @@ -299,6 +299,7 @@ class ApplicationManager { virtual connection_handler::ConnectionHandler& connection_handler() const = 0; virtual protocol_handler::ProtocolHandler& protocol_handler() const = 0; virtual policy::PolicyHandlerInterface& GetPolicyHandler() = 0; + virtual const policy::PolicyHandlerInterface& GetPolicyHandler() const = 0; virtual uint32_t GetNextHMICorrelationID() = 0; virtual uint32_t GenerateNewHMIAppID() = 0; @@ -477,9 +478,8 @@ class ApplicationManager { * @return SUCCESS, if allowed, otherwise result code of check */ virtual mobile_apis::Result::eType CheckPolicyPermissions( - const std::string& policy_app_id, - mobile_apis::HMILevel::eType hmi_level, - mobile_apis::FunctionID::eType function_id, + const ApplicationSharedPtr app, + const std::string& function_id, const RPCParams& rpc_params, CommandParametersPermissions* params_permissions = NULL) = 0; diff --git a/src/components/include/application_manager/policies/policy_handler_interface.h b/src/components/include/application_manager/policies/policy_handler_interface.h index 80f67ef7cc..8f078cb04b 100644 --- a/src/components/include/application_manager/policies/policy_handler_interface.h +++ b/src/components/include/application_manager/policies/policy_handler_interface.h @@ -39,14 +39,17 @@ #include <vector> #include <queue> #include "interfaces/MOBILE_API.h" -#include "policy/policy_types.h" #include "application_manager/policies/policy_handler_observer.h" +#include "application_manager/application.h" #include "policy/usage_statistics/statistics_manager.h" #include "utils/custom_string.h" +#include "utils/callable.h" #include "policy/policy_settings.h" #include "smart_objects/smart_object.h" -#include "utils/callable.h" +#include "policy/policy_types.h" +#include "policy/policy_table/types.h" +using namespace ::rpc::policy_table_interface_base; namespace policy { typedef utils::SharedPtr<utils::Callable> StatusNotifier; @@ -81,11 +84,12 @@ class PolicyHandlerInterface { virtual bool GetPriority(const std::string& policy_app_id, std::string* priority) const = 0; - virtual void CheckPermissions(const PTString& app_id, - const PTString& hmi_level, - const PTString& rpc, - const RPCParams& rpc_params, - CheckPermissionResult& result) = 0; + virtual void CheckPermissions( + const application_manager::ApplicationSharedPtr app, + const PTString& rpc, + const RPCParams& rpc_params, + CheckPermissionResult& result) = 0; + virtual uint32_t GetNotificationsNumber( const std::string& priority) const = 0; virtual DeviceConsent GetUserConsentForDevice( @@ -177,16 +181,23 @@ class PolicyHandlerInterface { virtual void SetDeviceInfo(const std::string& device_id, const DeviceInfo& device_info) = 0; - /** - * @brief Processes data from OnAppPermissionConsent notification with - * permissions changes and CCS status changes done by user - * @param connection_key Connection key of application, 0 if no key has been - * provided - * @param permissions Groups permissions changes - * @param ccs_status Customer connectivity settings status changes - */ +/** +*@brief Processes data from OnAppPermissionConsent notification with +*permissions changes and ExternalConsent status changes done by user +*@param connection_key Connection key of application, 0 if no key has been +*provided +*@param permissions Groups permissions changes +*@param external_consent_status Customer connectivity settings status changes +*/ +#ifdef EXTERNAL_PROPRIETARY_MODE + virtual void OnAppPermissionConsent( + const uint32_t connection_key, + const PermissionConsent& permissions, + const ExternalConsentStatus& external_consent_status) = 0; +#else virtual void OnAppPermissionConsent(const uint32_t connection_key, const PermissionConsent& permissions) = 0; +#endif /** * @brief Get appropriate message parameters and send them with response @@ -312,7 +323,9 @@ class PolicyHandlerInterface { * @param application_id The policy aplication id. * @return function that will notify update manager about new application */ - virtual StatusNotifier AddApplication(const std::string& application_id) = 0; + virtual StatusNotifier AddApplication( + const std::string& application_id, + const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) = 0; /** * Checks whether application is revoked @@ -401,21 +414,28 @@ class PolicyHandlerInterface { virtual const std::string RemoteAppsUrl() const = 0; private: - /** - * @brief Processes data received via OnAppPermissionChanged notification - * from. Being started asyncronously from AppPermissionDelegate class. - * Sets updated permissions and CCS for registered applications and - * applications which already have appropriate group assigned which related to - * devices already known by policy - * @param connection_key Connection key of application, 0 if no key has been - * provided within notification - * @param ccs_status Customer connectivity settings changes to process - * @param permissions Permissions changes to process - */ +/** + * @brief Processes data received via OnAppPermissionChanged notification + * from. Being started asyncronously from AppPermissionDelegate class. + * Sets updated permissions and ExternalConsent for registered applications +*and + * applications which already have appropriate group assigned which related to + * devices already known by policy + * @param connection_key Connection key of application, 0 if no key has been + * provided within notification + * @param external_consent_status Customer connectivity settings changes to +*process +*@param permissions Permissions changes to process + */ +#ifdef EXTERNAL_PROPRIETARY_MODE virtual void OnAppPermissionConsentInternal( const uint32_t connection_key, - const CCSStatus& ccs_status, + const ExternalConsentStatus& external_consent_status, PermissionConsent& out_permissions) = 0; +#else + virtual void OnAppPermissionConsentInternal( + const uint32_t connection_key, PermissionConsent& out_permissions) = 0; +#endif friend class AppPermissionDelegate; }; diff --git a/src/components/include/policy/policy_external/policy/policy_listener.h b/src/components/include/policy/policy_external/policy/policy_listener.h index b97e819d5f..82dd26a6f7 100644 --- a/src/components/include/policy/policy_external/policy/policy_listener.h +++ b/src/components/include/policy/policy_external/policy/policy_listener.h @@ -30,8 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ -#ifndef SRC_COMPONENTS_INCLUDE_POLICY_POLICY_LISTENER_H_ -#define SRC_COMPONENTS_INCLUDE_POLICY_POLICY_LISTENER_H_ +#ifndef SRC_COMPONENTS_POLICY_POLICY_EXTERNAL_INCLUDE_POLICY_POLICY_LISTENER_H_ +#define SRC_COMPONENTS_POLICY_POLICY_EXTERNAL_INCLUDE_POLICY_POLICY_LISTENER_H_ #include <queue> @@ -115,35 +115,12 @@ class PolicyListener { virtual void OnCertificateUpdated(const std::string& certificate_data) = 0; /** - * Notifies about changing HMI status - * @param device_id unique identifier of device - * @param policy_app_id unique identifier of application in policy - * @param hmi_level default HMI level for this application - */ - virtual void OnUpdateHMIStatus(const std::string& device_id, - const std::string& policy_app_id, - const std::string& hmi_level) = 0; - - /** - * Notifies about changing HMI status - * @param device_id unique identifier of device - * @param policy_app_id unique identifier of application in policy - * @param hmi_level default HMI level for this application - * @param device_rank device rank - */ - virtual void OnUpdateHMIStatus(const std::string& device_id, - const std::string& policy_app_id, - const std::string& hmi_level, - const std::string& device_rank) = 0; -#endif // SDL_REMOTE_CONTROL - - virtual KnownConsentsIds GetRegisteredApps() const = 0; - /** - * @brief Collects currently registered applications ids linked to their - * device id - * @return Collection of device_id-to-app_id links - */ - virtual ApplicationsLinks GetRegisteredLinks() const = 0; + * @brief Collects currently registered applications ids linked to their + * device id + * @return Collection of device_id-to-app_id links + */ + virtual void GetRegisteredLinks( + std::map<std::string, std::string>& out_links) const = 0; }; } // namespace policy -#endif // SRC_COMPONENTS_INCLUDE_POLICY_POLICY_LISTENER_H_ +#endif // SRC_COMPONENTS_POLICY_POLICY_EXTERNAL_INCLUDE_POLICY_POLICY_LISTENER_H_ diff --git a/src/components/include/policy/policy_external/policy/policy_manager.h b/src/components/include/policy/policy_external/policy/policy_manager.h index 86f3124ca7..f6e650b4a5 100644 --- a/src/components/include/policy/policy_external/policy/policy_manager.h +++ b/src/components/include/policy/policy_external/policy/policy_manager.h @@ -38,6 +38,7 @@ #include "utils/callable.h" #include "policy/policy_types.h" +#include "policy/policy_table/types.h" #include "policy/policy_listener.h" #include "usage_statistics/statistics_manager.h" @@ -77,11 +78,13 @@ class PolicyManager : public usage_statistics::StatisticsManager { */ virtual bool ResetPT(const std::string& file_name) = 0; + virtual std::string GetUpdateUrl(int service_type) = 0; + /** - * @brief Gets all URLs for sending PTS to from PT itself. - * @param service_type Service specifies user of URL - * @return vector of urls - */ + * @brief Gets all URLs for sending PTS to from PT itself. + * @param service_type Service specifies user of URL + * @return vector of urls + */ virtual void GetUpdateUrls(const uint32_t service_type, EndpointUrls& out_end_points) = 0; @@ -364,7 +367,9 @@ class PolicyManager : public usage_statistics::StatisticsManager { * @param Application id assigned by Ford to the application * @return function that will notify update manager about new application */ - virtual StatusNotifier AddApplication(const std::string& application_id) = 0; + virtual StatusNotifier AddApplication( + const std::string& application_id, + const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) = 0; /** * @brief Removes unpaired device records and related records from DB @@ -485,6 +490,26 @@ class PolicyManager : public usage_statistics::StatisticsManager { virtual void SetDecryptedCertificate(const std::string& certificate) = 0; virtual const PolicySettings& get_settings() const = 0; + + /** + * @brief Finds the next URL that must be sent on OnSystemRequest retry + * @param urls vector of vectors that contain urls for each application + * @return Pair of policy application id and application url id from the + * urls vector + */ + virtual AppIdURL GetNextUpdateUrl(const EndpointUrls& urls) = 0; + + /** + * @brief Checks if there is existing URL in the EndpointUrls vector with + * index saved in the policy manager and if not, it moves to the next + * application index + * @param rs contains the application index and url index from the + * urls vector that are to be sent on the next OnSystemRequest + * @param urls vector of vectors that contain urls for each application + * @return Pair of application index and url index + */ + virtual AppIdURL RetrySequenceUrl(const struct RetrySequenceURL& rs, + const EndpointUrls& urls) const = 0; /** * @brief Saves customer connectivity settings status * @param status ExternalConsent status diff --git a/src/components/include/policy/policy_regular/policy/policy_manager.h b/src/components/include/policy/policy_regular/policy/policy_manager.h index cd5879ef73..48d0fe209f 100644 --- a/src/components/include/policy/policy_regular/policy/policy_manager.h +++ b/src/components/include/policy/policy_regular/policy/policy_manager.h @@ -110,7 +110,8 @@ class PolicyManager : public usage_statistics::StatisticsManager { * @param CheckPermissionResult containing flag if HMI Level is allowed * and list of allowed params. */ - virtual void CheckPermissions(const PTString& app_id, + virtual void CheckPermissions(const PTString& device_id, + const PTString& app_id, const PTString& hmi_level, const PTString& rpc, const RPCParams& rpc_params, 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 9d51f60c4d..fc9b213d04 100644 --- a/src/components/include/test/application_manager/mock_application_manager.h +++ b/src/components/include/test/application_manager/mock_application_manager.h @@ -132,6 +132,7 @@ class MockApplicationManager : public application_manager::ApplicationManager { connection_handler::ConnectionHandler&()); MOCK_CONST_METHOD0(protocol_handler, protocol_handler::ProtocolHandler&()); MOCK_METHOD0(GetPolicyHandler, policy::PolicyHandlerInterface&()); + MOCK_CONST_METHOD0(GetPolicyHandler, const policy::PolicyHandlerInterface&()); MOCK_METHOD0(GetNextHMICorrelationID, uint32_t()); MOCK_METHOD0(GenerateNewHMIAppID, uint32_t()); MOCK_METHOD1(EndNaviServices, void(uint32_t app_id)); @@ -191,13 +192,13 @@ class MockApplicationManager : public application_manager::ApplicationManager { MOCK_CONST_METHOD2(HMILevelAllowsStreaming, bool(uint32_t app_id, protocol_handler::ServiceType service_type)); - MOCK_METHOD5(CheckPolicyPermissions, + MOCK_METHOD4(CheckPolicyPermissions, mobile_apis::Result::eType( - const std::string&, - mobile_apis::HMILevel::eType, - mobile_apis::FunctionID::eType, - const application_manager::RPCParams&, - application_manager::CommandParametersPermissions*)); + const application_manager::ApplicationSharedPtr app, + const std::string& function_id, + const application_manager::RPCParams& rpc_params, + application_manager::CommandParametersPermissions* + params_permissions)); MOCK_CONST_METHOD2(IsApplicationForbidden, bool(uint32_t connection_key, const std::string& policy_app_id)); @@ -246,6 +247,16 @@ class MockApplicationManager : public application_manager::ApplicationManager { MOCK_CONST_METHOD0( AppsWaitingForRegistration, DataAccessor<application_manager::AppsWaitRegistrationSet>()); + + MOCK_METHOD1(ReplaceMobileByHMIAppId, + void(smart_objects::SmartObject& message)); + MOCK_METHOD1(ReplaceHMIByMobileAppId, + void(smart_objects::SmartObject& message)); + MOCK_METHOD1(GetAvailableSpaceForApp, + uint32_t(const std::string& folder_name)); + MOCK_METHOD0(OnTimerSendTTSGlobalProperties, void()); + MOCK_METHOD0(OnLowVoltage, void()); + MOCK_METHOD0(OnWakeUp, void()); }; } // namespace application_manager_test diff --git a/src/components/include/test/application_manager/policies/mock_policy_handler_interface.h b/src/components/include/test/application_manager/policies/mock_policy_handler_interface.h index 2b14f2226d..f848b8a9cc 100644 --- a/src/components/include/test/application_manager/policies/mock_policy_handler_interface.h +++ b/src/components/include/test/application_manager/policies/mock_policy_handler_interface.h @@ -34,6 +34,7 @@ #define SRC_COMPONENTS_INCLUDE_TEST_APPLICATION_MANAGER_POLICIES_MOCK_POLICY_HANDLER_INTERFACE_H_ #include "application_manager/policies/policy_handler_interface.h" +#include "application_manager/application_manager.h" #include "gmock/gmock.h" #include "policy/policy_types.h" #include "smart_objects/smart_object.h" @@ -76,11 +77,10 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface { MOCK_CONST_METHOD2(GetPriority, bool(const std::string& policy_app_id, std::string* priority)); - MOCK_METHOD5(CheckPermissions, - void(const policy::PTString& app_id, - const policy::PTString& hmi_level, + MOCK_METHOD4(CheckPermissions, + void(const application_manager::ApplicationSharedPtr app, const policy::PTString& rpc, - const policy::RPCParams& rpc_params, + const application_manager::RPCParams& rpc_params, policy::CheckPermissionResult& result)); MOCK_CONST_METHOD1(GetNotificationsNumber, uint32_t(const std::string& priority)); @@ -131,9 +131,17 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface { MOCK_METHOD2(SetDeviceInfo, void(const std::string& device_id, const policy::DeviceInfo& device_info)); +#ifdef EXTERNAL_PROPRIETARY_MODE + MOCK_METHOD3( + OnAppPermissionConsent, + void(const uint32_t connection_key, + const policy::PermissionConsent& permissions, + const policy::ExternalConsentStatus& external_consent_status)); +#else MOCK_METHOD2(OnAppPermissionConsent, void(const uint32_t connection_key, const policy::PermissionConsent& permissions)); +#endif MOCK_METHOD3(OnGetUserFriendlyMessage, void(const std::vector<std::string>& message_codes, const std::string& language, @@ -173,8 +181,11 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface { const std::string& policy_app_id)); MOCK_METHOD0(OnPTExchangeNeeded, void()); MOCK_METHOD1(GetAvailableApps, void(std::queue<std::string>& apps)); - MOCK_METHOD1(AddApplication, - policy::StatusNotifier(const std::string& application_id)); + MOCK_METHOD2( + AddApplication, + policy::StatusNotifier( + const std::string& application_id, + const rpc::policy_table_interface_base::AppHmiTypes& hmi_types)); MOCK_METHOD1(IsApplicationRevoked, bool(const std::string& app_id)); MOCK_METHOD0(OnUpdateRequestSentToMobile, void()); MOCK_CONST_METHOD1(HeartBeatTimeout, uint32_t(const std::string& app_id)); @@ -216,10 +227,15 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface { policy::EndpointUrls& end_points)); private: +#ifdef EXTERNAL_PROPRIETARY_MODE MOCK_METHOD3(OnAppPermissionConsentInternal, void(const uint32_t, - const policy::CCSStatus&, + const policy::ExternalConsentStatus&, policy::PermissionConsent&)); +#else + MOCK_METHOD2(OnAppPermissionConsentInternal, + void(const uint32_t, policy::PermissionConsent&)); +#endif }; } // namespace policy_test diff --git a/src/components/include/test/policy/policy_external/policy/mock_policy_listener.h b/src/components/include/test/policy/policy_external/policy/mock_policy_listener.h index bc7be64aaa..74f333ba11 100644 --- a/src/components/include/test/policy/policy_external/policy/mock_policy_listener.h +++ b/src/components/include/test/policy/policy_external/policy/mock_policy_listener.h @@ -89,8 +89,8 @@ class MockPolicyListener : public ::policy::PolicyListener { void(const std::string& device_id, const std::string& policy_app_id, const std::string& hmi_level)); - MOCK_CONST_METHOD0(GetRegisteredApps, policy::KnownConsentsIds()); - MOCK_CONST_METHOD0(GetRegisteredLinks, policy::ApplicationsLinks()); + MOCK_CONST_METHOD1(GetRegisteredLinks, + void(std::map<std::string, std::string>&)); }; } // namespace policy_test diff --git a/src/components/include/test/policy/policy_external/policy/mock_policy_manager.h b/src/components/include/test/policy/policy_external/policy/mock_policy_manager.h index a40ab8e1e3..1136c8391d 100644 --- a/src/components/include/test/policy/policy_external/policy/mock_policy_manager.h +++ b/src/components/include/test/policy/policy_external/policy/mock_policy_manager.h @@ -61,6 +61,7 @@ class MockPolicyManager : public PolicyManager { MOCK_METHOD2(LoadPT, bool(const std::string& file, const BinaryMessage& pt_content)); MOCK_METHOD1(ResetPT, bool(const std::string& file_name)); + MOCK_METHOD1(GetUpdateUrl, std::string(int service_type)); MOCK_METHOD2(GetUpdateUrls, void(const uint32_t service_type, EndpointUrls& out_end_points)); MOCK_METHOD2(GetUpdateUrls, @@ -141,8 +142,11 @@ class MockPolicyManager : public PolicyManager { MOCK_METHOD1(SendNotificationOnPermissionsUpdated, void(const std::string& application_id)); MOCK_METHOD1(MarkUnpairedDevice, void(const std::string& device_id)); - MOCK_METHOD1(AddApplication, - StatusNotifier(const std::string& application_id)); + MOCK_METHOD2( + AddApplication, + StatusNotifier( + const std::string& application_id, + const rpc::policy_table_interface_base::AppHmiTypes& hmi_types)); MOCK_METHOD0(CleanupUnpairedDevices, bool()); MOCK_CONST_METHOD1(CanAppKeepContext, bool(const std::string& app_id)); MOCK_CONST_METHOD1(CanAppStealFocus, bool(const std::string& app_id)); diff --git a/src/components/include/test/policy/policy_regular/policy/mock_policy_manager.h b/src/components/include/test/policy/policy_regular/policy/mock_policy_manager.h index 9d940191fd..b2ab2b92a5 100644 --- a/src/components/include/test/policy/policy_regular/policy/mock_policy_manager.h +++ b/src/components/include/test/policy/policy_regular/policy/mock_policy_manager.h @@ -142,8 +142,11 @@ class MockPolicyManager : public PolicyManager { MOCK_METHOD1(SendNotificationOnPermissionsUpdated, void(const std::string& application_id)); MOCK_METHOD1(MarkUnpairedDevice, void(const std::string& device_id)); - MOCK_METHOD1(AddApplication, - StatusNotifier(const std::string& application_id)); + MOCK_METHOD2( + AddApplication, + StatusNotifier( + const std::string& application_id, + const rpc::policy_table_interface_base::AppHmiTypes& hmi_types)); MOCK_METHOD0(CleanupUnpairedDevices, bool()); MOCK_CONST_METHOD1(CanAppKeepContext, bool(const std::string& app_id)); MOCK_CONST_METHOD1(CanAppStealFocus, bool(const std::string& app_id)); @@ -164,6 +167,7 @@ class MockPolicyManager : public PolicyManager { MOCK_CONST_METHOD0(GetVehicleInfo, const policy::VehicleInfo()); MOCK_CONST_METHOD0(GetMetaInfo, const policy::MetaInfo()); MOCK_CONST_METHOD0(RetrieveCertificate, std::string()); + MOCK_CONST_METHOD0(HasCertificate, bool()); MOCK_METHOD1(SetDecryptedCertificate, void(const std::string&)); MOCK_METHOD0(ExceededIgnitionCycles, bool()); MOCK_METHOD0(ExceededDays, bool()); @@ -189,6 +193,13 @@ class MockPolicyManager : public PolicyManager { MOCK_CONST_METHOD2(RetrySequenceUrl, AppIdURL(const struct RetrySequenceURL&, const EndpointUrls& urls)); + MOCK_METHOD6(CheckPermissions, + void(const PTString& device_id, + const PTString& app_id, + const PTString& hmi_level, + const PTString& rpc, + const RPCParams& rpc_params, + CheckPermissionResult& result)); }; } // namespace policy_manager_test diff --git a/src/components/interfaces/HMI_API.xml b/src/components/interfaces/HMI_API.xml index c64bb5829b..c2fda232dd 100644 --- a/src/components/interfaces/HMI_API.xml +++ b/src/components/interfaces/HMI_API.xml @@ -1254,6 +1254,25 @@ <description>ID of application that requested this RPC.</description> </param> </struct> + + <enum name="EntityStatus"> + <element name="ON"/> + <element name="OFF"/> + </enum> + + <struct name="ExternalConsentStatus"> + <param name="entityType" type="Integer" minvalue="0" maxvalue="128" mandatory="true"> + <description>The entityType which status is informed by "status" param.</description> + </param> + + <param name="entityID" type="Integer" minvalue="0" maxvalue="128" mandatory="true"> + <description>The corresponding ID of entityType which status is informed by "status" param</description> + </param> + + <param name="status" type="Common.EntityStatus" mandatory="true"> + <description>Status of the ExternalConsentStatus entity: "ON" or "OFF". </description> + </param> + </struct> <!-- End of Policies --> <struct name="TextField"> @@ -4152,8 +4171,8 @@ <param name="appID" type="Integer" mandatory="false"> <description>Information about the application. See HMIApplication. If omitted - allow/disallow all applications </description> </param> - <param name="consentedFunctions" type="Common.PermissionItem" mandatory="true" array="true" minsize="1" maxsize="100"> - </param> + <param name="consentedFunctions" type="Common.PermissionItem" mandatory="false" array="true" minsize="1" maxsize="100"/> + <param name="externalConsentStatus" type="Common.ExternalConsentStatus" mandatory="false" array="true" minsize="1" maxsize="100"/> <param name="source" type="Common.ConsentSource" mandatory="true"/> </function> diff --git a/src/components/media_manager/CMakeLists.txt b/src/components/media_manager/CMakeLists.txt index b6af26fba3..c5b94ea7e1 100644 --- a/src/components/media_manager/CMakeLists.txt +++ b/src/components/media_manager/CMakeLists.txt @@ -42,6 +42,7 @@ include_directories( ${COMPONENTS_DIR}/smart_objects/include/ ${COMPONENTS_DIR}/hmi_message_handler/include/ ${COMPONENTS_DIR}/formatters/include/ + ${COMPONENTS_DIR}/rpc_base/include/ ${COMPONENTS_DIR}/config_profile/include/ ${JSONCPP_INCLUDE_DIRECTORY} ${CMAKE_BINARY_DIR}/src/components/ diff --git a/src/components/policy/policy_external/include/policy/policy_manager_impl.h b/src/components/policy/policy_external/include/policy/policy_manager_impl.h index 239d46388c..e84b57c366 100644 --- a/src/components/policy/policy_external/include/policy/policy_manager_impl.h +++ b/src/components/policy/policy_external/include/policy/policy_manager_impl.h @@ -60,6 +60,8 @@ class PolicyManagerImpl : public PolicyManager { const PolicySettings* settings); virtual bool LoadPT(const std::string& file, const BinaryMessage& pt_content); virtual bool ResetPT(const std::string& file_name); + + virtual std::string GetUpdateUrl(int service_type); virtual void GetUpdateUrls(const uint32_t service_type, EndpointUrls& out_end_points); virtual void GetUpdateUrls(const std::string& service_type, @@ -167,7 +169,9 @@ class PolicyManagerImpl : public PolicyManager { bool CanAppStealFocus(const std::string& app_id) const; void MarkUnpairedDevice(const std::string& device_id); - StatusNotifier AddApplication(const std::string& application_id); + StatusNotifier AddApplication( + const std::string& application_id, + const rpc::policy_table_interface_base::AppHmiTypes& hmi_types); virtual void RemoveAppConsentForGroup(const std::string& app_id, const std::string& group_name); @@ -211,6 +215,10 @@ class PolicyManagerImpl : public PolicyManager { AppIdURL RetrySequenceUrl(const struct RetrySequenceURL& rs, const EndpointUrls& urls) const OVERRIDE; + /** + * @brief Gets customer connectivity settings status + * @return ExternalConsent status + */ bool SetExternalConsentStatus(const ExternalConsentStatus& status) OVERRIDE; ExternalConsentStatus GetExternalConsentStatus() OVERRIDE; @@ -413,83 +421,6 @@ class PolicyManagerImpl : public PolicyManager { GroupsNames& out_allowed_groups, GroupsNames& out_disallowed_groups) const; - /** - * @brief Notify application about its permissions changes by preparing and - * sending OnPermissionsChanged notification - * @param policy_app_id Application id to send notification to - * @param app_group_permissons Current permissions for groups assigned to - * application - */ - void NotifyPermissionsChanges( - const std::string& policy_app_id, - const std::vector<FunctionalGroupPermission>& app_group_permissions); - - /** - * @brief Processes updated CCS status received via OnAppPermissionConsent - * notification by updating user consents and CCS consents for registered and - * known before by policy table (must have any user consent records) - * @param groups_by_status Collection of CCS entities with their statuses - */ - void ProcessCCSStatusUpdate(const GroupsByCCSStatus& groups_by_status); - - /** - * @brief Processes CCS status for application registered afterward, so its - * user consents (if any) and CCS consents (if any) will be updated - * appropiately to current CCS status stored by policy table - * @param application_id Application id - */ - void ProcessCCSStatusForApp(const std::string& application_id); - /** - * @brief Directly updates user consent and CCS consents (if any) for - * application if it has assigned any of group from allowed or disallowed - * lists - * @param device_id Device id which is linked to application id - * @param application_id Application id - * @param allowed_groups List of group names allowed by current CCS status - * @param disallowed_groups List of group names disallwed by current CCS - * status - */ - void UpdateAppConsentWithCCS(const std::string& device_id, - const std::string& application_id, - const GroupsNames& allowed_groups, - const GroupsNames& disallowed_groups); - - typedef policy_table::ApplicationPolicies::value_type AppPoliciesValueType; - - /** - * @brief Notifies system by sending OnAppPermissionChanged notification - * @param app_policy Reference to application policy - */ - void NotifySystem(const AppPoliciesValueType& app_policy) const; - - /** - * @brief Sends OnPermissionChange notification to application if its - * currently registered - * @param app_policy Reference to application policy - */ - void SendPermissionsToApp(const AppPoliciesValueType& app_policy); - - /** - * @brief Gets groups names from collection of groups permissions - * @param app_group_permissions Collection of groups permissions - * @return Collection of group names - */ - policy_table::Strings GetGroupsNames( - const std::vector<FunctionalGroupPermission>& app_group_permissions) - const; - - /** - * @brief Calculates consents for groups based on mapped CCS entities statuses - * and groups containers where entities have been found - * @param groups_by_ccs CCS entities mapped to functional groups names and - * their containters where this entity has been found - * @param out_allowed_groups List of groups allowed by CCS status - * @param out_disallowed_groups List of groups disallowed by CCS status - */ - void CalculateGroupsConsentFromCCS(const GroupsByCCSStatus& groups_by_ccs, - GroupsNames& out_allowed_groups, - GroupsNames& out_disallowed_groups) const; - PolicyListener* listener_; UpdateStatusManager update_status_manager_; diff --git a/src/components/policy/policy_external/include/policy/policy_table/types.h b/src/components/policy/policy_external/include/policy/policy_table/types.h index b0a0e3a5f5..020ad82880 100644 --- a/src/components/policy/policy_external/include/policy/policy_table/types.h +++ b/src/components/policy/policy_external/include/policy/policy_table/types.h @@ -68,7 +68,7 @@ typedef Array<Enum<HmiLevel>, 0, 4> HmiLevels; typedef Array<Enum<Parameter>, 0, 100> Parameters; -typedef Map<RpcParameters, 0, 50> Rpc; +typedef Map<RpcParameters, 0, 65535> Rpc; typedef Array<String<10, 65535>, 1, 3> URL; @@ -80,7 +80,7 @@ typedef uint8_t NumberOfNotificationsType; typedef Map<Integer<NumberOfNotificationsType, 0, 255>, 0, 6> NumberOfNotificationsPerMinute; -typedef Array<Integer<uint16_t, 1, 1000>, 0, 10> SecondsBetweenRetries; +typedef Array<Integer<uint16_t, 1, 1000>, 0, 5> SecondsBetweenRetries; typedef Map<MessageString, 0, 600> Languages; @@ -101,6 +101,9 @@ typedef Map<DeviceParams, 0, 255> DeviceData; typedef Array<Enum<RequestType>, 0, 255> RequestsTypeArray; +typedef AppHMIType AppHmiType; +typedef std::vector<AppHMIType> AppHmiTypes; + struct RequestTypes : public RequestsTypeArray { RequestTypes(); explicit RequestTypes(Json::Value* value); diff --git a/src/components/policy/policy_external/include/policy/policy_types.h b/src/components/policy/policy_external/include/policy/policy_types.h index 73bd76f0ac..7360fac726 100644 --- a/src/components/policy/policy_external/include/policy/policy_types.h +++ b/src/components/policy/policy_external/include/policy/policy_types.h @@ -57,6 +57,7 @@ const std::string kDefaultDeviceConnectionType = "UNKNOWN"; const std::string kPreDataConsentId = "pre_DataConsent"; const std::string kDefaultId = "default"; const std::string kDeviceId = "device"; +const std::string kPrimary = "rc_primaryDevice"; /* *@brief Policy Services specifies Users of Updates diff --git a/src/components/policy/policy_external/include/policy/sql_pt_ext_representation.h b/src/components/policy/policy_external/include/policy/sql_pt_ext_representation.h index 8e38309db5..bd2097cfe3 100644 --- a/src/components/policy/policy_external/include/policy/sql_pt_ext_representation.h +++ b/src/components/policy/policy_external/include/policy/sql_pt_ext_representation.h @@ -135,6 +135,10 @@ class SQLPTExtRepresentation : public SQLPTRepresentation, ExternalConsentStatus GetExternalConsentStatus() const; private: + enum ExternalConsentEntitiesType { + kExternalConsentEntitiesTypeOn, + kExternalConsentEntitiesTypeOff + }; void GatherModuleMeta(policy_table::ModuleMeta* meta) const; void GatherPreconsentedGroup(const std::string& app_id, policy_table::Strings* groups) const; @@ -202,6 +206,11 @@ class SQLPTExtRepresentation : public SQLPTRepresentation, */ bool IsMsgLanguagePresent(const std::string& message, const std::string& language); + + bool SaveExternalConsentEntities( + const int64_t group_id, + const policy_table::DisallowedByExternalConsentEntities& entities, + ExternalConsentEntitiesType type) const; }; } // namespace policy diff --git a/src/components/policy/policy_external/include/policy/sql_pt_queries.h b/src/components/policy/policy_external/include/policy/sql_pt_queries.h index d515624b32..685c84742f 100644 --- a/src/components/policy/policy_external/include/policy/sql_pt_queries.h +++ b/src/components/policy/policy_external/include/policy/sql_pt_queries.h @@ -72,7 +72,6 @@ extern const std::string kSelectDays; extern const std::string kSelectTimeoutResponse; extern const std::string kInsertFunctionalGroup; extern const std::string kInsertRpc; -extern const std::string kInsertExternalConsentEntity; extern const std::string kInsertRpcWithParameter; extern const std::string kInsertApplication; extern const std::string kInsertAppGroup; @@ -116,6 +115,31 @@ extern const std::string kInsertApplicationFull; extern const std::string kDeletePreconsentedGroupsByApplicationId; extern const std::string kSelectApplicationFull; extern const std::string kUpdatePreloaded; +extern const std::string kUpdateRemoteControlDenied; +extern const std::string kSelectRemoteControlDenied; +extern const std::string kDeleteAppGroupPrimaryByApplicationId; +extern const std::string kDeleteAppGroupNonPrimaryByApplicationId; +extern const std::string kCollectFriendlyMsg; +extern const std::string kSelectAppGroupsPrimary; +extern const std::string kSelectAppGroupsNonPrimary; +extern const std::string kSelectModuleTypes; +extern const std::string kInsertAppGroupPrimary; +extern const std::string kInsertAppGroupNonPrimary; +extern const std::string kInsertModuleType; +extern const std::string kInsertInteriorZone; +extern const std::string kCountInteriorZones; +extern const std::string kSelectInteriorZones; +extern const std::string kDeleteInteriorZones; +extern const std::string kInsertAccessModule; +extern const std::string kSelectAccessModules; +extern const std::string kDeleteAccessModules; +extern const std::string kInsertRemoteRpc; +extern const std::string kSelectRemoteRpcs; +extern const std::string kDeleteRemoteRpc; +extern const std::string kDeleteAppGroupPrimary; +extern const std::string kDeleteAppGroupNonPrimary; +extern const std::string kDeleteModuleTypes; +extern const std::string kDeleteAllDevices; extern const std::string kSelectDBVersion; extern const std::string kUpdateDBVersion; } // namespace sql_pt diff --git a/src/components/policy/policy_external/include/policy/sql_pt_representation.h b/src/components/policy/policy_external/include/policy/sql_pt_representation.h index 0a2aab78e7..b3ce0a69be 100644 --- a/src/components/policy/policy_external/include/policy/sql_pt_representation.h +++ b/src/components/policy/policy_external/include/policy/sql_pt_representation.h @@ -182,22 +182,16 @@ class SQLPTRepresentation : public virtual PTRepresentation { #ifdef BUILD_TESTS uint32_t open_counter_; #endif // BUILD_TESTS - enum ExternalConsentEntitiesType { kExternalConsentEntitiesTypeOn, kExternalConsentEntitiesTypeOff }; - /** * @brief Calculates DB version from current schema * @return version */ const int32_t GetDBVersion() const; bool SaveRpcs(int64_t group_id, const policy_table::Rpc& rpcs); - bool SaveExternalConsentEntities( - const int64_t group_id, - const policy_table::DisallowedByExternalConsentEntities& entities, - ExternalConsentEntitiesType type) const; bool SaveServiceEndpoints(const policy_table::ServiceEndpoints& endpoints); bool SaveSecondsBetweenRetries( const policy_table::SecondsBetweenRetries& seconds); @@ -207,6 +201,10 @@ class SQLPTRepresentation : public virtual PTRepresentation { bool SaveLanguage(const std::string& code); bool is_in_memory; + bool SaveExternalConsentEntities( + const int64_t group_id, + const policy_table::DisallowedByExternalConsentEntities& entities, + ExternalConsentEntitiesType type) const; }; } // namespace policy diff --git a/src/components/policy/policy_external/include/policy/status.h b/src/components/policy/policy_external/include/policy/status.h index 6318c5fade..53925c599a 100644 --- a/src/components/policy/policy_external/include/policy/status.h +++ b/src/components/policy/policy_external/include/policy/status.h @@ -132,7 +132,7 @@ class UpToDateStatus : public Status { * @param manager Status manager pointer * @param event Event which needs to be processed */ - void ProcessEvent(UpdateStatusManager* manager, UpdateEvent event) FINAL; + void ProcessEvent(UpdateStatusManager* manager, UpdateEvent event) OVERRIDE; }; /** @@ -151,13 +151,13 @@ class UpdateNeededStatus : public Status { * @param manager Status manager pointer * @param event Event which needs to be processed */ - void ProcessEvent(UpdateStatusManager* manager, UpdateEvent event) FINAL; + void ProcessEvent(UpdateStatusManager* manager, UpdateEvent event) OVERRIDE; /** * @brief Check whether update is required in terms of status * @return True if update is required, otherwise - false */ - bool IsUpdateRequired() const FINAL; + bool IsUpdateRequired() const OVERRIDE; }; /** @@ -176,19 +176,19 @@ class UpdatingStatus : public Status { * @param manager Status manager pointer * @param event Event which needs to be processed */ - void ProcessEvent(UpdateStatusManager* manager, UpdateEvent event) FINAL; + void ProcessEvent(UpdateStatusManager* manager, UpdateEvent event) OVERRIDE; /** * @brief Check whether update is required in terms of status * @return True if update is required, otherwise - false */ - bool IsUpdateRequired() const FINAL; + bool IsUpdateRequired() const OVERRIDE; /** * @brief Check whether update is pending in terms of status * @return True if update is pending, otherwise - false */ - bool IsUpdatePending() const FINAL; + bool IsUpdatePending() const OVERRIDE; }; } diff --git a/src/components/policy/policy_external/src/cache_manager.cc b/src/components/policy/policy_external/src/cache_manager.cc index b7f4f553d7..e3b14668a8 100644 --- a/src/components/policy/policy_external/src/cache_manager.cc +++ b/src/components/policy/policy_external/src/cache_manager.cc @@ -74,19 +74,6 @@ bool IsEntityExists( } /** - * @brief Returns group consent record constructed from input group permissions - */ -struct ExternalConsentConsentGroupAppender - : public std::unary_function<policy_table::ConsentGroups, - const policy::FunctionalGroupPermission&> { - policy_table::ConsentGroups::value_type operator()( - const policy::FunctionalGroupPermission& value) const { - return std::make_pair(value.group_name, - rpc::Boolean(value.state == policy::kGroupAllowed)); - } -}; - -/** * @brief Looks for ExternalConsent entity in * disallowed_by_external_consent_entities_on/off sections * of each functional group @@ -205,6 +192,20 @@ struct LinkCollector std::string device_id_; std::map<std::string, std::string>& links_; }; + +/** + * @brief Returns group consent record constructed from input group permissions + */ +struct ExternalConsentConsentGroupAppender + : public std::unary_function<policy_table::ConsentGroups, + const policy::FunctionalGroupPermission&> { + policy_table::ConsentGroups::value_type operator()( + const policy::FunctionalGroupPermission& value) const { + return std::make_pair(value.group_name, + rpc::Boolean(value.state == policy::kGroupAllowed)); + } +}; + } // namespace namespace policy { diff --git a/src/components/policy/policy_external/src/policy_manager_impl.cc b/src/components/policy/policy_external/src/policy_manager_impl.cc index 6e0ccb2fb6..a350a5d12a 100644 --- a/src/components/policy/policy_external/src/policy_manager_impl.cc +++ b/src/components/policy/policy_external/src/policy_manager_impl.cc @@ -83,128 +83,6 @@ struct GroupNamesAppender */ struct ConsentsUpdater : public std::unary_function<void, policy::FunctionalGroupPermission&> { - ConsentsUpdater( - const policy::GroupsNames& allowed, - const policy::GroupsNames& disallowed, - std::vector<policy::FunctionalGroupPermission>& out_ccs_matches) - : allowed_(allowed) - , disallowed_(disallowed) - , out_ccs_matches_(out_ccs_matches) {} - - void operator()(policy::FunctionalGroupPermission& value) { - using namespace policy; - - GroupsNames::iterator it_disallowed = - std::find(disallowed_.begin(), disallowed_.end(), value.group_name); - - if (disallowed_.end() != it_disallowed) { - value.state = kGroupDisallowed; - out_ccs_matches_.push_back(value); - return; - } - - GroupsNames::iterator it_allowed = - std::find(allowed_.begin(), allowed_.end(), value.group_name); - - if (allowed_.end() != it_allowed) { - value.state = kGroupAllowed; - out_ccs_matches_.push_back(value); - } - } - - private: - const policy::GroupsNames& allowed_; - const policy::GroupsNames& disallowed_; - std::vector<policy::FunctionalGroupPermission>& out_ccs_matches_; -}; - -/** - * @brief Checks whether CCS entity status is the same as name of group - * container where entity has been found in. In case of match group is added to - * 'disallowed' list, otherwise - to 'allowed' one. - * E.g. if entity has "ON" status and is found in - * 'disallowed_by_ccs_entities_on' it will be added to 'disallowed'. If it has - * been found in 'disallowed_by_ccs_entities_off' than group is added to - * 'allowed' list. - */ -struct GroupChecker - : std::unary_function<void, - policy::GroupsByCCSStatus::mapped_type::value_type> { - GroupChecker(const policy::EntityStatus entity_status, - policy::GroupsNames& out_allowed, - policy::GroupsNames& out_disallowed) - : entity_status_(entity_status) - , out_allowed_(out_allowed) - , out_disallowed_(out_disallowed) {} - - void operator()( - const policy::GroupsByCCSStatus::mapped_type::value_type value) { - using namespace policy; - - const std::string group_name = value.first; - - if ((value.second && (kStatusOn == entity_status_)) || - (!value.second && (kStatusOff == entity_status_))) { - out_disallowed_.insert(group_name); - } else { - out_allowed_.insert(group_name); - } - } - - private: - const policy::EntityStatus entity_status_; - policy::GroupsNames& out_allowed_; - policy::GroupsNames& out_disallowed_; -}; - -/** - * @brief Sorts groups for 'allowed' and 'disallowed' by CCS entities statuses. - * Wraps GroupChecker logic. - */ -struct GroupSorter - : std::unary_function<void, const policy::GroupsByCCSStatus::value_type&> { - GroupSorter(policy::GroupsNames& out_allowed, - policy::GroupsNames& out_disallowed) - : out_allowed_(out_allowed), out_disallowed_(out_disallowed) {} - - void operator()(const policy::GroupsByCCSStatus::value_type& value) { - GroupChecker checker(value.first.status_, out_allowed_, out_disallowed_); - std::for_each(value.second.begin(), value.second.end(), checker); - } - - private: - policy::GroupsNames& out_allowed_; - policy::GroupsNames& out_disallowed_; -}; - -} // namespace - -namespace { - -/** - * @brief Extracts group name from group permission structure - */ -struct GroupNamesAppender - : public std::unary_function<void, - const policy::FunctionalGroupPermission&> { - GroupNamesAppender(policy_table::Strings& names) : names_(names) {} - - void operator()(const policy::FunctionalGroupPermission& value) { - names_.push_back(value.group_name); - } - - private: - policy_table::Strings& names_; -}; - -/** - * @brief Updates permission state of input group permission value in case - * group name is found within allowed or disallowed groups lists - * Also collects matched groups names to separate collection for futher - * processing - */ -struct ConsentsUpdater - : public std::unary_function<void, policy::FunctionalGroupPermission&> { ConsentsUpdater(const policy::GroupsNames& allowed, const policy::GroupsNames& disallowed, std::vector<policy::FunctionalGroupPermission>& @@ -357,6 +235,10 @@ void PolicyManagerImpl::CheckTriggers() { } } +std::string PolicyManagerImpl::GetLockScreenIconUrl() const { + return cache_->GetLockScreenIconUrl(); +} + bool PolicyManagerImpl::LoadPT(const std::string& file, const BinaryMessage& pt_content) { LOG4CXX_INFO(logger_, "LoadPT of size " << pt_content.size()); @@ -404,11 +286,11 @@ bool PolicyManagerImpl::LoadPT(const std::string& file, return false; } - CCSStatus status = cache_->GetCCSStatus(); - GroupsByCCSStatus groups_by_status = + ExternalConsentStatus status = cache_->GetExternalConsentStatus(); + GroupsByExternalConsentStatus groups_by_status = cache_->GetGroupsWithSameEntities(status); - ProcessCCSStatusUpdate(groups_by_status); + ProcessExternalConsentStatusUpdate(groups_by_status); ProcessAppPolicyCheckResults( results, pt_update->policy_table.app_policies_section.apps); @@ -482,7 +364,7 @@ void PolicyManagerImpl::ProcessAppPolicyCheckResults( continue; case RESULT_CONSENT_NEEDED: case RESULT_PERMISSIONS_REVOKED_AND_CONSENT_NEEDED: { - // Post-check after CCS consent changes + // Post-check after ExternalConsent consent changes const std::string policy_app_id = app_policy->first; if (!IsConsentNeeded(policy_app_id)) { sync_primitives::AutoLock lock(app_permissions_diff_lock_); @@ -517,6 +399,27 @@ void PolicyManagerImpl::PrepareNotificationData( std::for_each(group_names.begin(), group_names.end(), processor); } +std::string PolicyManagerImpl::GetUpdateUrl(int service_type) { + LOG4CXX_AUTO_TRACE(logger_); + EndpointUrls urls; + GetUpdateUrls(service_type, urls); + + std::string url; + if (!urls.empty()) { + static uint32_t index = 0; + + if (index >= urls.size()) { + index = 0; + } + url = urls[index].url.empty() ? "" : urls[index].url[0]; + + ++index; + } else { + LOG4CXX_ERROR(logger_, "The endpoint entry is empty"); + } + return url; +} + void PolicyManagerImpl::GetUpdateUrls(const std::string& service_type, EndpointUrls& out_end_points) { LOG4CXX_AUTO_TRACE(logger_); @@ -1320,17 +1223,110 @@ const PolicySettings& PolicyManagerImpl::get_settings() const { return *settings_; } -bool PolicyManagerImpl::SetExternalConsentStatus( - const ExternalConsentStatus& status) { - LOG4CXX_AUTO_TRACE(logger_); +void PolicyManagerImpl::UpdateAppConsentWithExternalConsent( + const std::string& device_id, + const std::string& application_id, + const GroupsNames& allowed_groups, + const GroupsNames& disallowed_groups) { + std::vector<FunctionalGroupPermission> current_permissions; + GetUserConsentForApp(device_id, application_id, current_permissions); + + std::vector<FunctionalGroupPermission> external_consent_groups_matches; + ConsentsUpdater updater( + allowed_groups, disallowed_groups, external_consent_groups_matches); + std::for_each( + current_permissions.begin(), current_permissions.end(), updater); - if (status.empty()) { - LOG4CXX_INFO(logger_, "External consent status is empty, skipping update."); - return false; + const std::string source = "GUI"; + + PermissionConsent updated_user_permissions; + updated_user_permissions.group_permissions = current_permissions; + updated_user_permissions.device_id = device_id; + updated_user_permissions.policy_app_id = application_id; + updated_user_permissions.consent_source = source; + + // Need to check to which app to send notification since maybe app registered + // from different device + SetUserConsentForApp(updated_user_permissions); + + PermissionConsent updated_external_consent_permissions; + updated_external_consent_permissions.group_permissions = + external_consent_groups_matches; + updated_external_consent_permissions.device_id = device_id; + updated_external_consent_permissions.policy_app_id = application_id; + updated_user_permissions.consent_source = source; + + cache_->SetExternalConsentForApp(updated_external_consent_permissions); +} + +void PolicyManagerImpl::NotifySystem( + const PolicyManagerImpl::AppPoliciesValueType& app_policy) const { + listener()->OnPendingPermissionChange(app_policy.first); +} + +void PolicyManagerImpl::SendPermissionsToApp( + const PolicyManagerImpl::AppPoliciesValueType& app_policy) { + const std::string app_id = app_policy.first; + + const std::string device_id = GetCurrentDeviceId(app_id); + if (device_id.empty()) { + LOG4CXX_WARN(logger_, + "Couldn't find device info for application id: " << app_id); + return; + } + std::vector<FunctionalGroupPermission> group_permissons; + GetPermissionsForApp(device_id, app_id, group_permissons); + + Permissions notification_data; + + // Need to get rid of this call + utils::SharedPtr<policy_table::Table> policy_table_snapshot = + cache_->GenerateSnapshot(); + + PrepareNotificationData( + policy_table_snapshot->policy_table.functional_groupings, + app_policy.second.groups, + group_permissons, + notification_data); + + LOG4CXX_INFO(logger_, "Send notification for application_id: " << app_id); + listener()->OnPermissionsUpdated( + app_id, + notification_data, + policy_table::EnumToJsonString(app_policy.second.default_hmi)); +} + +void PolicyManagerImpl::ProcessExternalConsentStatusUpdate( + const GroupsByExternalConsentStatus& groups_by_status) { + GroupsNames allowed_groups; + GroupsNames disallowed_groups; + CalculateGroupsConsentFromExternalConsent( + groups_by_status, allowed_groups, disallowed_groups); + + std::map<std::string, std::string> known_links = + cache_->GetKnownLinksFromPT(); + std::map<std::string, std::string> registered_links; + listener_->GetRegisteredLinks(registered_links); + + std::map<std::string, std::string> all_known; + std::merge(known_links.begin(), + known_links.end(), + registered_links.begin(), + registered_links.end(), + std::inserter(all_known, all_known.begin())); + + std::map<std::string, std::string>::const_iterator it_links = + all_known.begin(); + for (; all_known.end() != it_links; ++it_links) { + UpdateAppConsentWithExternalConsent( + it_links->first, it_links->second, allowed_groups, disallowed_groups); } +} +bool PolicyManagerImpl::SetExternalConsentStatus( + const ExternalConsentStatus& status) { + LOG4CXX_AUTO_TRACE(logger_); if (!cache_->SetExternalConsentStatus(status)) { - LOG4CXX_WARN(logger_, "Can't set external user consent status."); return false; } @@ -1606,8 +1602,9 @@ AppIdURL PolicyManagerImpl::RetrySequenceUrl(const struct RetrySequenceURL& rs, app_idx = 0; } } + const AppIdURL next_app_url = std::make_pair(app_idx, url_idx); - return std::make_pair(app_idx, url_idx); + return next_app_url; } /** @@ -1630,18 +1627,23 @@ class CallStatusChange : public utils::Callable { }; StatusNotifier PolicyManagerImpl::AddApplication( - const std::string& application_id) { + const std::string& application_id, + const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) { LOG4CXX_AUTO_TRACE(logger_); const std::string device_id = GetCurrentDeviceId(application_id); DeviceConsent device_consent = GetUserConsentForDevice(device_id); sync_primitives::AutoLock lock(apps_registration_lock_); - if (IsNewApplication(application_id)) { AddNewApplication(application_id, device_consent); return utils::MakeShared<CallStatusChange>(update_status_manager_, device_consent); } else { PromoteExistedApplication(application_id, device_consent); + if (helpers::in_range(hmi_types, policy_table::AHT_NAVIGATION) && + !HasCertificate()) { + LOG4CXX_DEBUG(logger_, "Certificate does not exist, scheduling update."); + update_status_manager_.ScheduleUpdate(); + } return utils::MakeShared<utils::CallNothing>(); } } @@ -1657,19 +1659,19 @@ bool PolicyManagerImpl::IsPredataPolicy( return cache_->IsPredataPolicy(policy_app_id); } -void PolicyManagerImpl::ProcessCCSStatusForApp( +void PolicyManagerImpl::ProcessExternalConsentStatusForApp( const std::string& application_id) { - CCSStatus status = cache_->GetCCSStatus(); - GroupsByCCSStatus groups_by_status = + ExternalConsentStatus status = cache_->GetExternalConsentStatus(); + GroupsByExternalConsentStatus groups_by_status = cache_->GetGroupsWithSameEntities(status); GroupsNames allowed_groups; GroupsNames disallowed_groups; - CalculateGroupsConsentFromCCS( + CalculateGroupsConsentFromExternalConsent( groups_by_status, allowed_groups, disallowed_groups); const std::string device_id = GetCurrentDeviceId(application_id); - UpdateAppConsentWithCCS( + UpdateAppConsentWithExternalConsent( device_id, application_id, allowed_groups, disallowed_groups); } @@ -1692,7 +1694,7 @@ void PolicyManagerImpl::AddNewApplication(const std::string& application_id, cache_->SetDefaultPolicy(application_id); } - ProcessCCSStatusForApp(application_id); + ProcessExternalConsentStatusForApp(application_id); } void PolicyManagerImpl::PromoteExistedApplication( @@ -1703,8 +1705,7 @@ void PolicyManagerImpl::PromoteExistedApplication( cache_->IsPredataPolicy(application_id)) { cache_->SetDefaultPolicy(application_id); } - - ProcessCCSStatusForApp(application_id); + ProcessExternalConsentStatusForApp(application_id); } bool PolicyManagerImpl::IsNewApplication( diff --git a/src/components/policy/policy_external/src/policy_table/types.cc b/src/components/policy/policy_external/src/policy_table/types.cc index 4d7d63ce51..74e43e4cc6 100644 --- a/src/components/policy/policy_external/src/policy_table/types.cc +++ b/src/components/policy/policy_external/src/policy_table/types.cc @@ -1608,7 +1608,7 @@ Json::Value ConsentRecords::ToJsonValue() const { bool ConsentRecords::is_valid() const { if (struct_empty()) { - return initialization_state__ == kInitialized && Validate(); + return initialization_state__ == kUninitialized && Validate(); } if (!consent_groups.is_valid()) { return false; @@ -2079,7 +2079,7 @@ ExternalConsentEntity::ExternalConsentEntity(const Json::Value* value__) ExternalConsentEntity::ExternalConsentEntity(const int32_t type, const int32_t id) - : CompositeType(kUninitialized), entity_type(type), entity_id(id) {} + : CompositeType(kInitialized), entity_type(type), entity_id(id) {} Json::Value ExternalConsentEntity::ToJsonValue() const { Json::Value result__(Json::objectValue); diff --git a/src/components/policy/policy_external/src/sql_pt_ext_representation.cc b/src/components/policy/policy_external/src/sql_pt_ext_representation.cc index fd49464528..4588076801 100644 --- a/src/components/policy/policy_external/src/sql_pt_ext_representation.cc +++ b/src/components/policy/policy_external/src/sql_pt_ext_representation.cc @@ -1010,6 +1010,31 @@ void SQLPTExtRepresentation::GatherConsentGroup( *app_consent_records->input = input; *app_consent_records->time_stamp = query.GetString(5); } + if (!query.Reset()) { + return; + } + + // Fill data for ExternalConsent consents + if (!query.Prepare(sql_pt_ext::kSelectExternalConsentStatusGroup)) { + LOG4CXX_WARN( + logger_, + "Incorrect select statement for ExternalConsent consented groups."); + return; + } + + query.Bind(0, device_id); + + // Fill device_data -> user_consent_records -> <app_id> -> + // external_consent_status_groups + while (query.Next()) { + policy_table::ConsentRecords* app_consent_records = + &(*records)[query.GetString(1)]; + policy_table::ConsentGroups& external_consent_status_groups = + *app_consent_records->external_consent_status_groups; + external_consent_status_groups[query.GetString(2)] = query.GetBoolean(3); + policy_table::Input input; + policy_table::EnumFromJsonString(query.GetString(4), &input); + } } bool SQLPTExtRepresentation::SaveDeviceData( @@ -1129,6 +1154,37 @@ bool SQLPTExtRepresentation::SaveConsentGroup( return false; } } + + policy_table::ConsentGroups::const_iterator it_external_consent_consent = + it->second.external_consent_status_groups->begin(); + policy_table::ConsentGroups::const_iterator end_external_consent_consent = + it->second.external_consent_status_groups->end(); + + for (; end_external_consent_consent != it_external_consent_consent; + ++it_external_consent_consent) { + if (!query.Prepare(sql_pt_ext::kInsertExternalConsentStatusGroups)) { + LOG4CXX_WARN(logger_, + "Incorrect insert statement for external consent group."); + return false; + } + query.Bind(0, device_id); + query.Bind(1, it->first); + query.Bind(2, it_external_consent_consent->first); + query.Bind(3, it_external_consent_consent->second); + query.Bind( + 4, std::string(policy_table::EnumToJsonString(*(it->second.input)))); + query.Bind(5, std::string(*(it->second.time_stamp))); + LOG4CXX_INFO(logger_, + "Device:" + << "time stamp " << std::string(*(it->second.time_stamp)) + << " group " << it_external_consent_consent->first + << " consent " << it_external_consent_consent->second); + + if (!query.Exec() || !query.Reset()) { + LOG4CXX_WARN(logger_, "Incorrect insert into external consent group."); + return false; + } + } // external_consent_consent_group } return true; @@ -1768,8 +1824,7 @@ bool SQLPTExtRepresentation::SetVINValue(const std::string& value) { return result; } - -bool SQLPTExtRepresentation::SetExternalConsentStatus( +bool SQLPTExtRepresentation::SaveExternalConsentStatus( const ExternalConsentStatus& status) const { LOG4CXX_AUTO_TRACE(logger_); utils::dbms::SQLQuery query(db()); @@ -1821,4 +1876,39 @@ ExternalConsentStatus SQLPTExtRepresentation::GetExternalConsentStatus() const { return status; } +bool SQLPTExtRepresentation::RemoveAppConsentForGroup( + const std::string& policy_app_id, + const std::string& functional_group_name) const { + utils::dbms::SQLQuery query_group_id(db()); + if (!query_group_id.Prepare(sql_pt_ext::kSelectGroupId)) { + LOG4CXX_WARN(logger_, "Incorect statement for select group name."); + return false; + } + + query_group_id.Bind(0, functional_group_name); + + if (!query_group_id.Exec()) { + LOG4CXX_WARN(logger_, "Failed to select group id."); + return false; + } + + const int id = query_group_id.GetInteger(0); + + utils::dbms::SQLQuery query(db()); + if (!query.Prepare(sql_pt_ext::kDeleteAppGroupConsent)) { + LOG4CXX_WARN(logger_, "Incorect statement for remove app consent."); + return false; + } + + query.Bind(0, policy_app_id); + query.Bind(1, id); + + if (!query.Exec()) { + LOG4CXX_WARN(logger_, "Failed to remove app consent."); + return false; + } + + return true; +} + } // namespace policy diff --git a/src/components/policy/policy_external/src/sql_pt_queries.cc b/src/components/policy/policy_external/src/sql_pt_queries.cc index 1b514dff52..54648f7ea2 100644 --- a/src/components/policy/policy_external/src/sql_pt_queries.cc +++ b/src/components/policy/policy_external/src/sql_pt_queries.cc @@ -76,7 +76,9 @@ const std::string kCreateSchema = " `vehicle_model` VARCHAR(45), " " `vehicle_year` VARCHAR(4), " " `preloaded_date` VARCHAR (10), " - " `certificate` VARCHAR (45) " + " `certificate` VARCHAR (45), " + " `user_consent_passengersRC` BOOL," + " `country_consent_passengersRC` BOOL " "); " "CREATE TABLE IF NOT EXISTS `functional_group`( " " `id` INTEGER PRIMARY KEY NOT NULL, " @@ -147,6 +149,7 @@ const std::string kCreateSchema = " `is_predata` BOOLEAN, " " `memory_kb` INTEGER NOT NULL, " " `heart_beat_timeout_ms` INTEGER NOT NULL, " + " `remote_control_denied` BOOLEAN NOT NULL DEFAULT 0, " " CONSTRAINT `fk_application_hmi_level1` " " FOREIGN KEY(`default_hmi`) " " REFERENCES `hmi_level`(`value`), " @@ -347,6 +350,97 @@ const std::string kCreateSchema = " FOREIGN KEY(`message_type_name`) " " REFERENCES `message_type`(`name`) " "); " + + "CREATE TABLE IF NOT EXISTS `app_group_primary`( " + " `application_id` VARCHAR(45) NOT NULL, " + " `functional_group_id` INTEGER NOT NULL, " + " PRIMARY KEY(`application_id`,`functional_group_id`), " + " CONSTRAINT `fk_application_has_functional_group_application1` " + " FOREIGN KEY(`application_id`) " + " REFERENCES `application`(`id`), " + " CONSTRAINT `fk_application_has_functional_group_functional_group1` " + " FOREIGN KEY(`functional_group_id`) " + " REFERENCES `functional_group`(`id`) " + "); " + "CREATE INDEX IF NOT EXISTS " + "`app_group_primary.fk_application_has_functional_group_functional_group1_" + "idx` " + " ON `app_group_primary`(`functional_group_id`); " + "CREATE INDEX IF NOT EXISTS " + "`app_group_primary.fk_application_has_functional_group_application1_idx` " + " ON `app_group_primary`(`application_id`); " + + "CREATE TABLE IF NOT EXISTS `app_group_non_primary`( " + " `application_id` VARCHAR(45) NOT NULL, " + " `functional_group_id` INTEGER NOT NULL, " + " PRIMARY KEY(`application_id`,`functional_group_id`), " + " CONSTRAINT `fk_application_has_functional_group_application1` " + " FOREIGN KEY(`application_id`) " + " REFERENCES `application`(`id`), " + " CONSTRAINT `fk_application_has_functional_group_functional_group1` " + " FOREIGN KEY(`functional_group_id`) " + " REFERENCES `functional_group`(`id`) " + "); " + "CREATE INDEX IF NOT EXISTS " + "`app_group_non_primary.fk_application_has_functional_group_functional_" + "group1_idx` " + " ON `app_group_non_primary`(`functional_group_id`); " + "CREATE INDEX IF NOT EXISTS " + "`app_group_non_primary.fk_application_has_functional_group_application1_" + "idx` " + " ON `app_group_non_primary`(`application_id`); " + + /* interior_zone */ + "CREATE TABLE `interior_zone`( " + " `id` INTEGER PRIMARY KEY NOT NULL, " + " `name` VARCHAR(100) NOT NULL, " + " `col` INTEGER NOT NULL, " + " `row` INTEGER NOT NULL, " + " `level` INTEGER NOT NULL " + "); " + "CREATE UNIQUE INDEX `interior_zone.room` ON " + "`interior_zone`(`col`,`row`,`level`); " + + /* access_module */ + "CREATE TABLE `access_module`( " + " `id` INTEGER PRIMARY KEY NOT NULL, " + " `name` VARCHAR(45) NOT NULL, " + " `zone_id` INTEGER NOT NULL, " + " `user_consent_needed` INTEGER NOT NULL, " + "CONSTRAINT `fk_module_1` " + " FOREIGN KEY(`zone_id`) " + " REFERENCES `interior_zone`(`id`) " + "); " + "CREATE INDEX `access_module.zone_module` ON " + "`access_module`(`name`,`zone_id`); " + "CREATE INDEX `access_module.fk_module_1_idx` ON " + "`access_module`(`zone_id`); " + + /* remote_rpc */ + "CREATE TABLE `remote_rpc`( " + " `id` INTEGER PRIMARY KEY NOT NULL, " + " `name` VARCHAR(255) NOT NULL, " + " `parameter` VARCHAR(45), " + " `module_id` INTEGER NOT NULL, " + "CONSTRAINT `fk_remote_rpc_1` " + " FOREIGN KEY(`module_id`) " + " REFERENCES `access_module`(`id`) " + "); " + "CREATE INDEX `remote_rpc.fk_remote_rpc_1_idx` ON " + "`remote_rpc`(`module_id`); " + + /* module type */ + "CREATE TABLE IF NOT EXISTS `module_type`( " + " `name` VARCHAR(50) NOT NULL, " + " `application_id` VARCHAR(45) NOT NULL, " + " PRIMARY KEY(`name`,`application_id`), " + " CONSTRAINT `fk_module_type_application1` " + " FOREIGN KEY(`application_id`) " + " REFERENCES `application`(`id`) " + "); " + "CREATE INDEX IF NOT EXISTS `module_type.fk_module_type_application1_idx` " + " ON `module_type`(`application_id`); " + "CREATE INDEX IF NOT EXISTS `message.fk_messages_languages1_idx` " " ON `message`(`language_code`);" "CREATE INDEX IF NOT EXISTS " @@ -355,6 +449,12 @@ const std::string kCreateSchema = "CREATE TABLE IF NOT EXISTS `_internal_data`( " " `db_version_hash` INTEGER " " ); " + "CREATE TABLE IF NOT EXISTS `_internal_external_consent_status`( " + " `id` INTEGER PRIMARY KEY AUTOINCREMENT, " + " `entity_type` INTEGER NOT NULL, " + " `entity_id` INTEGER NOT NULL, " + " `on_off` TEXT NOT NULL " + " ); " "COMMIT;"; const std::string kInsertInitData = @@ -384,8 +484,91 @@ const std::string kInsertInitData = "INSERT OR IGNORE INTO `_internal_data` (`db_version_hash`) VALUES(0); " ""; +const std::string kDeleteAppGroupPrimary = "DELETE FROM `app_group_primary`"; + +const std::string kDeleteAppGroupNonPrimary = + "DELETE FROM `app_group_non_primary`"; + +const std::string kDeleteModuleTypes = "DELETE FROM `module_type`"; + +const std::string kDeleteAllDevices = "DELETE FROM `device`;"; + +const std::string kSelectAppGroupsPrimary = + "SELECT `f`.`name` FROM `app_group_primary` AS `a`" + " LEFT JOIN `functional_group` AS `f` " + " ON (`f`.`id` = `a`.`functional_group_id`)" + " WHERE `a`.`application_id` = ?"; + +const std::string kSelectAppGroupsNonPrimary = + "SELECT `f`.`name` FROM `app_group_non_primary` AS `a`" + " LEFT JOIN `functional_group` AS `f` " + " ON (`f`.`id` = `a`.`functional_group_id`)" + " WHERE `a`.`application_id` = ?"; + +const std::string kSelectRemoteControlDenied = + "SELECT `remote_control_denied` FROM `application` WHERE `id` = ? LIMIT 1"; + +const std::string kInsertAppGroupPrimary = + "INSERT INTO `app_group_primary` (`application_id`, `functional_group_id`)" + " SELECT ?, `id` FROM `functional_group` WHERE `name` = ? LIMIT 1"; + +const std::string kInsertAppGroupNonPrimary = + "INSERT INTO `app_group_non_primary` (`application_id`, " + "`functional_group_id`)" + " SELECT ?, `id` FROM `functional_group` WHERE `name` = ? LIMIT 1"; + +const std::string kUpdateRemoteControlDenied = + "UPDATE `application` SET `remote_control_denied` = ? WHERE `id` = ?"; + +const std::string kCountInteriorZones = + "SELECT COUNT(`id`) FROM `interior_zone`"; + +const std::string kDeleteInteriorZones = "DELETE FROM `interior_zone`"; + +const std::string kDeleteAccessModules = "DELETE FROM `access_module`"; + +const std::string kDeleteRemoteRpc = "DELETE FROM `remote_rpc`"; + +const std::string kInsertInteriorZone = + "INSERT INTO `interior_zone` (`name`, `col`, `row`, `level`) " + " VALUES(?, ?, ?, ?)"; + +const std::string kSelectInteriorZones = + "SELECT `id`, `name`, `col`, `row`, `level` FROM `interior_zone`"; + +const std::string kInsertAccessModule = + "INSERT INTO `access_module` (`name`, `zone_id`, `user_consent_needed`) " + " VALUES(?, ?, ?)"; + +const std::string kDeleteAppGroupPrimaryByApplicationId = + "DELETE FROM `app_group_primary` WHERE `application_id` = ?"; + +const std::string kDeleteAppGroupNonPrimaryByApplicationId = + "DELETE FROM `app_group_non_primary` WHERE `application_id` = ?"; + +const std::string kSelectAccessModules = + "SELECT `id`, `name` FROM `access_module` " + " WHERE `zone_id` = ? AND `user_consent_needed` = ?"; + +const std::string kInsertRemoteRpc = + "INSERT INTO `remote_rpc` (`module_id`, `name`, `parameter`) " + " VALUES(?, ?, ?)"; + +const std::string kSelectRemoteRpcs = + "SELECT `name`, `parameter` FROM `remote_rpc` " + " WHERE `module_id` = ?"; + +const std::string kInsertModuleType = + "INSERT OR IGNORE INTO `module_type` (`application_id`, `name`) VALUES (?, " + "?)"; + +const std::string kSelectModuleTypes = + "SELECT DISTINCT `name` FROM `module_type` WHERE `application_id` = ?"; + const std::string kDropSchema = "BEGIN; " + "DROP INDEX IF EXISTS `module_type.fk_module_type_application1_idx`; " + "DROP TABLE IF EXISTS `module_type`; " "DROP INDEX IF EXISTS `message.fk_messages_languages1_idx`; " "DROP INDEX IF EXISTS " "`message.fk_message_consumer_friendly_messages1_idx`; " @@ -422,6 +605,23 @@ const std::string kDropSchema = "idx`; " "DROP TABLE IF EXISTS `preconsented_group`; " "DROP INDEX IF EXISTS " + "`app_group_primary.fk_application_has_functional_group_application1_idx`; " + "DROP INDEX IF EXISTS " + "`app_group_primary.fk_application_has_functional_group_functional_group1_" + "idx`; " + "DROP TABLE IF EXISTS `app_group_primary`; " + "DROP INDEX IF EXISTS " + "`app_group_non_primary.fk_application_has_functional_group_application1_" + "idx`; " + "DROP INDEX IF EXISTS " + "`app_group_non_primary.fk_application_has_functional_group_functional_" + "group1_idx`; " + "DROP TABLE IF EXISTS `app_group_non_primary`; " + "DROP TABLE IF EXISTS `interior_zone`; " + "DROP TABLE IF EXISTS `access_module`; " + "DROP INDEX IF EXISTS `access_module.zone_module`; " + "DROP INDEX IF EXISTS `access_module.fk_module_1_idx`; " + "DROP INDEX IF EXISTS " "`app_group.fk_application_has_functional_group_application1_idx`; " "DROP INDEX IF EXISTS " "`app_group.fk_application_has_functional_group_functional_group1_idx`; " @@ -443,16 +643,20 @@ const std::string kDropSchema = "DROP TABLE IF EXISTS `priority`; " "DROP TABLE IF EXISTS `functional_group`; " "DROP TABLE IF EXISTS `module_config`; " + "DROP TABLE IF EXISTS `remote_rpc`; " + "DROP INDEX IF EXISTS `remote_rpc.fk_remote_rpc_1_idx`; " "DROP TABLE IF EXISTS `module_meta`; " "DROP TABLE IF EXISTS `usage_and_error_count`; " "DROP TABLE IF EXISTS `device`; " "DROP TABLE IF EXISTS `_internal_data`; " + "DROP TABLE IF EXISTS `_internal_external_consent_status`; " "COMMIT; " "VACUUM;"; const std::string kDeleteData = "BEGIN; " "DELETE FROM `message`; " + "DELETE FROM `module_type`; " "DELETE FROM `endpoint`; " "DELETE FROM `consent_group`; " "DELETE FROM `external_consent_status_group`; " @@ -466,6 +670,10 @@ const std::string kDeleteData = "DELETE FROM `app_group`; " "DELETE FROM `application`; " "DELETE FROM `rpc`; " + "DELETE FROM `app_group_primary`; " + "DELETE FROM `app_group_non_primary`; " + "DELETE FROM `interior_zone`; " + "DELETE FROM `access_module`; " "DELETE FROM `version`; " "DELETE FROM `message_type`; " "DELETE FROM `language`; " @@ -475,6 +683,7 @@ const std::string kDeleteData = "DELETE FROM `functional_group`; " "DELETE FROM `module_config`; " "DELETE FROM `module_meta`; " + "DELETE FROM `remote_rpc`; " "DELETE FROM `usage_and_error_count`; " "DELETE FROM `device`; " "DELETE FROM `request_type`; " @@ -485,9 +694,6 @@ const std::string kCheckDBIntegrity = "PRAGMA integrity_check"; const std::string kCheckPgNumber = "PRAGMA page_count"; -const std::string kSelectLockScreenIcon = - "SELECT `url` FROM `endpoint` WHERE `service` = ? AND `application_id` = ?"; - const std::string kSelectRpc = "SELECT DISTINCT `rpc`.`parameter` FROM `rpc` " " JOIN `app_group` AS `g` ON (`g`.`functional_group_id` = " @@ -510,6 +716,9 @@ const std::string kSetNotFirstRun = const std::string kSelectEndpoint = "SELECT `url`, `application_id` FROM `endpoint` WHERE `service` = ? "; +const std::string kSelectLockScreenIcon = + "SELECT `url` FROM `endpoint` WHERE `service` = ? AND `application_id` = ?"; + const std::string kInsertFunctionalGroup = "INSERT INTO `functional_group` (`id`, `name`, `user_consent_prompt`) " " VALUES (?, ?, ?)"; @@ -565,7 +774,8 @@ const std::string kUpdateModuleConfig = " `exchange_after_x_kilometers` = ?, `exchange_after_x_days` = ?, " " `timeout_after_x_seconds` = ?, `vehicle_make` = ?, " " `vehicle_model` = ?, `vehicle_year` = ?, `preloaded_date` = ?, " - "`certificate` = ?"; + "`certificate` = ?, `user_consent_passengersRC` = ?, " + "`country_consent_passengersRC` = ?"; const std::string kInsertEndpoint = "INSERT INTO `endpoint` (`service`, `url`, `application_id`) " @@ -616,7 +826,8 @@ const std::string kSelectModuleConfig = "SELECT `preloaded_pt`, `exchange_after_x_ignition_cycles`, " " `exchange_after_x_kilometers`, `exchange_after_x_days`, " " `timeout_after_x_seconds`, `vehicle_make`," - " `vehicle_model`, `vehicle_year`, `preloaded_date`, `certificate` " + " `vehicle_model`, `vehicle_year`, `preloaded_date`, `certificate`, " + " `user_consent_passengersRC` , `country_consent_passengersRC` " " FROM `module_config`"; const std::string kSelectEndpoints = @@ -651,6 +862,8 @@ const std::string kSelectAppPolicies = "SELECT `id`, `priority_value`, `memory_kb`, " " `heart_beat_timeout_ms` FROM `application`"; +const std::string kCollectFriendlyMsg = "SELECT * FROM `message`"; + const std::string kSelectAppGroups = "SELECT `f`.`name` FROM `app_group` AS `a`" " LEFT JOIN `functional_group` AS `f` " diff --git a/src/components/policy/policy_external/src/sql_pt_representation.cc b/src/components/policy/policy_external/src/sql_pt_representation.cc index e91fafc43d..94e2e4af27 100644 --- a/src/components/policy/policy_external/src/sql_pt_representation.cc +++ b/src/components/policy/policy_external/src/sql_pt_representation.cc @@ -43,6 +43,7 @@ #include "utils/gen_hash.h" #include "policy/sql_pt_representation.h" #include "policy/sql_wrapper.h" +#include "policy/sql_pt_ext_queries.h" #include "policy/sql_pt_queries.h" #include "policy/policy_helper.h" #include "policy/cache_manager.h" @@ -690,7 +691,7 @@ bool SQLPTRepresentation::GatherFunctionalGroupings( external_consent_entities_container.push_back(external_consent_entity); } - + external_consent_entities.Reset(); (*groups)[func_group.GetString(1)] = rpcs_tbl; } return true; @@ -930,40 +931,6 @@ bool SQLPTRepresentation::SaveRpcs(int64_t group_id, return true; } -bool SQLPTRepresentation::SaveExternalConsentEntities( - const int64_t group_id, - const policy_table::DisallowedByExternalConsentEntities& entities, - ExternalConsentEntitiesType type) const { - utils::dbms::SQLQuery query(db()); - if (!query.Prepare(sql_pt::kInsertExternalConsentEntity)) { - LOG4CXX_WARN(logger_, - "Incorrect insert statement for external consent entities."); - return false; - } - - const std::string external_consent_entity_type = - kExternalConsentEntitiesTypeOn == type - ? kExternalConsentEntitiesTypeStringOn - : kExternalConsentEntitiesTypeStringOff; - - policy_table::DisallowedByExternalConsentEntities::const_iterator it_entity = - entities.begin(); - for (; entities.end() != it_entity; ++it_entity) { - query.Bind(0, group_id); - query.Bind(1, it_entity->entity_type); - query.Bind(2, it_entity->entity_id); - query.Bind(3, external_consent_entity_type); - if (!query.Exec() || !query.Reset()) { - LOG4CXX_ERROR(logger_, - "Can't insert '" << external_consent_entity_type - << "' external consent entity."); - return false; - } - } - - return true; -} - bool SQLPTRepresentation::SaveApplicationPoliciesSection( const policy_table::ApplicationPoliciesSection& policies) { utils::dbms::SQLQuery query_delete(db()); @@ -1835,4 +1802,38 @@ bool SQLPTRepresentation::SetVINValue(const std::string& value) { return true; } +bool SQLPTRepresentation::SaveExternalConsentEntities( + const int64_t group_id, + const policy_table::DisallowedByExternalConsentEntities& entities, + ExternalConsentEntitiesType type) const { + utils::dbms::SQLQuery query(db()); + if (!query.Prepare(sql_pt_ext::kInsertExternalConsentEntity)) { + LOG4CXX_WARN(logger_, + "Incorrect insert statement for external consent entities."); + return false; + } + + const std::string external_consent_entity_type = + kExternalConsentEntitiesTypeOn == type + ? kExternalConsentEntitiesTypeStringOn + : kExternalConsentEntitiesTypeStringOff; + + policy_table::DisallowedByExternalConsentEntities::const_iterator it_entity = + entities.begin(); + for (; entities.end() != it_entity; ++it_entity) { + query.Bind(0, group_id); + query.Bind(1, it_entity->entity_type); + query.Bind(2, it_entity->entity_id); + query.Bind(3, external_consent_entity_type); + if (!query.Exec() || !query.Reset()) { + LOG4CXX_ERROR(logger_, + "Can't insert '" << external_consent_entity_type + << "' external consent entity."); + return false; + } + } + + return true; +} + } // namespace policy diff --git a/src/components/policy/policy_external/test/generated_code_test.cc b/src/components/policy/policy_external/test/generated_code_test.cc index f9bee95486..15d14e3e3b 100644 --- a/src/components/policy/policy_external/test/generated_code_test.cc +++ b/src/components/policy/policy_external/test/generated_code_test.cc @@ -193,10 +193,11 @@ TEST(PolicyGeneratedCodeTest, EXPECT_TRUE(consent_records.is_valid()); } -TEST(PolicyGeneratedCodeTest, CCSEntity_ConstructionValidationTest) { +TEST(PolicyGeneratedCodeTest, + ExternalConsentEntity_ConstructionValidationTest) { using namespace rpc::policy_table_interface_base; - CCS_Entity empty_entity; + ExternalConsentEntity empty_entity; EXPECT_FALSE(empty_entity.is_valid()); const std::string corrent_entity_type_field = "entityType"; @@ -206,7 +207,7 @@ TEST(PolicyGeneratedCodeTest, CCSEntity_ConstructionValidationTest) { correct_json_entity[corrent_entity_type_field] = 1; correct_json_entity[correct_entity_id_field] = 2; - ExternalConsent_Entity entity_from_correct_json(&correct_json_entity); + ExternalConsentEntity entity_from_correct_json(&correct_json_entity); EXPECT_TRUE(entity_from_correct_json.is_valid()); const std::string wrong_entity_id_field = "entityId"; @@ -215,14 +216,11 @@ TEST(PolicyGeneratedCodeTest, CCSEntity_ConstructionValidationTest) { wrong_json_entity[corrent_entity_type_field] = 1; wrong_json_entity[wrong_entity_id_field] = 2; - ExternalConsent_Entity entity_from_wrong_json(&wrong_json_entity); + ExternalConsentEntity entity_from_wrong_json(&wrong_json_entity); EXPECT_FALSE(entity_from_wrong_json.is_valid()); - ExternalConsent_Entity entity_from_valid_ints(1, 2); + ExternalConsentEntity entity_from_valid_ints(1, 2); EXPECT_TRUE(entity_from_valid_ints.is_valid()); - - CCS_Entity entity_from_wrong_ints(129, 129); - EXPECT_FALSE(entity_from_wrong_ints.is_valid()); } } // namespace policy_test diff --git a/src/components/policy/policy_external/test/include/policy/policy_manager_impl_test_base.h b/src/components/policy/policy_external/test/include/policy/policy_manager_impl_test_base.h index 09a4a0e391..e753751308 100644 --- a/src/components/policy/policy_external/test/include/policy/policy_manager_impl_test_base.h +++ b/src/components/policy/policy_external/test/include/policy/policy_manager_impl_test_base.h @@ -66,10 +66,12 @@ const std::string kHmiLevelBackground = "BACKGROUND"; const std::string kHmiLevelNone = "None"; const std::string kPtuJson = "json/PTU.json"; +const std::string kPtu2Json = "json/PTU2.json"; const std::string kPtu3Json = "json/PTU3.json"; const std::string kValidSdlPtUpdateJson = "json/valid_sdl_pt_update.json"; const std::string kPtuRequestTypeJson = "json/ptu_requestType.json"; const std::string kPtu2RequestTypeJson = "json/ptu2_requestType.json"; +const std::string kDummyUpdateFileName = "DummyName"; } // namespace struct StringsForUpdate { @@ -84,6 +86,7 @@ void CheckIsParamInList(const ::policy::RPCParams& list, const std::string& parameter); Json::Value createPTforLoad(); void InsertRpcParametersInList(::policy::RPCParams& input_params); +policy_table::AppHmiTypes HmiTypes(const policy_table::AppHMIType hmi_type); template <typename T> void SortAndCheckEquality(std::vector<T> first, std::vector<T> second) { @@ -132,7 +135,7 @@ class PolicyManagerImplTest2 : public ::testing::Test { const std::string device_id_2_; const std::string application_id_; const std::string app_storage_folder_; - const std::string preloadet_pt_filename_; + const std::string preloaded_pt_filename_; const bool in_memory_; PolicyManagerImpl* policy_manager_; @@ -188,6 +191,10 @@ class PolicyManagerImplTest2 : public ::testing::Test { void CheckRpcPermissions(const std::string& rpc_name, const PermitResult& expected_permission); + void CheckRpcPermissions(const std::string& app_id, + const std::string& rpc_name, + const policy::PermitResult& out_expected_permission); + // To avoid duplicate arrange of test void AddSetDeviceData(); @@ -196,12 +203,6 @@ class PolicyManagerImplTest2 : public ::testing::Test { void EmulatePTAppRevoked(const std::string& ptu_name); - void TestSetDeviceUSBConnection( - const policy_table::UserSetting usb_transport_status); - - void TestUpdateUSBConnectionStatus( - const policy_table::UserSetting usb_transport_status); - utils::SharedPtr<policy_table::Table> PreconditionForBasicValidateSnapshot(); template <typename ParentType, typename Value> @@ -233,7 +234,7 @@ class PolicyManagerImplTest_RequestTypes : public ::testing::Test { const std::string kAppId; const std::string kDefaultAppId; const std::string app_storage_folder_; - const std::string preloadet_pt_filename_; + const std::string preloaded_pt_filename_; utils::SharedPtr<PolicyManagerImpl> policy_manager_impl_sptr_; NiceMock<MockPolicyListener> listener_; @@ -267,20 +268,20 @@ class PolicyManagerImplTest_RequestTypes : public ::testing::Test { void TearDown() OVERRIDE; }; -class PolicyManagerImplTest_CCS : public PolicyManagerImplTest2 { +class PolicyManagerImplTest_ExternalConsent : public PolicyManagerImplTest2 { public: - PolicyManagerImplTest_CCS() + PolicyManagerImplTest_ExternalConsent() : PolicyManagerImplTest2() , group_name_1_("Group1") , group_name_2_("Group2") , group_name_3_("Group3") {} protected: - void PreconditionCCSPreparePTWithAppGroupsAndConsents(); + void PreconditionExternalConsentPreparePTWithAppGroupsAndConsents(); - void PreconditionCCSPreparePTWithAppPolicy(); + void PreconditionExternalConsentPreparePTWithAppPolicy(); - policy_table::Table PreparePTWithGroupsHavingCCS(); + policy_table::Table PreparePTWithGroupsHavingExternalConsent(); std::string PreparePTUWithNewGroup(const uint32_t type, const uint32_t id, diff --git a/src/components/policy/policy_external/test/policy_manager_impl_ptu_test.cc b/src/components/policy/policy_external/test/policy_manager_impl_ptu_test.cc index 504467d229..8b40b70d41 100644 --- a/src/components/policy/policy_external/test/policy_manager_impl_ptu_test.cc +++ b/src/components/policy/policy_external/test/policy_manager_impl_ptu_test.cc @@ -38,6 +38,7 @@ #include "gtest/gtest.h" #include "policy/policy_manager_impl_test_base.h" +#include "policy/policy_table/types.h" #include "utils/date_time.h" #include "utils/gen_hash.h" @@ -73,13 +74,26 @@ TEST_F(PolicyManagerImplTest, GetGroupsWithSameEntities(external_consent_status)) .WillOnce(Return(group)); + EXPECT_CALL(*cache_manager_, ResetCalculatedPermissions()); + + EXPECT_CALL(*cache_manager_, GetPermissionsForApp(_, _, _)) + .WillOnce(Return(true)) + .WillOnce(Return(true)); + EXPECT_CALL(*cache_manager_, GetFunctionalGroupNames(_)) + .WillOnce(Return(true)) + .WillOnce(Return(true)); + + EXPECT_CALL(*cache_manager_, SetUserPermissionsForApp(_, _)) + .WillOnce(Return(false)); + EXPECT_CALL(*cache_manager_, SetExternalConsentForApp(_)); EXPECT_CALL(*cache_manager_, IsPredataPolicy(_)).WillOnce(Return(false)); EXPECT_CALL(*cache_manager_, IsApplicationRepresented(_)) .WillOnce(Return(true)); EXPECT_EQ(policy_manager_->GetPolicyTableStatus(), "UP_TO_DATE"); - policy_manager_->AddApplication(kDefaultId); + policy_manager_->AddApplication(kDefaultId, + HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_EQ(policy_manager_->GetPolicyTableStatus(), "UP_TO_DATE"); } @@ -128,16 +142,18 @@ TEST_F(PolicyManagerImplTest2, IsAppRevoked_SetRevokedAppID_ExpectAppRevoked) { // Arrange CreateLocalPT(preloaded_pt_filename_); - AppHmiTypes types; - policy_manager_->AddApplication(app_id_1_, types); + policy_manager_->AddApplication(app_id_1_, + HmiTypes(policy_table::AHT_DEFAULT)); - std::ifstream ifile(preloaded_pt_filename_); + std::ifstream ifile(kValidSdlPtUpdateJson); Json::Reader reader; std::string json; Json::Value root(Json::objectValue); - if (ifile.is_open() && reader.parse(ifile, root, true)) { - root["policy_table"]["app_policies"][app_id_1_] = Json::nullValue; - json = root.toStyledString(); + if (ifile.is_open()) { + if (reader.parse(ifile, root, true)) { + root["policy_table"]["app_policies"][app_id_1_] = Json::nullValue; + json = root.toStyledString(); + } } ifile.close(); @@ -158,7 +174,8 @@ TEST_F(PolicyManagerImplTest2, AppRevokedOne_AppRegistered) { EXPECT_FALSE(policy_manager_->GetCache()->IsPTPreloaded()); ASSERT_TRUE( (policy_manager_->GetCache())->AddDevice(device_id_2_, "Bluetooth")); - policy_manager_->AddApplication(application_id_, hmi_types_); + policy_manager_->AddApplication(application_id_, + HmiTypes(policy_table::AHT_DEFAULT)); // Registration is allowed CheckRpcPermissions("RegisterAppInterface", ::policy::kRpcAllowed); } @@ -170,7 +187,8 @@ TEST_F(PolicyManagerImplTest2, AppRevokedOne_AppRegistered_HMIDefault) { EmulatePTAppRevoked(kPtu2Json); EXPECT_FALSE(policy_manager_->GetCache()->IsPTPreloaded()); - policy_manager_->AddApplication(application_id_, hmi_types_); + policy_manager_->AddApplication(application_id_, + HmiTypes(policy_table::AHT_DEFAULT)); std::string default_hmi; // Default HMI level is NONE @@ -181,7 +199,7 @@ TEST_F(PolicyManagerImplTest2, AppRevokedOne_AppRegistered_HMIDefault) { TEST_F(PolicyManagerImplTest2, CheckPermissions_SetRevokedAppID_ExpectRPCDisallowed) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); policy::CacheManagerInterfaceSPtr cache = policy_manager_->GetCache(); cache->AddDevice(device_id_1_, "Bluetooth"); cache->SetDeviceData(device_id_1_, @@ -196,7 +214,8 @@ TEST_F(PolicyManagerImplTest2, .WillRepeatedly(Return(device_id_1_)); policy_manager_->SetUserConsentForDevice(device_id_1_, true); // Add app from consented device. App will be assigned with default policies - policy_manager_->AddApplication(app_id_1_); + policy_manager_->AddApplication(app_id_1_, + HmiTypes(policy_table::AHT_DEFAULT)); // Check before action policy_table::RpcParameters rpc_parameters; rpc_parameters.hmi_levels.push_back(policy_table::HL_FULL); @@ -238,7 +257,7 @@ TEST_F(PolicyManagerImplTest2, TEST_F(PolicyManagerImplTest2, CheckPermissions_SetAppIDwithPolicies_ExpectRPCAllowed) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); policy_manager_->AddDevice(device_id_1_, "Bluetooth"); policy::CacheManagerInterfaceSPtr cache = policy_manager_->GetCache(); @@ -254,7 +273,8 @@ TEST_F(PolicyManagerImplTest2, .WillRepeatedly(Return(device_id_1_)); policy_manager_->SetUserConsentForDevice(device_id_1_, true); // Add app from consented device. App will be assigned with default policies - policy_manager_->AddApplication(application_id_); + policy_manager_->AddApplication(application_id_, + HmiTypes(policy_table::AHT_MEDIA)); // Emulate PTU with new policies for app added above std::ifstream ifile(kValidSdlPtUpdateJson); Json::Reader reader; @@ -552,7 +572,7 @@ TEST_F(PolicyManagerImplTest2, TEST_F(PolicyManagerImplTest2, GetUpdateUrl) { // Arrange CreateLocalPT(preloaded_pt_filename_); - GetPTU(preloaded_pt_filename_); + GetPTU(kValidSdlPtUpdateJson); // Check expectations const std::string update_url( "http://policies.telematics.ford.com/api/policies"); @@ -568,8 +588,9 @@ TEST_F(PolicyManagerImplTest2, GetCorrectStatus_PTUSuccessful) { EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); // Adding changes PT status - policy_manager_->AddApplication(application_id_, hmi_types_); - EXPECT_EQ("UPDATE_NEEDED", policy_manager_->GetPolicyTableStatus()); + policy_manager_->AddApplication(application_id_, + HmiTypes(policy_table::AHT_DEFAULT)); + EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); // Before load PT we should send notification about start updating policy_manager_->OnUpdateStarted(); // Update @@ -707,7 +728,8 @@ TEST_F(PolicyManagerImplTest2, "Bluetooth")); // Add app from consented device. App will be assigned with default policies - policy_manager_->AddApplication(application_id_); + policy_manager_->AddApplication(application_id_, + HmiTypes(policy_table::AHT_DEFAULT)); std::ifstream ifile("json/sdl_update_pt_2_groups_no_params_in1.json"); Json::Reader reader; @@ -793,7 +815,8 @@ TEST_F(PolicyManagerImplTest2, "Bluetooth")); // Add app from consented device. App will be assigned with default policies - policy_manager_->AddApplication(application_id_); + policy_manager_->AddApplication(application_id_, + HmiTypes(policy_table::AHT_DEFAULT)); std::ifstream ifile( "json/sdl_update_pt_2_groups_no_params_in1_omitted_in2.json"); @@ -890,12 +913,13 @@ TEST_F( PolicyManagerImplTest2, AddApplication_AddExistingApplicationFromDeviceWithoutConsent_ExpectNoUpdateRequired) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); GetPTU(kValidSdlPtUpdateJson); EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); // Try to add existing app - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); // Check no update required EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); } @@ -909,14 +933,15 @@ uint32_t GetCurrentDaysCount() { TEST_F(PolicyManagerImplTest2, PTUpdatedAt_DaysNotExceedLimit_ExpectNoUpdateRequired) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); const uint32_t days = GetCurrentDaysCount(); EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); GetPTU(kValidSdlPtUpdateJson); EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); ::policy::Counters counter = ::policy::Counters::DAYS_AFTER_EPOCH; // Set PT was updated 10 days ago (limit is 30 days for now) @@ -929,13 +954,14 @@ TEST_F(PolicyManagerImplTest2, TEST_F(PolicyManagerImplTest2, PTUpdatedAt_DaysExceedLimit_ExpectUpdateRequired) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); const uint32_t days = GetCurrentDaysCount(); EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); GetPTU(kValidSdlPtUpdateJson); EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); ::policy::Counters counter = ::policy::Counters::DAYS_AFTER_EPOCH; // Set PT was updated 50 days ago (limit is 30 days for now) @@ -948,13 +974,14 @@ TEST_F( PolicyManagerImplTest2, OnIgnitionCyclesExceeded_SetExceededIgnitionCycles_ExpectUpdateScheduled) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); const uint32_t days = GetCurrentDaysCount(); EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); GetPTU(kValidSdlPtUpdateJson); EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); // Try to add existing app - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); ::policy::Counters counter = ::policy::Counters::DAYS_AFTER_EPOCH; // Set PT was updated 10 days ago (limit is 30 days for now) @@ -975,7 +1002,7 @@ TEST_F( TEST_F(PolicyManagerImplTest2, GetUserConsentForApp_SetUserConsentForApp_ExpectReceivedConsentCorrect) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); ASSERT_TRUE( (policy_manager_->GetCache())->AddDevice(device_id_2_, "Bluetooth")); ASSERT_TRUE((policy_manager_->GetCache()) @@ -998,7 +1025,8 @@ TEST_F(PolicyManagerImplTest2, policy_manager_->SetUserConsentForDevice(device_id_2_, true); EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_)) .WillRepeatedly(Return(device_id_2_)); - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); GetPTU(kValidSdlPtUpdateJson); ::policy::PermissionConsent perm_consent; @@ -1040,8 +1068,9 @@ TEST_F(PolicyManagerImplTest2, TEST_F(PolicyManagerImplTest2, CanAppKeepContext_SetPoliciesForAppUpdated_ExpectAppCanKeepContext) { // Arrange - CreateLocalPT(preloadet_pt_filename_); - policy_manager_->AddApplication(app_id_2_); + CreateLocalPT(preloaded_pt_filename_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); GetPTU(kValidSdlPtUpdateJson); // Check keep context in updated policies for app EXPECT_TRUE(policy_manager_->CanAppKeepContext(app_id_2_)); @@ -1050,8 +1079,9 @@ TEST_F(PolicyManagerImplTest2, TEST_F(PolicyManagerImplTest2, CanAppStealFocus_SetPoliciesForAppUpdated_ExpectAppCanStealFocus) { // Arrange - CreateLocalPT(preloadet_pt_filename_); - policy_manager_->AddApplication(app_id_2_); + CreateLocalPT(preloaded_pt_filename_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); GetPTU(kValidSdlPtUpdateJson); // Check keep context in updated policies for app EXPECT_TRUE(policy_manager_->CanAppKeepContext(app_id_2_)); @@ -1060,7 +1090,7 @@ TEST_F(PolicyManagerImplTest2, TEST_F(PolicyManagerImplTest2, GetVehicleInfo_SetVehicleInfo_ExpectReceivedInfoCorrect) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); GetPTU(kValidSdlPtUpdateJson); utils::SharedPtr<policy_table::Table> pt = (policy_manager_->GetCache())->GetPT(); @@ -1079,7 +1109,7 @@ TEST_F( PolicyManagerImplTest2, GetPermissionsForApp_SetUserConsentForApp_ExpectReceivedPermissionsCorrect) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); ASSERT_TRUE( (policy_manager_->GetCache())->AddDevice(device_id_2_, "Bluetooth")); @@ -1102,7 +1132,8 @@ TEST_F( policy_manager_->SetUserConsentForDevice(device_id_2_, true); EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_)) .WillRepeatedly(Return(device_id_2_)); - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); GetPTU(kValidSdlPtUpdateJson); ::policy::PermissionConsent perm_consent; @@ -1145,9 +1176,10 @@ TEST_F( PolicyManagerImplTest2, GetAppRequestTypes_AddApp_UpdateAppPolicies_ExpectReceivedRequestTypesCorrect) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); - policy_manager_->AddApplication(app_id_3_); + policy_manager_->AddApplication(app_id_3_, + HmiTypes(policy_table::AHT_DEFAULT)); ::policy::StringArray app_requests = policy_manager_->GetAppRequestTypes(app_id_3_); EXPECT_EQ(1u, app_requests.size()); @@ -1168,7 +1200,7 @@ TEST_F( PolicyManagerImplTest2, HertBeatTimeout_AddApp_UpdateAppPolicies_ExpectReceivedHertBeatTimeoutCorrect) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); utils::SharedPtr<policy_table::Table> pt = (policy_manager_->GetCache())->GetPT(); ::policy_table::PolicyTableType type1 = @@ -1181,7 +1213,8 @@ TEST_F( pt->ReportErrors(&report); } // Add new app - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); uint32_t result = policy_manager_->HeartBeatTimeout(app_id_2_); // By default hertbeat timeout is 0 EXPECT_EQ(0u, result); @@ -1207,7 +1240,7 @@ TEST_F( TEST_F(PolicyManagerImplTest2, RemoveAppConsentForGroup_SetUserConsentForApp_ExpectAppConsentDeleted) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); ASSERT_TRUE( (policy_manager_->GetCache())->AddDevice(device_id_2_, "Bluetooth")); ASSERT_TRUE((policy_manager_->GetCache()) @@ -1229,7 +1262,8 @@ TEST_F(PolicyManagerImplTest2, policy_manager_->SetUserConsentForDevice(device_id_2_, true); EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_)) .WillRepeatedly(Return(device_id_2_)); - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); GetPTU(kValidSdlPtUpdateJson); ::policy::PermissionConsent perm_consent; @@ -1296,7 +1330,7 @@ TEST_F(PolicyManagerImplTest2, const std::string section_name = app_id_2_; // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); // Setting device consent to 'true' in order to have defult application // permissions, request type etc. @@ -1305,7 +1339,8 @@ TEST_F(PolicyManagerImplTest2, policy_manager_->SetUserConsentForDevice(device_id_1_, true); // Add app - policy_manager_->AddApplication(section_name); + policy_manager_->AddApplication(section_name, + HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_CALL(listener_, OnPendingPermissionChange(section_name)).Times(2); // PTU has single invalid RequestTypes, which must be dropped and replaced @@ -1354,7 +1389,7 @@ TEST_F(PolicyManagerImplTest2, TEST_F(PolicyManagerImplTest2, InitPT_LoadPT_ExpectIncrementedCountOfSamePrompts) { // Initializing policy_table - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); policy_table::FunctionalGroupings functional_groupings; GetFunctionalGroupingsFromManager(functional_groupings); @@ -1387,7 +1422,7 @@ TEST_F(PolicyManagerImplTest2, TEST_F(PolicyManagerImplTest2, LoadPT_UpdatePT_ChangingCountsOfDifferentUserConsentPrompts) { // Initializing policy_table - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); // First update of policy table GetPTU("json/sdl_pt_first_update.json"); @@ -1438,7 +1473,7 @@ TEST_F(PolicyManagerImplTest_RequestTypes, TEST_F(PolicyManagerImplTest_RequestTypes, LoadPT_InvalidRequestTypeBetweenCorectValuesInPTU_EraseInvalidValue) { // Refresh policy table with invalid RequestType in application - RefreshPT(preloadet_pt_filename_, kJsonFiles[1]); + RefreshPT(preloaded_pt_filename_, kJsonFiles[1]); // Correct of Request Types policy_table::RequestTypes correct_types; correct_types.push_back(policy_table::RequestType::RT_HTTP); @@ -1461,7 +1496,7 @@ TEST_F( TEST_F(PolicyManagerImplTest_RequestTypes, LoadPT_RequestTypeArrayHaveNoOneValues_AvalibleAllRequestTypes) { // Refresh policy table with invalid RequestType in application - RefreshPT(preloadet_pt_filename_, kJsonFiles[3]); + RefreshPT(preloaded_pt_filename_, kJsonFiles[3]); // Get <app_id> Request Types policy_table::RequestTypes received_types = @@ -1523,7 +1558,7 @@ TEST_F(PolicyManagerImplTest_RequestTypes, policy_table::RequestTypes correct_types = CreateDefaultAppPTURequestValues(); // Load valid values for RequestType - RefreshPT(preloadet_pt_filename_, kJsonFiles[7]); + RefreshPT(preloaded_pt_filename_, kJsonFiles[7]); // Get Request Types for "<default>" policy_table::RequestTypes received_types = @@ -1540,7 +1575,7 @@ TEST_F( CreateDefaultAppDatabaseRequestValues(); // Load RequestType with invalid values - RefreshPT(preloadet_pt_filename_, kJsonFiles[8]); + RefreshPT(preloaded_pt_filename_, kJsonFiles[8]); // Get Request Types for "<default>" policy_table::RequestTypes received_types = @@ -1552,7 +1587,7 @@ TEST_F( TEST_F(PolicyManagerImplTest_RequestTypes, LoadPT_PTDefaultAppEmptyRequestTypeValues_RequestTypeValueEmpty) { // Load RequestType with empty values - RefreshPT(preloadet_pt_filename_, kJsonFiles[9]); + RefreshPT(preloaded_pt_filename_, kJsonFiles[9]); // Get Request Types for "<default>" policy_table::RequestTypes received_types = @@ -1570,7 +1605,7 @@ TEST_F(PolicyManagerImplTest_RequestTypes, CreateDefaultAppDatabaseRequestValues(); // Load omitted RequestType values - RefreshPT(preloadet_pt_filename_, kJsonFiles[10]); + RefreshPT(preloaded_pt_filename_, kJsonFiles[10]); // Get Request Types for "<default>" policy_table::RequestTypes received_types = @@ -1586,7 +1621,7 @@ TEST_F( policy_table::RequestTypes correct_types = CreateDefaultAppPTURequestValues(); // Load RequestType with one invalid value - RefreshPT(preloadet_pt_filename_, kJsonFiles[11]); + RefreshPT(preloaded_pt_filename_, kJsonFiles[11]); // Get Request Types for "<default>" policy_table::RequestTypes received_types = @@ -1602,7 +1637,7 @@ TEST_F(PolicyManagerImplTest_RequestTypes, CreatePreDataConsentAppPTURequestValues(); // Load valid values for RequestType - RefreshPT(preloadet_pt_filename_, kJsonFiles[12]); + RefreshPT(preloaded_pt_filename_, kJsonFiles[12]); // Get Request Types for "<pre_DataConsent>" policy_table::RequestTypes received_types = @@ -1618,42 +1653,28 @@ TEST_F( policy_table::RequestTypes correct_types; correct_types.push_back(policy_table::RequestType::RT_HTTP); - ON_CALL(listener_, OnCurrentDeviceIdUpdateRequired(_)) - .WillByDefault(Return(device_id)); - - utils::SharedPtr<Table> pt = (policy_manager_->GetCache())->GetPT(); + // Load RequestType with invalid values + RefreshPT(preloaded_pt_filename_, kJsonFiles[13]); // Get Request Types for "<pre_DataConsent>" policy_table::RequestTypes received_types = GetRequestTypesForApplication(policy::kPreDataConsentId); - const DeviceData& device_data = *pt->policy_table.device_data; + CompareRequestTypesContainers(correct_types, received_types); } TEST_F(PolicyManagerImplTest_RequestTypes, LoadPT_PTPreDataConsentAppEmptyRequestTypeValues_RequestTypeValueEmpty) { // Load RequestType with empty values - RefreshPT(preloadet_pt_filename_, kJsonFiles[14]); + RefreshPT(preloaded_pt_filename_, kJsonFiles[14]); - EXPECT_EQ(1u, device_data.size()); - - const DeviceData::const_iterator dev_data_iter = device_data.find(device_id); - EXPECT_TRUE(device_data.end() != dev_data_iter); - - UserConsentRecords::const_iterator it_device_consent = - dev_data_iter->second.user_consent_records->find(device); - - EXPECT_TRUE(dev_data_iter->second.user_consent_records->end() != - it_device_consent); - - const ConsentRecords& parameters = it_device_consent->second; - const Json::Value time_stamp = (parameters.time_stamp).ToJsonValue(); - EXPECT_EQ(device, it_device_consent->first); - - const bool time_stamp_result = CheckPolicyTimeStamp(time_stamp.asString()); + // Get Request Types for "<pre_DataConsent>" + policy_table::RequestTypes received_types = + GetRequestTypesForApplication(policy::kPreDataConsentId); - EXPECT_TRUE(time_stamp_result); - EXPECT_EQ(DeviceConsent::kDeviceAllowed, device_consent); + // Expect + const size_t received_size = received_types.size(); + EXPECT_EQ(0u, received_size); } TEST_F( @@ -1664,7 +1685,7 @@ TEST_F( correct_types.push_back(policy_table::RequestType::RT_HTTP); // Load omitted RequestType values - RefreshPT(preloadet_pt_filename_, kJsonFiles[15]); + RefreshPT(preloaded_pt_filename_, kJsonFiles[15]); // Get Request Types for "<pre_DataConsent>" policy_table::RequestTypes received_types = @@ -1681,7 +1702,7 @@ TEST_F( CreatePreDataConsentAppPTURequestValues(); // Load RequestType with one invalid value - RefreshPT(preloadet_pt_filename_, kJsonFiles[16]); + RefreshPT(preloaded_pt_filename_, kJsonFiles[16]); // Get Request Types for "<pre_DataConsent>" policy_table::RequestTypes received_types = diff --git a/src/components/policy/policy_external/test/policy_manager_impl_snapshot_test.cc b/src/components/policy/policy_external/test/policy_manager_impl_snapshot_test.cc index 050630514c..e666ac82de 100644 --- a/src/components/policy/policy_external/test/policy_manager_impl_snapshot_test.cc +++ b/src/components/policy/policy_external/test/policy_manager_impl_snapshot_test.cc @@ -50,9 +50,9 @@ TEST_F(PolicyManagerImplTest2, UpdatedPreloadedPT_ExpectLPT_IsUpdated) { new_data.new_field_name_ = "Notifications-"; CreateNewRandomData(new_data); // Create Initial LocalPT from preloadedPT - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); // Update preloadedPT - std::ifstream ifile(preloadet_pt_filename_); + std::ifstream ifile(preloaded_pt_filename_); Json::Reader reader; Json::Value root(Json::objectValue); @@ -72,7 +72,7 @@ TEST_F(PolicyManagerImplTest2, UpdatedPreloadedPT_ExpectLPT_IsUpdated) { ifile.close(); Json::StyledStreamWriter writer; - std::ofstream ofile(preloadet_pt_filename_); + std::ofstream ofile(preloaded_pt_filename_); writer.write(ofile, root); ofile.flush(); ofile.close(); @@ -80,7 +80,7 @@ TEST_F(PolicyManagerImplTest2, UpdatedPreloadedPT_ExpectLPT_IsUpdated) { // Make PolicyManager to update LocalPT policy::CacheManagerInterfaceSPtr cache = policy_manager_->GetCache(); EXPECT_TRUE( - policy_manager_->InitPT(preloadet_pt_filename_, &policy_settings_)); + policy_manager_->InitPT(preloaded_pt_filename_, &policy_settings_)); EXPECT_TRUE(cache->IsPTPreloaded()); // Arrange @@ -117,7 +117,7 @@ TEST_F(PolicyManagerImplTest2, UpdatedPreloadedPT_ExpectLPT_IsUpdated) { TEST_F(PolicyManagerImplTest2, SetSystemLanguage_ExpectSystemLanguageSetSuccessfully) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); policy_manager_->SetSystemLanguage("it-it"); utils::SharedPtr<policy_table::Table> pt = (policy_manager_->GetCache())->GetPT(); @@ -127,7 +127,7 @@ TEST_F(PolicyManagerImplTest2, TEST_F(PolicyManagerImplTest2, SetVINValue_ExpectVINSetSuccessfully) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); std::string vin_code("1FAPP6242VH100001"); policy_manager_->SetVINValue(vin_code); utils::SharedPtr<policy_table::Table> pt = @@ -138,7 +138,7 @@ TEST_F(PolicyManagerImplTest2, SetVINValue_ExpectVINSetSuccessfully) { TEST_F(PolicyManagerImplTest2, SetSystemInfo_ExpectSystemInfoSetSuccessfully) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); policy_manager_->SetSystemInfo("4.1.3.B_EB355B", "WAEGB", "ru-ru"); policy::CacheManagerInterfaceSPtr cache = policy_manager_->GetCache(); utils::SharedPtr<policy_table::Table> pt = cache->GetPT(); @@ -152,7 +152,7 @@ TEST_F(PolicyManagerImplTest2, SetSystemInfo_ExpectSystemInfoSetSuccessfully) { TEST_F(PolicyManagerImplTest2, CleanUnpairedDevice_ExpectDevicesDeleted) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); // Add first device ::policy::DeviceInfo dev_info1; dev_info1.hardware = "hardware IPX"; @@ -262,9 +262,9 @@ TEST_F( const std::string& app_id = application_id_; // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); // Add app - policy_manager_->AddApplication(app_id, hmi_types_); + policy_manager_->AddApplication(app_id, HmiTypes(policy_table::AHT_DEFAULT)); // Check app gets RequestTypes from pre_DataConsent of app_policies // section pt_request_types_ = policy_manager_->GetAppRequestTypes(app_id); diff --git a/src/components/policy/policy_external/test/policy_manager_impl_test.cc b/src/components/policy/policy_external/test/policy_manager_impl_test.cc index d260e16922..3890bcb9e7 100644 --- a/src/components/policy/policy_external/test/policy_manager_impl_test.cc +++ b/src/components/policy/policy_external/test/policy_manager_impl_test.cc @@ -165,7 +165,7 @@ TEST_F(PolicyManagerImplTest, LoadPT_SetPT_PTIsLoaded) { TEST_F(PolicyManagerImplTest2, KmsChanged_SetExceededKms_ExpectCorrectSchedule) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); ::policy::Counters counter = ::policy::Counters::KILOMETERS; policy_manager_->PTUpdatedAt(counter, 50000); EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); @@ -179,7 +179,7 @@ TEST_F(PolicyManagerImplTest2, TEST_F(PolicyManagerImplTest2, ForcePTExchange_ExpectUpdateNeeded) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); // Force OT Exchange policy_manager_->ForcePTExchange(); @@ -189,7 +189,7 @@ TEST_F(PolicyManagerImplTest2, ForcePTExchange_ExpectUpdateNeeded) { TEST_F(PolicyManagerImplTest2, OnSystemReady) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); // Check EXPECT_CALL(listener_, OnSystemInfoUpdateRequired()); policy_manager_->OnSystemReady(); @@ -197,7 +197,7 @@ TEST_F(PolicyManagerImplTest2, OnSystemReady) { TEST_F(PolicyManagerImplTest2, ResetRetrySequence) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); policy_manager_->ResetRetrySequence(); EXPECT_EQ("UPDATE_NEEDED", policy_manager_->GetPolicyTableStatus()); policy_manager_->OnUpdateStarted(); @@ -206,7 +206,7 @@ TEST_F(PolicyManagerImplTest2, ResetRetrySequence) { TEST_F(PolicyManagerImplTest2, NextRetryTimeout_ExpectTimeoutsFromPT) { // Arrange - std::ifstream ifile(preloadet_pt_filename_); + std::ifstream ifile(preloaded_pt_filename_); Json::Reader reader; Json::Value root(Json::objectValue); if (ifile.is_open() && reader.parse(ifile, root, true)) { @@ -214,7 +214,7 @@ TEST_F(PolicyManagerImplTest2, NextRetryTimeout_ExpectTimeoutsFromPT) { seconds_between_retries = root["policy_table"]["module_config"]["seconds_between_retries"]; uint32_t size = seconds_between_retries.size(); - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); for (uint32_t i = 0; i < size; ++i) { EXPECT_EQ(seconds_between_retries[i], policy_manager_->NextRetryTimeout()); @@ -224,7 +224,7 @@ TEST_F(PolicyManagerImplTest2, NextRetryTimeout_ExpectTimeoutsFromPT) { TEST_F(PolicyManagerImplTest2, TimeOutExchange) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); // Check value taken from PT EXPECT_EQ(70000u, policy_manager_->TimeoutExchangeMSec()); } @@ -277,7 +277,7 @@ TEST_F(PolicyManagerImplTest, ResetUserConsent_ResetOnlyOnce) { TEST_F(PolicyManagerImplTest2, GetPolicyTableStatus_ExpectUpToDate) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); // Check EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); } @@ -295,7 +295,7 @@ TEST_F(PolicyManagerImplTest, TEST_F(PolicyManagerImplTest2, RetrySequenceDelaysSeconds_Expect_CorrectValues) { // Arrange - std::ifstream ifile(preloadet_pt_filename_); + std::ifstream ifile(preloaded_pt_filename_); Json::Reader reader; Json::Value root(Json::objectValue); if (ifile.is_open() && reader.parse(ifile, root, true)) { @@ -303,7 +303,7 @@ TEST_F(PolicyManagerImplTest2, seconds_between_retries = root["policy_table"]["module_config"]["seconds_between_retries"]; uint32_t size = seconds_between_retries.size(); - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); std::vector<int> delaySecs = policy_manager_->RetrySequenceDelaysSeconds(); // Check ASSERT_EQ(size, delaySecs.size()); @@ -316,7 +316,7 @@ TEST_F(PolicyManagerImplTest2, TEST_F(PolicyManagerImplTest2, OnExceededTimeout_GetPolicyTableStatus_ExpectUpdateNeeded) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); policy_manager_->ForcePTExchange(); policy_manager_->OnExceededTimeout(); // Check @@ -339,21 +339,22 @@ TEST_F(PolicyManagerImplTest, MarkUnpairedDevice) { TEST_F(PolicyManagerImplTest2, GetCurrentDeviceId) { // Arrange - EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_)); + EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_)).Times(1); EXPECT_EQ("", policy_manager_->GetCurrentDeviceId(app_id_2_)); } -TEST_F(PolicyManagerImplTest_CCS, - CCS_SetCCSStatusWhileAppExists_ExpectUserConsentsUpdateForApp) { +TEST_F( + PolicyManagerImplTest_ExternalConsent, + ExternalConsent_SetExternalConsentStatusWhileAppExists_ExpectUserConsentsUpdateForApp) { using namespace policy_table; using namespace rpc; - PreconditionCCSPreparePTWithAppGroupsAndConsents(); + PreconditionExternalConsentPreparePTWithAppGroupsAndConsents(); utils::SharedPtr<policy_table::Table> pt = policy_manager_->GetCache()->GetPT(); - // Checking groups consents before setting CCS status + // Checking groups consents before setting ExternalConsent status const policy_table::DeviceData::const_iterator device_data = pt->policy_table.device_data->find(device_id_1_); @@ -384,17 +385,17 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_FALSE(updated_consent_records->second.consent_groups->end() != group_3); - // Act - setting new CCS status - CCSStatus status; - status.insert(CCSStatusItem(type_1_, id_1_, kStatusOn)); - status.insert(CCSStatusItem(type_2_, id_2_, kStatusOn)); - status.insert(CCSStatusItem(type_3_, id_3_, kStatusOn)); + // Act - setting new ExternalConsent status + ExternalConsentStatus status; + status.insert(ExternalConsentStatusItem(type_1_, id_1_, kStatusOn)); + status.insert(ExternalConsentStatusItem(type_2_, id_2_, kStatusOn)); + status.insert(ExternalConsentStatusItem(type_3_, id_3_, kStatusOn)); EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)); - EXPECT_TRUE(policy_manager_->SetCCSStatus(status)); + EXPECT_TRUE(policy_manager_->SetExternalConsentStatus(status)); - // Checking groups consent after setting CCS status + // Checking groups consent after setting ExternalConsent status EXPECT_EQ(Boolean(false), group_1->second); EXPECT_EQ(Boolean(true), group_2->second); @@ -406,18 +407,19 @@ TEST_F(PolicyManagerImplTest_CCS, updated_group_3); } -TEST_F(PolicyManagerImplTest_CCS, - CCS_SetCCSStatusWhileAppExists_ExpectCCSConsentsUpdateForApp) { +TEST_F( + PolicyManagerImplTest_ExternalConsent, + ExternalConsent_SetExternalConsentStatusWhileAppExists_ExpectExternalConsentUpdateForApp) { using namespace policy_table; using namespace rpc; - PreconditionCCSPreparePTWithAppGroupsAndConsents(); + PreconditionExternalConsentPreparePTWithAppGroupsAndConsents(); // Act utils::SharedPtr<policy_table::Table> pt = policy_manager_->GetCache()->GetPT(); - // Checking CCS consents before setting new CCS status + // Checking ExternalConsent consents before setting new ExternalConsent status policy_table::DeviceData::const_iterator updated_device_data = pt->policy_table.device_data->find(device_id_1_); @@ -429,21 +431,22 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_TRUE(updated_device_data->second.user_consent_records->end() != updated_consent_records); - EXPECT_TRUE(updated_consent_records->second.ccs_consent_groups->empty()); + EXPECT_TRUE( + updated_consent_records->second.external_consent_status_groups->empty()); - // Act - setting new CCS status - CCSStatus status; - status.insert(CCSStatusItem(type_1_, id_1_, kStatusOn)); - status.insert(CCSStatusItem(type_2_, id_2_, kStatusOn)); - status.insert(CCSStatusItem(type_3_, id_3_, kStatusOn)); + // Act - setting new ExternalConsent status + ExternalConsentStatus status; + status.insert(ExternalConsentStatusItem(type_1_, id_1_, kStatusOn)); + status.insert(ExternalConsentStatusItem(type_2_, id_2_, kStatusOn)); + status.insert(ExternalConsentStatusItem(type_3_, id_3_, kStatusOn)); EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)); - EXPECT_TRUE(policy_manager_->SetCCSStatus(status)); + EXPECT_TRUE(policy_manager_->SetExternalConsentStatus(status)); - // Checking CCS consents after setting new CCS status - const ConsentGroups& ccs_consents = - *updated_consent_records->second.ccs_consent_groups; + // Checking ExternalConsent consents after setting new ExternalConsent status + const ConsentGroups& external_consent_statuss = + *updated_consent_records->second.external_consent_status_groups; const ApplicationPolicies::const_iterator app_parameters = pt->policy_table.app_policies_section.apps.find(app_id_1_); @@ -451,41 +454,43 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_TRUE(pt->policy_table.app_policies_section.apps.end() != app_parameters); - EXPECT_EQ(app_parameters->second.groups.size(), ccs_consents.size()); + EXPECT_EQ(app_parameters->second.groups.size(), + external_consent_statuss.size()); const ConsentGroups::const_iterator updated_group_1 = - ccs_consents.find(group_name_1_); + external_consent_statuss.find(group_name_1_); - EXPECT_TRUE(ccs_consents.end() != updated_group_1); + EXPECT_TRUE(external_consent_statuss.end() != updated_group_1); const ConsentGroups::const_iterator updated_group_2 = - ccs_consents.find(group_name_2_); + external_consent_statuss.find(group_name_2_); - EXPECT_TRUE(ccs_consents.end() != updated_group_2); + EXPECT_TRUE(external_consent_statuss.end() != updated_group_2); EXPECT_EQ(Boolean(false), updated_group_1->second); EXPECT_EQ(Boolean(true), updated_group_2->second); } -TEST_F(PolicyManagerImplTest_CCS, - CCS_SetCCSStatusNewAppAddedAfterward_ExpectCCSConsentsUpdateForApp) { +TEST_F( + PolicyManagerImplTest_ExternalConsent, + ExternalConsent_SetExternalConsentStatusNewAppAddedAfterward_ExpectExternalConsentUpdateForApp) { using namespace policy_table; using namespace rpc; - PreconditionCCSPreparePTWithAppPolicy(); + PreconditionExternalConsentPreparePTWithAppPolicy(); // Act utils::SharedPtr<policy_table::Table> pt = policy_manager_->GetCache()->GetPT(); - CCSStatus status; - status.insert(CCSStatusItem(type_1_, id_1_, kStatusOn)); - status.insert(CCSStatusItem(type_2_, id_2_, kStatusOn)); - status.insert(CCSStatusItem(type_3_, id_3_, kStatusOn)); + ExternalConsentStatus status; + status.insert(ExternalConsentStatusItem(type_1_, id_1_, kStatusOn)); + status.insert(ExternalConsentStatusItem(type_2_, id_2_, kStatusOn)); + status.insert(ExternalConsentStatusItem(type_3_, id_3_, kStatusOn)); - EXPECT_TRUE(policy_manager_->SetCCSStatus(status)); + EXPECT_TRUE(policy_manager_->SetExternalConsentStatus(status)); - // Checking CCS consents after setting new CCS status + // Checking ExternalConsent consents after setting new ExternalConsent status policy_table::DeviceData::const_iterator updated_device_data = pt->policy_table.device_data->find(device_id_1_); @@ -495,9 +500,10 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_)) .WillRepeatedly(Return(device_id_1_)); - policy_manager_->AddApplication(app_id_1_, AppHmiTypes()); + policy_manager_->AddApplication(app_id_1_, + HmiTypes(policy_table::AHT_DEFAULT)); - // Check CCS consents for application + // Check ExternalConsent consents for application updated_device_data = pt->policy_table.device_data->find(device_id_1_); EXPECT_TRUE(pt->policy_table.device_data->end() != updated_device_data); @@ -505,8 +511,8 @@ TEST_F(PolicyManagerImplTest_CCS, UserConsentRecords::const_iterator updated_consent_records = updated_device_data->second.user_consent_records->find(app_id_1_); - const ConsentGroups& ccs_consents = - *updated_consent_records->second.ccs_consent_groups; + const ConsentGroups& external_consent_statuss = + *updated_consent_records->second.external_consent_status_groups; ApplicationPolicies::const_iterator app_parameters = pt->policy_table.app_policies_section.apps.find(app_id_1_); @@ -516,41 +522,43 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_TRUE(pt->policy_table.app_policies_section.apps.end() != app_parameters); - EXPECT_EQ(app_parameters->second.groups.size(), ccs_consents.size()); + EXPECT_EQ(app_parameters->second.groups.size(), + external_consent_statuss.size()); ConsentGroups::const_iterator updated_group_1 = - ccs_consents.find(group_name_1_); + external_consent_statuss.find(group_name_1_); - EXPECT_TRUE(ccs_consents.end() != updated_group_1); + EXPECT_TRUE(external_consent_statuss.end() != updated_group_1); ConsentGroups::const_iterator updated_group_2 = - ccs_consents.find(group_name_2_); + external_consent_statuss.find(group_name_2_); - EXPECT_TRUE(ccs_consents.end() != updated_group_2); + EXPECT_TRUE(external_consent_statuss.end() != updated_group_2); EXPECT_EQ(Boolean(false), updated_group_1->second); EXPECT_EQ(Boolean(true), updated_group_2->second); } -TEST_F(PolicyManagerImplTest_CCS, - CCS_SetCCSStatusNewAppAddedAfterward_ExpectUserConsentsUpdateForApp) { +TEST_F( + PolicyManagerImplTest_ExternalConsent, + ExternalConsent_SetExternalConsentStatusNewAppAddedAfterward_ExpectUserConsentsUpdateForApp) { using namespace policy_table; using namespace rpc; - PreconditionCCSPreparePTWithAppPolicy(); + PreconditionExternalConsentPreparePTWithAppPolicy(); // Act utils::SharedPtr<policy_table::Table> pt = policy_manager_->GetCache()->GetPT(); - CCSStatus status; - status.insert(CCSStatusItem(type_1_, id_1_, kStatusOn)); - status.insert(CCSStatusItem(type_2_, id_2_, kStatusOn)); - status.insert(CCSStatusItem(type_3_, id_3_, kStatusOn)); + ExternalConsentStatus status; + status.insert(ExternalConsentStatusItem(type_1_, id_1_, kStatusOn)); + status.insert(ExternalConsentStatusItem(type_2_, id_2_, kStatusOn)); + status.insert(ExternalConsentStatusItem(type_3_, id_3_, kStatusOn)); - EXPECT_TRUE(policy_manager_->SetCCSStatus(status)); + EXPECT_TRUE(policy_manager_->SetExternalConsentStatus(status)); - // Checking CCS consents after setting new CCS status + // Checking ExternalConsent consents after setting new ExternalConsent status policy_table::DeviceData::const_iterator updated_device_data = pt->policy_table.device_data->find(device_id_1_); @@ -560,9 +568,10 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_)) .WillRepeatedly(Return(device_id_1_)); - policy_manager_->AddApplication(app_id_1_, AppHmiTypes()); + policy_manager_->AddApplication(app_id_1_, + HmiTypes(policy_table::AHT_DEFAULT)); - // Checking CCS consents after setting new CCS status + // Checking ExternalConsent consents after setting new ExternalConsent status ApplicationPolicies::const_iterator app_parameters = pt->policy_table.app_policies_section.apps.find(app_id_1_); @@ -579,56 +588,59 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_TRUE(updated_device_data->second.user_consent_records->end() != updated_consent_records); - const ConsentGroups& ccs_consents = + const ConsentGroups& external_consent_statuss = *updated_consent_records->second.consent_groups; - EXPECT_EQ(app_parameters->second.groups.size(), ccs_consents.size()); + EXPECT_EQ(app_parameters->second.groups.size(), + external_consent_statuss.size()); ConsentGroups::const_iterator updated_group_1 = - ccs_consents.find(group_name_1_); + external_consent_statuss.find(group_name_1_); - EXPECT_TRUE(ccs_consents.end() != updated_group_1); + EXPECT_TRUE(external_consent_statuss.end() != updated_group_1); ConsentGroups::const_iterator updated_group_2 = - ccs_consents.find(group_name_2_); + external_consent_statuss.find(group_name_2_); - EXPECT_TRUE(ccs_consents.end() != updated_group_2); + EXPECT_TRUE(external_consent_statuss.end() != updated_group_2); EXPECT_EQ(Boolean(false), updated_group_1->second); EXPECT_EQ(Boolean(true), updated_group_2->second); } -TEST_F(PolicyManagerImplTest_CCS, - CCS_SetCCSStatusNewAppPromotedAfterward_ExpectUserConsentsUpdateForApp) { +TEST_F( + PolicyManagerImplTest_ExternalConsent, + ExternalConsent_SetExternalConsentStatusNewAppPromotedAfterward_ExpectUserConsentsUpdateForApp) { using namespace policy_table; using namespace rpc; CreateLocalPT(preloaded_pt_filename_); - Table t = PreparePTWithGroupsHavingCCS(); + Table t = PreparePTWithGroupsHavingExternalConsent(); EXPECT_TRUE(policy_manager_->GetCache()->ApplyUpdate(t)); - EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)).Times(AtLeast(2)); + EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)); EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_)) .WillOnce(Return(device_id_1_)) // registered .WillOnce(Return("")) // not registered .WillRepeatedly(Return(device_id_1_)); // again registered // First register w/o app having groups to consent - policy_manager_->AddApplication(app_id_1_, AppHmiTypes()); + policy_manager_->AddApplication(app_id_1_, + HmiTypes(policy_table::AHT_DEFAULT)); // Act utils::SharedPtr<policy_table::Table> pt = policy_manager_->GetCache()->GetPT(); - CCSStatus status; - status.insert(CCSStatusItem(type_1_, id_1_, kStatusOn)); - status.insert(CCSStatusItem(type_2_, id_2_, kStatusOn)); - status.insert(CCSStatusItem(type_3_, id_3_, kStatusOn)); + ExternalConsentStatus status; + status.insert(ExternalConsentStatusItem(type_1_, id_1_, kStatusOn)); + status.insert(ExternalConsentStatusItem(type_2_, id_2_, kStatusOn)); + status.insert(ExternalConsentStatusItem(type_3_, id_3_, kStatusOn)); - EXPECT_TRUE(policy_manager_->SetCCSStatus(status)); + EXPECT_TRUE(policy_manager_->SetExternalConsentStatus(status)); - // Checking CCS consents after setting new CCS status + // Checking ExternalConsent consents after setting new ExternalConsent status policy_table::DeviceData::const_iterator updated_device_data = pt->policy_table.device_data->find(device_id_1_); @@ -646,9 +658,10 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_TRUE(policy_manager_->GetCache()->ApplyUpdate(t)); // Second time register w/ app having groups to consent - policy_manager_->AddApplication(app_id_1_, AppHmiTypes()); + policy_manager_->AddApplication(app_id_1_, + HmiTypes(policy_table::AHT_DEFAULT)); - // Checking CCS consents after setting new CCS status + // Checking ExternalConsent consents after setting new ExternalConsent status ApplicationPolicies::const_iterator app_parameters = pt->policy_table.app_policies_section.apps.find(app_id_1_); @@ -665,56 +678,59 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_TRUE(updated_device_data->second.user_consent_records->end() != updated_consent_records); - const ConsentGroups& ccs_consents = + const ConsentGroups& external_consent_statuss = *updated_consent_records->second.consent_groups; - EXPECT_EQ(app_parameters->second.groups.size(), ccs_consents.size()); + EXPECT_EQ(app_parameters->second.groups.size(), + external_consent_statuss.size()); ConsentGroups::const_iterator updated_group_1 = - ccs_consents.find(group_name_1_); + external_consent_statuss.find(group_name_1_); - EXPECT_TRUE(ccs_consents.end() != updated_group_1); + EXPECT_TRUE(external_consent_statuss.end() != updated_group_1); ConsentGroups::const_iterator updated_group_2 = - ccs_consents.find(group_name_2_); + external_consent_statuss.find(group_name_2_); - EXPECT_TRUE(ccs_consents.end() != updated_group_2); + EXPECT_TRUE(external_consent_statuss.end() != updated_group_2); EXPECT_EQ(Boolean(false), updated_group_1->second); EXPECT_EQ(Boolean(true), updated_group_2->second); } -TEST_F(PolicyManagerImplTest_CCS, - CCS_SetCCSStatusNewAppPromotedAfterward_ExpectCCSConsentsUpdateForApp) { +TEST_F( + PolicyManagerImplTest_ExternalConsent, + ExternalConsent_SetExternalConsentStatusNewAppPromotedAfterward_ExpectExternalConsentUpdateForApp) { using namespace policy_table; using namespace rpc; CreateLocalPT(preloaded_pt_filename_); - Table t = PreparePTWithGroupsHavingCCS(); + Table t = PreparePTWithGroupsHavingExternalConsent(); EXPECT_TRUE(policy_manager_->GetCache()->ApplyUpdate(t)); - EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)).Times(AtLeast(2)); + EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)); EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_)) .WillOnce(Return(device_id_1_)) // registered .WillOnce(Return("")) // not registered .WillRepeatedly(Return(device_id_1_)); // registered again // First register w/o app having groups to consent - policy_manager_->AddApplication(app_id_1_, AppHmiTypes()); + policy_manager_->AddApplication(app_id_1_, + HmiTypes(policy_table::AHT_DEFAULT)); // Act utils::SharedPtr<policy_table::Table> pt = policy_manager_->GetCache()->GetPT(); - CCSStatus status; - status.insert(CCSStatusItem(type_1_, id_1_, kStatusOn)); - status.insert(CCSStatusItem(type_2_, id_2_, kStatusOn)); - status.insert(CCSStatusItem(type_3_, id_3_, kStatusOn)); + ExternalConsentStatus status; + status.insert(ExternalConsentStatusItem(type_1_, id_1_, kStatusOn)); + status.insert(ExternalConsentStatusItem(type_2_, id_2_, kStatusOn)); + status.insert(ExternalConsentStatusItem(type_3_, id_3_, kStatusOn)); - EXPECT_TRUE(policy_manager_->SetCCSStatus(status)); + EXPECT_TRUE(policy_manager_->SetExternalConsentStatus(status)); - // Checking CCS consents after setting new CCS status + // Checking ExternalConsent consents after setting new ExternalConsent status policy_table::DeviceData::const_iterator updated_device_data = pt->policy_table.device_data->find(device_id_1_); @@ -732,9 +748,10 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_TRUE(policy_manager_->GetCache()->ApplyUpdate(t)); // Second time register w/ app having groups to consent - policy_manager_->AddApplication(app_id_1_, AppHmiTypes()); + policy_manager_->AddApplication(app_id_1_, + HmiTypes(policy_table::AHT_DEFAULT)); - // Check CCS consents for application + // Check ExternalConsent consents for application updated_device_data = pt->policy_table.device_data->find(device_id_1_); EXPECT_TRUE(pt->policy_table.device_data->end() != updated_device_data); @@ -742,8 +759,8 @@ TEST_F(PolicyManagerImplTest_CCS, UserConsentRecords::const_iterator updated_consent_records = updated_device_data->second.user_consent_records->find(app_id_1_); - const ConsentGroups& ccs_consents = - *updated_consent_records->second.ccs_consent_groups; + const ConsentGroups& external_consent_statuss = + *updated_consent_records->second.external_consent_status_groups; ApplicationPolicies::const_iterator app_parameters = pt->policy_table.app_policies_section.apps.find(app_id_1_); @@ -753,51 +770,54 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_TRUE(pt->policy_table.app_policies_section.apps.end() != app_parameters); - EXPECT_EQ(app_parameters->second.groups.size(), ccs_consents.size()); + EXPECT_EQ(app_parameters->second.groups.size(), + external_consent_statuss.size()); ConsentGroups::const_iterator updated_group_1 = - ccs_consents.find(group_name_1_); + external_consent_statuss.find(group_name_1_); - EXPECT_TRUE(ccs_consents.end() != updated_group_1); + EXPECT_TRUE(external_consent_statuss.end() != updated_group_1); ConsentGroups::const_iterator updated_group_2 = - ccs_consents.find(group_name_2_); + external_consent_statuss.find(group_name_2_); - EXPECT_TRUE(ccs_consents.end() != updated_group_2); + EXPECT_TRUE(external_consent_statuss.end() != updated_group_2); EXPECT_EQ(Boolean(false), updated_group_1->second); EXPECT_EQ(Boolean(true), updated_group_2->second); } -TEST_F(PolicyManagerImplTest_CCS, - CCS_PTUWithNewGroups_ExpectCCSConsentsUpdateForApp) { +TEST_F(PolicyManagerImplTest_ExternalConsent, + ExternalConsent_PTUWithNewGroups_ExpectExternalConsentUpdateForApp) { using namespace policy_table; using namespace rpc; - PreconditionCCSPreparePTWithAppGroupsAndConsents(); + PreconditionExternalConsentPreparePTWithAppGroupsAndConsents(); const uint32_t type_4 = 6u; const uint32_t id_4 = 7u; const std::string group_name_4 = "NewGroup"; - // CCS status has new group, which is not yet assigned to any application - CCSStatus status; - status.insert(CCSStatusItem(type_1_, id_1_, kStatusOn)); - status.insert(CCSStatusItem(type_2_, id_2_, kStatusOn)); - status.insert(CCSStatusItem(type_4, id_4, kStatusOn)); + // ExternalConsent status has new group, which is not yet assigned to any + // application + ExternalConsentStatus status; + status.insert(ExternalConsentStatusItem(type_1_, id_1_, kStatusOn)); + status.insert(ExternalConsentStatusItem(type_2_, id_2_, kStatusOn)); + status.insert(ExternalConsentStatusItem(type_4, id_4, kStatusOn)); - EXPECT_TRUE(policy_manager_->SetCCSStatus(status)); + EXPECT_TRUE(policy_manager_->SetExternalConsentStatus(status)); - EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)).Times(AtLeast(1)); + EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)).Times(0); EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_)) .WillRepeatedly(Return(device_id_1_)); - policy_manager_->AddApplication(app_id_1_, AppHmiTypes()); + policy_manager_->AddApplication(app_id_1_, + HmiTypes(policy_table::AHT_DEFAULT)); utils::SharedPtr<policy_table::Table> pt = policy_manager_->GetCache()->GetPT(); - // Check CCS consents for application + // Check ExternalConsent consents for application policy_table::DeviceData::const_iterator initial_device_data = pt->policy_table.device_data->find(device_id_1_); @@ -809,20 +829,23 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_TRUE(initial_device_data->second.user_consent_records->end() != initial_consent_records); - const ConsentGroups& ccs_consents = - *initial_consent_records->second.ccs_consent_groups; + const ConsentGroups& external_consent_statuss = + *initial_consent_records->second.external_consent_status_groups; - ConsentGroups::const_iterator group_1 = ccs_consents.find(group_name_1_); + ConsentGroups::const_iterator group_1 = + external_consent_statuss.find(group_name_1_); - EXPECT_TRUE(ccs_consents.end() != group_1); + EXPECT_TRUE(external_consent_statuss.end() != group_1); - ConsentGroups::const_iterator group_2 = ccs_consents.find(group_name_2_); + ConsentGroups::const_iterator group_2 = + external_consent_statuss.find(group_name_2_); - EXPECT_TRUE(ccs_consents.end() != group_2); + EXPECT_TRUE(external_consent_statuss.end() != group_2); - ConsentGroups::const_iterator group_4 = ccs_consents.find(group_name_4); + ConsentGroups::const_iterator group_4 = + external_consent_statuss.find(group_name_4); - EXPECT_FALSE(ccs_consents.end() != group_4); + EXPECT_FALSE(external_consent_statuss.end() != group_4); // Consents for known groups have been done EXPECT_EQ(Boolean(false), group_1->second); @@ -836,15 +859,15 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_TRUE(pt->policy_table.app_policies_section.apps.end() != app_parameters); - EXPECT_EQ(app_parameters->second.groups.size(), ccs_consents.size()); + EXPECT_EQ(app_parameters->second.groups.size(), + external_consent_statuss.size()); const std::string ptu_json = PreparePTUWithNewGroup(type_4, id_4, group_name_4); const BinaryMessage msg(ptu_json.begin(), ptu_json.end()); - ON_CALL(listener_, GetRegisteredLinks()) - .WillByDefault(Return(policy::ApplicationsLinks())); + ON_CALL(listener_, GetRegisteredLinks(_)).WillByDefault(Return()); EXPECT_CALL(listener_, OnCertificateUpdated(_)); @@ -863,20 +886,20 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_TRUE(updated_device_data->second.user_consent_records->end() != updated_consent_records); - const ConsentGroups& updated_ccs_consents = - *updated_consent_records->second.ccs_consent_groups; + const ConsentGroups& updated_external_consent_statuss = + *updated_consent_records->second.external_consent_status_groups; - group_1 = updated_ccs_consents.find(group_name_1_); + group_1 = updated_external_consent_statuss.find(group_name_1_); - EXPECT_TRUE(updated_ccs_consents.end() != group_1); + EXPECT_TRUE(updated_external_consent_statuss.end() != group_1); - group_2 = updated_ccs_consents.find(group_name_2_); + group_2 = updated_external_consent_statuss.find(group_name_2_); - EXPECT_TRUE(updated_ccs_consents.end() != group_2); + EXPECT_TRUE(updated_external_consent_statuss.end() != group_2); - group_4 = updated_ccs_consents.find(group_name_4); + group_4 = updated_external_consent_statuss.find(group_name_4); - EXPECT_TRUE(updated_ccs_consents.end() != group_4); + EXPECT_TRUE(updated_external_consent_statuss.end() != group_4); EXPECT_EQ(Boolean(false), group_1->second); EXPECT_EQ(Boolean(true), group_2->second); @@ -887,37 +910,39 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_TRUE(pt->policy_table.app_policies_section.apps.end() != app_parameters); - EXPECT_EQ(app_parameters->second.groups.size(), ccs_consents.size()); + EXPECT_EQ(app_parameters->second.groups.size(), + external_consent_statuss.size()); } -TEST_F(PolicyManagerImplTest_CCS, - CCS_PTUWithNewGroups_ExpectUserConsentsUpdateForApp) { +TEST_F(PolicyManagerImplTest_ExternalConsent, + ExternalConsent_PTUWithNewGroups_ExpectUserConsentsUpdateForApp) { using namespace policy_table; using namespace rpc; - PreconditionCCSPreparePTWithAppGroupsAndConsents(); + PreconditionExternalConsentPreparePTWithAppGroupsAndConsents(); const uint32_t type_4 = 6u; const uint32_t id_4 = 7u; const std::string group_name_4 = "NewGroup"; - CCSStatus status; - status.insert(CCSStatusItem(type_1_, id_1_, kStatusOn)); - status.insert(CCSStatusItem(type_2_, id_2_, kStatusOn)); - status.insert(CCSStatusItem(type_4, id_4, kStatusOn)); + ExternalConsentStatus status; + status.insert(ExternalConsentStatusItem(type_1_, id_1_, kStatusOn)); + status.insert(ExternalConsentStatusItem(type_2_, id_2_, kStatusOn)); + status.insert(ExternalConsentStatusItem(type_4, id_4, kStatusOn)); - EXPECT_TRUE(policy_manager_->SetCCSStatus(status)); + EXPECT_TRUE(policy_manager_->SetExternalConsentStatus(status)); - EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)).Times(AtLeast(1)); + EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)).Times(0); EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_)) .WillRepeatedly(Return(device_id_1_)); - policy_manager_->AddApplication(app_id_1_, AppHmiTypes()); + policy_manager_->AddApplication(app_id_1_, + HmiTypes(policy_table::AHT_DEFAULT)); utils::SharedPtr<policy_table::Table> pt = policy_manager_->GetCache()->GetPT(); - // Check CCS consents for application + // Check ExternalConsent consents for application policy_table::DeviceData::const_iterator initial_device_data = pt->policy_table.device_data->find(device_id_1_); @@ -962,8 +987,7 @@ TEST_F(PolicyManagerImplTest_CCS, const BinaryMessage msg(ptu_json.begin(), ptu_json.end()); - ON_CALL(listener_, GetRegisteredLinks()) - .WillByDefault(Return(policy::ApplicationsLinks())); + ON_CALL(listener_, GetRegisteredLinks(_)).WillByDefault(Return()); EXPECT_CALL(listener_, OnCertificateUpdated(_)); @@ -1009,18 +1033,19 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_EQ(app_parameters->second.groups.size(), user_consents.size()); } -TEST_F(PolicyManagerImplTest_CCS, - CCS_SetCCSStatusTurnOnThanOff_ExpectCCSConsentsUpdateForApp) { +TEST_F( + PolicyManagerImplTest_ExternalConsent, + ExternalConsent_SetExternalConsentStatusTurnOnThanOff_ExpectExternalConsentUpdateForApp) { using namespace policy_table; using namespace rpc; - PreconditionCCSPreparePTWithAppGroupsAndConsents(); + PreconditionExternalConsentPreparePTWithAppGroupsAndConsents(); // Act utils::SharedPtr<policy_table::Table> pt = policy_manager_->GetCache()->GetPT(); - // Checking CCS consents before setting new CCS status + // Checking ExternalConsent consents before setting new ExternalConsent status policy_table::DeviceData::const_iterator updated_device_data = pt->policy_table.device_data->find(device_id_1_); @@ -1032,21 +1057,22 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_TRUE(updated_device_data->second.user_consent_records->end() != updated_consent_records); - EXPECT_TRUE(updated_consent_records->second.ccs_consent_groups->empty()); + EXPECT_TRUE( + updated_consent_records->second.external_consent_status_groups->empty()); - // Act - setting new CCS status - CCSStatus status_on; - status_on.insert(CCSStatusItem(type_1_, id_1_, kStatusOn)); - status_on.insert(CCSStatusItem(type_2_, id_2_, kStatusOn)); - status_on.insert(CCSStatusItem(type_3_, id_3_, kStatusOn)); + // Act - setting new ExternalConsent status + ExternalConsentStatus status_on; + status_on.insert(ExternalConsentStatusItem(type_1_, id_1_, kStatusOn)); + status_on.insert(ExternalConsentStatusItem(type_2_, id_2_, kStatusOn)); + status_on.insert(ExternalConsentStatusItem(type_3_, id_3_, kStatusOn)); EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)); - EXPECT_TRUE(policy_manager_->SetCCSStatus(status_on)); + EXPECT_TRUE(policy_manager_->SetExternalConsentStatus(status_on)); - // Checking CCS consents after setting new CCS status - const ConsentGroups& ccs_consents = - *updated_consent_records->second.ccs_consent_groups; + // Checking ExternalConsent consents after setting new ExternalConsent status + const ConsentGroups& external_consent_statuss = + *updated_consent_records->second.external_consent_status_groups; ApplicationPolicies::const_iterator app_parameters = pt->policy_table.app_policies_section.apps.find(app_id_1_); @@ -1054,30 +1080,31 @@ TEST_F(PolicyManagerImplTest_CCS, EXPECT_TRUE(pt->policy_table.app_policies_section.apps.end() != app_parameters); - EXPECT_EQ(app_parameters->second.groups.size(), ccs_consents.size()); + EXPECT_EQ(app_parameters->second.groups.size(), + external_consent_statuss.size()); ConsentGroups::const_iterator updated_group_1 = - ccs_consents.find(group_name_1_); + external_consent_statuss.find(group_name_1_); - EXPECT_TRUE(ccs_consents.end() != updated_group_1); + EXPECT_TRUE(external_consent_statuss.end() != updated_group_1); ConsentGroups::const_iterator updated_group_2 = - ccs_consents.find(group_name_2_); + external_consent_statuss.find(group_name_2_); - EXPECT_TRUE(ccs_consents.end() != updated_group_2); + EXPECT_TRUE(external_consent_statuss.end() != updated_group_2); EXPECT_EQ(Boolean(false), updated_group_1->second); EXPECT_EQ(Boolean(true), updated_group_2->second); - // Switching CCS status off - CCSStatus status_off; - status_off.insert(CCSStatusItem(type_1_, id_1_, kStatusOff)); - status_off.insert(CCSStatusItem(type_2_, id_2_, kStatusOff)); - status_off.insert(CCSStatusItem(type_3_, id_3_, kStatusOff)); + // Switching ExternalConsent status off + ExternalConsentStatus status_off; + status_off.insert(ExternalConsentStatusItem(type_1_, id_1_, kStatusOff)); + status_off.insert(ExternalConsentStatusItem(type_2_, id_2_, kStatusOff)); + status_off.insert(ExternalConsentStatusItem(type_3_, id_3_, kStatusOff)); - EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)); + EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)).Times(0); - EXPECT_TRUE(policy_manager_->SetCCSStatus(status_on)); + EXPECT_TRUE(policy_manager_->SetExternalConsentStatus(status_on)); EXPECT_EQ(Boolean(true), updated_group_1->second); EXPECT_EQ(Boolean(false), updated_group_2->second); diff --git a/src/components/policy/policy_external/test/policy_manager_impl_test_base.cc b/src/components/policy/policy_external/test/policy_manager_impl_test_base.cc index a2b2d14cb3..82d958d2d1 100644 --- a/src/components/policy/policy_external/test/policy_manager_impl_test_base.cc +++ b/src/components/policy/policy_external/test/policy_manager_impl_test_base.cc @@ -192,6 +192,13 @@ void InsertRpcParametersInList(::policy::RPCParams& input_params) { input_params.insert("timeStamp"); input_params.insert("address"); } + +policy_table::AppHmiTypes HmiTypes(const policy_table::AppHMIType hmi_type) { + policy_table::AppHmiTypes hmi_types; + hmi_types.push_back(hmi_type); + return hmi_types; +} + // PolicyManagerImplTest class methods PolicyManagerImplTest::PolicyManagerImplTest() : unpaired_device_id_("08-00-27-CE-76-FE") @@ -201,16 +208,16 @@ PolicyManagerImplTest::PolicyManagerImplTest() void PolicyManagerImplTest::SetUp() { policy_manager_ = new PolicyManagerImpl(); cache_manager_ = new MockCacheManagerInterface(); - manager_->set_cache_manager(cache_manager_); - manager_->set_listener(&listener_); + policy_manager_->set_cache_manager(cache_manager_); + policy_manager_->set_listener(&listener_); - ON_CALL(*cache_manager_, GetCCSStatus()).WillByDefault(Return(CCSStatus())); + ON_CALL(*cache_manager_, GetExternalConsentStatus()) + .WillByDefault(Return(ExternalConsentStatus())); ON_CALL(*cache_manager_, GetGroupsWithSameEntities(_)) - .WillByDefault(Return(GroupsByCCSStatus())); + .WillByDefault(Return(GroupsByExternalConsentStatus())); ON_CALL(*cache_manager_, GetKnownLinksFromPT()) - .WillByDefault(Return(ApplicationsLinks())); - ON_CALL(listener_, GetRegisteredLinks()) - .WillByDefault(Return(policy::ApplicationsLinks())); + .WillByDefault(Return(std::map<std::string, std::string>())); + ON_CALL(listener_, GetRegisteredLinks(_)).WillByDefault(Return()); } void PolicyManagerImplTest::TearDown() { @@ -237,7 +244,7 @@ PolicyManagerImplTest2::PolicyManagerImplTest2() , device_id_2_("08-00-27-CE-76-FE") , application_id_("1234") , app_storage_folder_("storage1") - , preloadet_pt_filename_(kSdlPreloadedPtJson) + , preloaded_pt_filename_(kSdlPreloadedPtJson) , in_memory_(true) , policy_manager_(NULL) , ptu_request_types_size_(0u) @@ -245,8 +252,7 @@ PolicyManagerImplTest2::PolicyManagerImplTest2() , ptu_request_types_(Json::arrayValue) {} void PolicyManagerImplTest2::SetUp() { - ON_CALL(listener_, GetRegisteredLinks()) - .WillByDefault(Return(policy::ApplicationsLinks())); + ON_CALL(listener_, GetRegisteredLinks(_)).WillByDefault(Return()); file_system::CreateDirectory(app_storage_folder_); @@ -299,7 +305,7 @@ void PolicyManagerImplTest2::AddRTtoPT(const std::string& update_file_name, const uint32_t rt_number, const uint32_t invalid_rt_number) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); // Get RequestTypes from section of preloaded_pt app_policies pt_request_types_ = policy_manager_->GetAppRequestTypes(section_name); EXPECT_EQ(rt_number, pt_request_types_.size()); @@ -322,9 +328,10 @@ void PolicyManagerImplTest2::AddRTtoAppSectionPT( const uint32_t rt_number, const uint32_t invalid_rt_number) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); // Add app - policy_manager_->AddApplication(section_name); + policy_manager_->AddApplication(section_name, + HmiTypes(policy_table::AHT_DEFAULT)); // Check app gets RequestTypes from pre_DataConsent of app_policies // section pt_request_types_ = policy_manager_->GetAppRequestTypes(section_name); @@ -443,7 +450,8 @@ void PolicyManagerImplTest2:: "Bluetooth")); // Add app from consented device. App will be assigned with default policies - policy_manager_->AddApplication(application_id_); + policy_manager_->AddApplication(application_id_, + HmiTypes(policy_table::AHT_DEFAULT)); // Expect all parameters are allowed std::ifstream ifile(update_file); @@ -526,6 +534,33 @@ void PolicyManagerImplTest2::CheckRpcPermissions( EXPECT_EQ(expected_permission, output.hmi_level_permitted); } +void PolicyManagerImplTest2::CheckRpcPermissions( + const std::string& app_id, + const std::string& rpc_name, + const policy::PermitResult& out_expected_permission) { + ::policy::RPCParams input_params; + ::policy::CheckPermissionResult output; + policy_manager_->CheckPermissions( + app_id, kHmiLevelFull, rpc_name, input_params, output); + EXPECT_EQ(out_expected_permission, output.hmi_level_permitted); +} + +void PolicyManagerImplTest2::EmulatePTAppRevoked(const std::string& ptu_name) { + std::ifstream ifile(ptu_name); + Json::Reader reader; + std::string json; + Json::Value root(Json::objectValue); + if (ifile.is_open() && reader.parse(ifile, root, true)) { + // Emulate application is revoked + root["policy_table"]["app_policies"]["1234"]["is_revoked"] = 1; + json = root.toStyledString(); + } + ifile.close(); + + ::policy::BinaryMessage msg(json.begin(), json.end()); + ASSERT_TRUE(policy_manager_->LoadPT(kDummyUpdateFileName, msg)); +} + // To avoid duplicate arrange of test void PolicyManagerImplTest2::AddSetDeviceData() { CreateLocalPT("json/sdl_preloaded_pt_send_location.json"); @@ -541,7 +576,8 @@ void PolicyManagerImplTest2::AddSetDeviceData() { "Bluetooth")); // Add app from consented device. App will be assigned with default policies - policy_manager_->AddApplication(application_id_); + policy_manager_->AddApplication(application_id_, + HmiTypes(policy_table::AHT_DEFAULT)); (policy_manager_->GetCache())->AddDevice(device_id_1_, "Bluetooth"); } @@ -596,11 +632,10 @@ PolicyManagerImplTest_RequestTypes::PolicyManagerImplTest_RequestTypes() , kAppId("1766825573") , kDefaultAppId(policy::kDefaultId) , app_storage_folder_("storage3") - , preloadet_pt_filename_(kSdlPreloadedPtJson) {} + , preloaded_pt_filename_(kSdlPreloadedPtJson) {} void PolicyManagerImplTest_RequestTypes::SetUp() { - ON_CALL(listener_, GetRegisteredLinks()) - .WillByDefault(Return(policy::ApplicationsLinks())); + ON_CALL(listener_, GetRegisteredLinks(_)).WillByDefault(Return()); file_system::CreateDirectory(app_storage_folder_); const bool in_memory = true; @@ -663,7 +698,7 @@ PolicyManagerImplTest_RequestTypes::GetRequestTypesForApplication( void PolicyManagerImplTest_RequestTypes::CompareAppRequestTypesWithDefault( const std::string& app_id, const std::string& ptu_file) { // Refresh policy table with invalid RequestType in application - RefreshPT(preloadet_pt_filename_, ptu_file); + RefreshPT(preloaded_pt_filename_, ptu_file); // Get <app_id> RequestType array policy_table::RequestTypes app_request_types = @@ -721,13 +756,13 @@ void PolicyManagerImplTest_RequestTypes::TearDown() { file_system::RemoveDirectory(app_storage_folder_, true); } -void PolicyManagerImplTest_CCS:: - PreconditionCCSPreparePTWithAppGroupsAndConsents() { +void PolicyManagerImplTest_ExternalConsent:: + PreconditionExternalConsentPreparePTWithAppGroupsAndConsents() { using namespace policy_table; using namespace rpc; CreateLocalPT(preloaded_pt_filename_); - Table t = PreparePTWithGroupsHavingCCS(); + Table t = PreparePTWithGroupsHavingExternalConsent(); ApplicationParams app_params; app_params.groups.push_back(group_name_1_); @@ -762,14 +797,16 @@ void PolicyManagerImplTest_CCS:: policy_manager_->SetUserConsentForApp(permissions); } -void PolicyManagerImplTest_CCS::PreconditionCCSPreparePTWithAppPolicy() { +void PolicyManagerImplTest_ExternalConsent:: + PreconditionExternalConsentPreparePTWithAppPolicy() { using namespace policy_table; using namespace rpc; // PT has 3 functional groups with some entities in - // disallowed_by_ccs_entities_on/off. Groups consents can be changed. + // disallowed_by_external_consent_entities_on/off. Groups consents can be + // changed. CreateLocalPT(preloaded_pt_filename_); - Table t = PreparePTWithGroupsHavingCCS(); + Table t = PreparePTWithGroupsHavingExternalConsent(); ApplicationParams app_params; app_params.groups.push_back(group_name_1_); @@ -781,30 +818,31 @@ void PolicyManagerImplTest_CCS::PreconditionCCSPreparePTWithAppPolicy() { EXPECT_TRUE(policy_manager_->GetCache()->ApplyUpdate(t)); } -rpc::policy_table_interface_base::Table -PolicyManagerImplTest_CCS::PreparePTWithGroupsHavingCCS() { +rpc::policy_table_interface_base::Table PolicyManagerImplTest_ExternalConsent:: + PreparePTWithGroupsHavingExternalConsent() { using namespace policy_table; using namespace rpc; // PT has 3 functional groups with some entities in - // disallowed_by_ccs_entities_on/off. Groups consents can be changed. + // disallowed_by_external_consent_entities_on/off. Groups consents can be + // changed. - CCS_Entity entity_1(type_1_, id_1_); - CCS_Entity entity_2(type_2_, id_2_); - CCS_Entity entity_3(type_3_, id_3_); + ExternalConsentEntity entity_1(type_1_, id_1_); + ExternalConsentEntity entity_2(type_2_, id_2_); + ExternalConsentEntity entity_3(type_3_, id_3_); Rpcs rpcs_1; - rpcs_1.disallowed_by_ccs_entities_on->push_back(entity_1); + rpcs_1.disallowed_by_external_consent_entities_on->push_back(entity_1); *rpcs_1.user_consent_prompt = group_name_1_; rpcs_1.rpcs.set_to_null(); Rpcs rpcs_2; - rpcs_2.disallowed_by_ccs_entities_off->push_back(entity_2); + rpcs_2.disallowed_by_external_consent_entities_off->push_back(entity_2); *rpcs_2.user_consent_prompt = group_name_2_; rpcs_2.rpcs.set_to_null(); Rpcs rpcs_3; - rpcs_3.disallowed_by_ccs_entities_on->push_back(entity_3); + rpcs_3.disallowed_by_external_consent_entities_on->push_back(entity_3); *rpcs_3.user_consent_prompt = group_name_3_; rpcs_3.rpcs.set_to_null(); @@ -819,7 +857,7 @@ PolicyManagerImplTest_CCS::PreparePTWithGroupsHavingCCS() { return t; } -std::string PolicyManagerImplTest_CCS::PreparePTUWithNewGroup( +std::string PolicyManagerImplTest_ExternalConsent::PreparePTUWithNewGroup( const uint32_t type, const uint32_t id, const std::string& group_name) { using namespace policy_table; using namespace rpc; @@ -829,12 +867,12 @@ std::string PolicyManagerImplTest_CCS::PreparePTUWithNewGroup( std::string json; Json::Value root(Json::objectValue); if (ifile.is_open() && reader.parse(ifile, root, true)) { - Table t = PreparePTWithGroupsHavingCCS(); + Table t = PreparePTWithGroupsHavingExternalConsent(); - CCS_Entity entity_4(type, id); + ExternalConsentEntity entity_4(type, id); Rpcs rpcs_4; - rpcs_4.disallowed_by_ccs_entities_on->push_back(entity_4); + rpcs_4.disallowed_by_external_consent_entities_on->push_back(entity_4); *rpcs_4.user_consent_prompt = group_name; rpcs_4.rpcs.set_to_null(); @@ -865,6 +903,9 @@ std::string PolicyManagerImplTest_CCS::PreparePTUWithNewGroup( root[policy_table_key][app_policies_key][app_id_1_] = overriden_table[policy_table_key][app_policies_key][app_id_1_]; + root[policy_table_key]["module_config"].removeMember("preloaded_pt"); + root[policy_table_key]["module_config"].removeMember("preloaded_date"); + json = root.toStyledString(); } ifile.close(); diff --git a/src/components/policy/policy_external/test/policy_manager_impl_user_consent_test.cc b/src/components/policy/policy_external/test/policy_manager_impl_user_consent_test.cc index 56a779f350..2f2162494f 100644 --- a/src/components/policy/policy_external/test/policy_manager_impl_user_consent_test.cc +++ b/src/components/policy/policy_external/test/policy_manager_impl_user_consent_test.cc @@ -47,14 +47,15 @@ TEST_F( PolicyManagerImplTest2, AddApplication_AddNewApplicationFromDeviceWithConsent_ExpectUpdateRequired) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_)) - .WillOnce(Return(device_id_1_)); + .WillRepeatedly(Return(device_id_1_)); policy_manager_->SetUserConsentForDevice(device_id_1_, true); - policy_manager_->AddApplication(app_id_1_); + policy_manager_->AddApplication(app_id_1_, + HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_EQ("UPDATE_NEEDED", policy_manager_->GetPolicyTableStatus()); } @@ -63,7 +64,7 @@ TEST_F( PolicyManagerImplTest2, AddApplication_AddNewApplicationFromDeviceWithoutConsent_ExpectUpToDate) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); // To set UP_TO_DATE before registration GetPTU(kValidSdlPtUpdateJson); @@ -76,11 +77,12 @@ TEST_F( policy_manager_->PTUpdatedAt(KILOMETERS, 1000); EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_)) - .WillOnce(Return(device_id_1_)); + .WillRepeatedly(Return(device_id_1_)); policy_manager_->SetUserConsentForDevice(device_id_1_, false); - policy_manager_->AddApplication(app_id_1_); + policy_manager_->AddApplication(app_id_1_, + HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus()); } @@ -89,8 +91,9 @@ TEST_F( PolicyManagerImplTest2, ReactOnUserDevConsentForApp_AddNewApplicationFromDeviceWithoutConsent_ExpectPreDataConsent) { // Arrange - CreateLocalPT(preloadet_pt_filename_); - policy_manager_->AddApplication(app_id_1_); + CreateLocalPT(preloaded_pt_filename_); + policy_manager_->AddApplication(app_id_1_, + HmiTypes(policy_table::AHT_DEFAULT)); ASSERT_TRUE(policy_manager_->IsPredataPolicy(app_id_1_)); policy_manager_->ReactOnUserDevConsentForApp(app_id_1_, false); EXPECT_TRUE(policy_manager_->IsPredataPolicy(app_id_1_)); @@ -103,7 +106,8 @@ TEST_F(PolicyManagerImplTest2, CreateLocalPT(kSdlPreloadedPtJson2); ASSERT_TRUE( (policy_manager_->GetCache())->AddDevice(device_id_2_, "Bluetooth")); - policy_manager_->AddApplication(application_id_); + policy_manager_->AddApplication(application_id_, + HmiTypes(policy_table::AHT_DEFAULT)); // Expect RPCs from pre_dataConsent group are allowed // Next checks are equal to BaseBeforeDataConsent_APIs.xml checks from task @@ -150,8 +154,9 @@ TEST_F(PolicyManagerImplTest2, // Related to manual tests APPLINK-18763, APPLINK-18764 TEST_F(PolicyManagerImplTest2, CheckPreDataConsent_GetDefaultHmiLevel_NONE) { // Arrange - CreateLocalPT(preloadet_pt_filename_); - policy_manager_->AddApplication(app_id_2_); + CreateLocalPT(preloaded_pt_filename_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); std::string default_hmi; // Default HMI level is NONE policy_manager_->GetDefaultHmi(app_id_2_, &default_hmi); @@ -168,7 +173,8 @@ TEST_F(PolicyManagerImplTest2, CheckPreDataConsent_GetDefaultHmiLevel_BACKGROUNG) { // Arrange CreateLocalPT(kSdlPreloadedPtJson2); - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); std::string default_hmi; // Default HMI level is BACKGROUND policy_manager_->GetDefaultHmi(app_id_2_, &default_hmi); @@ -185,7 +191,8 @@ TEST_F( // Arrange // RequestTypes for default & preDataConsent are different CreateLocalPT("json/ptu_requestType.json"); - policy_manager_->AddApplication(app_id_1_); + policy_manager_->AddApplication(app_id_1_, + HmiTypes(policy_table::AHT_DEFAULT)); ASSERT_TRUE(policy_manager_->IsPredataPolicy(app_id_1_)); policy_manager_->ReactOnUserDevConsentForApp(app_id_1_, true); EXPECT_FALSE(policy_manager_->IsPredataPolicy(app_id_1_)); @@ -199,7 +206,8 @@ TEST_F( // Arrange // RequestTypes for default & preDataConsent are the same CreateLocalPT(kPtu2RequestTypeJson); - policy_manager_->AddApplication(app_id_1_); + policy_manager_->AddApplication(app_id_1_, + HmiTypes(policy_table::AHT_DEFAULT)); ASSERT_TRUE(policy_manager_->IsPredataPolicy(app_id_1_)); EXPECT_CALL(listener_, OnPendingPermissionChange(app_id_1_)).Times(0); policy_manager_->ReactOnUserDevConsentForApp(app_id_1_, true); @@ -211,7 +219,7 @@ TEST_F( PolicyManagerImplTest2, GetUserConsentForDevice_SetDeviceWithoutConcent_ExpectReceivedConsentCorrect) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); ASSERT_TRUE( (policy_manager_->GetCache())->AddDevice(device_id_2_, "Bluetooth")); ::policy::DeviceConsent consent = @@ -223,7 +231,7 @@ TEST_F( TEST_F(PolicyManagerImplTest2, GetUserConsentForDevice_SetDeviceAllowed_ExpectReceivedConsentCorrect) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); ASSERT_TRUE( (policy_manager_->GetCache())->AddDevice(device_id_2_, "Bluetooth")); @@ -248,7 +256,7 @@ TEST_F( PolicyManagerImplTest2, GetUserConsentForDevice_SetDeviceDisallowed_ExpectReceivedConsentCorrect) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); ASSERT_TRUE( (policy_manager_->GetCache())->AddDevice(device_id_2_, "Bluetooth")); ASSERT_TRUE((policy_manager_->GetCache()) @@ -291,7 +299,8 @@ TEST_F(PolicyManagerImplTest2, EXPECT_EQ(::policy::DeviceConsent::kDeviceDisallowed, consent); EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_)) .WillRepeatedly(Return(device_id_2_)); - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); std::string default_hmi; policy_manager_->GetDefaultHmi(app_id_2_, &default_hmi); EXPECT_EQ("NONE", default_hmi); @@ -301,7 +310,8 @@ TEST_F(PolicyManagerImplTest2, GetDefaultHmi_SetDeviceAllowed_ExpectReceivedHmiCorrect) { // Arrange CreateLocalPT(kPtu2RequestTypeJson); - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); // Check if app has preData policy EXPECT_TRUE(policy_manager_->IsPredataPolicy(app_id_2_)); std::string default_hmi1; @@ -325,7 +335,8 @@ TEST_F(PolicyManagerImplTest2, EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent); EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_)) .WillRepeatedly(Return(device_id_2_)); - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_TRUE((policy_manager_->GetCache())->IsDefaultPolicy(app_id_2_)); std::string default_hmi2; policy_manager_->GetDefaultHmi(app_id_2_, &default_hmi2); @@ -336,7 +347,8 @@ TEST_F(PolicyManagerImplTest2, GetDefaultPriority_SetDeviceAllowed_ExpectReceivedPriorityCorrect) { // Arrange CreateLocalPT(kPtu2RequestTypeJson); - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); // Check if app has preData policy EXPECT_TRUE(policy_manager_->IsPredataPolicy(app_id_2_)); std::string priority1; @@ -360,7 +372,8 @@ TEST_F(PolicyManagerImplTest2, EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent); EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_)) .WillRepeatedly(Return(device_id_2_)); - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_TRUE((policy_manager_->GetCache())->IsDefaultPolicy(app_id_2_)); std::string priority2; EXPECT_TRUE(policy_manager_->GetPriority(app_id_2_, &priority2)); @@ -370,7 +383,7 @@ TEST_F(PolicyManagerImplTest2, TEST_F(PolicyManagerImplTest2, GetUserFirendlyMessages_ExpectReceivedCorrectMessages) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); ::policy::StringArray message_code; message_code.push_back("SettingEnableUpdates"); message_code.push_back("AppPermissions"); @@ -476,12 +489,13 @@ TEST_F(PolicyManagerImplTest2, SetDeviceInfo_ExpectDevInfoAddedToPT) { TEST_F(PolicyManagerImplTest2, GetInitialAppData_ExpectReceivedConsentCorrect) { // Arrange - CreateLocalPT(preloadet_pt_filename_); - policy_manager_->AddApplication(app_id_2_); + CreateLocalPT(preloaded_pt_filename_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); ::policy::StringArray app_nicknames; ::policy::StringArray app_hmi_types; policy_manager_->GetInitialAppData(app_id_2_, &app_nicknames, &app_hmi_types); - // Expect Empty nicknames and AppHMITypes + // Expect Empty nicknames and AppHmiTypes EXPECT_EQ(0u, app_nicknames.size()); EXPECT_EQ(0u, app_hmi_types.size()); @@ -509,7 +523,7 @@ TEST_F(PolicyManagerImplTest2, GetInitialAppData_ExpectReceivedConsentCorrect) { for (uint32_t i = 0; i < nick_names_size; ++i) { EXPECT_EQ(app_nicknames1[i], appNicknames[i].asString()); } - // Check AppHMITypes match + // Check AppHmiTypes match for (uint32_t i = 0; i < app_hmi_types_size; ++i) { EXPECT_EQ(app_hmi_types1[i], appHmiTypes[i].asString()); } @@ -519,8 +533,9 @@ TEST_F( PolicyManagerImplTest2, CanAppKeepContext_AddAppFromUnconsentedDevice_ExpectAppCannotKeepContext) { // Arrange - CreateLocalPT(preloadet_pt_filename_); - policy_manager_->AddApplication(app_id_2_); + CreateLocalPT(preloaded_pt_filename_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); // Check if app has preData policy EXPECT_TRUE(policy_manager_->IsPredataPolicy(app_id_2_)); // Check keep context in preData policy @@ -530,10 +545,11 @@ TEST_F( TEST_F(PolicyManagerImplTest2, CanAppKeepContext_AddAppFromConsentedDevice_ExpectAppCannotKeepContext) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); ASSERT_TRUE( (policy_manager_->GetCache())->AddDevice(device_id_2_, "Bluetooth")); - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); ASSERT_TRUE((policy_manager_->GetCache()) ->SetDeviceData(device_id_2_, "hardware IPX", @@ -549,7 +565,8 @@ TEST_F(PolicyManagerImplTest2, EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent); EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_)) .WillRepeatedly(Return(device_id_2_)); - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_TRUE((policy_manager_->GetCache())->IsDefaultPolicy(app_id_2_)); // Check keep context in default policy EXPECT_FALSE(policy_manager_->CanAppKeepContext(app_id_2_)); @@ -558,8 +575,9 @@ TEST_F(PolicyManagerImplTest2, TEST_F(PolicyManagerImplTest2, CanAppStealFocus_AddAppFromUnconsentedDevice_ExpectAppCannotStealFocus) { // Arrange - CreateLocalPT(preloadet_pt_filename_); - policy_manager_->AddApplication(app_id_2_); + CreateLocalPT(preloaded_pt_filename_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); // Check if app has preData policy EXPECT_TRUE(policy_manager_->IsPredataPolicy(app_id_2_)); // Check keep context in preData policy @@ -569,10 +587,11 @@ TEST_F(PolicyManagerImplTest2, TEST_F(PolicyManagerImplTest2, CanAppStealFocus_AddAppFromConsentedDevice_ExpectAppCannotStealFocus) { // Arrange - CreateLocalPT(preloadet_pt_filename_); + CreateLocalPT(preloaded_pt_filename_); ASSERT_TRUE( (policy_manager_->GetCache())->AddDevice(device_id_2_, "Bluetooth")); - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); ASSERT_TRUE((policy_manager_->GetCache()) ->SetDeviceData(device_id_2_, "hardware IPX", @@ -588,7 +607,8 @@ TEST_F(PolicyManagerImplTest2, EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent); EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_)) .WillRepeatedly(Return(device_id_2_)); - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_TRUE((policy_manager_->GetCache())->IsDefaultPolicy(app_id_2_)); // Check keep context in default policy EXPECT_FALSE(policy_manager_->CanAppStealFocus(app_id_2_)); @@ -597,8 +617,9 @@ TEST_F(PolicyManagerImplTest2, TEST_F(PolicyManagerImplTest2, IsPredataPolicy_SetAppWIthPredataPolicy_ExpectPredataPolicy) { // Arrange - CreateLocalPT(preloadet_pt_filename_); - policy_manager_->AddApplication(app_id_2_); + CreateLocalPT(preloaded_pt_filename_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); // Check if app has preData policy EXPECT_TRUE(policy_manager_->IsPredataPolicy(app_id_2_)); } @@ -608,7 +629,8 @@ TEST_F( SendNotificationOnPermissionsUpdated_SetDeviceAllowed_ExpectNotificationSent) { // Arrange CreateLocalPT(kPtu2RequestTypeJson); - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); // Check if app has preData policy EXPECT_TRUE(policy_manager_->IsPredataPolicy(app_id_2_)); std::string default_hmi1; @@ -638,7 +660,8 @@ TEST_F( EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent); EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_2_)) .WillRepeatedly(Return(device_id_2_)); - policy_manager_->AddApplication(app_id_2_); + policy_manager_->AddApplication(app_id_2_, + HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_TRUE((policy_manager_->GetCache())->IsDefaultPolicy(app_id_2_)); std::string default_hmi2; policy_manager_->GetDefaultHmi(app_id_2_, &default_hmi2); diff --git a/src/components/policy/policy_external/test/sql_pt_ext_representation_test.cc b/src/components/policy/policy_external/test/sql_pt_ext_representation_test.cc index 8d5c980ccd..92525c646d 100644 --- a/src/components/policy/policy_external/test/sql_pt_ext_representation_test.cc +++ b/src/components/policy/policy_external/test/sql_pt_ext_representation_test.cc @@ -64,10 +64,10 @@ class SQLPTExtRepresentationTest : public ::testing::Test { // Collection of pairs of group alias and corresponding group name typedef vector<pair<string, string> > GroupsAliasNameCollection; - SQLPTExtRepresentationTest() : reps(0) {} + SQLPTExtRepresentationTest() : reps_(NULL) {} protected: - SQLPTExtRepresentation* reps; + SQLPTExtRepresentation* reps_; policy_handler_test::MockPolicySettings policy_settings_; static const string kDatabaseName; PermissionConsent perm_consent; @@ -75,24 +75,24 @@ class SQLPTExtRepresentationTest : public ::testing::Test { FunctionalGroupPermission group2_perm; utils::dbms::SQLQuery* query_wrapper_; static const bool in_memory_; - const std::string kAppStorageFolder = "storage1"; + const std::string kAppStorageFolder = "storage_SQLPTExtRepresentationTest"; void SetUp() OVERRIDE { file_system::DeleteFile(kDatabaseName); - reps = new SQLPTExtRepresentation(in_memory_); - ASSERT_TRUE(reps != NULL); + reps_ = new SQLPTExtRepresentation(in_memory_); + ASSERT_TRUE(reps_ != NULL); ON_CALL(policy_settings_, app_storage_folder()) .WillByDefault(ReturnRef(kAppStorageFolder)); - ASSERT_EQ(SUCCESS, reps->Init(&policy_settings_)); - query_wrapper_ = new utils::dbms::SQLQuery(reps->db()); + ASSERT_EQ(SUCCESS, reps_->Init(&policy_settings_)); + query_wrapper_ = new utils::dbms::SQLQuery(reps_->db()); ASSERT_TRUE(query_wrapper_ != NULL); } void TearDown() OVERRIDE { delete query_wrapper_; - EXPECT_TRUE(reps->Drop()); - EXPECT_TRUE(reps->Close()); - delete reps; + EXPECT_TRUE(reps_->Drop()); + EXPECT_TRUE(reps_->Close()); + delete reps_; } void FillGroupPermission( @@ -193,8 +193,76 @@ class SQLPTExtRepresentationTest : public ::testing::Test { } return result; } + // Attempt of simplifying policy table checks, hides internal stuff, add + // basic checks for data existence before getting of data + // For usage example see SaveUserConsentRecords_ExpectedSaved, + // SaveFunctionalGroupings_ExpectedSaved tests + template <typename ParentType, typename KeyType> + bool IsExist(const ParentType& parent) const; + + template <typename ParentType, typename Value> + bool IsKeyExist(const ParentType& parent, const Value& value) const { + return parent.end() != std::find(parent.begin(), parent.end(), value); + } + + template <typename ParentType> + bool IsKeyExist(const ParentType& parent, const std::string& value) const { + return parent.end() != parent.find(value); + } + + template <typename ParentType, typename KeyType> + const KeyType& GetData(const ParentType& parent) const { + EXPECT_TRUE((IsExist<ParentType, KeyType>(parent))); + return GetDataInternal<ParentType, KeyType>(parent); + } + + template <typename ParentType, typename KeyType> + const KeyType& GetKeyData(const ParentType& parent, + const std::string& key_name) const { + EXPECT_TRUE((IsKeyExist<ParentType>(parent, key_name))); + return GetKeyDataInternal<ParentType, KeyType>(parent, key_name); + } + + private: + template <typename ParentType, typename KeyType> + const KeyType& GetDataInternal(const ParentType& parent) const; + + template <typename ParentType, typename KeyType> + const KeyType& GetKeyDataInternal(const ParentType& parent, + const std::string& key_name) const { + return parent.find(key_name)->second; + } }; +// Specializations for 'policy_table' section + +template <> +bool SQLPTExtRepresentationTest::IsExist<policy_table::Table, + policy_table::DeviceData>( + const policy_table::Table& table) const { + return table.policy_table.device_data.is_initialized(); +} + +template <> +bool SQLPTExtRepresentationTest::IsExist<policy_table::Table, + policy_table::FunctionalGroupings>( + const policy_table::Table& table) const { + return table.policy_table.functional_groupings.is_initialized(); +} + +template <> +const policy_table::DeviceData& SQLPTExtRepresentationTest::GetDataInternal( + const policy_table::Table& table) const { + return *table.policy_table.device_data; +} + +template <> +const policy_table::FunctionalGroupings& +SQLPTExtRepresentationTest::GetDataInternal( + const policy_table::Table& table) const { + return table.policy_table.functional_groupings; +} + const string SQLPTExtRepresentationTest::kDatabaseName = ":memory:"; const bool SQLPTExtRepresentationTest::in_memory_ = true; @@ -322,10 +390,10 @@ TEST_F(SQLPTExtRepresentationTest, // Assert ASSERT_TRUE(IsValid(update)); - ASSERT_TRUE(reps->Save(update)); + ASSERT_TRUE(reps_->Save(update)); // Act - utils::SharedPtr<policy_table::Table> snapshot = reps->GenerateSnapshot(); + utils::SharedPtr<policy_table::Table> snapshot = reps_->GenerateSnapshot(); snapshot->SetPolicyTableType(rpc::policy_table_interface_base::PT_SNAPSHOT); policy_table["module_meta"] = Json::Value(Json::objectValue); @@ -368,8 +436,8 @@ TEST_F( // Assert ASSERT_TRUE(query_wrapper_->Exec(query_insert_12345)); - EXPECT_FALSE(reps->CanAppKeepContext("0")); - EXPECT_TRUE(reps->CanAppKeepContext("12345")); + EXPECT_FALSE(reps_->CanAppKeepContext("0")); + EXPECT_TRUE(reps_->CanAppKeepContext("12345")); // Act const std::string query_insert_123 = "INSERT INTO `application` (`id`, `memory_kb`," @@ -377,7 +445,7 @@ TEST_F( // Assert ASSERT_TRUE(query_wrapper_->Exec(query_insert_123)); - EXPECT_FALSE(reps->CanAppKeepContext("123")); + EXPECT_FALSE(reps_->CanAppKeepContext("123")); } TEST_F(SQLPTExtRepresentationTest, @@ -393,8 +461,8 @@ TEST_F(SQLPTExtRepresentationTest, // Assert ASSERT_TRUE(query_wrapper_->Exec(query_insert_12345)); - EXPECT_TRUE(reps->CanAppStealFocus("12345")); - EXPECT_FALSE(reps->CanAppStealFocus("0")); + EXPECT_TRUE(reps_->CanAppStealFocus("12345")); + EXPECT_FALSE(reps_->CanAppStealFocus("0")); // Act const std::string query_insert_123 = "INSERT INTO `application` (`id`, `memory_kb`," @@ -402,7 +470,7 @@ TEST_F(SQLPTExtRepresentationTest, // Assert ASSERT_TRUE(query_wrapper_->Exec(query_insert_123)); - EXPECT_FALSE(reps->CanAppStealFocus("123")); + EXPECT_FALSE(reps_->CanAppStealFocus("123")); } TEST_F(SQLPTExtRepresentationTest, @@ -419,7 +487,7 @@ TEST_F(SQLPTExtRepresentationTest, std::string result; // Assert ASSERT_TRUE(query_wrapper_->Exec(query_insert_12345)); - EXPECT_TRUE(reps->GetDefaultHMI("12345", &result)); + EXPECT_TRUE(reps_->GetDefaultHMI("12345", &result)); EXPECT_EQ("NONE", result); const std::string query_insert_123 = "INSERT INTO `application` (`id`, `memory_kb`," @@ -428,7 +496,7 @@ TEST_F(SQLPTExtRepresentationTest, // Assert ASSERT_TRUE(query_wrapper_->Exec(query_insert_123)); - EXPECT_TRUE(reps->GetDefaultHMI("123", &result)); + EXPECT_TRUE(reps_->GetDefaultHMI("123", &result)); EXPECT_EQ("LIMITED", result); } @@ -437,7 +505,7 @@ TEST_F(SQLPTExtRepresentationTest, // Arrange StringArray allowed_groups; StringArray disallowed_groups; - EXPECT_TRUE(reps->GetUserPermissionsForDevice( + EXPECT_TRUE(reps_->GetUserPermissionsForDevice( "XXX12345ZZZ", &allowed_groups, &disallowed_groups)); EXPECT_EQ(0u, allowed_groups.size()); EXPECT_EQ(0u, disallowed_groups.size()); @@ -457,7 +525,7 @@ TEST_F(SQLPTExtRepresentationTest, "('XXX12345ZZZ', 'Navigation-1', 0,'GUI', '2015-01-01T00:00:52Z')"; // Assert ASSERT_TRUE(query_wrapper_->Exec(query_insert_Navigation)); - EXPECT_TRUE(reps->GetUserPermissionsForDevice( + EXPECT_TRUE(reps_->GetUserPermissionsForDevice( "XXX12345ZZZ", &allowed_groups, &disallowed_groups)); EXPECT_EQ(1u, allowed_groups.size()); EXPECT_EQ(1u, disallowed_groups.size()); @@ -468,19 +536,19 @@ TEST_F(SQLPTExtRepresentationTest, // Arrange StringArray allowed_groups; StringArray disallowed_groups; - EXPECT_TRUE(reps->GetUserPermissionsForDevice( + EXPECT_TRUE(reps_->GetUserPermissionsForDevice( "XXX12345ZZZ", &allowed_groups, &disallowed_groups)); EXPECT_EQ(0u, allowed_groups.size()); EXPECT_EQ(0u, disallowed_groups.size()); allowed_groups.push_back("DataConsent-2"); disallowed_groups.push_back("Navigation-1"); - EXPECT_TRUE(reps->SetUserPermissionsForDevice( + EXPECT_TRUE(reps_->SetUserPermissionsForDevice( "XXX12345ZZZ", allowed_groups, disallowed_groups)); allowed_groups.clear(); disallowed_groups.clear(); // Act - EXPECT_TRUE(reps->GetUserPermissionsForDevice( + EXPECT_TRUE(reps_->GetUserPermissionsForDevice( "XXX12345ZZZ", &allowed_groups, &disallowed_groups)); // Checks EXPECT_EQ(1u, allowed_groups.size()); @@ -498,19 +566,19 @@ TEST_F(SQLPTExtRepresentationTest, // Arrange StringArray allowed_groups; StringArray disallowed_groups; - EXPECT_TRUE(reps->GetUserPermissionsForDevice( + EXPECT_TRUE(reps_->GetUserPermissionsForDevice( "XXX12345ZZZ", &allowed_groups, &disallowed_groups)); EXPECT_EQ(0u, allowed_groups.size()); EXPECT_EQ(0u, disallowed_groups.size()); allowed_groups.push_back("DataConsent-2"); disallowed_groups.push_back("Navigation-1"); - EXPECT_TRUE(reps->SetUserPermissionsForDevice( + EXPECT_TRUE(reps_->SetUserPermissionsForDevice( "XXX12345ZZZ", allowed_groups, disallowed_groups)); allowed_groups.clear(); disallowed_groups.clear(); // Act - EXPECT_TRUE(reps->GetUserPermissionsForDevice( + EXPECT_TRUE(reps_->GetUserPermissionsForDevice( "XXX12345ZZZ", &allowed_groups, &disallowed_groups)); // Checks EXPECT_EQ(1u, allowed_groups.size()); @@ -524,8 +592,8 @@ TEST_F(SQLPTExtRepresentationTest, allowed_groups.clear(); disallowed_groups.clear(); // Act - reps->ResetDeviceConsents(); - EXPECT_TRUE(reps->GetUserPermissionsForDevice( + reps_->ResetDeviceConsents(); + EXPECT_TRUE(reps_->GetUserPermissionsForDevice( "XXX12345ZZZ", &allowed_groups, &disallowed_groups)); // Checks EXPECT_EQ(0u, allowed_groups.size()); @@ -557,7 +625,8 @@ TEST_F(SQLPTExtRepresentationTest, disallowed_groups.push_back(std::make_pair("", "Base-4")); FillPermissionStruct("", "", "", allowed_groups, disallowed_groups); FunctionalIdType group_types; - ASSERT_TRUE(reps->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types)); + ASSERT_TRUE( + reps_->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types)); EXPECT_TRUE( CheckGroupTypesExist(group_types, allowed_groups, disallowed_groups)); } @@ -572,10 +641,11 @@ TEST_F(SQLPTExtRepresentationTest, disallowed_groups.push_back(std::make_pair("DataConsent", "DataConsent-2")); FillPermissionStruct( "XXX12345ZZZ", "12345", "VR", allowed_groups, disallowed_groups); - EXPECT_TRUE(reps->SetUserPermissionsForApp(perm_consent)); + EXPECT_TRUE(reps_->SetUserPermissionsForApp(perm_consent)); FunctionalIdType group_types; - ASSERT_TRUE(reps->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types)); + ASSERT_TRUE( + reps_->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types)); EXPECT_TRUE( CheckGroupTypesExist(group_types, allowed_groups, disallowed_groups)); } @@ -590,15 +660,17 @@ TEST_F(SQLPTExtRepresentationTest, disallowed_groups.push_back(std::make_pair("DataConsent", "DataConsent-2")); FillPermissionStruct( "XXX12345ZZZ", "12345", "VR", allowed_groups, disallowed_groups); - EXPECT_TRUE(reps->SetUserPermissionsForApp(perm_consent)); + EXPECT_TRUE(reps_->SetUserPermissionsForApp(perm_consent)); FunctionalIdType group_types; - ASSERT_TRUE(reps->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types)); + ASSERT_TRUE( + reps_->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types)); EXPECT_TRUE( CheckGroupTypesExist(group_types, allowed_groups, disallowed_groups)); - reps->ResetAppConsents(); - ASSERT_TRUE(reps->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types)); + reps_->ResetAppConsents(); + ASSERT_TRUE( + reps_->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types)); EXPECT_FALSE( CheckGroupTypesExist(group_types, allowed_groups, disallowed_groups)); } @@ -619,10 +691,11 @@ TEST_F(SQLPTExtRepresentationTest, perm_allowed_groups, perm_disallowed_groups); // Set permissions for app - EXPECT_TRUE(reps->SetUserPermissionsForApp(perm_consent)); + EXPECT_TRUE(reps_->SetUserPermissionsForApp(perm_consent)); FunctionalIdType group_types; - ASSERT_TRUE(reps->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types)); + ASSERT_TRUE( + reps_->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types)); EXPECT_TRUE(CheckGroupTypesExist( group_types, perm_allowed_groups, perm_disallowed_groups)); @@ -631,19 +704,20 @@ TEST_F(SQLPTExtRepresentationTest, allowed_groups.push_back("DataConsent-2"); disallowed_groups.push_back("Navigation-1"); // Set permissions for device - EXPECT_TRUE(reps->SetUserPermissionsForDevice( + EXPECT_TRUE(reps_->SetUserPermissionsForDevice( "XXX12345ZZZ", allowed_groups, disallowed_groups)); allowed_groups.clear(); disallowed_groups.clear(); // Act - reps->ResetUserConsent(); - EXPECT_TRUE(reps->GetUserPermissionsForDevice( + reps_->ResetUserConsent(); + EXPECT_TRUE(reps_->GetUserPermissionsForDevice( "XXX12345ZZZ", &allowed_groups, &disallowed_groups)); // Checks EXPECT_EQ(0u, allowed_groups.size()); EXPECT_EQ(0u, disallowed_groups.size()); - EXPECT_TRUE(reps->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types)); + EXPECT_TRUE( + reps_->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types)); EXPECT_FALSE(CheckGroupTypesExist( group_types, perm_allowed_groups, perm_disallowed_groups)); } @@ -686,7 +760,8 @@ TEST_F(SQLPTExtRepresentationTest, policy_table::Strings groups; policy_table::Strings preconsented_groups; - EXPECT_TRUE(reps->GetDeviceGroupsFromPolicies(&groups, &preconsented_groups)); + EXPECT_TRUE( + reps_->GetDeviceGroupsFromPolicies(&groups, &preconsented_groups)); EXPECT_EQ(2u, groups.size()); EXPECT_EQ(1u, preconsented_groups.size()); @@ -707,15 +782,15 @@ TEST_F(SQLPTExtRepresentationTest, TEST_F(SQLPTExtRepresentationTest, SetDeviceData_SetDeviceData_ExpectValuesThatSetInParams) { // Arrange - utils::dbms::SQLQuery query(reps->db()); - reps->SetDeviceData("08-00-27-CE-76-FE", - "hardware IPX", - "v.8.0.1", - "Android", - "4.4.2", - "Life", - 2, - "Bluetooth"); + utils::dbms::SQLQuery query(reps_->db()); + reps_->SetDeviceData("08-00-27-CE-76-FE", + "hardware IPX", + "v.8.0.1", + "Android", + "4.4.2", + "Life", + 2, + "Bluetooth"); const std::string query_select_hardware = "SELECT `hardware` FROM `device` WHERE `id` = '08-00-27-CE-76-FE'"; const std::string query_select_firmware_rev = @@ -805,9 +880,9 @@ TEST_F( // Assert ASSERT_TRUE(query_wrapper_->Exec(query_insert_application)); - EXPECT_TRUE(reps->IsPredataPolicy("1234")); - reps->ReactOnUserDevConsentForApp("1234", true); - EXPECT_TRUE(reps->IsDefaultPolicy("1234")); + EXPECT_TRUE(reps_->IsPredataPolicy("1234")); + reps_->ReactOnUserDevConsentForApp("1234", true); + EXPECT_TRUE(reps_->IsDefaultPolicy("1234")); } TEST_F( @@ -873,9 +948,9 @@ TEST_F( // Assert ASSERT_TRUE(query_wrapper_->Exec(query_insert_application)); FunctionalIdType group_types; - ASSERT_TRUE(reps->GetPermissionsForApp("XXX12345ZZZ", "1234", &group_types)); - EXPECT_FALSE(reps->IsPredataPolicy("1234")); - EXPECT_FALSE(reps->IsDefaultPolicy("1234")); + ASSERT_TRUE(reps_->GetPermissionsForApp("XXX12345ZZZ", "1234", &group_types)); + EXPECT_FALSE(reps_->IsPredataPolicy("1234")); + EXPECT_FALSE(reps_->IsDefaultPolicy("1234")); std::map<GroupType, FunctionalGroupIDs>::iterator it1 = group_types.find(GroupType::kTypeAllowed); EXPECT_TRUE(group_types.end() != it1); @@ -885,13 +960,13 @@ TEST_F( ASSERT_TRUE(it2 != it1->second.end()); it2 = std::find(it1->second.begin(), it1->second.end(), 1809526495); ASSERT_TRUE(it2 != it1->second.end()); - reps->SetIsPredata("1234", true); - EXPECT_TRUE(reps->IsPredataPolicy("1234")); - reps->ReactOnUserDevConsentForApp("1234", true); + reps_->SetIsPredata("1234", true); + EXPECT_TRUE(reps_->IsPredataPolicy("1234")); + reps_->ReactOnUserDevConsentForApp("1234", true); group_types.clear(); - ASSERT_TRUE(reps->GetPermissionsForApp("XXX12345ZZZ", "1234", &group_types)); - EXPECT_FALSE(reps->IsPredataPolicy("1234")); - EXPECT_FALSE(reps->IsDefaultPolicy("1234")); + ASSERT_TRUE(reps_->GetPermissionsForApp("XXX12345ZZZ", "1234", &group_types)); + EXPECT_FALSE(reps_->IsPredataPolicy("1234")); + EXPECT_FALSE(reps_->IsDefaultPolicy("1234")); it1 = group_types.find(GroupType::kTypeAllowed); EXPECT_TRUE(group_types.end() != it1); EXPECT_EQ(2u, it1->second.size()); @@ -916,7 +991,7 @@ TEST_F(SQLPTExtRepresentationTest, msg_code.push_back("AppPermissions"); // Act std::vector<UserFriendlyMessage> result = - reps->GetUserFriendlyMsg(msg_code, string("en-en")); + reps_->GetUserFriendlyMsg(msg_code, string("en-en")); // Checks ASSERT_EQ(1u, result.size()); EXPECT_EQ(result[0].message_code, "AppPermissions"); @@ -930,7 +1005,7 @@ TEST_F(SQLPTExtRepresentationTest, TEST_F(SQLPTExtRepresentationTest, IncrementGlobalCounter_IncrementThreeTimes_ExpectCountEqual3) { // Arrange - utils::dbms::SQLQuery query(reps->db()); + utils::dbms::SQLQuery query(reps_->db()); const std::string query_update = "UPDATE `usage_and_error_count` SET" " `count_of_sync_reboots` = 0"; @@ -939,9 +1014,9 @@ TEST_F(SQLPTExtRepresentationTest, ASSERT_TRUE(query_wrapper_->Exec(query_update)); // Act - reps->Increment("count_of_sync_reboots"); - reps->Increment("count_of_sync_reboots"); - reps->Increment("count_of_sync_reboots"); + reps_->Increment("count_of_sync_reboots"); + reps_->Increment("count_of_sync_reboots"); + reps_->Increment("count_of_sync_reboots"); const std::string query_select = "SELECT `count_of_sync_reboots` FROM `usage_and_error_count`"; @@ -955,7 +1030,7 @@ TEST_F( SQLPTExtRepresentationTest, IncrementAppCounter_IncrementCountOfUserSelections3Times_ExpectCountEqual3) { // Arrange - utils::dbms::SQLQuery query(reps->db()); + utils::dbms::SQLQuery query(reps_->db()); const std::string query_delete = "DELETE FROM `app_level` WHERE `application_id` = '12345'"; @@ -963,9 +1038,9 @@ TEST_F( ASSERT_TRUE(query_wrapper_->Exec(query_delete)); // Act - reps->Increment("12345", "count_of_user_selections"); - reps->Increment("12345", "count_of_user_selections"); - reps->Increment("12345", "count_of_user_selections"); + reps_->Increment("12345", "count_of_user_selections"); + reps_->Increment("12345", "count_of_user_selections"); + reps_->Increment("12345", "count_of_user_selections"); const std::string query_select = "SELECT `count_of_user_selections` FROM `app_level`" @@ -980,15 +1055,15 @@ TEST_F( TEST_F(SQLPTExtRepresentationTest, AppInfo_SetLanguageRuInGUIAndEnInVUI_ExpectRuInGUIAndEnInVUI) { // Arrange - utils::dbms::SQLQuery query(reps->db()); + utils::dbms::SQLQuery query(reps_->db()); const std::string query_delete = "DELETE FROM `app_level` WHERE `application_id` = '12345'"; // Assert ASSERT_TRUE(query_wrapper_->Exec(query_delete)); // Act - reps->Set("12345", "app_registration_language_gui", "ru-ru"); - reps->Set("12345", "app_registration_language_vui", "en-en"); + reps_->Set("12345", "app_registration_language_gui", "ru-ru"); + reps_->Set("12345", "app_registration_language_vui", "en-en"); const std::string query_select_gui = "SELECT `app_registration_language_gui`" @@ -1011,14 +1086,14 @@ TEST_F(SQLPTExtRepresentationTest, TEST_F(SQLPTExtRepresentationTest, AddAppStopwatch_Set10And60MinutesForStopwatch_Expect70Minutes) { // Arrange - utils::dbms::SQLQuery query(reps->db()); + utils::dbms::SQLQuery query(reps_->db()); const std::string query_delete = "DELETE FROM `app_level` WHERE `application_id` = '12345'"; // Assert ASSERT_TRUE(query_wrapper_->Exec(query_delete)); // Act - reps->Add("12345", "minutes_in_hmi_full", 10); - reps->Add("12345", "minutes_in_hmi_full", 60); + reps_->Add("12345", "minutes_in_hmi_full", 10); + reps_->Add("12345", "minutes_in_hmi_full", 60); const std::string query_select = "SELECT `minutes_in_hmi_full` FROM `app_level`" @@ -1034,7 +1109,7 @@ TEST_F( SQLPTExtRepresentationTest, SetUnpairedDevice_SetUnpairedDeviceId12345_ExpectUnpairedDeviceIdEquals12345) { // Arrange - utils::dbms::SQLQuery query(reps->db()); + utils::dbms::SQLQuery query(reps_->db()); const std::string query_delete = "DELETE FROM `device`"; // Assert ASSERT_TRUE(query_wrapper_->Exec(query_delete)); @@ -1043,7 +1118,7 @@ TEST_F( "INSERT INTO `device` (`id`) VALUES('12345')"; // Assert ASSERT_TRUE(query_wrapper_->Exec(query_insert)); - ASSERT_TRUE(reps->SetUnpairedDevice("12345", true)); + ASSERT_TRUE(reps_->SetUnpairedDevice("12345", true)); // Act const std::string query_select = "SELECT `id` FROM `device` WHERE `unpaired` = 1"; @@ -1074,7 +1149,7 @@ TEST_F( // Act std::vector<std::string> output; // Assert - ASSERT_TRUE(reps->UnpairedDevicesList(&output)); + ASSERT_TRUE(reps_->UnpairedDevicesList(&output)); ASSERT_EQ(2u, output.size()); EXPECT_NE(output.end(), std::find(output.begin(), output.end(), "12345")); EXPECT_NE(output.end(), std::find(output.begin(), output.end(), "54321")); @@ -1083,8 +1158,8 @@ TEST_F( TEST_F(SQLPTExtRepresentationTest, SetMetaInfo_SetMetaInfo_ExpectValuesSetInParams) { // Arrange - ASSERT_TRUE(reps->SetMetaInfo("4.1.3.B_EB355B", "WAEGB", "ru-ru")); - utils::dbms::SQLQuery query(reps->db()); + ASSERT_TRUE(reps_->SetMetaInfo("4.1.3.B_EB355B", "WAEGB", "ru-ru")); + utils::dbms::SQLQuery query(reps_->db()); const std::string query_select_ccpu = "SELECT `ccpu_version` FROM `module_meta`"; const std::string query_select_wers_country_code = @@ -1111,14 +1186,14 @@ TEST_F(SQLPTExtRepresentationTest, "UPDATE `module_meta` SET `ccpu_version` = '4.1.3.B_EB355B', " "`wers_country_code` = 'WAEGB', `language` = 'ru-ru' "; ASSERT_TRUE(query_wrapper_->Exec(query_insert_meta_info)); - EXPECT_TRUE(reps->IsMetaInfoPresent()); + EXPECT_TRUE(reps_->IsMetaInfoPresent()); } TEST_F(SQLPTExtRepresentationTest, SetSystemLanguage_SetSystemLanguage_ExpectValueSetInParams) { // Arrange - utils::dbms::SQLQuery query(reps->db()); - ASSERT_TRUE(reps->SetSystemLanguage("ru-ru")); + utils::dbms::SQLQuery query(reps_->db()); + ASSERT_TRUE(reps_->SetSystemLanguage("ru-ru")); const std::string query_select_language = "SELECT `language` FROM `module_meta`"; // Assert @@ -1148,7 +1223,7 @@ TEST_F( std::map<uint32_t, std::pair<std::string, std::string> > FunctionalGroupNames; std::map<uint32_t, std::pair<std::string, std::string> >::iterator it; - reps->GetFunctionalGroupNames(FunctionalGroupNames); + reps_->GetFunctionalGroupNames(FunctionalGroupNames); EXPECT_EQ(3u, FunctionalGroupNames.size()); ASSERT_TRUE(FunctionalGroupNames.end() != (it = FunctionalGroupNames.find(129372391))); @@ -1208,12 +1283,12 @@ TEST_F( FillPermissionStruct( "XXX12345ZZZ", "1234", "VR", allowed_groups, disallowed_groups); FunctionalIdType group_types; - ASSERT_TRUE(reps->GetPermissionsForApp("XXX12345ZZZ", "1234", &group_types)); + ASSERT_TRUE(reps_->GetPermissionsForApp("XXX12345ZZZ", "1234", &group_types)); EXPECT_TRUE( CheckGroupTypesExist(group_types, allowed_groups, disallowed_groups)); group_types.clear(); - reps->RemoveAppConsentForGroup("1234", "Notifications"); - ASSERT_TRUE(reps->GetPermissionsForApp("XXX12345ZZZ", "1234", &group_types)); + reps_->RemoveAppConsentForGroup("1234", "Notifications"); + ASSERT_TRUE(reps_->GetPermissionsForApp("XXX12345ZZZ", "1234", &group_types)); allowed_groups.pop_back(); EXPECT_TRUE( CheckGroupTypesExist(group_types, allowed_groups, disallowed_groups)); @@ -1222,25 +1297,25 @@ TEST_F( TEST_F(SQLPTExtRepresentationTest, CleanUnpaireDevices_SetDevicesThenCleanup_ExpectDevicesDeleted) { // Arrange - utils::dbms::SQLQuery query(reps->db()); - reps->SetDeviceData("XXX12345ZZZ", - "hardware IPX", - "v.8.0.1", - "Android", - "4.4.2", - "Life", - 2, - "Bluetooth"); + utils::dbms::SQLQuery query(reps_->db()); + reps_->SetDeviceData("XXX12345ZZZ", + "hardware IPX", + "v.8.0.1", + "Android", + "4.4.2", + "Life", + 2, + "Bluetooth"); StringArray allowed_groups; StringArray disallowed_groups; - EXPECT_TRUE(reps->GetUserPermissionsForDevice( + EXPECT_TRUE(reps_->GetUserPermissionsForDevice( "XXX12345ZZZ", &allowed_groups, &disallowed_groups)); EXPECT_EQ(0u, allowed_groups.size()); EXPECT_EQ(0u, disallowed_groups.size()); allowed_groups.push_back("DataConsent-2"); disallowed_groups.push_back("Navigation-1"); - EXPECT_TRUE(reps->SetUserPermissionsForDevice( + EXPECT_TRUE(reps_->SetUserPermissionsForDevice( "XXX12345ZZZ", allowed_groups, disallowed_groups)); GroupsAliasNameCollection perm_allowed_groups; @@ -1255,7 +1330,7 @@ TEST_F(SQLPTExtRepresentationTest, perm_allowed_groups, perm_disallowed_groups); - EXPECT_TRUE(reps->SetUserPermissionsForApp(perm_consent)); + EXPECT_TRUE(reps_->SetUserPermissionsForApp(perm_consent)); const std::string query_select_device = "SELECT COUNT(*) FROM `device` WHERE `id` = 'XXX12345ZZZ'"; @@ -1277,11 +1352,11 @@ TEST_F(SQLPTExtRepresentationTest, query.Next(); EXPECT_EQ(2, query.GetInteger(0)); - EXPECT_TRUE(reps->SetUnpairedDevice("XXX12345ZZZ", true)); + EXPECT_TRUE(reps_->SetUnpairedDevice("XXX12345ZZZ", true)); std::vector<std::string> DeviceIds; DeviceIds.push_back("XXX12345ZZZ"); - EXPECT_TRUE(reps->CleanupUnpairedDevices(DeviceIds)); + EXPECT_TRUE(reps_->CleanupUnpairedDevices(DeviceIds)); // Assert query.Prepare(query_select_device); @@ -1317,15 +1392,15 @@ TEST_F( disallowed_groups.push_back(std::make_pair("DataConsent", "DataConsent-2")); FillPermissionStruct( "XXX12345ZZZ", "12345", "VR", allowed_groups, disallowed_groups); - EXPECT_TRUE(reps->SetUserPermissionsForApp(perm_consent)); + EXPECT_TRUE(reps_->SetUserPermissionsForApp(perm_consent)); // Act - ASSERT_TRUE(reps->SetIsPredata("12345", true)); + ASSERT_TRUE(reps_->SetIsPredata("12345", true)); // Check - EXPECT_TRUE(reps->IsPredataPolicy("12345")); + EXPECT_TRUE(reps_->IsPredataPolicy("12345")); // Act - EXPECT_TRUE(reps->SetDefaultPolicy("12345")); + EXPECT_TRUE(reps_->SetDefaultPolicy("12345")); // Check - EXPECT_TRUE(reps->IsDefaultPolicy("12345")); + EXPECT_TRUE(reps_->IsDefaultPolicy("12345")); } TEST_F(SQLPTExtRepresentationTest, @@ -1347,16 +1422,16 @@ TEST_F(SQLPTExtRepresentationTest, disallowed_groups.push_back(std::make_pair("DataConsent", "DataConsent-2")); FillPermissionStruct( "XXX12345ZZZ", "12345", "VR", allowed_groups, disallowed_groups); - EXPECT_TRUE(reps->SetUserPermissionsForApp(perm_consent)); - EXPECT_FALSE(reps->IsPredataPolicy("12345")); + EXPECT_TRUE(reps_->SetUserPermissionsForApp(perm_consent)); + EXPECT_FALSE(reps_->IsPredataPolicy("12345")); // Act - ASSERT_TRUE(reps->SetIsPredata("12345", false)); + ASSERT_TRUE(reps_->SetIsPredata("12345", false)); // Check - EXPECT_FALSE(reps->IsPredataPolicy("12345")); + EXPECT_FALSE(reps_->IsPredataPolicy("12345")); // Act - ASSERT_TRUE(reps->SetIsPredata("12345", true)); + ASSERT_TRUE(reps_->SetIsPredata("12345", true)); // Check - EXPECT_TRUE(reps->IsPredataPolicy("12345")); + EXPECT_TRUE(reps_->IsPredataPolicy("12345")); } TEST_F( @@ -1379,12 +1454,12 @@ TEST_F( disallowed_groups.push_back(std::make_pair("DataConsent", "DataConsent-2")); FillPermissionStruct( "XXX12345ZZZ", "12345", "VR", allowed_groups, disallowed_groups); - EXPECT_TRUE(reps->SetUserPermissionsForApp(perm_consent)); - EXPECT_FALSE(reps->IsPredataPolicy("12345")); + EXPECT_TRUE(reps_->SetUserPermissionsForApp(perm_consent)); + EXPECT_FALSE(reps_->IsPredataPolicy("12345")); // Act - ASSERT_TRUE(reps->SetPredataPolicy("12345")); + ASSERT_TRUE(reps_->SetPredataPolicy("12345")); // Check - EXPECT_TRUE(reps->IsPredataPolicy("12345")); + EXPECT_TRUE(reps_->IsPredataPolicy("12345")); } TEST_F(SQLPTExtRepresentationTest, @@ -1408,7 +1483,7 @@ TEST_F(SQLPTExtRepresentationTest, SaveUserConsentRecords_ExpectedSaved) { const std::string device_id = "test_device_id"; const std::string app_id = "test_app_id"; - const std::string ccs_group = "CCSGroup"; + const std::string external_consent_group = "ExternalConsentGroup"; const std::string consent_group = "ConsentGroup"; const std::string time_stamp = "2016-08-29T17:12:07Z"; const Input input = Input::I_GUI; @@ -1420,8 +1495,8 @@ TEST_F(SQLPTExtRepresentationTest, SaveUserConsentRecords_ExpectedSaved) { UserConsentRecords::mapped_type& app_records = user_consent_records[app_id]; - app_records.ccs_consent_groups->insert( - std::make_pair(ccs_group, Boolean(true))); + app_records.external_consent_status_groups->insert( + std::make_pair(external_consent_group, Boolean(true))); app_records.consent_groups->insert( std::make_pair(consent_group, Boolean(true))); @@ -1446,8 +1521,8 @@ TEST_F(SQLPTExtRepresentationTest, SaveUserConsentRecords_ExpectedSaved) { EXPECT_TRUE( (IsKeyExist<ConsentGroups>(*consents.consent_groups, consent_group))); - EXPECT_TRUE( - (IsKeyExist<ConsentGroups>(*consents.ccs_consent_groups, ccs_group))); + EXPECT_TRUE((IsKeyExist<ConsentGroups>( + *consents.external_consent_status_groups, external_consent_group))); EXPECT_EQ((String<1, 255>(time_stamp)), *consents.time_stamp); EXPECT_EQ(input, *consents.input); } @@ -1461,10 +1536,10 @@ TEST_F(SQLPTExtRepresentationTest, SaveFunctionalGroupings_ExpectedSaved) { const std::string rpc_name = "RpcName"; const std::string user_consent_prompt = "TestConsentPrompt"; const std::string another_user_consent_prompt = "AnotherTestConsentPrompt"; - CCS_Entity off_entity_1(0, 0); - CCS_Entity off_entity_2(0, 1); - CCS_Entity on_entity_1(1, 0); - CCS_Entity on_entity_2(1, 1); + ExternalConsentEntity off_entity_1(0, 0); + ExternalConsentEntity off_entity_2(0, 1); + ExternalConsentEntity on_entity_1(1, 0); + ExternalConsentEntity on_entity_2(1, 1); const HmiLevel test_level_1 = HL_FULL; const HmiLevel test_level_2 = HL_LIMITED; @@ -1473,11 +1548,11 @@ TEST_F(SQLPTExtRepresentationTest, SaveFunctionalGroupings_ExpectedSaved) { Rpcs rpcs; - rpcs.disallowed_by_ccs_entities_off->push_back(off_entity_1); - rpcs.disallowed_by_ccs_entities_off->push_back(off_entity_2); + rpcs.disallowed_by_external_consent_entities_off->push_back(off_entity_1); + rpcs.disallowed_by_external_consent_entities_off->push_back(off_entity_2); - rpcs.disallowed_by_ccs_entities_on->push_back(on_entity_1); - rpcs.disallowed_by_ccs_entities_on->push_back(on_entity_2); + rpcs.disallowed_by_external_consent_entities_on->push_back(on_entity_1); + rpcs.disallowed_by_external_consent_entities_on->push_back(on_entity_2); *rpcs.user_consent_prompt = user_consent_prompt; @@ -1493,13 +1568,15 @@ TEST_F(SQLPTExtRepresentationTest, SaveFunctionalGroupings_ExpectedSaved) { original_table.policy_table.functional_groupings; groupings.insert(std::make_pair(group_name, rpcs)); - CCS_Entity off_entity_3(3, 4); - CCS_Entity on_entity_3(5, 6); + ExternalConsentEntity off_entity_3(3, 4); + ExternalConsentEntity on_entity_3(5, 6); Rpcs another_rpcs; - another_rpcs.disallowed_by_ccs_entities_off->push_back(off_entity_3); - another_rpcs.disallowed_by_ccs_entities_on->push_back(on_entity_3); + another_rpcs.disallowed_by_external_consent_entities_off->push_back( + off_entity_3); + another_rpcs.disallowed_by_external_consent_entities_on->push_back( + on_entity_3); *another_rpcs.user_consent_prompt = another_user_consent_prompt; const HmiLevel test_level_3 = HL_BACKGROUND; @@ -1522,15 +1599,15 @@ TEST_F(SQLPTExtRepresentationTest, SaveFunctionalGroupings_ExpectedSaved) { Rpcs loaded_rpcs = GetKeyData<FunctionalGroupings, Rpcs>(loaded_groupings, group_name); - EXPECT_TRUE((IsKeyExist<DisallowedByCCSEntities>( - *loaded_rpcs.disallowed_by_ccs_entities_off, off_entity_1))); - EXPECT_TRUE((IsKeyExist<DisallowedByCCSEntities>( - *loaded_rpcs.disallowed_by_ccs_entities_off, off_entity_2))); + EXPECT_TRUE((IsKeyExist<DisallowedByExternalConsentEntities>( + *loaded_rpcs.disallowed_by_external_consent_entities_off, off_entity_1))); + EXPECT_TRUE((IsKeyExist<DisallowedByExternalConsentEntities>( + *loaded_rpcs.disallowed_by_external_consent_entities_off, off_entity_2))); - EXPECT_TRUE((IsKeyExist<DisallowedByCCSEntities>( - *loaded_rpcs.disallowed_by_ccs_entities_on, on_entity_1))); - EXPECT_TRUE((IsKeyExist<DisallowedByCCSEntities>( - *loaded_rpcs.disallowed_by_ccs_entities_on, on_entity_2))); + EXPECT_TRUE((IsKeyExist<DisallowedByExternalConsentEntities>( + *loaded_rpcs.disallowed_by_external_consent_entities_on, on_entity_1))); + EXPECT_TRUE((IsKeyExist<DisallowedByExternalConsentEntities>( + *loaded_rpcs.disallowed_by_external_consent_entities_on, on_entity_2))); RpcParameters loaded_parameters = GetKeyData<Rpc, RpcParameters>(loaded_rpcs.rpcs, rpc_name); @@ -1548,11 +1625,13 @@ TEST_F(SQLPTExtRepresentationTest, SaveFunctionalGroupings_ExpectedSaved) { Rpcs another_loaded_rpcs = GetKeyData<FunctionalGroupings, Rpcs>( loaded_groupings, another_group_name); - EXPECT_TRUE((IsKeyExist<DisallowedByCCSEntities>( - *another_loaded_rpcs.disallowed_by_ccs_entities_off, off_entity_3))); + EXPECT_TRUE((IsKeyExist<DisallowedByExternalConsentEntities>( + *another_loaded_rpcs.disallowed_by_external_consent_entities_off, + off_entity_3))); - EXPECT_TRUE((IsKeyExist<DisallowedByCCSEntities>( - *another_loaded_rpcs.disallowed_by_ccs_entities_on, on_entity_3))); + EXPECT_TRUE((IsKeyExist<DisallowedByExternalConsentEntities>( + *another_loaded_rpcs.disallowed_by_external_consent_entities_on, + on_entity_3))); RpcParameters another_loaded_parameters = GetKeyData<Rpc, RpcParameters>(another_loaded_rpcs.rpcs, rpc_name); @@ -1564,7 +1643,7 @@ TEST_F(SQLPTExtRepresentationTest, SaveFunctionalGroupings_ExpectedSaved) { test_parameter_3))); } -TEST_F(SQLPTExtRepresentationTest, JsonContentsCCS_ExpectParsed) { +TEST_F(SQLPTExtRepresentationTest, JsonContentsExternalConsent_ExpectParsed) { using namespace policy_table; using namespace rpc; @@ -1588,14 +1667,15 @@ TEST_F(SQLPTExtRepresentationTest, JsonContentsCCS_ExpectParsed) { entity_on["entityType"] = entity_on_type; entity_on["entityID"] = entity_on_id; - functional_groupings[group_name]["disallowed_by_ccs_entities_on"][0] = - entity_on; + functional_groupings[group_name]["disallowed_by_external_consent_entities_on"] + [0] = entity_on; Json::Value entity_off = Json::Value(Json::objectValue); entity_off["entityType"] = entity_off_type; entity_off["entityID"] = entity_off_id; - functional_groupings[group_name]["disallowed_by_ccs_entities_off"][0] = - entity_off; + functional_groupings[group_name] + ["disallowed_by_external_consent_entities_off"][0] = + entity_off; policy_table::Table parsed_table(&json_table); @@ -1605,26 +1685,26 @@ TEST_F(SQLPTExtRepresentationTest, JsonContentsCCS_ExpectParsed) { Rpcs loaded_rpcs = GetKeyData<FunctionalGroupings, Rpcs>(loaded_groupings, group_name); - CCS_Entity off_entity_1(entity_off_type, entity_off_id); - CCS_Entity on_entity_1(entity_on_type, entity_on_id); + ExternalConsentEntity off_entity_1(entity_off_type, entity_off_id); + ExternalConsentEntity on_entity_1(entity_on_type, entity_on_id); - EXPECT_TRUE((IsKeyExist<DisallowedByCCSEntities>( - *loaded_rpcs.disallowed_by_ccs_entities_off, off_entity_1))); + EXPECT_TRUE((IsKeyExist<DisallowedByExternalConsentEntities>( + *loaded_rpcs.disallowed_by_external_consent_entities_off, off_entity_1))); - EXPECT_TRUE((IsKeyExist<DisallowedByCCSEntities>( - *loaded_rpcs.disallowed_by_ccs_entities_on, on_entity_1))); + EXPECT_TRUE((IsKeyExist<DisallowedByExternalConsentEntities>( + *loaded_rpcs.disallowed_by_external_consent_entities_on, on_entity_1))); } -TEST_F(SQLPTExtRepresentationTest, SaveCCSStatus_ExpectSaved) { - CCSStatusItem item_1(0, 0, kStatusOn); - CCSStatusItem item_2(1, 1, kStatusOff); - CCSStatus in_status; +TEST_F(SQLPTExtRepresentationTest, SaveExternalConsentStatus_ExpectSaved) { + ExternalConsentStatusItem item_1(0, 0, kStatusOn); + ExternalConsentStatusItem item_2(1, 1, kStatusOff); + ExternalConsentStatus in_status; in_status.insert(item_1); in_status.insert(item_2); - EXPECT_TRUE(reps_->SaveCCSStatus(in_status)); + EXPECT_TRUE(reps_->SaveExternalConsentStatus(in_status)); - CCSStatus out_status = reps_->GetCCSStatus(); + ExternalConsentStatus out_status = reps_->GetExternalConsentStatus(); EXPECT_TRUE(in_status.size() == out_status.size()); EXPECT_TRUE(out_status.end() != diff --git a/src/components/policy/policy_external/test/sql_pt_representation_test.cc b/src/components/policy/policy_external/test/sql_pt_representation_test.cc index 61c769bd61..a0a544deeb 100644 --- a/src/components/policy/policy_external/test/sql_pt_representation_test.cc +++ b/src/components/policy/policy_external/test/sql_pt_representation_test.cc @@ -406,7 +406,9 @@ TEST_F(SQLPTRepresentationTest, // Check PT structure destroyed and tables number is 0 query.Prepare(query_select); query.Next(); - ASSERT_EQ(kPolicyTablesNumber, query.GetInteger(0)); + + const int policy_tables_number = 35; + ASSERT_EQ(policy_tables_number, query.GetInteger(0)); const std::string query_select_count_of_iap_buffer_full = "SELECT `count_of_iap_buffer_full` FROM `usage_and_error_count`"; diff --git a/src/components/policy/policy_regular/include/policy/cache_manager.h b/src/components/policy/policy_regular/include/policy/cache_manager.h index 1bd506656c..73c010ce33 100644 --- a/src/components/policy/policy_regular/include/policy/cache_manager.h +++ b/src/components/policy/policy_regular/include/policy/cache_manager.h @@ -55,6 +55,8 @@ class CacheManager : public CacheManagerInterface { CacheManager(); ~CacheManager(); + const policy_table::Strings& GetGroups(const PTString& app_id); + /** * @brief Check if specified RPC for specified application * has permission to be executed in specified HMI Level @@ -65,7 +67,7 @@ class CacheManager : public CacheManagerInterface { * @return CheckPermissionResult containing flag if HMI Level is allowed * and list of allowed params. */ - virtual void CheckPermissions(const PTString& app_id, + virtual void CheckPermissions(const policy_table::Strings& groups, const PTString& hmi_level, const PTString& rpc, CheckPermissionResult& result); @@ -215,6 +217,15 @@ class CacheManager : public CacheManagerInterface { std::map<std::string, StringArray>& app_hmi_types); /** + * @brief AppHasHMIType checks whether app has been registered with certain + *HMI type. + * + * @return true in case app contains certain HMI type, false otherwise. + */ + virtual bool AppHasHMIType(const std::string& application_id, + policy_table::AppHMIType hmi_type) const OVERRIDE; + + /** * Gets flag updateRequired * @return true if update is required */ diff --git a/src/components/policy/policy_regular/include/policy/cache_manager_interface.h b/src/components/policy/policy_regular/include/policy/cache_manager_interface.h index e82787084c..50896bb8f1 100644 --- a/src/components/policy/policy_regular/include/policy/cache_manager_interface.h +++ b/src/components/policy/policy_regular/include/policy/cache_manager_interface.h @@ -50,6 +50,7 @@ class CacheManagerInterface { public: virtual ~CacheManagerInterface() {} + virtual const policy_table::Strings& GetGroups(const PTString& app_id) = 0; /** * @brief Check if specified RPC for specified application * has permission to be executed in specified HMI Level @@ -60,7 +61,7 @@ class CacheManagerInterface { * @return CheckPermissionResult containing flag if HMI Level is allowed * and list of allowed params. */ - virtual void CheckPermissions(const PTString& app_id, + virtual void CheckPermissions(const policy_table::Strings& groups, const PTString& hmi_level, const PTString& rpc, CheckPermissionResult& result) = 0; @@ -212,6 +213,15 @@ class CacheManagerInterface { std::map<std::string, StringArray>& app_hmi_types) = 0; /** + * @brief AppHasHMIType checks whether app has been registered with certain + *HMI type. + * + * @return true in case app contains certain HMI type, false otherwise. + */ + virtual bool AppHasHMIType(const std::string& application_id, + policy_table::AppHMIType hmi_type) const = 0; + + /** * Gets flag updateRequired * @return true if update is required */ diff --git a/src/components/policy/policy_regular/include/policy/policy_listener.h b/src/components/policy/policy_regular/include/policy/policy_listener.h index 00bf1f709f..0170f421e4 100644 --- a/src/components/policy/policy_regular/include/policy/policy_listener.h +++ b/src/components/policy/policy_regular/include/policy/policy_listener.h @@ -75,6 +75,9 @@ class PolicyListener { * * @param pt_string the snapshot * + * @param retry_seconds retry sequence timeouts. + * + * @param timeout_exceed timeout. */ virtual void OnSnapshotCreated(const BinaryMessage& pt_string) = 0; @@ -88,6 +91,15 @@ class PolicyListener { bool is_allowed) = 0; /** + * @brief Sends OnAppPermissionsChanged notification to HMI + * @param permissions contains parameter for OnAppPermisionChanged + * @param policy_app_id contains policy application id + */ + virtual void SendOnAppPermissionsChanged( + const AppPermissions& permissions, + const std::string& policy_app_id) const = 0; + + /** * @brief GetAvailableApps allows to obtain list of registered applications. */ virtual void GetAvailableApps(std::queue<std::string>&) = 0; @@ -101,4 +113,4 @@ class PolicyListener { virtual void OnCertificateUpdated(const std::string& certificate_data) = 0; }; } // namespace policy -#endif // SRC_COMPONENTS_POLICY_POLICY_REGULAR_INCLUDE_POLICY_POLICY_LISTENER_H_ +#endif // SRC_COMPONENTS_POLICY_POLICY_REGULAR_INCLUDE_POLICY_POLICY_LISTENER_H_ diff --git a/src/components/policy/policy_regular/include/policy/policy_manager.h b/src/components/policy/policy_regular/include/policy/policy_manager.h new file mode 100644 index 0000000000..c6bc111ba0 --- /dev/null +++ b/src/components/policy/policy_regular/include/policy/policy_manager.h @@ -0,0 +1,498 @@ +/* + Copyright (c) 2016, 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_POLICY_POLICY_REGULAR_INCLUDE_POLICY_POLICY_MANAGER_H_ +#define SRC_COMPONENTS_POLICY_POLICY_REGULAR_INCLUDE_POLICY_POLICY_MANAGER_H_ + +#include <vector> +#include <cstdint> + +#include "utils/callable.h" +#include "policy/policy_types.h" +#include "policy/policy_table/types.h" +#include "policy/policy_listener.h" +#include "policy/usage_statistics/statistics_manager.h" + +namespace policy { +class PolicySettings; +typedef utils::SharedPtr<utils::Callable> StatusNotifier; + +class PolicyManager : public usage_statistics::StatisticsManager { + public: + virtual ~PolicyManager() {} + + virtual void set_listener(PolicyListener* listener) = 0; + + /** + * Inits Policy Table + * @param file_name Path to preloaded PT file + * @return true if successfully + */ + virtual bool InitPT(const std::string& file_name, + const PolicySettings* settings) = 0; + + /** + * @brief Updates Policy Table from binary message received from + * mobile device. Saves to Policy Table diff between Policy Table + * sent in snapshot and received Policy Table. + * @param file name of file with update policy table + * @param pt_content PTU as binary string + * @return bool Success of operation + */ + virtual bool LoadPT(const std::string& file, + const BinaryMessage& pt_content) = 0; + + /** + * Resets Policy Table + * @param file_name Path to preloaded PT file + * @return true if successfully + */ + virtual bool ResetPT(const std::string& file_name) = 0; + + /** + * @brief GetLockScreenIcon allows to obtain lock screen icon url; + * + * @return url which point to the resourse where lock screen icon could be + *obtained. + */ + virtual std::string GetLockScreenIconUrl() const = 0; + + /** + * @brief Gets all URLs for sending PTS to from PT itself. + * @param service_type Service specifies user of URL + * @return vector of urls + */ + virtual void GetUpdateUrls(const std::string& service_type, + EndpointUrls& out_end_points) = 0; + virtual void GetUpdateUrls(const uint32_t service_type, + EndpointUrls& out_end_points) = 0; + + /** + * @brief PTU is needed, for this PTS has to be formed and sent. + */ + virtual bool RequestPTUpdate() = 0; + + /** + * @brief Check if specified RPC for specified application + * has permission to be executed in specified HMI Level + * and also its permitted params. + * @param app_id Id of application provided during registration + * @param hmi_level Current HMI Level of application + * @param rpc Name of RPC + * @param CheckPermissionResult containing flag if HMI Level is allowed + * and list of allowed params. + */ + virtual void CheckPermissions(const PTString& device_id, + const PTString& app_id, + const PTString& hmi_level, + const PTString& rpc, + const RPCParams& rpc_params, + CheckPermissionResult& result) = 0; + + /** + * @brief Clear all record of user consents. Used during Factory Reset. + * @return bool Success of operation + */ + virtual bool ResetUserConsent() = 0; + + /** + * @brief Returns current status of policy table for HMI + * @return Current status of policy table + */ + virtual std::string GetPolicyTableStatus() const = 0; + + /** + * Checks is PT exceeded kilometers + * @param kilometers current kilometers at odometer + * @return true if exceeded + */ + virtual void KmsChanged(int kilometers) = 0; + + /** + * Increments counter of ignition cycles + */ + virtual void IncrementIgnitionCycles() = 0; + + /** + * @brief ExchangeByUserRequest + */ + virtual std::string ForcePTExchange() = 0; + + /** + * Resets retry sequence + */ + virtual void ResetRetrySequence() = 0; + + /** + * Gets timeout to wait before next retry updating PT + * If timeout is equal to zero then the retry sequence is not need. + * @return timeout in seconds + */ + virtual uint32_t NextRetryTimeout() = 0; + + /** + * Gets timeout to wait until receive response + * @return timeout in seconds + */ + virtual uint32_t TimeoutExchangeMSec() = 0; + + /** + * @brief List of timeouts in seconds between retries + * when attempt to update PT fails + * @return List of delays between attempts. + */ + virtual const std::vector<int> RetrySequenceDelaysSeconds() = 0; + + /** + * Handler of exceeding timeout of exchanging policy table + */ + virtual void OnExceededTimeout() = 0; + + /** + * @brief Handler of PTS sending out + */ + virtual void OnUpdateStarted() = 0; + + /** + * @brief Check user consent for mobile device data connection + * @param device_id Unique device identifier + * @return status of device consent + */ + virtual DeviceConsent GetUserConsentForDevice( + const std::string& device_id) const = 0; + + /** + * @brief Get user consent for application + * @param device_id Device id + * @param policy_app_id Unique application id + * @param permissions Array of functional groups permissions + */ + virtual void GetUserConsentForApp( + const std::string& device_id, + const std::string& policy_app_id, + std::vector<FunctionalGroupPermission>& permissions) = 0; + + /** + * @brief Set user consent for mobile device data connection + * @param device_id Unique device identifier + * @param is_allowed User consent for usage device data connection + */ + virtual void SetUserConsentForDevice(const std::string& device_id, + bool is_allowed) = 0; + + /** + * @brief Update Application Policies as reaction + * on User allowing/disallowing device this app is running on. + */ + virtual bool ReactOnUserDevConsentForApp(const std::string app_id, + bool is_device_allowed) = 0; + /** + * Sets counter value that passed for receiving PT UPdate. + */ + virtual void PTUpdatedAt(Counters counter, int value) = 0; + + /** + * @brief Retrieves data from app_policies about app on its registration: + * @param app_id - id of registered app + * @param app_types Section on HMI where app can appear (Navigation, Phone + * etc) + * @param nicknames Synonyms for application + */ + virtual bool GetInitialAppData(const std::string& application_id, + StringArray* nicknames = NULL, + StringArray* app_hmi_types = NULL) = 0; + + /** + * @brief Add's device to policy table + * @param device_id Device mac address + * @param connection_type Device connection type + */ + virtual void AddDevice(const std::string& device_id, + const std::string& connection_type) = 0; + + /** + * @brief Stores device parameters received during application registration + * to policy table + * @param device_id Device mac address + * @param device_info Received device parameters + */ + virtual void SetDeviceInfo(const std::string& device_id, + const DeviceInfo& device_info) = 0; + + /** + * @brief Set user consent for application functional groups + * @param permissions User-defined application group pemissions. + * The permissions is not const reference because it may contains + * valid data as well as invalid. So we will remove all invalid data + * from this structure. + */ + virtual void SetUserConsentForApp(const PermissionConsent& permissions) = 0; + + /** + * @brief Get default HMI level for application + * @param policy_app_id Unique application id + * @param default_hmi Default HMI level for application or empty, if value + * was not set + * @return true, if succedeed, otherwise - false + */ + virtual bool GetDefaultHmi(const std::string& policy_app_id, + std::string* default_hmi) const = 0; + + /** + * @brief Get priority for application + * @param policy_app_id Unique application id + * @param priority Priority for application or empty, if value was not set + * @return true, if succedeed, otherwise - false + */ + virtual bool GetPriority(const std::string& policy_app_id, + std::string* priority) const = 0; + + /** + * @brief Get user friendly messages for given RPC messages and language + * @param message_codes RPC message codes + * @param language Language + * @return Array of structs with appropriate message parameters + */ + virtual std::vector<UserFriendlyMessage> GetUserFriendlyMessages( + const std::vector<std::string>& message_code, + const std::string& language) = 0; + + /** + * Checks if the application is revoked + * @param app_id application id + * @return true if application is revoked + */ + virtual bool IsApplicationRevoked(const std::string& app_id) const = 0; + + /** + * @brief Get resulting RPCs permissions for application which started on + * specific device + * @param device_id Device id + * @param policy_app_id Unique application id + * @param permissions Array of functional groups permissions + */ + virtual void GetPermissionsForApp( + const std::string& device_id, + const std::string& policy_app_id, + std::vector<FunctionalGroupPermission>& permissions) = 0; + + /** + * @brief Gets specific application permissions changes since last policy + * table update + * @param policy_app_id Unique application id + * @return Permissions changes + */ + virtual AppPermissions GetAppPermissionsChanges( + const std::string& policy_app_id) = 0; + + virtual void RemovePendingPermissionChanges(const std::string& app_id) = 0; + + /** + * @brief Return device id, which hosts specific application + * @param Application id, which is required to update device id + */ + virtual std::string& GetCurrentDeviceId( + const std::string& policy_app_id) const = 0; + + /** + * @brief Set current system language + * @param language Language + */ + virtual void SetSystemLanguage(const std::string& language) = 0; + + /** + * @brief Set data from GetSystemInfo response to policy table + * @param ccpu_version CCPU version + * @param wers_country_code WERS country code + * @param language System language + */ + virtual void SetSystemInfo(const std::string& ccpu_version, + const std::string& wers_country_code, + const std::string& language) = 0; + + /** + * @brief Send OnPermissionsUpdated for choosen application + * @param application_id + */ + virtual void SendNotificationOnPermissionsUpdated( + const std::string& application_id) = 0; + + /** + * Marks device as upaired + * @param device_id id device + */ + virtual void MarkUnpairedDevice(const std::string& device_id) = 0; + + /** + * @brief Adds, application to the db or update existed one + * run PTU if policy update is necessary for application. + * @param Application id assigned by Ford to the application + * @return function that will notify update manager about new application + */ + virtual StatusNotifier AddApplication( + const std::string& application_id, + const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) = 0; + + /** + * @brief Removes unpaired device records and related records from DB + * @param device_ids List of device_id, which should be removed + * @return true, if succedeed, otherwise - false + */ + virtual bool CleanupUnpairedDevices() = 0; + + /** + * @brief Check if app can keep context. + */ + virtual bool CanAppKeepContext(const std::string& app_id) const = 0; + + /** + * @brief Check if app can steal focus. + */ + virtual bool CanAppStealFocus(const std::string& app_id) const = 0; + + /** + * @brief Runs necessary operations, which is depends on external system + * state, e.g. getting system-specific parameters which are need to be + * filled into policy table + */ + virtual void OnSystemReady() = 0; + + /** + * @brief GetNotificationNumber + * @param priority + * @return + */ + virtual uint32_t GetNotificationsNumber( + const std::string& priority) const = 0; + + /** + * @brief Allows to update Vehicle Identification Number in policy table. + * @param new value for the parameter. + */ + virtual void SetVINValue(const std::string& value) = 0; + + /** + * @brief Checks, if application has policy assigned w/o data consent + * @param policy_app_id Unique application id + * @return true, if policy assigned w/o data consent, otherwise -false + */ + virtual bool IsPredataPolicy(const std::string& policy_app_id) const = 0; + + /** + * Returns heart beat timeout + * @param app_id application id + * @return if timeout was set then value in milliseconds greater zero + * otherwise heart beat for specific application isn't set + */ + virtual uint32_t HeartBeatTimeout(const std::string& app_id) const = 0; + + /** + * @brief SaveUpdateStatusRequired alows to save update status. + */ + virtual void SaveUpdateStatusRequired(bool is_update_needed) = 0; + + /** + * @brief Handler on applications search started + */ + virtual void OnAppsSearchStarted() = 0; + + /** + * @brief Handler on applications search completed + */ + virtual void OnAppsSearchCompleted() = 0; + /** + * @brief Gets request types for application + * @param policy_app_id Unique application id + * @return request_types Request types of application + */ + virtual const std::vector<std::string> GetAppRequestTypes( + const std::string policy_app_id) const = 0; + + /** + * @brief Get information about vehicle + */ + virtual const VehicleInfo GetVehicleInfo() const = 0; + + /** + * @brief OnAppRegisteredOnMobile alows to handle event when application were + * succesfully registered on mobile device. + * It will send OnAppPermissionSend notification and will try to start PTU. + * + * @param application_id registered application. + */ + virtual void OnAppRegisteredOnMobile(const std::string& application_id) = 0; + + /** + * @brief RetrieveCertificate Allows to obtain certificate in order + * to start secure connection. + * + * @return The certificate in PKCS#7 format. + */ + virtual std::string RetrieveCertificate() const = 0; + + /** + * @brief HasCertificate check whether policy table has certificate + * int module_config section. + * + * @return true in case certificate exists, false otherwise + */ + virtual bool HasCertificate() const = 0; + + virtual const PolicySettings& get_settings() const = 0; + + protected: + /** + * Checks is PT exceeded IgnitionCycles + * @return true if exceeded + */ + virtual bool ExceededIgnitionCycles() = 0; + + /** + * Checks is PT exceeded days + * @return true if exceeded + */ + virtual bool ExceededDays() = 0; + + /** + * @brief StartPTExchange allows to start PTU. The function will check + * if one is required and starts the update flow in only case when previous + * condition is true. + */ + virtual void StartPTExchange() = 0; +}; + +} // namespace policy + +extern "C" policy::PolicyManager* CreateManager(); +extern "C" void DeleteManager(policy::PolicyManager*); + +#endif // SRC_COMPONENTS_POLICY_POLICY_REGULAR_INCLUDE_POLICY_POLICY_MANAGER_H_ diff --git a/src/components/policy/policy_regular/include/policy/policy_manager_impl.h b/src/components/policy/policy_regular/include/policy/policy_manager_impl.h index 667ea2cb71..f37cbae76f 100644 --- a/src/components/policy/policy_regular/include/policy/policy_manager_impl.h +++ b/src/components/policy/policy_regular/include/policy/policy_manager_impl.h @@ -72,11 +72,12 @@ class PolicyManagerImpl : public PolicyManager { virtual std::string GetLockScreenIconUrl() const; virtual bool RequestPTUpdate(); - virtual void CheckPermissions(const PTString& app_id, + virtual void CheckPermissions(const PTString& device_id, + const PTString& app_id, const PTString& hmi_level, const PTString& rpc, const RPCParams& rpc_params, - CheckPermissionResult& result); + CheckPermissionResult& result) OVERRIDE; virtual bool ResetUserConsent(); virtual void KmsChanged(int kilometers); virtual void IncrementIgnitionCycles(); @@ -172,7 +173,9 @@ class PolicyManagerImpl : public PolicyManager { bool CanAppStealFocus(const std::string& app_id) const; void MarkUnpairedDevice(const std::string& device_id); - StatusNotifier AddApplication(const std::string& application_id); + StatusNotifier AddApplication( + const std::string& application_id, + const rpc::policy_table_interface_base::AppHmiTypes& hmi_types); virtual void RemoveAppConsentForGroup(const std::string& app_id, const std::string& group_name); @@ -203,6 +206,8 @@ class PolicyManagerImpl : public PolicyManager { virtual std::string RetrieveCertificate() const OVERRIDE; + virtual bool HasCertificate() const OVERRIDE; + AppIdURL GetNextUpdateUrl(const EndpointUrls& urls) OVERRIDE; AppIdURL RetrySequenceUrl(const struct RetrySequenceURL& rs, diff --git a/src/components/policy/policy_regular/include/policy/policy_table/types.h b/src/components/policy/policy_regular/include/policy/policy_table/types.h index 5873904823..3d80927d21 100644 --- a/src/components/policy/policy_regular/include/policy/policy_table/types.h +++ b/src/components/policy/policy_regular/include/policy/policy_table/types.h @@ -3,7 +3,7 @@ #define SRC_COMPONENTS_POLICY_POLICY_REGULAR_INCLUDE_POLICY_POLICY_TABLE_TYPES_H_ #include <climits> -#include "./enums.h" +#include "policy/policy_table/enums.h" #include "rpc_base/rpc_message.h" namespace Json { class Value; @@ -63,6 +63,9 @@ typedef Map<DeviceParams, 0, 255> DeviceData; typedef Array<Enum<RequestType>, 0, 255> RequestTypes; +typedef AppHMIType AppHmiType; +typedef std::vector<AppHMIType> AppHmiTypes; + struct PolicyBase : CompositeType { public: Enum<Priority> priority; diff --git a/src/components/include/policy/policy_regular/policy/policy_types.h b/src/components/policy/policy_regular/include/policy/policy_types.h index dbd910d62d..13fb2c49c2 100644 --- a/src/components/include/policy/policy_regular/policy/policy_types.h +++ b/src/components/policy/policy_regular/include/policy/policy_types.h @@ -1,4 +1,4 @@ -/* +/* Copyright (c) 2013, Ford Motor Company All rights reserved. @@ -30,16 +30,17 @@ POSSIBILITY OF SUCH DAMAGE. */ -#ifndef SRC_COMPONENTS_INCLUDE_POLICY_POLICY_TYPES_H_ -#define SRC_COMPONENTS_INCLUDE_POLICY_POLICY_TYPES_H_ +#ifndef SRC_COMPONENTS_POLICY_POLICY_EXTERNAL_INCLUDE_POLICY_POLICY_TYPES_H_ +#define SRC_COMPONENTS_POLICY_POLICY_EXTERNAL_INCLUDE_POLICY_POLICY_TYPES_H_ +#include <algorithm> #include <string> #include <vector> #include <map> #include <set> +#include <utility> #include "utils/shared_ptr.h" #include "utils/helpers.h" - namespace policy { // TODO(PV): specify errors @@ -58,6 +59,12 @@ const std::string kDefaultId = "default"; const std::string kDeviceId = "device"; /* + *@brief Policy Services specifies Users of Updates + * received from cloud through mobile device + */ +enum PolicyServiceTypes { SERVICE_NONE = 0, IVSU = 0x04, POLICY = 0x07 }; + +/* * @brief Status of policy table update */ enum PolicyTableStatus { @@ -78,8 +85,16 @@ typedef std::string RpcName; typedef std::set<std::string> RPCParams; typedef std::map<std::string, std::set<policy::HMILevel> > HMIPermissions; -typedef std::map<std::string, std::set<policy::Parameter> > - ParameterPermissions; +struct ParameterPermissions + : std::map<std::string, std::set<policy::Parameter> > { + ParameterPermissions() + : any_parameter_allowed(false) + , any_parameter_disallowed_by_user(false) + , any_parameter_disallowed_by_policy(false) {} + bool any_parameter_allowed; + bool any_parameter_disallowed_by_user; + bool any_parameter_disallowed_by_policy; +}; struct RpcPermissions { HMIPermissions hmi_permissions; @@ -112,6 +127,38 @@ struct CheckPermissionResult { RPCParams list_of_allowed_params; RPCParams list_of_disallowed_params; RPCParams list_of_undefined_params; + + bool HasParameter(const PTString& parameter) { + const bool is_allowed = + helpers::in_range(list_of_allowed_params, parameter); + const bool is_disallowed = + helpers::in_range(list_of_disallowed_params, parameter); + const bool is_undefined = + helpers::in_range(list_of_undefined_params, parameter); + + return is_allowed || is_disallowed || is_undefined; + } + + bool DisallowedInclude(const RPCParams& parameters) { + if (parameters.empty()) { + return false; + } + return std::includes(list_of_disallowed_params.begin(), + list_of_disallowed_params.end(), + parameters.begin(), + parameters.end()); + } + + bool IsAnyAllowed(const RPCParams& parameters) { + if (parameters.empty()) { + return true; + } + return list_of_allowed_params.end() != + std::find_first_of(list_of_allowed_params.begin(), + list_of_allowed_params.end(), + parameters.begin(), + parameters.end()); + } }; /** @@ -249,6 +296,11 @@ struct PermissionConsent { */ struct UserFriendlyMessage { std::string message_code; + std::string tts; + std::string label; + std::string line1; + std::string line2; + std::string text_body; }; /** @@ -333,6 +385,121 @@ struct RetrySequenceURL { */ typedef std::pair<uint32_t, uint32_t> AppIdURL; +/** + * @brief Represents ExternalConsent entity status received from the system + */ +enum EntityStatus { kStatusOn, kStatusOff }; + +/** + * @brief The ExternalConsentStatusItem struct represents customer connectivity + * settings + * item + */ +struct ExternalConsentStatusItem { + ExternalConsentStatusItem(const uint32_t type, + const uint32_t id, + const EntityStatus status) + : entity_type_(type), entity_id_(id), status_(status) {} + + bool operator==(const ExternalConsentStatusItem& rhs) const { + return (entity_type_ == rhs.entity_type_) && (entity_id_ == rhs.entity_id_); + } + + bool operator<(const ExternalConsentStatusItem& rhs) const { + return (entity_type_ < rhs.entity_type_) || (entity_id_ < rhs.entity_id_); + } + + const uint32_t entity_type_; + const uint32_t entity_id_; + const EntityStatus status_; +}; + +struct ExternalConsentStatusItemSorter { + bool operator()(const ExternalConsentStatusItem& lhs, + const ExternalConsentStatusItem& rhs) const { + return (lhs.entity_type_ < rhs.entity_type_) || + (lhs.entity_id_ < rhs.entity_id_); + } +}; + +/** + * @brief Customer connectivity settings status + */ +typedef std::set<ExternalConsentStatusItem, ExternalConsentStatusItemSorter> + ExternalConsentStatus; + +/** + * @brief GroupsByExternalConsentStatus represents list of group names, which + * has mapped ExternalConsent item (entity type + entity id) in their + * disallowed_by_external_consent_ containers. Boolean value represents + * whether ExternalConsent item has been found in + * disallowed_by_external_consent_ON or in disallowed_by_external_consent_OFF + * container + */ +typedef std::map<ExternalConsentStatusItem, + std::vector<std::pair<std::string, bool> > > + GroupsByExternalConsentStatus; + +/** + * @brief GroupsNames represents groups names from policy table -> functional + * groupings groups container + */ +typedef std::set<std::string> GroupsNames; + +typedef std::string ApplicationId; +typedef std::string DeviceId; + +/** + * @brief Link of device to application + */ +typedef std::pair<policy::DeviceId, policy::ApplicationId> Link; + +/** + * @brief Collection of links + */ +typedef std::set<Link> ApplicationsLinks; + +/** + * @brief Represents possible result codes for policy table update check + */ +enum PermissionsCheckResult { + RESULT_NO_CHANGES, + RESULT_APP_REVOKED, + RESULT_NICKNAME_MISMATCH, + RESULT_PERMISSIONS_REVOKED, + RESULT_CONSENT_NEEDED, + RESULT_CONSENT_NOT_REQIURED, + RESULT_PERMISSIONS_REVOKED_AND_CONSENT_NEEDED, + RESULT_REQUEST_TYPE_CHANGED +}; + +/** + * @brief Per application collection of results done by checking policy table + * update + */ +typedef std::set<std::pair<std::string, PermissionsCheckResult> > + CheckAppPolicyResults; + +/** + * @brief The index of the application, the index of its URL + * and the policy application id from the Endpoints vector + * that will be sent on the next OnSystemRequest retry sequence + */ +struct RetrySequenceURL { + uint32_t app_idx_; + uint32_t url_idx_; + std::string policy_app_id_; + RetrySequenceURL(uint32_t app, uint32_t url, const std::string& app_id) + : app_idx_(app), url_idx_(url), policy_app_id_(app_id) {} + RetrySequenceURL() : app_idx_(0), url_idx_(0) {} +}; + +/** + * @brief Index of the application, index of its URL + * from the Endpoints vector + */ +typedef std::pair<uint32_t, uint32_t> AppIdURL; + } // namespace policy -#endif // SRC_COMPONENTS_INCLUDE_POLICY_POLICY_TYPES_H_ +#endif // SRC_COMPONENTS_POLICY_POLICY_EXTERNAL_INCLUDE_POLICY_POLICY_TYPES_H_ diff --git a/src/components/policy/policy_regular/include/policy/pt_ext_representation.h b/src/components/policy/policy_regular/include/policy/pt_ext_representation.h index 6b9d0fbada..f70946d1f5 100644 --- a/src/components/policy/policy_regular/include/policy/pt_ext_representation.h +++ b/src/components/policy/policy_regular/include/policy/pt_ext_representation.h @@ -327,6 +327,9 @@ class PTExtRepresentation : public virtual PTRepresentation { virtual bool RemoveAppConsentForGroup( const std::string& policy_app_id, const std::string& functional_group_name) const = 0; + virtual bool SaveExternalConsentStatus( + const ExternalConsentStatus& status) const = 0; + virtual ExternalConsentStatus GetExternalConsentStatus() const = 0; }; } // namespace policy diff --git a/src/components/policy/policy_regular/include/policy/sql_pt_ext_queries.h b/src/components/policy/policy_regular/include/policy/sql_pt_ext_queries.h index 0d13d51ebd..727c0b165d 100644 --- a/src/components/policy/policy_regular/include/policy/sql_pt_ext_queries.h +++ b/src/components/policy/policy_regular/include/policy/sql_pt_ext_queries.h @@ -90,7 +90,7 @@ extern const std::string kSelectUnpairedDevices; extern const std::string kHasMsgLanguageCode; extern const std::string kDeletePreconsentedGroupsByApplicationId; extern const std::string kDeleteAppConsent; - +extern const std::string kSelectExternalConsentStatus; } // namespace sql_pt_ext } // namespace policy diff --git a/src/components/policy/policy_regular/include/policy/sql_pt_ext_representation.h b/src/components/policy/policy_regular/include/policy/sql_pt_ext_representation.h index 1d29687c46..0958bad5e1 100644 --- a/src/components/policy/policy_regular/include/policy/sql_pt_ext_representation.h +++ b/src/components/policy/policy_regular/include/policy/sql_pt_ext_representation.h @@ -129,6 +129,8 @@ class SQLPTExtRepresentation : public SQLPTRepresentation, const std::string& functional_group_name) const; virtual bool SetVINValue(const std::string& value); + bool SaveExternalConsentStatus(const ExternalConsentStatus& status) const; + ExternalConsentStatus GetExternalConsentStatus() const; private: void GatherModuleMeta(policy_table::ModuleMeta* meta) const; @@ -198,7 +200,6 @@ class SQLPTExtRepresentation : public SQLPTRepresentation, */ bool IsMsgLanguagePresent(const std::string& message, const std::string& language); -}; } // namespace policy diff --git a/src/components/policy/policy_regular/include/policy/status.h b/src/components/policy/policy_regular/include/policy/status.h index ee127d3236..074e3c1eef 100644 --- a/src/components/policy/policy_regular/include/policy/status.h +++ b/src/components/policy/policy_regular/include/policy/status.h @@ -133,7 +133,7 @@ class UpToDateStatus : public Status { * @param event Event which needs to be processed */ void ProcessEvent(UpdateStatusManagerInterface* manager, - UpdateEvent event) FINAL; + UpdateEvent event) OVERRIDE; }; /** @@ -153,13 +153,13 @@ class UpdateNeededStatus : public Status { * @param event Event which needs to be processed */ void ProcessEvent(UpdateStatusManagerInterface* manager, - UpdateEvent event) FINAL; + UpdateEvent event) OVERRIDE; /** * @brief Check whether update is required in terms of status * @return True if update is required, otherwise - false */ - bool IsUpdateRequired() const FINAL; + bool IsUpdateRequired() const OVERRIDE; }; /** @@ -179,19 +179,19 @@ class UpdatingStatus : public Status { * @param event Event which needs to be processed */ void ProcessEvent(UpdateStatusManagerInterface* manager, - UpdateEvent event) FINAL; + UpdateEvent event) OVERRIDE; /** * @brief Check whether update is required in terms of status * @return True if update is required, otherwise - false */ - bool IsUpdateRequired() const FINAL; + bool IsUpdateRequired() const OVERRIDE; /** * @brief Check whether update is pending in terms of status * @return True if update is pending, otherwise - false */ - bool IsUpdatePending() const FINAL; + bool IsUpdatePending() const OVERRIDE; }; } diff --git a/src/components/policy/policy_regular/src/cache_manager.cc b/src/components/policy/policy_regular/src/cache_manager.cc index 3d831b886f..6184320306 100644 --- a/src/components/policy/policy_regular/src/cache_manager.cc +++ b/src/components/policy/policy_regular/src/cache_manager.cc @@ -101,6 +101,10 @@ CacheManager::~CacheManager() { threads::DeleteThread(backup_thread_); } +const policy_table::Strings& CacheManager::GetGroups(const PTString& app_id) { + return pt_->policy_table.app_policies_section.apps[app_id].groups; +} + bool CacheManager::CanAppKeepContext(const std::string& app_id) const { CACHE_MANAGER_CHECK(false); bool result = true; @@ -275,6 +279,26 @@ void CacheManager::GetHMIAppTypeAfterUpdate( } } +bool CacheManager::AppHasHMIType(const std::string& application_id, + policy_table::AppHMIType hmi_type) const { + const policy_table::ApplicationPolicies& policies = + pt_->policy_table.app_policies_section.apps; + + policy_table::ApplicationPolicies::const_iterator policy_iter = + policies.find(application_id); + + if (policy_iter == policies.end()) { + return false; + } + + if (policy_iter->second.AppHMIType.is_initialized()) { + return helpers::in_range(*(policy_iter->second.AppHMIType), + rpc::Enum<policy_table::AppHMIType>(hmi_type)); + } + + return false; +} + void CacheManager::Backup() { sync_primitives::AutoLock lock(backuper_locker_); DCHECK(backuper_); @@ -410,25 +434,15 @@ bool CacheManager::IsApplicationRevoked(const std::string& app_id) const { return is_revoked; } -void CacheManager::CheckPermissions(const PTString& app_id, +void CacheManager::CheckPermissions(const policy_table::Strings& groups, const PTString& hmi_level, const PTString& rpc, CheckPermissionResult& result) { LOG4CXX_AUTO_TRACE(logger_); CACHE_MANAGER_CHECK_VOID(); - if (pt_->policy_table.app_policies_section.apps.end() == - pt_->policy_table.app_policies_section.apps.find(app_id)) { - LOG4CXX_ERROR( - logger_, "Application id " << app_id << " was not found in policy DB."); - return; - } - - policy_table::Strings::const_iterator app_groups_iter = - pt_->policy_table.app_policies_section.apps[app_id].groups.begin(); - - policy_table::Strings::const_iterator app_groups_iter_end = - pt_->policy_table.app_policies_section.apps[app_id].groups.end(); + policy_table::Strings::const_iterator app_groups_iter = groups.begin(); + policy_table::Strings::const_iterator app_groups_iter_end = groups.end(); policy_table::FunctionalGroupings::const_iterator concrete_group; diff --git a/src/components/policy/policy_regular/src/policy_manager_impl.cc b/src/components/policy/policy_regular/src/policy_manager_impl.cc index 563dfbb168..ac64118e28 100644 --- a/src/components/policy/policy_regular/src/policy_manager_impl.cc +++ b/src/components/policy/policy_regular/src/policy_manager_impl.cc @@ -353,16 +353,34 @@ const VehicleInfo PolicyManagerImpl::GetVehicleInfo() const { return cache_->GetVehicleInfo(); } -void PolicyManagerImpl::CheckPermissions(const PTString& app_id, +void PolicyManagerImpl::CheckPermissions(const PTString& device_id, + const PTString& app_id, const PTString& hmi_level, const PTString& rpc, const RPCParams& rpc_params, CheckPermissionResult& result) { + LOG4CXX_AUTO_TRACE(logger_); + + if (!cache_->IsApplicationRepresented(app_id)) { + LOG4CXX_WARN(logger_, "Application " << app_id << " isn't exist"); + return; + } + LOG4CXX_INFO(logger_, "CheckPermissions for " << app_id << " and rpc " << rpc << " for " << hmi_level << " level."); - cache_->CheckPermissions(app_id, hmi_level, rpc, result); + const policy_table::Strings& groups = cache_->GetGroups(app_id); + cache_->CheckPermissions(groups, hmi_level, rpc, result); + if (cache_->IsApplicationRevoked(app_id)) { + // SDL must be able to notify mobile side with its status after app has + // been revoked by backend + if ("OnHMIStatus" == rpc && "NONE" == hmi_level) { + result.hmi_level_permitted = kRpcAllowed; + } else { + result.hmi_level_permitted = kRpcDisallowed; + } + } } bool PolicyManagerImpl::ResetUserConsent() { @@ -946,8 +964,13 @@ AppIdURL PolicyManagerImpl::RetrySequenceUrl(const struct RetrySequenceURL& rs, app_idx = 0; } } + const AppIdURL next_app_url = std::make_pair(app_idx, url_idx); - return std::make_pair(app_idx, url_idx); + return next_app_url; +} + +bool PolicyManagerImpl::HasCertificate() const { + return !cache_->GetCertificate().empty(); } class CallStatusChange : public utils::Callable { @@ -967,23 +990,28 @@ class CallStatusChange : public utils::Callable { }; StatusNotifier PolicyManagerImpl::AddApplication( - const std::string& application_id) { + const std::string& application_id, + const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) { LOG4CXX_AUTO_TRACE(logger_); const std::string device_id = GetCurrentDeviceId(application_id); DeviceConsent device_consent = GetUserConsentForDevice(device_id); sync_primitives::AutoLock lock(apps_registration_lock_); - if (IsNewApplication(application_id)) { AddNewApplication(application_id, device_consent); return utils::MakeShared<CallStatusChange>(update_status_manager_, device_consent); } else { PromoteExistedApplication(application_id, device_consent); - return utils::MakeShared<CallStatusChange>(update_status_manager_, - device_consent); + const policy_table::AppHMIType type = policy_table::AHT_NAVIGATION; + if (helpers::in_range(hmi_types, + (rpc::Enum<policy_table::AppHMIType>)type) && + !HasCertificate()) { + LOG4CXX_DEBUG(logger_, "Certificate does not exist, scheduling update."); + update_status_manager_.ScheduleUpdate(); + } + return utils::MakeShared<utils::CallNothing>(); } } - void PolicyManagerImpl::RemoveAppConsentForGroup( const std::string& app_id, const std::string& group_name) { cache_->RemoveAppConsentForGroup(app_id, group_name); diff --git a/src/components/policy/policy_regular/src/policy_table/types.cc b/src/components/policy/policy_regular/src/policy_table/types.cc index 7928973919..23813d0488 100644 --- a/src/components/policy/policy_regular/src/policy_table/types.cc +++ b/src/components/policy/policy_regular/src/policy_table/types.cc @@ -172,7 +172,7 @@ Json::Value ApplicationParams::ToJsonValue() const { Json::Value result__(PolicyBase::ToJsonValue()); impl::WriteJsonField("groups", groups, &result__); impl::WriteJsonField("nicknames", nicknames, &result__); - impl::WriteJsonField("AppHMIType", AppHMIType, &result__); + impl::WriteJsonField("AppHmiType", AppHMIType, &result__); impl::WriteJsonField("RequestType", RequestType, &result__); impl::WriteJsonField("memory_kb", memory_kb, &result__); impl::WriteJsonField( diff --git a/src/components/policy/policy_regular/test/include/policy/mock_cache_manager.h b/src/components/policy/policy_regular/test/include/policy/mock_cache_manager.h index faabfe56be..7569e2195d 100644 --- a/src/components/policy/policy_regular/test/include/policy/mock_cache_manager.h +++ b/src/components/policy/policy_regular/test/include/policy/mock_cache_manager.h @@ -48,7 +48,7 @@ using namespace ::policy; class MockCacheManagerInterface : public CacheManagerInterface { public: MOCK_METHOD4(CheckPermissions, - void(const PTString& app_id, + void(const policy_table::Strings& groups, const PTString& hmi_level, const PTString& rpc, CheckPermissionResult& result)); @@ -205,6 +205,10 @@ class MockCacheManagerInterface : public CacheManagerInterface { MOCK_CONST_METHOD0(GetPT, utils::SharedPtr<policy_table::Table>()); MOCK_CONST_METHOD0(GetCertificate, std::string()); MOCK_METHOD1(SetDecryptedCertificate, void(const std::string&)); + MOCK_METHOD1(GetGroups, const policy_table::Strings&(const PTString& app_id)); + MOCK_CONST_METHOD2(AppHasHMIType, + bool(const std::string& application_id, + policy_table::AppHMIType hmi_type)); }; } // namespace policy_test diff --git a/src/components/policy/policy_regular/test/include/policy/mock_policy_manager.h b/src/components/policy/policy_regular/test/include/policy/mock_policy_manager.h index ff54807ef2..7ab4b518cd 100644 --- a/src/components/policy/policy_regular/test/include/policy/mock_policy_manager.h +++ b/src/components/policy/policy_regular/test/include/policy/mock_policy_manager.h @@ -65,8 +65,10 @@ class MockPolicyManager : public PolicyManager { void(const std::string& service_type, EndpointUrls& out_end_points)); MOCK_METHOD0(RequestPTUpdate, bool()); - MOCK_METHOD5(CheckPermissions, - void(const PTString& app_id, + + MOCK_METHOD6(CheckPermissions, + void(const PTString& device_id, + const PTString& app_id, const PTString& hmi_level, const PTString& rpc, const RPCParams& rpc_params, diff --git a/src/components/policy/policy_regular/test/policy_manager_impl_test.cc b/src/components/policy/policy_regular/test/policy_manager_impl_test.cc index e6d246b748..96df685695 100644 --- a/src/components/policy/policy_regular/test/policy_manager_impl_test.cc +++ b/src/components/policy/policy_regular/test/policy_manager_impl_test.cc @@ -129,6 +129,12 @@ struct StringsForUpdate CreateNewRandomData(StringsForUpdate& str) { return str; } +policy_table::AppHmiTypes HmiTypes(const policy_table::AppHMIType hmi_type) { + policy_table::AppHmiTypes hmi_types; + hmi_types.push_back(hmi_type); + return hmi_types; +} + class PolicyManagerImplTest : public ::testing::Test { public: PolicyManagerImplTest() : device_id("08-00-27-CE-76-FE") {} @@ -260,7 +266,7 @@ class PolicyManagerImplTest2 : public ::testing::Test { // Arrange CreateLocalPT("sdl_preloaded_pt.json"); // Add app - manager->AddApplication(section_name); + manager->AddApplication(section_name, HmiTypes(policy_table::AHT_DEFAULT)); // Check app gets RequestTypes from pre_DataConsent of app_policies // section PT_request_types = manager->GetAppRequestTypes(section_name); @@ -525,7 +531,7 @@ TEST_F(PolicyManagerImplTest2, .WillRepeatedly(Return(dev_id1)); manager->SetUserConsentForDevice(dev_id1, true); // Add app from consented device. App will be assigned with default policies - manager->AddApplication(app_id1); + manager->AddApplication(app_id1, HmiTypes(policy_table::AHT_DEFAULT)); // Check before action policy_table::RpcParameters rpc_parameters; rpc_parameters.hmi_levels.push_back(policy_table::HL_FULL); @@ -537,7 +543,7 @@ TEST_F(PolicyManagerImplTest2, ::policy::CheckPermissionResult output; manager->CheckPermissions( - app_id1, std::string("FULL"), "Alert", input_params, output); + dev_id1, app_id1, std::string("FULL"), "Alert", input_params, output); // Check RPC is allowed EXPECT_EQ(::policy::kRpcAllowed, output.hmi_level_permitted); @@ -557,7 +563,7 @@ TEST_F(PolicyManagerImplTest2, ASSERT_TRUE(manager->LoadPT("file_pt_update.json", msg)); manager->CheckPermissions( - app_id1, std::string("FULL"), "Alert", input_params, output); + dev_id1, app_id1, std::string("FULL"), "Alert", input_params, output); // Check RPC is disallowed EXPECT_EQ(::policy::kRpcAllowed, output.hmi_level_permitted); ASSERT_TRUE(output.list_of_allowed_params.empty()); @@ -582,7 +588,7 @@ TEST_F(PolicyManagerImplTest2, .WillRepeatedly(Return(dev_id1)); manager->SetUserConsentForDevice(dev_id1, true); // Add app from consented device. App will be assigned with default policies - manager->AddApplication("1234"); + manager->AddApplication("1234", HmiTypes(policy_table::AHT_MEDIA)); // Emulate PTU with new policies for app added above std::ifstream ifile("sdl_preloaded_pt.json"); Json::Reader reader; @@ -639,8 +645,12 @@ TEST_F(PolicyManagerImplTest2, "Life", 2, "Bluetooth"); - manager->CheckPermissions( - std::string("1234"), std::string("FULL"), "Alert", input_params, output); + manager->CheckPermissions(dev_id1, + std::string("1234"), + std::string("FULL"), + "Alert", + input_params, + output); // Check RPC is allowed EXPECT_EQ(::policy::kRpcAllowed, output.hmi_level_permitted); // Check list of parameters empty @@ -765,7 +775,8 @@ TEST_F( AddApplication_AddNewApplicationFromDeviceWithoutConsent_ExpectUpdateRequired) { // Arrange CreateLocalPT("sdl_preloaded_pt.json"); - ::policy::StatusNotifier notifyer = manager->AddApplication(app_id1); + ::policy::StatusNotifier notifyer = + manager->AddApplication(app_id1, HmiTypes(policy_table::AHT_DEFAULT)); DCHECK(notifyer); (*notifyer)(); EXPECT_EQ("UPDATE_NEEDED", manager->GetPolicyTableStatus()); @@ -777,7 +788,7 @@ TEST_F( // Arrange // RequestTypes for default & preDataConsent are different CreateLocalPT("ptu_requestType.json"); - manager->AddApplication(app_id1); + manager->AddApplication(app_id1, HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_FALSE(manager->IsPredataPolicy(app_id1)); manager->ReactOnUserDevConsentForApp(app_id1, true); EXPECT_FALSE(manager->IsPredataPolicy(app_id1)); @@ -790,7 +801,7 @@ TEST_F( // Arrange // RequestTypes for default & preDataConsent are the same CreateLocalPT("ptu2_requestType.json"); - manager->AddApplication(app_id1); + manager->AddApplication(app_id1, HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_FALSE(manager->IsPredataPolicy(app_id1)); EXPECT_CALL(listener, OnPendingPermissionChange(app_id1)).Times(0); manager->ReactOnUserDevConsentForApp(app_id1, true); @@ -807,7 +818,7 @@ TEST_F( GetPTU("valid_sdl_pt_update.json"); EXPECT_EQ("UP_TO_DATE", manager->GetPolicyTableStatus()); // Try to add existing app - manager->AddApplication(app_id2); + manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT)); // Check no update required EXPECT_EQ("UP_TO_DATE", manager->GetPolicyTableStatus()); } @@ -824,7 +835,7 @@ TEST_F(PolicyManagerImplTest2, GetPTU("valid_sdl_pt_update.json"); EXPECT_EQ("UP_TO_DATE", manager->GetPolicyTableStatus()); - manager->AddApplication(app_id2); + manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_EQ("UP_TO_DATE", manager->GetPolicyTableStatus()); ::policy::Counters counter = ::policy::Counters::DAYS_AFTER_EPOCH; // Set PT was updated 10 days ago (limit is 30 days for now) @@ -1036,7 +1047,7 @@ TEST_F(PolicyManagerImplTest2, DISABLED_GetDefaultHmi_SetDeviceAllowed_ExpectReceivedHmiCorrect) { // Arrange CreateLocalPT("ptu2_requestType.json"); - manager->AddApplication(app_id2); + manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT)); // Check if app has preData policy EXPECT_FALSE(manager->IsPredataPolicy(app_id2)); std::string default_hmi1; @@ -1058,7 +1069,7 @@ TEST_F(PolicyManagerImplTest2, EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent); EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(app_id2)) .WillRepeatedly(Return(dev_id2)); - manager->AddApplication(app_id2); + manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_TRUE((manager->GetCache())->IsDefaultPolicy(app_id2)); std::string default_hmi2; manager->GetDefaultHmi(app_id2, &default_hmi2); @@ -1069,7 +1080,7 @@ TEST_F(PolicyManagerImplTest2, GetDefaultPriority_SetDeviceAllowed_ExpectReceivedPriorityCorrect) { // Arrange CreateLocalPT("ptu2_requestType.json"); - manager->AddApplication(app_id2); + manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT)); // Check if app has preData policy EXPECT_FALSE(manager->IsPredataPolicy(app_id2)); std::string priority1; @@ -1091,7 +1102,7 @@ TEST_F(PolicyManagerImplTest2, EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent); EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(app_id2)) .WillRepeatedly(Return(dev_id2)); - manager->AddApplication(app_id2); + manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_TRUE((manager->GetCache())->IsDefaultPolicy(app_id2)); std::string priority2; EXPECT_TRUE(manager->GetPriority(app_id2, &priority2)); @@ -1101,11 +1112,11 @@ TEST_F(PolicyManagerImplTest2, TEST_F(PolicyManagerImplTest2, GetInitialAppData_ExpectReceivedConsentCorrect) { // Arrange CreateLocalPT("sdl_preloaded_pt.json"); - manager->AddApplication(app_id2); + manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT)); ::policy::StringArray app_nicknames; ::policy::StringArray app_hmi_types; manager->GetInitialAppData(app_id2, &app_nicknames, &app_hmi_types); - // Expect Empty nicknames and AppHMITypes + // Expect Empty nicknames and AppHmiTypes EXPECT_EQ(0u, app_nicknames.size()); EXPECT_EQ(0u, app_hmi_types.size()); @@ -1132,7 +1143,7 @@ TEST_F(PolicyManagerImplTest2, GetInitialAppData_ExpectReceivedConsentCorrect) { for (uint32_t i = 0; i < nick_names_size; ++i) { EXPECT_EQ(app_nicknames1[i], appNicknames[i].asString()); } - // Check AppHMITypes match + // Check AppHmiTypes match for (uint32_t i = 0; i < app_hmi_types_size; ++i) { EXPECT_EQ(app_hmi_types1[i], appHmiTypes[i].asString()); } @@ -1143,7 +1154,7 @@ TEST_F( CanAppKeepContext_AddAppFromUnconsentedDevice_ExpectAppCannotKeepContext) { // Arrange CreateLocalPT("sdl_preloaded_pt.json"); - manager->AddApplication(app_id2); + manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT)); // Check if app has preData policy EXPECT_FALSE(manager->IsPredataPolicy(app_id2)); // Check keep context in preData policy @@ -1155,7 +1166,7 @@ TEST_F(PolicyManagerImplTest2, // Arrange CreateLocalPT("sdl_preloaded_pt.json"); ASSERT_TRUE((manager->GetCache())->AddDevice(dev_id2, "Bluetooth")); - manager->AddApplication(app_id2); + manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT)); ASSERT_TRUE((manager->GetCache()) ->SetDeviceData(dev_id2, "hardware IPX", @@ -1170,7 +1181,7 @@ TEST_F(PolicyManagerImplTest2, EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent); EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(app_id2)) .WillRepeatedly(Return(dev_id2)); - manager->AddApplication(app_id2); + manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_TRUE((manager->GetCache())->IsDefaultPolicy(app_id2)); // Check keep context in default policy EXPECT_TRUE(manager->CanAppKeepContext(app_id2)); @@ -1180,7 +1191,7 @@ TEST_F(PolicyManagerImplTest2, CanAppKeepContext_SetPoliciesForAppUpdated_ExpectAppCanKeepContext) { // Arrange CreateLocalPT("sdl_preloaded_pt.json"); - manager->AddApplication(app_id2); + manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT)); GetPTU("valid_sdl_pt_update.json"); // Check keep context in updated policies for app EXPECT_TRUE(manager->CanAppKeepContext(app_id2)); @@ -1191,7 +1202,7 @@ TEST_F(PolicyManagerImplTest2, // Arrange CreateLocalPT("sdl_preloaded_pt.json"); ASSERT_TRUE((manager->GetCache())->AddDevice(dev_id2, "Bluetooth")); - manager->AddApplication(app_id2); + manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT)); ASSERT_TRUE((manager->GetCache()) ->SetDeviceData(dev_id2, "hardware IPX", @@ -1206,7 +1217,7 @@ TEST_F(PolicyManagerImplTest2, EXPECT_EQ(::policy::DeviceConsent::kDeviceAllowed, consent); EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(app_id2)) .WillRepeatedly(Return(dev_id2)); - manager->AddApplication(app_id2); + manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT)); EXPECT_TRUE((manager->GetCache())->IsDefaultPolicy(app_id2)); // Check keep context in default policy EXPECT_TRUE(manager->CanAppStealFocus(app_id2)); @@ -1216,7 +1227,7 @@ TEST_F(PolicyManagerImplTest2, CanAppStealFocus_SetPoliciesForAppUpdated_ExpectAppCanStealFocus) { // Arrange CreateLocalPT("sdl_preloaded_pt.json"); - manager->AddApplication(app_id2); + manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT)); GetPTU("valid_sdl_pt_update.json"); // Check keep context in updated policies for app EXPECT_TRUE(manager->CanAppKeepContext(app_id2)); @@ -1272,7 +1283,7 @@ TEST_F( manager->SetUserConsentForDevice(dev_id2, true); EXPECT_CALL(listener, OnCurrentDeviceIdUpdateRequired(app_id2)) .WillRepeatedly(Return(dev_id2)); - manager->AddApplication(app_id2); + manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT)); GetPTU("valid_sdl_pt_update.json"); ::policy::PermissionConsent perm_consent; @@ -1326,7 +1337,7 @@ TEST_F( pt->ReportErrors(&report); } // Add new app - manager->AddApplication(app_id2); + manager->AddApplication(app_id2, HmiTypes(policy_table::AHT_DEFAULT)); uint32_t result = manager->HeartBeatTimeout(app_id2); // By default hertbeat timeout is 0 EXPECT_EQ(0u, result); diff --git a/src/components/telemetry_monitor/CMakeLists.txt b/src/components/telemetry_monitor/CMakeLists.txt index 69b8371929..bb33857ecd 100644 --- a/src/components/telemetry_monitor/CMakeLists.txt +++ b/src/components/telemetry_monitor/CMakeLists.txt @@ -41,6 +41,7 @@ include_directories ( ${COMPONENTS_DIR}/application_manager/include/ ${POLICY_PATH}/include/ ${POLICY_GLOBAL_INCLUDE_PATH}/ + ${COMPONENTS_DIR}/rpc_base/include/ ${COMPONENTS_DIR}/hmi_message_handler/include/ ${COMPONENTS_DIR}/formatters/include/ ${COMPONENTS_DIR}/media_manager/include/ diff --git a/tools/infrastructure/fix_style.sh b/tools/infrastructure/fix_style.sh deleted file mode 100755 index 2713aaf1de..0000000000 --- a/tools/infrastructure/fix_style.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env bash - -#Copyright(c)2016 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 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. - -ALL_FILES=$(find src -name \*.h -print -o -name \*.cpp -print -o -name \*.cc -print | grep -v 3rd_party) -CHANGED_FILES=$(git ls-files -m --exclude-standard --others | grep -e "\.cc$" -e "\.cpp$" -e "\.c$" -e "\.h$" -e "\.hpp$") - -fix_style() { - clang-format-3.6 -style=file -i $1 -} - -if [ "$1" = "--fix_all" ] -then - for FILE_NAME in $ALL_FILES; do fix_style $ALL_FILES; done -else - echo "Checked files: " - echo "=======================================================================" - printf '%s\n' "${CHANGED_FILES[@]}" - for FILE_NAME in $CHANGED_FILES; do fix_style $CHANGED_FILES; done -fi |