summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrey Oleynik <aoleynik@luxoft.com>2016-11-11 15:59:15 +0200
committerokozlovlux <okozlov@luxoft.com>2017-05-17 19:27:10 +0300
commit8aadc5d6d51b49c381fb89fd4b1fbfebec732cc3 (patch)
treefb1b6598d32075f9fe040c09d586465fa6b8e6a9 /src
parentf175409c5e370b6c5c8b67ec72214990a9268673 (diff)
downloadsdl_core-8aadc5d6d51b49c381fb89fd4b1fbfebec732cc3.tar.gz
Adds draft business logic for 'CCS ON' case and unit test
Diffstat (limited to 'src')
-rw-r--r--src/components/application_manager/include/application_manager/policies/policy_handler.h70
-rw-r--r--src/components/application_manager/include/application_manager/smart_object_keys.h22
-rw-r--r--src/components/application_manager/src/commands/hmi/on_app_permission_consent_notification.cc84
-rw-r--r--src/components/application_manager/src/message_helper/message_helper.cc85
-rw-r--r--src/components/application_manager/src/policies/delegates/app_permission_delegate.cc3
-rw-r--r--src/components/application_manager/src/policies/policy_handler.cc142
-rw-r--r--src/components/application_manager/src/smart_object_keys.cc16
-rw-r--r--src/components/application_manager/test/commands/hmi/hmi_notifications/hmi_notifications_test.cc1840
-rw-r--r--src/components/application_manager/test/message_helper/message_helper_test.cc1253
-rw-r--r--src/components/include/application_manager/policies/policy_handler_interface.h27
-rw-r--r--src/components/include/policy/policy_external/policy/policy_listener.h35
-rw-r--r--src/components/include/test/application_manager/policies/mock_policy_handler_interface.h7
-rw-r--r--src/components/include/test/policy/policy_external/policy/mock_policy_listener.h10
-rw-r--r--src/components/policy/policy_external/include/policy/policy_helper.h100
-rw-r--r--src/components/policy/policy_external/include/policy/policy_manager_impl.h118
-rw-r--r--src/components/policy/policy_external/include/policy/policy_types.h1
-rw-r--r--src/components/policy/policy_external/src/cache_manager.cc3
-rw-r--r--src/components/policy/policy_external/src/policy_helper.cc60
-rw-r--r--src/components/policy/policy_external/src/policy_manager_impl.cc425
-rw-r--r--src/components/policy/policy_external/src/policy_table/types.cc3
-rw-r--r--src/components/policy/policy_external/src/sql_pt_ext_representation.cc36
-rw-r--r--src/components/policy/policy_external/test/generated_code_test.cc90
-rw-r--r--src/components/policy/policy_external/test/include/policy/policy_manager_impl_test_base.h60
-rw-r--r--src/components/policy/policy_external/test/policy_manager_impl_ptu_test.cc119
-rw-r--r--src/components/policy/policy_external/test/policy_manager_impl_snapshot_test.cc14
-rw-r--r--src/components/policy/policy_external/test/policy_manager_impl_test.cc742
-rw-r--r--src/components/policy/policy_external/test/policy_manager_impl_test_base.cc171
-rw-r--r--src/components/policy/policy_external/test/sql_pt_ext_representation_test.cc233
28 files changed, 4435 insertions, 1334 deletions
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 f4b86ede7b..01b10b1c63 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
@@ -199,8 +199,19 @@ class PolicyHandler : public PolicyHandlerInterface,
* 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
+ */
void OnAppPermissionConsent(const uint32_t connection_key,
- const PermissionConsent& permissions) OVERRIDE;
+ const PermissionConsent& permissions,
+ const CCSStatus& ccs_status) FINAL;
/**
* @brief Get appropriate message parameters and send them with response
@@ -244,6 +255,13 @@ 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
*/
@@ -460,14 +478,19 @@ class PolicyHandler : public PolicyHandlerInterface,
bool CheckStealFocus(const std::string& policy_app_id) const;
/**
- * @brief OnAppPermissionConsentInternal reacts on permission changing
- *
- * @param connection_key connection key
- *
- * @param permissions new permissions.
+ * @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,
- PermissionConsent& permissions) OVERRIDE;
+ const CCSStatus& ccs_status,
+ PermissionConsent& out_permissions) FINAL;
/**
* @brief Sets days after epoch on successful policy update
@@ -545,6 +568,32 @@ class PolicyHandler : public PolicyHandlerInterface,
void GetRegisteredLinks(std::map<std::string, std::string>& out_links) const;
static const std::string kLibrary;
+
+ /**
+ * @brief Collects permissions for all currently registered applications on
+ * all devices
+ * @return consolidated permissions list or empty list if no
+ * applications/devices currently present
+ */
+ std::vector<FunctionalGroupPermission> CollectRegisteredAppsPermissions();
+
+ /**
+ * @brief Collects permissions for application with certain connection key
+ * @param connection_key Connection key of application to look for
+ * @return list of application permissions or empty list if no such
+ * application found
+ */
+ std::vector<FunctionalGroupPermission> CollectAppPermissions(
+ const uint32_t connection_key);
+
+ /**
+ * @brief Collects currently registered applications ids linked to their
+ * device id
+ * @param out_links Collection of device_id-to-app_id links
+ */
+ void GetRegisteredLinks(ApplicationsLinks& out_links) const;
+
+ private:
mutable sync_primitives::RWLock policy_manager_lock_;
utils::SharedPtr<PolicyManager> policy_manager_;
void* dl_handle_;
@@ -564,10 +613,11 @@ class PolicyHandler : public PolicyHandlerInterface,
mutable sync_primitives::Lock listeners_lock_;
/**
- * @brief Application-to-device map is used for getting/setting user consents
- * for all apps
+ * @brief Application-to-device links are used for collecting their current
+ * consents to provide for HMI request and process response with possible
+ * changes done by user
*/
- std::map<std::string, std::string> app_to_device_link_;
+ ApplicationsLinks 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 e751f164d3..7ea3a7a20e 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
@@ -310,6 +310,28 @@ extern const char* is_suscribed;
extern const char* message_data;
extern const char* delivery_mode;
+
+extern const char* audio_streaming_indicator;
+
+// keys for default parameters loaded from hmi_capabilities.json:
+extern const char* const keyboard_properties_default;
+extern const char* const language_default;
+extern const char* const keyboard_layout_default;
+extern const char* const keypress_mode_default;
+
+// keys for supported parameters loaded from hmi_capabilities.json:
+extern const char* const keyboard_properties_supported;
+extern const char* const language_supported;
+extern const char* const keyboard_layout_supported;
+extern const char* const keypress_mode_supported;
+extern const char* const limited_characters_list_supported;
+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 consented_functions;
+extern const char* const source;
} // namespace strings
namespace json {
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 0efc1aee8a..2219d508ff 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
@@ -35,6 +35,74 @@
#include "application_manager/application_manager.h"
#include "application_manager/policies/policy_handler.h"
#include "application_manager/message_helper.h"
+#include <algorithm>
+#include <functional>
+#include <string>
+#include "policy/policy_types.h"
+#include "smart_objects/smart_object.h"
+
+namespace {
+
+/**
+ * @brief Converts SmartObject data to group permission status and appends to
+ * collection
+ */
+struct PermissionsAppender
+ : public std::unary_function<void,
+ const smart_objects::SmartArray::value_type&> {
+ PermissionsAppender(policy::PermissionConsent& consents)
+ : allowed_key_(application_manager::hmi_response::allowed)
+ , consents_(consents) {}
+ void operator()(const smart_objects::SmartArray::value_type& item) const {
+ using namespace policy;
+ using namespace application_manager;
+
+ FunctionalGroupPermission permissions;
+
+ permissions.group_id = static_cast<int32_t>(item[strings::id].asInt());
+ permissions.group_alias = item[strings::name].asString();
+
+ if (item.keyExists(allowed_key_)) {
+ permissions.state =
+ item[allowed_key_].asBool() ? kGroupAllowed : kGroupDisallowed;
+ }
+
+ consents_.group_permissions.push_back(permissions);
+ }
+
+ private:
+ const std::string allowed_key_;
+ policy::PermissionConsent& consents_;
+};
+
+/**
+ * @brief Converts SmartObject data to customer connectivity status item and
+ * appends to collection
+ */
+struct CCSStatusAppender
+ : std::unary_function<void, const smart_objects::SmartArray::value_type&> {
+ CCSStatusAppender(policy::CCSStatus& ccs_status) : ccs_status_(ccs_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(
+ static_cast<uint32_t>(item[strings::entity_type].asUInt()),
+ static_cast<uint32_t>(item[strings::entity_id].asUInt()),
+ static_cast<Common_EntityStatus::eType>(
+ item[strings::status].asUInt()) == Common_EntityStatus::ON
+ ? policy::kStatusOn
+ : policy::kStatusOff);
+
+ ccs_status_.insert(status_item);
+ }
+
+ private:
+ policy::CCSStatus& ccs_status_;
+};
+
+} // namespace
namespace application_manager {
@@ -54,10 +122,10 @@ void OnAppPermissionConsentNotification::Run() {
policy::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();
- }
+ PermissionConsent permission_consent;
+ if (msg_params.keyExists(strings::consented_functions)) {
+ const SmartArray* user_consents =
+ msg_params[strings::consented_functions].asArray();
if (msg_params.keyExists("consentedFunctions")) {
smart_objects::SmartArray* user_consent =
@@ -80,7 +148,13 @@ void OnAppPermissionConsentNotification::Run() {
permission_consent.group_permissions.push_back(permissions);
}
- permission_consent.consent_source = msg_params["source"].asString();
+ 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);
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 c0567b75f0..45d2de46a1 100644
--- a/src/components/application_manager/src/message_helper/message_helper.cc
+++ b/src/components/application_manager/src/message_helper/message_helper.cc
@@ -96,8 +96,91 @@ bool ValidateSoftButtons(smart_objects::SmartObject& soft_buttons) {
}
}
return true;
-} // namespace
}
+
+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_;
+};
+
+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,
+ const policy::ExternalConsentStatus::value_type&> {
+ ExternalConsentStatusAppender(smart_objects::SmartObject& status)
+ : status_(status), index_(0) {}
+
+ void operator()(const policy::ExternalConsentStatus::value_type& item) {
+ using namespace smart_objects;
+ using namespace policy;
+ using namespace hmi_apis;
+ 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())
+ ? static_cast<int32_t>(Common_EntityStatus::ON)
+ : static_cast<int32_t>(Common_EntityStatus::OFF);
+ ++index_;
+ }
+
+ private:
+ smart_objects::SmartObject& status_;
+ int32_t index_;
+};
+#endif // EXTERNAL_PROPRIETARY_MODE
+
+} // namespace
+
std::pair<std::string, VehicleDataType> kVehicleDataInitializer[] = {
std::make_pair(strings::gps, VehicleDataType::GPS),
std::make_pair(strings::speed, VehicleDataType::SPEED),
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 7b5954a3c3..5ec184e563 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
@@ -46,7 +46,8 @@ AppPermissionDelegate::AppPermissionDelegate(
void AppPermissionDelegate::threadMain() {
LOG4CXX_AUTO_TRACE(logger_);
- policy_handler_.OnAppPermissionConsentInternal(connection_key_, permissions_);
+ policy_handler_.OnAppPermissionConsentInternal(
+ connection_key_, ccs_status_, permissions_);
}
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 a36df1f296..6c12edfbf4 100644
--- a/src/components/application_manager/src/policies/policy_handler.cc
+++ b/src/components/application_manager/src/policies/policy_handler.cc
@@ -35,6 +35,7 @@
#include <algorithm>
#include <vector>
#include <functional>
+#include <utility>
#include "application_manager/smart_object_keys.h"
#include "application_manager/policies/delegates/app_permission_delegate.h"
@@ -204,13 +205,16 @@ struct SDLAllowedNotification {
StateController& state_controller_;
};
-struct LinkAppToDevice {
- explicit LinkAppToDevice(
- std::map<std::string, std::string>& app_to_device_link,
- const ApplicationManager& application_manager)
- : app_to_device_link_(app_to_device_link)
- , application_manager_(application_manager) {
- app_to_device_link_.clear();
+/**
+ * @brief Gets from system list of currently registered applications and
+ * create collection of links device-to-application
+ */
+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) {
@@ -229,12 +233,13 @@ struct LinkAppToDevice {
"Couldn't find device, which hosts application " << app_id);
return;
}
- app_to_device_link_[app_id] = device_params.device_mac_address;
+ out_app_to_device_link_.insert(
+ std::make_pair(device_params.device_mac_address, app_id));
}
private:
- std::map<std::string, std::string>& app_to_device_link_;
const ApplicationManager& application_manager_;
+ ApplicationsLinks& out_app_to_device_link_;
};
/**
@@ -548,68 +553,67 @@ void PolicyHandler::SetDeviceInfo(const std::string& device_id,
}
void PolicyHandler::OnAppPermissionConsentInternal(
- const uint32_t connection_key, PermissionConsent& permissions) {
+ const uint32_t connection_key,
+ const CCSStatus& ccs_status,
+ PermissionConsent& out_permissions) {
LOG4CXX_AUTO_TRACE(logger_);
POLICY_LIB_CHECK_VOID();
+
if (connection_key) {
ApplicationSharedPtr app = application_manager_.application(connection_key);
if (app.valid()) {
- permissions.policy_app_id = app->policy_app_id();
+ out_permissions.policy_app_id = app->policy_app_id();
DeviceParams device_params = GetDeviceParams(
app->device(),
application_manager_.connection_handler().get_session_observer());
- permissions.device_id = device_params.device_mac_address;
+ out_permissions.device_id = device_params.device_mac_address;
}
- if (!permissions.policy_app_id.empty()) {
- policy_manager_->SetUserConsentForApp(permissions);
+ 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_);
+ ApplicationsLinks::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;
+ }
- return;
- }
+ DeviceParams device_params = GetDeviceParams(
+ app->device(),
+ application_manager_.connection_handler().get_session_observer());
- LinkAppsToDevice();
+ if (device_params.device_mac_address != it->first) {
+ LOG4CXX_WARN(logger_,
+ "Device_id of application is changed."
+ "Permissions setting skipped.");
+ continue;
+ }
- if (!app_to_device_link_.size()) {
+ 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.");
- return;
}
- std::map<std::string, std::string>::const_iterator it =
- app_to_device_link_.begin();
- std::map<std::string, std::string>::const_iterator it_end =
- app_to_device_link_.end();
- for (; it != it_end; ++it) {
- ApplicationSharedPtr app =
- application_manager_.application_by_policy_id(it->first);
-
- // 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;
- }
-
- DeviceParams device_params = GetDeviceParams(
- app->device(),
- application_manager_.connection_handler().get_session_observer());
-
- if (device_params.device_mac_address != it->second) {
- LOG4CXX_WARN(logger_,
- "Device_id of application is changed."
- "Permissions setting skipped.");
- continue;
- }
-
- permissions.policy_app_id = it->first;
- permissions.device_id = it->second;
- policy_manager_->SetUserConsentForApp(permissions);
+ if (!policy_manager_->SetCCSStatus(ccs_status)) {
+ LOG4CXX_WARN(logger_, "CCS status has not been set!");
}
}
@@ -651,8 +655,7 @@ void PolicyHandler::OnGetUserFriendlyMessage(
result, correlation_id, application_manager_);
}
-void PolicyHandler::GetRegisteredLinks(
- std::map<std::string, std::string>& out_links) const {
+void PolicyHandler::GetRegisteredLinks(ApplicationsLinks& out_links) const {
DataAccessor<ApplicationSet> accessor = application_manager_.applications();
ApplicationSetConstIt it_app = accessor.GetData().begin();
ApplicationSetConstIt it_app_end = accessor.GetData().end();
@@ -661,30 +664,23 @@ void PolicyHandler::GetRegisteredLinks(
std::for_each(it_app, it_app_end, linker);
}
-void PolicyHandler::OnGetListOfPermissions(const uint32_t connection_key,
- const uint32_t correlation_id) {
+std::vector<policy::FunctionalGroupPermission>
+PolicyHandler::CollectRegisteredAppsPermissions() {
LOG4CXX_AUTO_TRACE(logger_);
POLICY_LIB_CHECK_VOID();
// If no specific app was passed, get permissions for all currently registered
// applications
- if (!connection_key) {
- LinkAppsToDevice();
- PermissionsConsolidator consolidator;
- std::vector<policy::FunctionalGroupPermission> group_permissions;
- 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->second, it->first, group_permissions);
- consolidator.Consolidate(group_permissions);
- }
+ sync_primitives::AutoLock lock(app_to_device_link_lock_);
- MessageHelper::SendGetListOfPermissionsResponse(
- consolidator.GetConsolidatedPermissions(),
- correlation_id,
- application_manager_);
+ GetRegisteredLinks(app_to_device_link_);
- return;
+ PermissionsConsolidator consolidator;
+ std::vector<policy::FunctionalGroupPermission> group_permissions;
+ ApplicationsLinks::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);
}
// Single app only
@@ -825,6 +821,12 @@ 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();
diff --git a/src/components/application_manager/src/smart_object_keys.cc b/src/components/application_manager/src/smart_object_keys.cc
index a470bba4dc..9ab79791a5 100644
--- a/src/components/application_manager/src/smart_object_keys.cc
+++ b/src/components/application_manager/src/smart_object_keys.cc
@@ -277,6 +277,22 @@ const char* is_suscribed = "isSubscribed";
const char* message_data = "messageData";
const char* delivery_mode = "deliveryMode";
+
+const char* audio_streaming_indicator = "audioStreamingIndicator";
+
+const char* const keyboard_properties_supported = "keyboardPropertiesSupported";
+const char* const language_supported = "languageSupported";
+const char* const keyboard_layout_supported = "keyboardLayoutSupported";
+const char* const keypress_mode_supported = "keypressModeSupported";
+const char* const limited_characters_list_supported =
+ "limitedCharactersListSupported";
+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 consented_functions = "consentedFunctions";
+const char* const source = "source";
} // namespace strings
namespace json {
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 4a9aa4a771..f3cca144b8 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,80 +34,7 @@
#include <string>
#include <vector>
#include "gtest/gtest.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 "commands/command_request_test.h"
#include "utils/lock.h"
#include "utils/data_accessor.h"
@@ -116,6 +43,7 @@
#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"
@@ -127,13 +55,85 @@
#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/policies/mock_policy_handler_interface.h"
+#include "application_manager/mock_policy_handler_interface.h"
#include "application_manager/mock_message_helper.h"
-#include "protocol_handler/mock_session_observer.h"
-namespace am = application_manager;
-
-static am::MockMessageHelper* message_helper_mock_;
+#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 test {
namespace components {
@@ -141,45 +141,34 @@ 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 ::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;
+using testing::Mock;
-using namespace am::commands;
+namespace am = ::application_manager;
+namespace strings = am::strings;
-typedef SharedPtr<MockApplication> MockAppPtr;
-typedef NiceMock<
- ::test::components::application_manager_test::MockHMICapabilities>
- MockHMICapabilities;
+using am::commands::MessageSharedPtr;
+using am::ApplicationSharedPtr;
-#define MEDIA true
-#define NOT_MEDIA false
-#define VC true
-#define NOT_VC false
-#define NAVI true
-#define NOT_NAVI false
+using namespace am::commands;
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 =
@@ -189,20 +178,14 @@ 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)[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();
+ (*message) = (*arg0);
}
namespace {
@@ -212,118 +195,77 @@ 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 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";
} // namespace
class HMICommandsNotificationsTest
- : public components::commands_test::CommandsTest<
+ : public components::commands_test::CommandRequestTest<
CommandsTestMocks::kIsNice> {
public:
HMICommandsNotificationsTest()
- : applications_(application_set_, applications_lock_), app_ptr_(NULL) {
- message_helper_mock_ =
- application_manager::MockMessageHelper::message_helper_mock();
- Mock::VerifyAndClearExpectations(message_helper_mock_);
- }
+ : mock_app_(CreateMockApp())
+ , message_helper_mock_(NULL)
+ , message_(CreateMessage(smart_objects::SmartType_Map))
+ , applications_(application_set_, applications_lock_) {}
- ~HMICommandsNotificationsTest() {
- // Fix DataAccessor release and WinQt crash
- Mock::VerifyAndClearExpectations(&app_mngr_);
- Mock::VerifyAndClearExpectations(message_helper_mock_);
- }
typedef Command CommandType;
- protected:
+ MockAppPtr mock_app_;
+ am::MockMessageHelper* message_helper_mock_;
+
+ MessageSharedPtr message_;
am::ApplicationSet application_set_;
sync_primitives::Lock applications_lock_;
DataAccessor<am::ApplicationSet> applications_;
- MockHMICapabilities mock_hmi_capabilities_;
-
- NiceMock<event_engine_test::MockEventDispatcher> mock_event_dispatcher_;
- NiceMock<policy_test::MockPolicyHandlerInterface> policy_interface_;
+ NiceMock<application_manager_test::MockHMICapabilities>
+ mock_hmi_capabilities_;
- application_manager_test::MockStateController mock_state_controller_;
+ typename IsNiceMock<policy_test::MockPolicyHandlerInterface,
+ kAreMocksNice>::Result mock_policy_handler_;
- am::ApplicationSharedPtr app_;
- NiceMock<MockApplication>* app_ptr_;
+ typename IsNiceMock<application_manager_test::MockStateController,
+ kAreMocksNice>::Result mock_state_controller_;
- typedef IsNiceMock<connection_handler_test::MockConnectionHandler,
- kMocksAreNice>::Result MockConnectionHandler;
-
- typedef IsNiceMock<protocol_handler_test::MockSessionObserver,
- kMocksAreNice>::Result MockSessionObserver;
-
- 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_));
+ 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 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;
+ void TearDown() OVERRIDE {
+ Mock::VerifyAndClearExpectations(&message_helper_mock_);
+ Mock::VerifyAndClearExpectations(&mock_app_manager_);
}
-#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);
+ 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));
}
-}
-} // namespace
+};
template <class Command>
-class HMIOnViNotifications : public commands_test::CommandsTest<kIsNice> {
+class HMIOnViNotifications
+ : public commands_test::CommandsTest<CommandsTestMocks::kIsNice> {
public:
typedef Command CommandType;
};
template <class Command>
class HMIOnNotificationsListToHMI
- : public commands_test::CommandsTest<kIsNice> {
+ : public commands_test::CommandsTest<CommandsTestMocks::kIsNice> {
public:
typedef Command CommandType;
};
@@ -336,34 +278,38 @@ struct CommandPair {
template <class Command>
class HMIOnNotificationsEventDispatcher
- : public commands_test::CommandsTest<kIsNice> {
+ : public commands_test::CommandRequestTest<CommandsTestMocks::kIsNice> {
public:
typedef Command CommandType;
- NiceMock<event_engine_test::MockEventDispatcher> mock_event_dispatcher_;
};
-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<
+#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<OnAppPermissionChangedNotification,
OnAudioDataStreamingNotification,
@@ -376,7 +322,8 @@ typedef Types<OnAppPermissionChangedNotification,
OnSDLPersistenceCompleteNotification,
OnStatusUpdateNotification,
OnVideoDataStreamingNotification,
- OnRecordStartdNotification> HMIOnNotificationsListToHMITypes;
+ OnRecordStartdNotification,
+ OnAppRegisteredNotification> HMIOnNotificationsListToHMITypes;
typedef Types<
CommandPair<OnAppActivatedNotification,
@@ -401,45 +348,43 @@ TYPED_TEST_CASE(HMIOnNotificationsEventDispatcher,
HMIOnNotificationsEventDispatcherTypes);
TYPED_TEST(HMIOnViNotifications, CommandsSendNotificationToMobile) {
- MessageSharedPtr message =
- commands_test::CommandsTest<kIsNice>::CreateMessage();
+ MessageSharedPtr message = this->CreateMessage();
utils::SharedPtr<typename TestFixture::CommandType> command =
this->template CreateCommand<typename TestFixture::CommandType>(message);
- EXPECT_CALL(commands_test::CommandsTest<kIsNice>::app_mngr_,
+ EXPECT_CALL(commands_test::CommandsTest<
+ CommandsTestMocks::kIsNice>::mock_app_manager_,
ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL));
command->Run();
EXPECT_EQ(
static_cast<int32_t>(mobile_apis::FunctionID::eType::OnVehicleDataID),
- (*message)[am::strings::params][am::strings::function_id].asInt());
+ (*message)[strings::params][strings::function_id].asInt());
EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification),
- (*message)[am::strings::params][am::strings::message_type].asInt());
+ (*message)[strings::params][strings::message_type].asInt());
}
TYPED_TEST(HMIOnNotificationsListToHMI, CommandsSendNotificationToHmi) {
- MessageSharedPtr message =
- commands_test::CommandsTest<kIsNice>::CreateMessage();
+ MessageSharedPtr message = this->CreateMessage();
utils::SharedPtr<typename TestFixture::CommandType> command =
this->template CreateCommand<typename TestFixture::CommandType>(message);
- EXPECT_CALL(commands_test::CommandsTest<kIsNice>::app_mngr_,
+ EXPECT_CALL(commands_test::CommandsTest<
+ CommandsTestMocks::kIsNice>::mock_app_manager_,
SendMessageToHMI(_));
command->Run();
- 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());
+ 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());
}
TYPED_TEST(HMIOnNotificationsEventDispatcher,
CommandsNotificationEventDispatcher) {
int32_t event_id = hmi_apis::FunctionID::INVALID_ENUM;
- MessageSharedPtr message =
- commands_test::CommandsTest<kIsNice>::CreateMessage();
+ MessageSharedPtr message = this->CreateMessage();
utils::SharedPtr<typename TestFixture::CommandType::CommandType> command =
this->template CreateCommand<
typename TestFixture::CommandType::CommandType>(message);
- EXPECT_CALL(commands_test::CommandsTest<kIsNice>::app_mngr_,
+ EXPECT_CALL(commands_test::CommandsTest<
+ CommandsTestMocks::kIsNice>::mock_app_manager_,
event_dispatcher())
.WillOnce(ReturnRef(this->mock_event_dispatcher_));
EXPECT_CALL(this->mock_event_dispatcher_, raise_event(_))
@@ -448,196 +393,157 @@ 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(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL));
command->Run();
EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnButtonEventID),
- (*message)[am::strings::params][am::strings::function_id].asInt());
+ (*message_)[strings::params][strings::function_id].asInt());
EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification),
- (*message)[am::strings::params][am::strings::message_type].asInt());
+ (*message_)[strings::params][strings::message_type].asInt());
}
TEST_F(HMICommandsNotificationsTest, OnNaviTBTClientSendNotificationToMobile) {
- MessageSharedPtr message = CreateMessage();
utils::SharedPtr<Command> command =
- CreateCommand<OnNaviTBTClientStateNotification>(message);
+ CreateCommand<OnNaviTBTClientStateNotification>(message_);
- EXPECT_CALL(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL));
command->Run();
EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnTBTClientStateID),
- (*message)[am::strings::params][am::strings::function_id].asInt());
+ (*message_)[strings::params][strings::function_id].asInt());
EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification),
- (*message)[am::strings::params][am::strings::message_type].asInt());
+ (*message_)[strings::params][strings::message_type].asInt());
}
TEST_F(HMICommandsNotificationsTest,
OnNaviWayPointChangeSendNotificationToMobile) {
- MessageSharedPtr message = CreateMessage();
utils::SharedPtr<Command> command =
- CreateCommand<OnNaviWayPointChangeNotification>(message);
+ CreateCommand<OnNaviWayPointChangeNotification>(message_);
- EXPECT_CALL(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL));
command->Run();
EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnWayPointChangeID),
- (*message)[am::strings::params][am::strings::function_id].asInt());
+ (*message_)[strings::params][strings::function_id].asInt());
EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification),
- (*message)[am::strings::params][am::strings::message_type].asInt());
+ (*message_)[strings::params][strings::message_type].asInt());
}
TEST_F(HMICommandsNotificationsTest, OnUICommandSendNotificationToMobile) {
- MessageSharedPtr message = CreateMessage();
utils::SharedPtr<Command> command =
- CreateCommand<OnUICommandNotification>(message);
+ CreateCommand<OnUICommandNotification>(message_);
- EXPECT_CALL(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL));
command->Run();
EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::eType::OnCommandID),
- (*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());
+ (*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());
EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification),
- (*message)[am::strings::params][am::strings::message_type].asInt());
+ (*message_)[strings::params][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(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL));
command->Run();
EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnKeyboardInputID),
- (*message)[am::strings::params][am::strings::function_id].asInt());
+ (*message_)[strings::params][strings::function_id].asInt());
EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification),
- (*message)[am::strings::params][am::strings::message_type].asInt());
+ (*message_)[strings::params][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(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL));
command->Run();
EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnTouchEventID),
- (*message)[am::strings::params][am::strings::function_id].asInt());
+ (*message_)[strings::params][strings::function_id].asInt());
EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification),
- (*message)[am::strings::params][am::strings::message_type].asInt());
-}
-
-TEST_F(HMICommandsNotificationsTest,
- 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());
+ (*message_)[strings::params][strings::message_type].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(app_mngr_, SendMessageToHMI(_));
- EXPECT_CALL(app_mngr_, event_dispatcher());
+ EXPECT_CALL(mock_app_manager_, SendMessageToHMI(_));
+ EXPECT_CALL(mock_app_manager_, 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)[am::strings::params][am::strings::protocol_type].asInt());
- EXPECT_EQ(
- kProtocolVersion_,
- (*message)[am::strings::params][am::strings::protocol_version].asInt());
+ EXPECT_EQ(kHmiProtocolType_,
+ (*message_)[strings::params][strings::protocol_type].asInt());
+ EXPECT_EQ(kProtocolVersion_,
+ (*message_)[strings::params][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(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL));
- EXPECT_CALL(app_mngr_, event_dispatcher());
+ EXPECT_CALL(mock_app_manager_, 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)[am::strings::params][am::strings::function_id].asInt());
+ (*message_)[strings::params][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(app_mngr_, OnHMIStartedCooperation());
- EXPECT_CALL(app_mngr_, event_dispatcher());
+ EXPECT_CALL(mock_app_manager_, OnHMIStartedCooperation());
+ EXPECT_CALL(mock_app_manager_, 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(app_mngr_, GetPolicyHandler());
- EXPECT_CALL(policy_interface_, OnIgnitionCycleOver());
+ EXPECT_CALL(mock_policy_handler_, OnIgnitionCycleOver());
command->Run();
}
TEST_F(HMICommandsNotificationsTest, OnPolicyUpdateNotificationPolicyHandler) {
- MessageSharedPtr message = CreateMessage();
- utils::SharedPtr<Command> command = CreateCommand<OnPolicyUpdate>(message);
+ utils::SharedPtr<Command> command = CreateCommand<OnPolicyUpdate>(message_);
- EXPECT_CALL(app_mngr_, GetPolicyHandler());
- EXPECT_CALL(policy_interface_, OnPTExchangeNeeded());
+ EXPECT_CALL(mock_policy_handler_, OnPTExchangeNeeded());
command->Run();
}
-#if defined(PROPRIETARY_MODE) || defined(EXTERNAL_PROPRIETARY_MODE)
TEST_F(HMICommandsNotificationsTest,
OnReceivePolicyUpdateNotification_SUCCESS) {
const std::string kFile = "./test_file.txt";
@@ -646,76 +552,67 @@ TEST_F(HMICommandsNotificationsTest,
std::vector<uint8_t> data(tmp, tmp + 4);
EXPECT_TRUE(file_system::WriteBinaryFile(kFile, data));
- MessageSharedPtr message = CreateMessage(smart_objects::SmartType_String);
- (*message)[am::strings::msg_params][am::hmi_notification::policyfile] = kFile;
+ (*message_)[strings::msg_params][am::hmi_notification::policyfile] = kFile;
utils::SharedPtr<Command> command =
- CreateCommand<OnReceivedPolicyUpdate>(message);
+ CreateCommand<OnReceivedPolicyUpdate>(message_);
- EXPECT_CALL(app_mngr_, GetPolicyHandler());
- EXPECT_CALL(policy_interface_, ReceiveMessageFromSDK(kFile, data));
+ EXPECT_CALL(mock_policy_handler_, 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(app_mngr_, GetPolicyHandler()).Times(0);
- EXPECT_CALL(policy_interface_, ReceiveMessageFromSDK(_, _)).Times(0);
+ EXPECT_CALL(mock_app_manager_, GetPolicyHandler()).Times(0);
+ EXPECT_CALL(mock_policy_handler_, ReceiveMessageFromSDK(_, _)).Times(0);
command->Run();
}
TEST_F(HMICommandsNotificationsTest,
OnAppPermissionConsentNotificationPolicyHandlerNoAppId) {
- MessageSharedPtr message = CreateMessage(smart_objects::SmartType_Map);
- (*message)[am::strings::msg_params]["consentedFunctions"] =
+ (*message_)[strings::msg_params]["consentedFunctions"] =
smart_objects::SmartObject(smart_objects::SmartType_Array);
SmartObject& applications =
- (*message)[am::strings::msg_params]["consentedFunctions"];
+ (*message_)[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);
-
- int32_t connection_id = -1;
- EXPECT_CALL(app_mngr_, GetPolicyHandler());
- EXPECT_CALL(policy_interface_, OnAppPermissionConsent(_, _))
- .WillOnce(GetArg(&connection_id));
+ CreateCommand<OnAppPermissionConsentNotification>(message_);
+ EXPECT_CALL(mock_policy_handler_,
+ OnAppPermissionConsent(kConnectionKey, _, _));
command->Run();
- EXPECT_EQ(0, connection_id);
}
TEST_F(HMICommandsNotificationsTest,
OnAppPermissionConsentNotificationPolicyHandlerWithAppId) {
- MessageSharedPtr message = CreateMessage(smart_objects::SmartType_Map);
- (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_;
- (*message)[am::strings::msg_params]["consentedFunctions"] =
+ (*message_)[strings::msg_params][strings::app_id] = kAppId;
+ (*message_)[strings::msg_params]["consentedFunctions"] =
smart_objects::SmartObject(smart_objects::SmartType_Array);
smart_objects::SmartObjectSPtr consented_function =
utils::MakeShared<smart_objects::SmartObject>();
- (*message)[am::strings::msg_params]["consentedFunctions"][0] =
+ (*message_)[strings::msg_params]["consentedFunctions"][0] =
*consented_function;
utils::SharedPtr<Command> command =
- CreateCommand<OnAppPermissionConsentNotification>(message);
+ CreateCommand<OnAppPermissionConsentNotification>(message_);
- int32_t connection_id = -1;
+ uint32_t connection_id = 0u;
policy::PermissionConsent permission_consent;
- EXPECT_CALL(app_mngr_, GetPolicyHandler());
- EXPECT_CALL(policy_interface_, OnAppPermissionConsent(_, _))
+ EXPECT_CALL(mock_policy_handler_, OnAppPermissionConsent(_, _, _))
.WillOnce(
GetConnectIdPermissionConsent(&connection_id, &permission_consent));
command->Run();
- EXPECT_EQ(static_cast<int32_t>(kAppId_), connection_id);
+ EXPECT_EQ(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);
}
@@ -723,31 +620,29 @@ TEST_F(HMICommandsNotificationsTest,
TEST_F(HMICommandsNotificationsTest,
OnAppPermissionConsentNotificationPolicyHandlerAppIdAllowTrue) {
- MessageSharedPtr message = CreateMessage(smart_objects::SmartType_Map);
- (*message)[am::strings::msg_params]["consentedFunctions"] =
+ (*message_)[strings::msg_params]["consentedFunctions"] =
smart_objects::SmartObject(smart_objects::SmartType_Array);
- (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_;
- (*message)[am::strings::msg_params]["source"] = "test_content_source";
+ (*message_)[strings::msg_params][strings::app_id] = kAppId;
+ (*message_)[strings::msg_params]["source"] = "test_content_source";
smart_objects::SmartObjectSPtr consented_function =
utils::MakeShared<smart_objects::SmartObject>();
(*consented_function)["allowed"] = true;
- (*consented_function)[am::strings::id] = 999;
- (*consented_function)[am::strings::name] = "test_group_alias";
- (*message)[am::strings::msg_params]["consentedFunctions"][0] =
+ (*consented_function)[strings::id] = 999;
+ (*consented_function)[strings::name] = "test_group_alias";
+ (*message_)[strings::msg_params]["consentedFunctions"][0] =
*consented_function;
utils::SharedPtr<Command> command =
- CreateCommand<OnAppPermissionConsentNotification>(message);
+ CreateCommand<OnAppPermissionConsentNotification>(message_);
- int32_t connection_id = -1;
+ uint32_t connection_id = 0u;
policy::PermissionConsent permission_consent;
- EXPECT_CALL(app_mngr_, GetPolicyHandler());
- EXPECT_CALL(policy_interface_, OnAppPermissionConsent(_, _))
+ EXPECT_CALL(mock_policy_handler_, OnAppPermissionConsent(_, _, _))
.WillOnce(
GetConnectIdPermissionConsent(&connection_id, &permission_consent));
command->Run();
- EXPECT_EQ(static_cast<int32_t>(kAppId_), connection_id);
+ EXPECT_EQ(kAppId, connection_id);
std::vector<policy::FunctionalGroupPermission>::const_iterator it =
permission_consent.group_permissions.begin();
@@ -761,31 +656,29 @@ TEST_F(HMICommandsNotificationsTest,
TEST_F(HMICommandsNotificationsTest,
OnAppPermissionConsentNotificationPolicyHandlerAppIdAllowFalse) {
- MessageSharedPtr message = CreateMessage(smart_objects::SmartType_Map);
- (*message)[am::strings::msg_params]["consentedFunctions"] =
+ (*message_)[strings::msg_params]["consentedFunctions"] =
smart_objects::SmartObject(smart_objects::SmartType_Array);
- (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_;
- (*message)[am::strings::msg_params]["source"] = "test_content_source";
+ (*message_)[strings::msg_params][strings::app_id] = kAppId;
+ (*message_)[strings::msg_params]["source"] = "test_content_source";
smart_objects::SmartObjectSPtr consented_function =
utils::MakeShared<smart_objects::SmartObject>();
(*consented_function)["allowed"] = false;
- (*consented_function)[am::strings::id] = 999;
- (*consented_function)[am::strings::name] = "test_group_alias";
- (*message)[am::strings::msg_params]["consentedFunctions"][0] =
+ (*consented_function)[strings::id] = 999;
+ (*consented_function)[strings::name] = "test_group_alias";
+ (*message_)[strings::msg_params]["consentedFunctions"][0] =
*consented_function;
utils::SharedPtr<Command> command =
- CreateCommand<OnAppPermissionConsentNotification>(message);
+ CreateCommand<OnAppPermissionConsentNotification>(message_);
- int32_t connection_id = -1;
+ uint32_t connection_id = 0u;
policy::PermissionConsent permission_consent;
- EXPECT_CALL(app_mngr_, GetPolicyHandler());
- EXPECT_CALL(policy_interface_, OnAppPermissionConsent(_, _))
+ EXPECT_CALL(mock_policy_handler_, OnAppPermissionConsent(_, _, _))
.WillOnce(
GetConnectIdPermissionConsent(&connection_id, &permission_consent));
command->Run();
- EXPECT_EQ(static_cast<int32_t>(kAppId_), connection_id);
+ EXPECT_EQ(kAppId, connection_id);
std::vector<policy::FunctionalGroupPermission>::const_iterator it =
permission_consent.group_permissions.begin();
@@ -799,16 +692,14 @@ TEST_F(HMICommandsNotificationsTest,
TEST_F(HMICommandsNotificationsTest,
OnSystemErrorNotificationOnSystemErrorCode) {
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::hmi_notification::error] =
+ (*message_)[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(app_mngr_, GetPolicyHandler());
- EXPECT_CALL(policy_interface_, OnSystemError(_)).WillOnce(GetArg(&code));
+ EXPECT_CALL(mock_policy_handler_, OnSystemError(_)).WillOnce(GetArg(&code));
command->Run();
EXPECT_EQ(static_cast<int32_t>(hmi_apis::Common_SystemError::SYNC_REBOOTED),
code);
@@ -817,49 +708,42 @@ TEST_F(HMICommandsNotificationsTest,
TEST_F(HMICommandsNotificationsTest,
OnSystemInfoChangedNotificationCheckLanguage) {
const uint32_t kLangCode = 5u;
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::language] = kLangCode;
+
+ (*message_)[strings::msg_params][strings::language] = kLangCode;
utils::SharedPtr<Command> command =
- CreateCommand<OnSystemInfoChangedNotification>(message);
+ CreateCommand<OnSystemInfoChangedNotification>(message_);
EXPECT_CALL(*message_helper_mock_, CommonLanguageToString(_));
- EXPECT_CALL(app_mngr_, GetPolicyHandler());
- EXPECT_CALL(policy_interface_, OnSystemInfoChanged(_));
+ EXPECT_CALL(mock_policy_handler_, OnSystemInfoChanged(_));
command->Run();
}
TEST_F(HMICommandsNotificationsTest,
OnAllowSDLFunctionalityNotificationDeviceKeyNotExist) {
- const std::string kDeviceId = "";
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::hmi_response::allowed] = true;
+ (*message_)[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(app_mngr_, GetPolicyHandler());
- EXPECT_CALL(policy_interface_, OnAllowSDLFunctionalityNotification(_, _))
+ EXPECT_CALL(mock_policy_handler_, OnAllowSDLFunctionalityNotification(_, _))
.WillOnce(GetBoolValueAndString(&value, &str));
command->Run();
EXPECT_EQ(true, value);
- EXPECT_EQ(kDeviceId, str);
+ EXPECT_EQ(kEmptyDeviceInternalId, str);
}
TEST_F(HMICommandsNotificationsTest,
OnAllowSDLFunctionalityNotificationDeviceKeyExist) {
- 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;
+ (*message_)[strings::msg_params][am::hmi_response::allowed] = true;
+ (*message_)[strings::msg_params][strings::device][strings::id] = kDeviceId;
utils::SharedPtr<Command> command =
- CreateCommand<OnAllowSDLFunctionalityNotification>(message);
+ CreateCommand<OnAllowSDLFunctionalityNotification>(message_);
bool value;
std::string str;
- EXPECT_CALL(app_mngr_, GetPolicyHandler());
- EXPECT_CALL(policy_interface_, OnAllowSDLFunctionalityNotification(_, _))
+ EXPECT_CALL(mock_policy_handler_, OnAllowSDLFunctionalityNotification(_, _))
.WillOnce(GetBoolValueAndString(&value, &str));
command->Run();
EXPECT_EQ(true, value);
@@ -868,101 +752,96 @@ TEST_F(HMICommandsNotificationsTest,
TEST_F(HMICommandsNotificationsTest,
OnDeviceStateChangedNotificationDeviceStateNotUnpaired) {
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params]["deviceState"] =
+ (*message_)[strings::msg_params]["deviceState"] =
hmi_apis::Common_DeviceState::INVALID_ENUM;
utils::SharedPtr<Command> command =
- CreateCommand<OnDeviceStateChangedNotification>(message);
+ CreateCommand<OnDeviceStateChangedNotification>(message_);
- EXPECT_CALL(app_mngr_, GetPolicyHandler()).Times(0);
- EXPECT_CALL(policy_interface_, RemoveDevice(_)).Times(0);
+ EXPECT_CALL(mock_policy_handler_, RemoveDevice(_)).Times(0);
command->Run();
}
TEST_F(HMICommandsNotificationsTest,
OnDeviceStateChangedNotificationDeviceStateUnpaired) {
- // 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"] =
+ (*message_)[strings::msg_params]["deviceState"] =
hmi_apis::Common_DeviceState::UNPAIRED;
- (*message)[am::strings::msg_params]["deviceInternalId"] = device_id;
+ (*message_)[strings::msg_params]["deviceInternalId"] =
+ kCustomDeviceInternalId;
utils::SharedPtr<Command> command =
- CreateCommand<OnDeviceStateChangedNotification>(message);
+ CreateCommand<OnDeviceStateChangedNotification>(message_);
- EXPECT_CALL(app_mngr_, GetPolicyHandler());
- EXPECT_CALL(policy_interface_, RemoveDevice(_));
+ // If the "deviceInternalId" key is valid the MAC address will be hashed
+ EXPECT_CALL(mock_policy_handler_, RemoveDevice(_));
command->Run();
}
TEST_F(HMICommandsNotificationsTest,
OnDeviceStateChangedNotificationDeviceStateEmptyDeviceId) {
- const std::string empty_device_id = "";
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params]["deviceState"] =
+ (*message_)[strings::msg_params]["deviceState"] =
hmi_apis::Common_DeviceState::UNPAIRED;
- (*message)[am::strings::msg_params]["deviceInternalId"] = empty_device_id;
+ (*message_)[strings::msg_params]["deviceInternalId"] = kEmptyDeviceInternalId;
utils::SharedPtr<Command> command =
- CreateCommand<OnDeviceStateChangedNotification>(message);
+ CreateCommand<OnDeviceStateChangedNotification>(message_);
- std::string device_id = "default_id";
- EXPECT_CALL(app_mngr_, GetPolicyHandler());
- EXPECT_CALL(policy_interface_, RemoveDevice(_)).WillOnce(GetArg(&device_id));
+ std::string result_device_id = "default_id";
+ EXPECT_CALL(mock_policy_handler_, RemoveDevice(_))
+ .WillOnce(GetArg(&result_device_id));
command->Run();
- EXPECT_EQ(empty_device_id, device_id);
+ EXPECT_EQ(kEmptyDeviceInternalId, result_device_id);
}
TEST_F(HMICommandsNotificationsTest,
OnDeviceStateChangedNotificationDeviceStateDeviceIdFromId) {
- const std::string empty_device_id = "";
- const std::string id = "id_string";
MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params]["deviceState"] =
+ (*message)[strings::msg_params]["deviceState"] =
hmi_apis::Common_DeviceState::UNPAIRED;
- (*message)[am::strings::msg_params]["deviceInternalId"] = empty_device_id;
- (*message)[am::strings::msg_params]["deviceId"]["id"] = id;
+ (*message)[strings::msg_params]["deviceInternalId"] = kEmptyDeviceInternalId;
+ (*message)[strings::msg_params]["deviceId"][strings::id] = kDeviceId;
utils::SharedPtr<Command> command =
CreateCommand<OnDeviceStateChangedNotification>(message);
- std::string device_id = "default_id";
- EXPECT_CALL(app_mngr_, GetPolicyHandler());
- EXPECT_CALL(policy_interface_, RemoveDevice(_)).WillOnce(GetArg(&device_id));
+ std::string result_device_id = "default_id";
+ EXPECT_CALL(mock_policy_handler_, RemoveDevice(_))
+ .WillOnce(GetArg(&result_device_id));
command->Run();
- EXPECT_EQ(id, device_id);
+ EXPECT_EQ(kDeviceId, result_device_id);
+}
+
+MATCHER_P(ReasonCodeEqualTo, kCode, "") {
+ return kCode == arg;
+}
+
+void DummySigHandler(int) {
+ return;
}
-//~policy_handler
TEST_F(HMICommandsNotificationsTest,
OnExitAllApplicationsNotificationReasonIgnitionOff) {
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::hmi_request::reason] =
+ (*message_)[strings::msg_params][am::hmi_request::reason] =
hmi_apis::Common_ApplicationsCloseReason::IGNITION_OFF;
- utils::SharedPtr<Command> command =
- CreateCommand<OnExitAllApplicationsNotification>(message);
-#if defined(OS_POSIX)
- am::mobile_api::AppInterfaceUnregisteredReason::eType mob_reason;
+ utils::SharedPtr<am::commands::Command> command =
+ CreateCommand<am::commands::OnExitAllApplicationsNotification>(message_);
- EXPECT_CALL(app_mngr_, SetUnregisterAllApplicationsReason(_))
- .WillOnce(GetArg(&mob_reason));
- EXPECT_CALL(app_mngr_, HeadUnitReset(_)).Times(0);
+ EXPECT_CALL(
+ mock_app_manager_,
+ SetUnregisterAllApplicationsReason(ReasonCodeEqualTo(
+ am::mobile_api::AppInterfaceUnregisteredReason::IGNITION_OFF)));
+ EXPECT_CALL(mock_app_manager_, HeadUnitReset(_)).Times(0);
- SubscribeForSignal();
+ utils::UnsibscribeFromTermination();
command->Run();
- utils::WaitTerminationSignals(sig_handler);
+ utils::WaitTerminationSignals(&DummySigHandler);
- EXPECT_EQ(am::mobile_api::AppInterfaceUnregisteredReason::IGNITION_OFF,
- mob_reason);
-#endif
+ EXPECT_CALL(mock_app_manager_, SetUnregisterAllApplicationsReason(_))
+ .Times(0);
}
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(
@@ -981,88 +860,87 @@ TEST_F(HMICommandsNotificationsTest,
it_mob_reason = mob_reason_list.begin();
for (; it_reason != reason_list.end(); ++it_reason, ++it_mob_reason) {
- (*message)[am::strings::msg_params][am::hmi_request::reason] = *it_reason;
+ (*message_)[strings::msg_params][am::hmi_request::reason] = *it_reason;
+
+ 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 =
*it_mob_reason;
- EXPECT_CALL(app_mngr_, SetUnregisterAllApplicationsReason(mob_reason));
- EXPECT_CALL(app_mngr_, HeadUnitReset(mob_reason));
-
- SubscribeForSignal();
+ EXPECT_CALL(mock_app_manager_,
+ SetUnregisterAllApplicationsReason(mob_reason));
+ EXPECT_CALL(mock_app_manager_, HeadUnitReset(mob_reason));
+ utils::UnsibscribeFromTermination();
command->Run();
- utils::WaitTerminationSignals(sig_handler);
-#endif
+ utils::WaitTerminationSignals(&DummySigHandler);
+ EXPECT_CALL(mock_app_manager_, SetUnregisterAllApplicationsReason(_))
+ .Times(0);
+ EXPECT_CALL(mock_app_manager_, HeadUnitReset(_)).Times(0);
}
}
TEST_F(HMICommandsNotificationsTest,
OnExitAllApplicationsNotificationReasonSuspend) {
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::hmi_request::reason] =
+ (*message_)[strings::msg_params][am::hmi_request::reason] =
hmi_apis::Common_ApplicationsCloseReason::SUSPEND;
- utils::SharedPtr<Command> command =
- CreateCommand<OnExitAllApplicationsNotification>(message);
+ utils::SharedPtr<am::commands::Command> command =
+ CreateCommand<am::commands::OnExitAllApplicationsNotification>(message_);
MessageSharedPtr ethalon_message =
CreateMessage(smart_objects::SmartType_Map);
- (*ethalon_message)[am::strings::params][am::strings::function_id] =
+ (*ethalon_message)[strings::params][strings::function_id] =
hmi_apis::FunctionID::BasicCommunication_OnSDLPersistenceComplete;
- (*ethalon_message)[am::strings::params][am::strings::message_type] =
+ (*ethalon_message)[strings::params][strings::message_type] =
am::MessageType::kNotification;
- (*ethalon_message)[am::strings::params][am::strings::correlation_id] =
+ (*ethalon_message)[strings::params][strings::correlation_id] =
kCorrelationId_;
MessageSharedPtr temp_message = CreateMessage();
- EXPECT_CALL(app_mngr_, GetNextHMICorrelationID())
+ EXPECT_CALL(mock_app_manager_, GetNextHMICorrelationID())
.WillOnce(Return(kCorrelationId_));
- EXPECT_CALL(app_mngr_, ManageHMICommand(_))
- .WillOnce(GetMessage(temp_message));
+ EXPECT_CALL(mock_app_manager_, ManageHMICommand(_))
+ .WillOnce(DoAll(GetMessage(temp_message), Return(true)));
command->Run();
- 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());
+ 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_);
}
TEST_F(HMICommandsNotificationsTest,
OnExitAllApplicationsNotificationReasonInvalidEnum) {
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::hmi_request::reason] =
+ (*message_)[strings::msg_params][am::hmi_request::reason] =
hmi_apis::Common_ApplicationsCloseReason::INVALID_ENUM;
- utils::SharedPtr<Command> command =
- CreateCommand<OnExitAllApplicationsNotification>(message);
+ utils::SharedPtr<am::commands::Command> command =
+ CreateCommand<am::commands::OnExitAllApplicationsNotification>(message_);
- 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);
+ 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);
command->Run();
}
TEST_F(HMICommandsNotificationsTest,
OnExitApplicationNotificationManageMobileCommand) {
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_;
+ (*message_)[strings::msg_params][strings::app_id] = kAppId;
smart_objects::SmartObjectSPtr notification =
utils::MakeShared<smart_objects::SmartObject>();
- (*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_;
+ (*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;
std::vector<hmi_apis::Common_ApplicationExitReason::eType> reason_list;
reason_list.push_back(hmi_apis::Common_ApplicationExitReason::
@@ -1083,76 +961,106 @@ TEST_F(HMICommandsNotificationsTest,
it_reason = reason_list.begin();
for (; it_reason != reason_list.end(); ++it_reason, ++it_mobile_reason) {
- (*message)[am::strings::msg_params][am::strings::reason] = *it_reason;
+ (*message_)[strings::msg_params][strings::reason] = *it_reason;
utils::SharedPtr<Command> command =
- CreateCommand<OnExitApplicationNotification>(message);
+ CreateCommand<OnExitApplicationNotification>(message_);
- (*notification)[am::strings::msg_params][am::strings::reason] =
+ (*notification)[strings::msg_params][strings::reason] =
static_cast<int32_t>(*it_mobile_reason);
- EXPECT_CALL(app_mngr_, application(kAppId_)).WillRepeatedly(Return(app_));
+ EXPECT_CALL(mock_app_manager_, application(kAppId))
+ .WillRepeatedly(Return(mock_app_));
EXPECT_CALL(*message_helper_mock_,
GetOnAppInterfaceUnregisteredNotificationToMobile(
- kAppId_, *it_mobile_reason)).WillOnce(Return(notification));
- EXPECT_CALL(app_mngr_,
+ kAppId, *it_mobile_reason)).WillOnce(Return(notification));
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(notification, Command::ORIGIN_SDL));
- EXPECT_CALL(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
UnregisterApplication(
- kAppId_, mobile_apis::Result::SUCCESS, false, false));
+ kAppId, mobile_apis::Result::SUCCESS, false, false));
command->Run();
}
}
TEST_F(HMICommandsNotificationsTest,
OnExitApplicationNotificationUnhandledReason) {
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_;
+ (*message_)[strings::msg_params][strings::app_id] = kAppId;
- (*message)[am::strings::msg_params][am::strings::reason] =
+ (*message_)[strings::msg_params][strings::reason] =
hmi_apis::Common_ApplicationExitReason::INVALID_ENUM;
utils::SharedPtr<Command> command =
- CreateCommand<OnExitApplicationNotification>(message);
+ CreateCommand<OnExitApplicationNotification>(message_);
- 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_));
+ 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_));
command->Run();
}
TEST_F(HMICommandsNotificationsTest, OnExitApplicationNotificationInvalidApp) {
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_;
+ (*message_)[strings::msg_params][strings::app_id] = kAppId;
utils::SharedPtr<Command> command =
- CreateCommand<OnExitApplicationNotification>(message);
+ CreateCommand<OnExitApplicationNotification>(message_);
am::ApplicationSharedPtr invalid_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(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);
+
command->Run();
}
TEST_F(HMICommandsNotificationsTest,
- DISABLED_OnExitApplicationNotificationDriverDistractionValidApp) {
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_;
- (*message)[am::strings::msg_params][am::strings::reason] =
+ OnExitApplicationNotificationDriverDistractionValidApp) {
+ (*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);
+ CreateCommand<OnExitApplicationNotification>(message_);
- EXPECT_CALL(app_mngr_, application(kAppId_)).WillRepeatedly(Return(app_));
+ smart_objects::SmartObjectSPtr notification =
+ utils::MakeShared<smart_objects::SmartObject>();
+ (*notification)[strings::params][strings::function_id] =
- EXPECT_CALL(app_mngr_, state_controller())
+ 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(mock_app_manager_, state_controller())
.WillOnce(ReturnRef(mock_state_controller_));
EXPECT_CALL(mock_state_controller_,
- SetRegularState(app_,
+ SetRegularState(static_cast<am::ApplicationSharedPtr>(mock_app_),
mobile_apis::HMILevel::HMI_NONE,
mobile_apis::AudioStreamingState::NOT_AUDIBLE,
false));
@@ -1160,21 +1068,36 @@ TEST_F(HMICommandsNotificationsTest,
}
TEST_F(HMICommandsNotificationsTest,
- OnExitApplicationNotificationrUserExitValidApp) {
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_;
- (*message)[am::strings::msg_params][am::strings::reason] =
+ 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] =
hmi_apis::Common_ApplicationExitReason::USER_EXIT;
utils::SharedPtr<Command> command =
- CreateCommand<OnExitApplicationNotification>(message);
+ CreateCommand<OnExitApplicationNotification>(message_);
- 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())
+ 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())
.WillOnce(ReturnRef(mock_state_controller_));
EXPECT_CALL(mock_state_controller_,
- SetRegularState(app_,
+ SetRegularState(static_cast<am::ApplicationSharedPtr>(mock_app_),
mobile_apis::HMILevel::HMI_NONE,
mobile_apis::AudioStreamingState::NOT_AUDIBLE,
false));
@@ -1183,23 +1106,28 @@ TEST_F(HMICommandsNotificationsTest,
TEST_F(HMICommandsNotificationsTest,
OnVRCommandNotificationSwitchedAndValidApp) {
- const uint32_t cmd_id = 12u;
+ const uint32_t cmnd_id = 12u;
const uint32_t max_cmd_id = 10u;
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::cmd_id] = cmd_id;
+ (*message_)[strings::msg_params][strings::cmd_id] = cmnd_id;
utils::SharedPtr<Command> command =
- CreateCommand<OnVRCommandNotification>(message);
+ CreateCommand<OnVRCommandNotification>(message_);
+
+ EXPECT_CALL(mock_app_manager_, application(cmnd_id - max_cmd_id))
+ .WillOnce(Return(mock_app_));
- EXPECT_CALL(app_mngr_, application(_)).WillRepeatedly(Return(app_));
- EXPECT_CALL(app_mngr_, state_controller())
+ 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));
+
+ EXPECT_CALL(mock_app_manager_, state_controller())
.WillOnce(ReturnRef(mock_state_controller_));
EXPECT_CALL(mock_state_controller_,
- SetRegularState(_, mobile_apis::HMILevel::HMI_FULL, true));
+ SetRegularState(static_cast<am::ApplicationSharedPtr>(mock_app_),
+ 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();
}
@@ -1208,17 +1136,18 @@ TEST_F(HMICommandsNotificationsTest,
const uint32_t kCmdId = 12u;
const uint32_t kMaxCmdId = 10u;
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::cmd_id] = kCmdId;
+ (*message_)[strings::msg_params][strings::cmd_id] = kCmdId;
utils::SharedPtr<Command> command =
- CreateCommand<OnVRCommandNotification>(message);
+ CreateCommand<OnVRCommandNotification>(message_);
am::ApplicationSharedPtr invalid_app;
- 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));
+ 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));
command->Run();
}
@@ -1227,15 +1156,15 @@ TEST_F(HMICommandsNotificationsTest,
const uint32_t kCmdId = 11u;
const uint32_t kMaxCmdId = 10u;
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::cmd_id] = kCmdId;
+ (*message_)[strings::msg_params][strings::cmd_id] = kCmdId;
utils::SharedPtr<Command> command =
- CreateCommand<OnVRCommandNotification>(message);
+ CreateCommand<OnVRCommandNotification>(message_);
- 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_));
+ 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_));
command->Run();
}
@@ -1244,18 +1173,20 @@ TEST_F(HMICommandsNotificationsTest,
const uint32_t kCmdId = 8u;
const uint32_t kMaxCmdId = 10u;
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::cmd_id] = kCmdId;
+ (*message_)[strings::msg_params][strings::cmd_id] = kCmdId;
+ (*message_)[strings::msg_params][strings::grammar_id] = 0;
utils::SharedPtr<Command> command =
- CreateCommand<OnVRCommandNotification>(message);
+ CreateCommand<OnVRCommandNotification>(message_);
- 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);
+ 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(mock_app_manager_, applications())
+ .WillOnce(Return(applications_));
+
+ EXPECT_CALL(mock_app_manager_, ManageMobileCommand(_, _)).Times(0);
command->Run();
}
@@ -1265,21 +1196,24 @@ TEST_F(HMICommandsNotificationsTest,
const uint32_t kMaxCmdId = 10u;
const uint32_t kIsPerformInteractionActive = 1u;
int32_t event_id = hmi_apis::FunctionID::INVALID_ENUM;
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::cmd_id] = kCmdId;
- utils::SharedPtr<Command> command =
- 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())
+ (*message_)[strings::msg_params][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())
.WillOnce(Return(kIsPerformInteractionActive));
- EXPECT_CALL(app_mngr_, event_dispatcher());
+ EXPECT_CALL(mock_app_manager_, event_dispatcher());
EXPECT_CALL(mock_event_dispatcher_, raise_event(_))
.WillOnce(GetEventId(&event_id));
- EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0);
+ EXPECT_CALL(mock_app_manager_, ManageMobileCommand(_, _)).Times(0);
command->Run();
EXPECT_EQ(hmi_apis::FunctionID::VR_OnCommand, event_id);
}
@@ -1289,179 +1223,177 @@ TEST_F(HMICommandsNotificationsTest,
const uint32_t kCmdId = 8u;
const uint32_t kMaxCmdId = 10u;
const uint32_t kIsPerformInteractionActive = 0u;
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::cmd_id] = kCmdId;
- (*message)[am::strings::msg_params][am::strings::function_id] =
+
+ (*message_)[strings::msg_params][strings::cmd_id] = kCmdId;
+ (*message_)[strings::msg_params][strings::function_id] =
mobile_apis::FunctionID::eType::OnCommandID;
utils::SharedPtr<Command> command =
- 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())
+ 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())
.WillOnce(Return(kIsPerformInteractionActive));
- EXPECT_CALL(app_mngr_, event_dispatcher()).Times(0);
- EXPECT_CALL(app_mngr_,
+ EXPECT_CALL(mock_app_manager_, event_dispatcher()).Times(0);
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL));
command->Run();
EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::eType::OnCommandID),
- (*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());
+ (*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());
EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification),
- (*message)[am::strings::params][am::strings::message_type].asInt());
+ (*message_)[strings::params][strings::message_type].asInt());
}
TEST_F(HMICommandsNotificationsTest, OnVRLanguageChangeNotificationEmptyData) {
const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB;
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::language] = kLang;
+
+ (*message_)[strings::msg_params][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(app_mngr_, hmi_capabilities())
+ EXPECT_CALL(mock_app_manager_, hmi_capabilities())
.WillOnce(ReturnRef(mock_hmi_capabilities_));
- 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);
+ 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);
command->Run();
}
TEST_F(HMICommandsNotificationsTest,
OnVRLanguageChangeNotificationAppLangEqualMessageLang) {
const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB;
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::language] = kLang;
+
+ (*message_)[strings::msg_params][strings::language] = kLang;
utils::SharedPtr<Command> command =
- CreateCommand<OnVRLanguageChangeNotification>(message);
+ CreateCommand<OnVRLanguageChangeNotification>(message_);
- application_set_.insert(app_);
- EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(applications_));
+ application_set_.insert(mock_app_);
+ EXPECT_CALL(mock_app_manager_, 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(app_mngr_, hmi_capabilities())
+ EXPECT_CALL(mock_app_manager_, hmi_capabilities())
.WillOnce(ReturnRef(mock_hmi_capabilities_));
- EXPECT_CALL(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL));
- EXPECT_CALL(*app_ptr_, app_id()).WillOnce(Return(kAppId_));
- EXPECT_CALL(*app_ptr_, language()).WillRepeatedly(ReturnRef(kLang));
+ ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId));
+ ON_CALL(*mock_app_, language()).WillByDefault(ReturnRef(kLang));
command->Run();
EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnLanguageChangeID),
- (*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());
+ (*message_)[strings::params][strings::function_id].asInt());
+ EXPECT_EQ(kAppId,
+ (*message_)[strings::params][strings::connection_key].asUInt());
EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification),
- (*message)[am::strings::params][am::strings::message_type].asInt());
+ (*message_)[strings::params][strings::message_type].asInt());
EXPECT_EQ(
static_cast<int32_t>(hmi_apis::Common_Language::EN_AU),
- (*message)[am::strings::msg_params][am::strings::hmi_display_language]
- .asInt());
+ (*message_)[strings::msg_params][strings::hmi_display_language].asInt());
}
TEST_F(HMICommandsNotificationsTest,
OnVRLanguageChangeNotificationAppLangNotEqualMessageLang) {
const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB;
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::language] =
+
+ (*message_)[strings::msg_params][strings::language] =
mobile_apis::Language::EN_US;
utils::SharedPtr<Command> command =
- CreateCommand<OnVRLanguageChangeNotification>(message);
+ CreateCommand<OnVRLanguageChangeNotification>(message_);
- application_set_.insert(app_);
+ application_set_.insert(mock_app_);
smart_objects::SmartObjectSPtr notification =
utils::MakeShared<smart_objects::SmartObject>();
- (*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_));
+ (*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_));
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(app_mngr_, hmi_capabilities())
+ EXPECT_CALL(mock_app_manager_, hmi_capabilities())
.WillOnce(ReturnRef(mock_hmi_capabilities_));
- EXPECT_CALL(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL));
- EXPECT_CALL(*app_ptr_, app_id()).WillRepeatedly(Return(kAppId_));
- EXPECT_CALL(*app_ptr_, language()).WillRepeatedly(ReturnRef(kLang));
- EXPECT_CALL(app_mngr_, state_controller())
+ EXPECT_CALL(*mock_app_, app_id()).WillRepeatedly(Return(kAppId));
+ EXPECT_CALL(*mock_app_, language()).WillRepeatedly(ReturnRef(kLang));
+ EXPECT_CALL(mock_app_manager_, state_controller())
.WillOnce(ReturnRef(mock_state_controller_));
EXPECT_CALL(mock_state_controller_,
- SetRegularState(app_, mobile_apis::HMILevel::HMI_NONE, false));
- EXPECT_CALL(*message_helper_mock_,
- GetOnAppInterfaceUnregisteredNotificationToMobile(
- kAppId_,
- mobile_apis::AppInterfaceUnregisteredReason::LANGUAGE_CHANGE))
+ 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))
.WillOnce(Return(notification));
- EXPECT_CALL(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(notification, Command::ORIGIN_SDL));
- EXPECT_CALL(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
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)[am::strings::params][am::strings::function_id].asInt());
- EXPECT_EQ(
- static_cast<int32_t>(kAppId_),
- (*message)[am::strings::params][am::strings::connection_key].asInt());
+ (*message_)[strings::params][strings::function_id].asInt());
+ EXPECT_EQ(kAppId,
+ (*message_)[strings::params][strings::connection_key].asUInt());
EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification),
- (*message)[am::strings::params][am::strings::message_type].asInt());
+ (*message_)[strings::params][strings::message_type].asInt());
EXPECT_EQ(
static_cast<int32_t>(hmi_apis::Common_Language::EN_AU),
- (*message)[am::strings::msg_params][am::strings::hmi_display_language]
- .asInt());
+ (*message_)[strings::msg_params][strings::hmi_display_language].asInt());
}
TEST_F(HMICommandsNotificationsTest, OnStartDeviceDiscoveryRun) {
- MessageSharedPtr message = CreateMessage();
utils::SharedPtr<Command> command =
- CreateCommand<OnStartDeviceDiscovery>(message);
- EXPECT_CALL(app_mngr_, StartDevicesDiscovery());
+ CreateCommand<OnStartDeviceDiscovery>(message_);
+ EXPECT_CALL(mock_app_manager_, StartDevicesDiscovery());
command->Run();
}
TEST_F(HMICommandsNotificationsTest,
OnDeviceChosenNotificationDeviceInfoExists) {
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::device_info]
- [am::strings::id] = "2014";
+ (*message_)[strings::msg_params][strings::device_info][strings::id] = "2014";
utils::SharedPtr<Command> command =
- CreateCommand<OnDeviceChosenNotification>(message);
- EXPECT_CALL(app_mngr_,
- ConnectToDevice(
- (*message)[am::strings::msg_params][am::strings::device_info]
- [am::strings::id].asString()));
+ CreateCommand<OnDeviceChosenNotification>(message_);
+ EXPECT_CALL(
+ mock_app_manager_,
+ ConnectToDevice(
+ (*message_)[strings::msg_params][strings::device_info][strings::id]
+ .asString()));
command->Run();
}
TEST_F(HMICommandsNotificationsTest,
OnDeviceChosenNotificationDeviceInfoNotExists) {
- MessageSharedPtr message = CreateMessage();
utils::SharedPtr<Command> command =
- CreateCommand<OnDeviceChosenNotification>(message);
- EXPECT_CALL(app_mngr_, ConnectToDevice(_)).Times(0);
+ CreateCommand<OnDeviceChosenNotification>(message_);
+ EXPECT_CALL(mock_app_manager_, 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);
@@ -1472,48 +1404,49 @@ TEST_F(HMICommandsNotificationsTest,
std::vector<am::mobile_api::SystemContext::eType>::iterator it =
system_context_list.begin();
for (; it != system_context_list.end(); ++it) {
- (*message)[am::strings::msg_params][am::hmi_notification::system_context] =
+ (*message_)[strings::msg_params][am::hmi_notification::system_context] =
*it;
utils::SharedPtr<Command> command =
- CreateCommand<OnSystemContextNotification>(message);
- EXPECT_CALL(app_mngr_, active_application()).WillOnce(Return(app_));
- EXPECT_CALL(app_mngr_, state_controller())
+ CreateCommand<OnSystemContextNotification>(message_);
+ EXPECT_CALL(mock_app_manager_, active_application())
+ .WillOnce(Return(mock_app_));
+ EXPECT_CALL(mock_app_manager_, state_controller())
.WillOnce(ReturnRef(mock_state_controller_));
- EXPECT_CALL(mock_state_controller_, SetRegularState(app_, *it));
+ EXPECT_CALL(
+ mock_state_controller_,
+ SetRegularState(static_cast<am::ApplicationSharedPtr>(mock_app_), *it));
command->Run();
}
}
TEST_F(HMICommandsNotificationsTest,
OnSystemContextNotificationInvalidActiveApplication) {
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::hmi_notification::system_context] =
+ (*message_)[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(app_mngr_, active_application()).WillOnce(Return(invalid_app));
- EXPECT_CALL(app_mngr_, state_controller()).Times(0);
+ EXPECT_CALL(mock_app_manager_, active_application())
+ .WillOnce(Return(invalid_app));
+ EXPECT_CALL(mock_app_manager_, state_controller()).Times(0);
command->Run();
}
TEST_F(HMICommandsNotificationsTest,
OnSystemContextNotificationInvalidSystemContext) {
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::hmi_notification::system_context] =
+ (*message_)[strings::msg_params][am::hmi_notification::system_context] =
am::mobile_api::SystemContext::INVALID_ENUM;
utils::SharedPtr<Command> command =
- 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);
+ 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);
command->Run();
}
TEST_F(HMICommandsNotificationsTest,
OnSystemContextNotificationValidApplication) {
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_;
+ (*message_)[strings::msg_params][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);
@@ -1521,402 +1454,489 @@ TEST_F(HMICommandsNotificationsTest,
std::vector<am::mobile_api::SystemContext::eType>::iterator it =
system_context_list.begin();
for (; it != system_context_list.end(); ++it) {
- (*message)[am::strings::msg_params][am::hmi_notification::system_context] =
+ (*message_)[strings::msg_params][am::hmi_notification::system_context] =
*it;
utils::SharedPtr<Command> command =
- CreateCommand<OnSystemContextNotification>(message);
- EXPECT_CALL(app_mngr_, application(_)).WillOnce(Return(app_));
- EXPECT_CALL(app_mngr_, state_controller())
+ CreateCommand<OnSystemContextNotification>(message_);
+ EXPECT_CALL(mock_app_manager_, application(_)).WillOnce(Return(mock_app_));
+ EXPECT_CALL(mock_app_manager_, state_controller())
.WillOnce(ReturnRef(mock_state_controller_));
- EXPECT_CALL(mock_state_controller_, SetRegularState(app_, *it));
+ EXPECT_CALL(
+ mock_state_controller_,
+ SetRegularState(static_cast<am::ApplicationSharedPtr>(mock_app_), *it));
command->Run();
}
}
TEST_F(HMICommandsNotificationsTest,
OnSystemContextNotificationAppIdDoesntExists) {
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::hmi_notification::system_context] =
+ (*message_)[strings::msg_params][am::hmi_notification::system_context] =
am::mobile_api::SystemContext::SYSCTXT_ALERT;
utils::SharedPtr<Command> command =
- CreateCommand<OnSystemContextNotification>(message);
- EXPECT_CALL(app_mngr_, application(_)).Times(0);
- EXPECT_CALL(app_mngr_, state_controller()).Times(0);
+ CreateCommand<OnSystemContextNotification>(message_);
+ EXPECT_CALL(mock_app_manager_, application(_)).Times(0);
+ EXPECT_CALL(mock_app_manager_, state_controller()).Times(0);
command->Run();
}
TEST_F(HMICommandsNotificationsTest,
OnSystemRequestNotificationAppIdExistsAndValidApp) {
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_;
+ (*message_)[strings::msg_params][strings::app_id] = kAppId;
utils::SharedPtr<Command> command =
- CreateCommand<OnSystemRequestNotification>(message);
-
- 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));
+ CreateCommand<OnSystemRequestNotification>(message_);
- EXPECT_CALL(app_mngr_,
+ 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_,
ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL));
command->Run();
EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification),
- (*message)[am::strings::params][am::strings::message_type].asInt());
+ (*message_)[strings::params][strings::message_type].asInt());
EXPECT_EQ(
static_cast<int32_t>(mobile_apis::FunctionID::eType::OnSystemRequestID),
- (*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());
+ (*message_)[strings::params][strings::function_id].asInt());
+ EXPECT_EQ(kAppId,
+ (*message_)[strings::params][strings::connection_key].asUInt());
}
TEST_F(HMICommandsNotificationsTest,
OnSystemRequestNotificationAppIdExistsAndInvalidApp) {
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_;
+ (*message_)[strings::msg_params][strings::app_id] = kAppId;
utils::SharedPtr<Command> command =
- CreateCommand<OnSystemRequestNotification>(message);
+ CreateCommand<OnSystemRequestNotification>(message_);
ApplicationSharedPtr invalid_app;
- 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);
+ 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);
command->Run();
EXPECT_EQ(
static_cast<int32_t>(mobile_apis::FunctionID::eType::OnSystemRequestID),
- (*message)[am::strings::params][am::strings::function_id].asInt());
+ (*message_)[strings::params][strings::function_id].asInt());
}
TEST_F(HMICommandsNotificationsTest,
OnSystemRequestNotificationAppIdDoesntExistsAndValidApp) {
- MessageSharedPtr message = CreateMessage();
utils::SharedPtr<Command> command =
- 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_,
+ 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_,
ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL));
command->Run();
EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification),
- (*message)[am::strings::params][am::strings::message_type].asInt());
+ (*message_)[strings::params][strings::message_type].asInt());
EXPECT_EQ(
static_cast<int32_t>(mobile_apis::FunctionID::eType::OnSystemRequestID),
- (*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());
+ (*message_)[strings::params][strings::function_id].asInt());
+ EXPECT_EQ(kAppId,
+ (*message_)[strings::params][strings::connection_key].asUInt());
}
TEST_F(HMICommandsNotificationsTest,
OnSystemRequestNotificationAppIdDoesntExistsAndNullAppId) {
const uint32_t kNullApppId = 0u;
- MessageSharedPtr message = CreateMessage();
+
utils::SharedPtr<Command> command =
- CreateCommand<OnSystemRequestNotification>(message);
- EXPECT_CALL(app_mngr_, GetPolicyHandler());
- EXPECT_CALL(policy_interface_, GetAppIdForSending())
+ CreateCommand<OnSystemRequestNotification>(message_);
+ EXPECT_CALL(mock_policy_handler_, GetAppIdForSending())
.WillOnce(Return(kNullApppId));
- EXPECT_CALL(app_mngr_, application(_)).Times(0);
- EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0);
+ EXPECT_CALL(mock_app_manager_, application(_)).Times(0);
+ EXPECT_CALL(mock_app_manager_, ManageMobileCommand(_, _)).Times(0);
command->Run();
}
TEST_F(HMICommandsNotificationsTest, OnTTSLanguageChangeNotificationEmptyData) {
const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB;
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::language] = kLang;
+
+ (*message_)[strings::msg_params][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(app_mngr_, hmi_capabilities())
+ EXPECT_CALL(mock_app_manager_, hmi_capabilities())
.WillOnce(ReturnRef(mock_hmi_capabilities_));
- 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);
+ 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);
command->Run();
}
TEST_F(HMICommandsNotificationsTest,
OnTTSLanguageChangeNotificationAppLangEqualMessageLang) {
const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB;
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::language] = kLang;
+
+ (*message_)[strings::msg_params][strings::language] = kLang;
utils::SharedPtr<Command> command =
- CreateCommand<OnTTSLanguageChangeNotification>(message);
+ CreateCommand<OnTTSLanguageChangeNotification>(message_);
- application_set_.insert(app_);
- EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(applications_));
+ application_set_.insert(mock_app_);
+ EXPECT_CALL(mock_app_manager_, 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(app_mngr_, hmi_capabilities())
+ EXPECT_CALL(mock_app_manager_, hmi_capabilities())
.WillOnce(ReturnRef(mock_hmi_capabilities_));
- EXPECT_CALL(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL));
- EXPECT_CALL(*app_ptr_, app_id()).WillOnce(Return(kAppId_));
- EXPECT_CALL(*app_ptr_, language()).WillRepeatedly(ReturnRef(kLang));
+ ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId));
+ ON_CALL(*mock_app_, language()).WillByDefault(ReturnRef(kLang));
command->Run();
EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnLanguageChangeID),
- (*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());
+ (*message_)[strings::params][strings::function_id].asInt());
+ EXPECT_EQ(kAppId,
+ (*message_)[strings::params][strings::connection_key].asUInt());
EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification),
- (*message)[am::strings::params][am::strings::message_type].asInt());
+ (*message_)[strings::params][strings::message_type].asInt());
EXPECT_EQ(
static_cast<int32_t>(hmi_apis::Common_Language::EN_AU),
- (*message)[am::strings::msg_params][am::strings::hmi_display_language]
- .asInt());
+ (*message_)[strings::msg_params][strings::hmi_display_language].asInt());
}
TEST_F(HMICommandsNotificationsTest,
OnTTSLanguageChangeNotificationAppLangNotEqualMessageLang) {
const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB;
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::language] =
+
+ (*message_)[strings::msg_params][strings::language] =
mobile_apis::Language::EN_US;
utils::SharedPtr<Command> command =
- CreateCommand<OnTTSLanguageChangeNotification>(message);
+ CreateCommand<OnTTSLanguageChangeNotification>(message_);
- application_set_.insert(app_);
+ application_set_.insert(mock_app_);
smart_objects::SmartObjectSPtr notification =
utils::MakeShared<smart_objects::SmartObject>();
- (*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_));
+ (*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_));
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(app_mngr_, hmi_capabilities())
+ EXPECT_CALL(mock_app_manager_, hmi_capabilities())
.WillOnce(ReturnRef(mock_hmi_capabilities_));
- EXPECT_CALL(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL));
- 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))
+ 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))
.WillOnce(Return(notification));
- EXPECT_CALL(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(notification, Command::ORIGIN_SDL));
- EXPECT_CALL(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
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)[am::strings::params][am::strings::function_id].asInt());
- EXPECT_EQ(
- static_cast<int32_t>(kAppId_),
- (*message)[am::strings::params][am::strings::connection_key].asInt());
+ (*message_)[strings::params][strings::function_id].asInt());
+ EXPECT_EQ(kAppId,
+ (*message_)[strings::params][strings::connection_key].asUInt());
EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification),
- (*message)[am::strings::params][am::strings::message_type].asInt());
+ (*message_)[strings::params][strings::message_type].asInt());
EXPECT_EQ(
static_cast<int32_t>(hmi_apis::Common_Language::EN_AU),
- (*message)[am::strings::msg_params][am::strings::hmi_display_language]
- .asInt());
+ (*message_)[strings::msg_params][strings::hmi_display_language].asInt());
}
TEST_F(HMICommandsNotificationsTest, OnUILanguageChangeNotificationEmptyData) {
const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB;
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::language] = kLang;
+
+ (*message_)[strings::msg_params][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(app_mngr_, hmi_capabilities())
+ EXPECT_CALL(mock_app_manager_, hmi_capabilities())
.WillOnce(ReturnRef(mock_hmi_capabilities_));
- 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);
+ 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);
command->Run();
}
TEST_F(HMICommandsNotificationsTest,
OnUILanguageChangeNotificationAppLangEqualMessageLang) {
const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB;
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::language] = kLang;
+ (*message_)[strings::msg_params][strings::language] = kLang;
utils::SharedPtr<Command> command =
- CreateCommand<OnUILanguageChangeNotification>(message);
+ CreateCommand<OnUILanguageChangeNotification>(message_);
- application_set_.insert(app_);
- EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(applications_));
+ application_set_.insert(mock_app_);
+ EXPECT_CALL(mock_app_manager_, 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(app_mngr_, hmi_capabilities())
+ EXPECT_CALL(mock_app_manager_, hmi_capabilities())
.WillOnce(ReturnRef(mock_hmi_capabilities_));
- EXPECT_CALL(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL));
- EXPECT_CALL(*app_ptr_, app_id()).WillOnce(Return(kAppId_));
- EXPECT_CALL(*app_ptr_, ui_language()).WillRepeatedly(ReturnRef(kLang));
+ ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId));
+ ON_CALL(*mock_app_, ui_language()).WillByDefault(ReturnRef(kLang));
command->Run();
EXPECT_EQ(static_cast<int32_t>(mobile_apis::FunctionID::OnLanguageChangeID),
- (*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());
+ (*message_)[strings::params][strings::function_id].asInt());
+ EXPECT_EQ(kAppId,
+ (*message_)[strings::params][strings::connection_key].asUInt());
EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification),
- (*message)[am::strings::params][am::strings::message_type].asInt());
+ (*message_)[strings::params][strings::message_type].asInt());
EXPECT_EQ(
static_cast<int32_t>(kLang),
- (*message)[am::strings::msg_params][am::strings::hmi_display_language]
- .asInt());
+ (*message_)[strings::msg_params][strings::hmi_display_language].asInt());
}
TEST_F(HMICommandsNotificationsTest,
OnUILanguageChangeNotificationAppLangNotEqualMessageLang) {
const mobile_apis::Language::eType& kLang = mobile_apis::Language::EN_GB;
- MessageSharedPtr message = CreateMessage();
- (*message)[am::strings::msg_params][am::strings::language] =
+
+ (*message_)[strings::msg_params][strings::language] =
mobile_apis::Language::EN_US;
utils::SharedPtr<Command> command =
- CreateCommand<OnUILanguageChangeNotification>(message);
+ CreateCommand<OnUILanguageChangeNotification>(message_);
- application_set_.insert(app_);
+ application_set_.insert(mock_app_);
smart_objects::SmartObjectSPtr notification =
utils::MakeShared<smart_objects::SmartObject>();
- (*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_));
+ (*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_));
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(app_mngr_, hmi_capabilities())
+ EXPECT_CALL(mock_app_manager_, hmi_capabilities())
.WillOnce(ReturnRef(mock_hmi_capabilities_));
- EXPECT_CALL(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(_, Command::CommandOrigin::ORIGIN_SDL));
- 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))
+ 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))
.WillOnce(Return(notification));
- EXPECT_CALL(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
ManageMobileCommand(notification, Command::ORIGIN_SDL));
- EXPECT_CALL(app_mngr_,
+ EXPECT_CALL(mock_app_manager_,
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)[am::strings::params][am::strings::function_id].asInt());
- EXPECT_EQ(
- static_cast<int32_t>(kAppId_),
- (*message)[am::strings::params][am::strings::connection_key].asInt());
+ (*message_)[strings::params][strings::function_id].asInt());
+ EXPECT_EQ(kAppId,
+ (*message_)[strings::params][strings::connection_key].asUInt());
EXPECT_EQ(static_cast<int32_t>(am::MessageType::kNotification),
- (*message)[am::strings::params][am::strings::message_type].asInt());
+ (*message_)[strings::params][strings::message_type].asInt());
EXPECT_EQ(
static_cast<int32_t>(mobile_apis::Language::EN_US),
- (*message)[am::strings::msg_params][am::strings::hmi_display_language]
- .asInt());
+ (*message_)[strings::msg_params][strings::hmi_display_language].asInt());
}
-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;
+TEST_F(
+ HMICommandsNotificationsTest,
+ OnDeviceConnectionStatusNotification_DeviceKeyNotExist_IgnoreNotification) {
utils::SharedPtr<Command> command =
- CreateCommand<hmi::OnDriverDistractionNotification>(message);
+ CreateCommand<hmi::OnDeviceConnectionStatusNotification>(message_);
- EXPECT_CALL(app_mngr_, set_driver_distraction(state));
- EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(applications_));
+ EXPECT_CALL(mock_app_manager_, GetDeviceConnectionType(_)).Times(0);
+ EXPECT_CALL(mock_policy_handler_, OnDeviceConnectionStatus(_, _)).Times(0);
+ command->Run();
+}
- EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0);
- EXPECT_CALL(*app_ptr_, app_id()).Times(0);
+TEST_F(
+ HMICommandsNotificationsTest,
+ OnDeviceConnectionStatusNotification_MandatoryParamsMissing_IgnoreNotification) {
+ (*message_)[strings::msg_params][strings::device] = SmartObject();
+ 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,
- 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;
+TEST_F(
+ HMICommandsNotificationsTest,
+ OnDeviceConnectionStatusNotification_MandatoryIntegerParamsMissing_IgnoreNotification) {
+ 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::id] = kDeviceId;
+ device_so[strings::usb_transport_status] = usb_transport_status;
+
utils::SharedPtr<Command> command =
- CreateCommand<hmi::OnDriverDistractionNotification>(message);
+ 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(_)).Times(0);
+ EXPECT_CALL(mock_policy_handler_, OnDeviceConnectionStatus(_, _)).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;
- EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0);
- EXPECT_CALL(*app_ptr_, app_id()).Times(0);
+ 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, 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;
+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::OnDriverDistractionNotification>(message);
+ CreateCommand<hmi::OnDeviceConnectionStatusNotification>(message_);
- application_set_.insert(app_);
+ EXPECT_CALL(mock_app_manager_, GetDeviceConnectionType(_)).Times(0);
+ EXPECT_CALL(mock_policy_handler_, OnDeviceConnectionStatus(_, _)).Times(0);
+ command->Run();
+}
- 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_));
+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;
+
+ 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;
+
+ 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_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;
+
+ 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;
+
+ 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_);
+
+ 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();
- 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/message_helper/message_helper_test.cc b/src/components/application_manager/test/message_helper/message_helper_test.cc
index ef0cab13bf..0a9075b73e 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
@@ -903,7 +903,1258 @@ TEST_F(MessageHelperTest, SubscribeApplicationToSoftButton_CallFromApp) {
EXPECT_CALL(*appSharedPtr,
SubscribeToSoftButtons(function_id, SoftButtonID())).Times(1);
MessageHelper::SubscribeApplicationToSoftButton(
- message_params, appSharedPtr, function_id);
+ 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());
+}
+
+TEST_F(MessageHelperTest,
+ SendGetListOfPermissionsResponse_CCSStatusNonEmpty_SUCCESS) {
+ using namespace policy;
+ using namespace smart_objects;
+
+ std::vector<policy::FunctionalGroupPermission> permissions;
+
+ CCSStatus ccs_status;
+ const int32_t entity_type_1 = 1;
+ const int32_t entity_id_1 = 2;
+ const EntityStatus entity_status_1 = kStatusOn;
+ 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));
+
+ 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_);
+
+ ASSERT_TRUE(result.valid());
+
+ SmartObject& msg_params = (*result)[strings::msg_params];
+ const std::string ccs_status_key = "ccsStatus";
+ EXPECT_TRUE(msg_params.keyExists(ccs_status_key));
+
+ SmartArray* status_array = msg_params[ccs_status_key].asArray();
+ EXPECT_TRUE(ccs_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);
+ 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);
+ item_2_so[entityType] = entity_type_2;
+ item_2_so[entityID] = entity_id_2;
+ item_2_so[status] = hmi_apis::Common_EntityStatus::OFF;
+
+ EXPECT_TRUE(status_array->end() !=
+ std::find(status_array->begin(), status_array->end(), item_1_so));
+ 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
}
} // namespace application_manager_test
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 074a075e1f..80f67ef7cc 100644
--- a/src/components/include/application_manager/policies/policy_handler_interface.h
+++ b/src/components/include/application_manager/policies/policy_handler_interface.h
@@ -178,11 +178,13 @@ class PolicyHandlerInterface {
const DeviceInfo& device_info) = 0;
/**
- * @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 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
+ */
virtual void OnAppPermissionConsent(const uint32_t connection_key,
const PermissionConsent& permissions) = 0;
@@ -399,8 +401,21 @@ 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
+ */
virtual void OnAppPermissionConsentInternal(
- const uint32_t connection_key, PermissionConsent& permissions) = 0;
+ const uint32_t connection_key,
+ const CCSStatus& ccs_status,
+ PermissionConsent& out_permissions) = 0;
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 de9d6eb8ef..b97e819d5f 100644
--- a/src/components/include/policy/policy_external/policy/policy_listener.h
+++ b/src/components/include/policy/policy_external/policy/policy_listener.h
@@ -115,12 +115,35 @@ class PolicyListener {
virtual void OnCertificateUpdated(const std::string& certificate_data) = 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;
+ * 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;
};
} // namespace policy
#endif // SRC_COMPONENTS_INCLUDE_POLICY_POLICY_LISTENER_H_
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 389befae6f..2b14f2226d 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
@@ -216,9 +216,10 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface {
policy::EndpointUrls& end_points));
private:
- MOCK_METHOD2(OnAppPermissionConsentInternal,
- void(const uint32_t connection_key,
- policy::PermissionConsent& permissions));
+ MOCK_METHOD3(OnAppPermissionConsentInternal,
+ void(const uint32_t,
+ const policy::CCSStatus&,
+ policy::PermissionConsent&));
};
} // 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 4bd9dc90ae..bc7be64aaa 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
@@ -83,8 +83,14 @@ class MockPolicyListener : public ::policy::PolicyListener {
MOCK_METHOD1(OnCertificateUpdated, void(const std::string&));
MOCK_CONST_METHOD2(SendOnAppPermissionsChanged,
void(const policy::AppPermissions&, const std::string&));
- MOCK_CONST_METHOD1(GetRegisteredLinks,
- void(std::map<std::string, std::string>&));
+ MOCK_METHOD1(GetDevicesIds,
+ std::vector<std::string>(const std::string& policy_app_id));
+ MOCK_METHOD3(OnUpdateHMILevel,
+ 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());
};
} // namespace policy_test
diff --git a/src/components/policy/policy_external/include/policy/policy_helper.h b/src/components/policy/policy_external/include/policy/policy_helper.h
index 9f8151e29f..10d6908b14 100644
--- a/src/components/policy/policy_external/include/policy/policy_helper.h
+++ b/src/components/policy/policy_external/include/policy/policy_helper.h
@@ -75,62 +75,128 @@ struct CompareGroupName {
bool operator!=(const policy_table::ApplicationParams& first,
const policy_table::ApplicationParams& second);
-/*
+/**
* @brief Helper struct for checking changes of application policies, which
* come with update along with current data snapshot
- * In case of policies changed for some application, current data will be
- * updated and notification will be sent to application
+ * @param pm Pointer to PolicyManager instance
+ * @param update Shared pointer to policy table update received
+ * @param snapshot Shared pointer to current policy table copy
+ * @param out_results Collection of check result
*/
struct CheckAppPolicy {
CheckAppPolicy(PolicyManagerImpl* pm,
const utils::SharedPtr<policy_table::Table> update,
- const utils::SharedPtr<policy_table::Table> snapshot);
+ const utils::SharedPtr<policy_table::Table> snapshot,
+ CheckAppPolicyResults& out_results);
+
bool operator()(const AppPoliciesValueType& app_policy);
private:
- 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 Sets pending values to be notified to the system (depends on HMI
+ * level of application) with SDL.ActivateApp or OnAppPermissionsChanged
+ * notification
+ * @param app_policy Reference to updated application policy
+ * @param result Result of check of updated policy
+ */
void SetPendingPermissions(const AppPoliciesValueType& app_policy,
PermissionsCheckResult result) const;
+ /**
+ * @brief Analyzes updated application policy whether any changes received. If
+ * yes - provides appropriate result code
+ * @param app_policy Reference to updated application policy
+ * @return Result code according to changes in updated policy
+ */
PermissionsCheckResult CheckPermissionsChanges(
const AppPoliciesValueType& app_policy) const;
+ /**
+ * @brief Checks whether updated policy has groups revoked, i.e. absent in
+ * compare to current one
+ * @param app_policy Reference to updated policy
+ * @param revoked_groups List of revoked groups if any
+ * @return True if there are revoked groups, otherwise - false
+ */
bool HasRevokedGroups(const AppPoliciesValueType& app_policy,
policy_table::Strings* revoked_groups = NULL) const;
+ /**
+ * @brief Checks whether updated application policy has new group in compare
+ * to current one
+ * @param app_policy Reference to updated application policy
+ * @param new_groups List of new groups if any
+ * @return True if new groups found, otherwise - false
+ */
bool HasNewGroups(const AppPoliciesValueType& app_policy,
policy_table::Strings* new_groups = NULL) const;
+ /**
+ * @brief Checks whether updated policy has groups which require user consent
+ * @param app_policy Reference to updated application policy
+ * @return True if has groups requiring user consents, otherwise - false
+ */
bool HasConsentNeededGroups(const AppPoliciesValueType& app_policy) const;
+ /**
+ * @brief Gets revoked groups parameters from current policies
+ * @param app_policy Reference to updated application policy
+ * @return List of revoked groups with their parameters
+ */
std::vector<FunctionalGroupPermission> GetRevokedGroups(
const AppPoliciesValueType& app_policy) const;
+ /**
+ * @brief Removes consents for revoked groups of application
+ * @param app_policy Reference to updated application policy
+ * @param revoked_groups List of revoked groups with parameters to remove
+ * consents if any exists
+ */
void RemoveRevokedConsents(
const AppPoliciesValueType& app_policy,
const std::vector<FunctionalGroupPermission>& revoked_groups) const;
+ /**
+ * @brief Checks whether application is present in current policy table,
+ * since update can be processed only for application known by policy while
+ * it sent update request
+ * @param application_id Application id
+ * @return True if application is known, otherwise - false
+ */
bool IsKnownAppication(const std::string& application_id) const;
- void NotifySystem(const AppPoliciesValueType& app_policy) const;
- void SendPermissionsToApp(const AppPoliciesValueType& app_policy) const;
+ /**
+ * @brief Checks whether application is revoked by backend, i.e. has 'null'
+ * for policies parameters
+ * @param app_policy Reference to updated application policy
+ * @return True if application is revoked, otherwise - false
+ */
bool IsAppRevoked(const AppPoliciesValueType& app_policy) const;
+ /**
+ * @brief Checks whether there such application is registered and has correct
+ * nickname
+ * @param app_policy Reference to updated application policy
+ * @return True if there is nickname mismatch, otherwise - false
+ */
bool NicknamesMatch(const AppPoliciesValueType& app_policy) const;
/**
+ * @brief Adds result of check of current application policy with updated one
+ * @param app_id Application id
+ * @param result Result value
+ */
+ void AddResult(const std::string& app_id, PermissionsCheckResult result);
+ /**
* @brief Allows to check if appropriate group requires any consent.
* @param group_name the group for which consent will be checked.
* @return true if consent is required, false otherwise.
*/
bool IsConsentRequired(const std::string& app_id,
const std::string& group_name) const;
+ /**
+ * @brief Checks whether RequestTypes of application have been changed by
+ * udpated
+ * @param app_policy Reference to updated application policy
+ * @return True if changed, otherwise - false
+ */
bool IsRequestTypeChanged(const AppPoliciesValueType& app_policy) const;
private:
PolicyManagerImpl* pm_;
const utils::SharedPtr<policy_table::Table> update_;
const utils::SharedPtr<policy_table::Table> snapshot_;
+ CheckAppPolicyResults& out_results_;
};
/*
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 dcca92cf07..239d46388c 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
@@ -211,23 +211,42 @@ class PolicyManagerImpl : public PolicyManager {
AppIdURL RetrySequenceUrl(const struct RetrySequenceURL& rs,
const EndpointUrls& urls) const OVERRIDE;
+ bool SetExternalConsentStatus(const ExternalConsentStatus& status) OVERRIDE;
+ ExternalConsentStatus GetExternalConsentStatus() OVERRIDE;
+
protected:
virtual utils::SharedPtr<policy_table::Table> Parse(
const BinaryMessage& pt_content);
private:
void CheckTriggers();
- /*
- * @brief Checks policy table update along with current data for any changes
- * in assigned functional group list of application
- *
- * @param Policy table update struct
+
+ /**
+ * @brief Compares current applications policies to the updated one and
+ * returns apporopriate result codes per application, which that are being
+ * processed by sending notification to applications registered and to the
+ * system
+ * @param update Shared pointer to policy table udpate
+ * @param snapshot Shared pointer to current copy of policy table
+ * @return Collection per-application results
*/
- void CheckPermissionsChanges(
+ CheckAppPolicyResults CheckPermissionsChanges(
const utils::SharedPtr<policy_table::Table> update,
const utils::SharedPtr<policy_table::Table> snapshot);
/**
+ * @brief Processes results from policy table update analysis done by
+ * CheckPermissionsChanges() by sending OnPermissionChange and
+ * OnAppPermissionChanged notifications
+ * @param results Collection of per-application results
+ * @param app_policies Reference to updated application policies section as
+ * a data source for generating notifications data
+ */
+ void ProcessAppPolicyCheckResults(
+ const CheckAppPolicyResults& results,
+ const policy_table::ApplicationPolicies& app_policies);
+
+ /**
* @brief Fill structure to be sent with OnPermissionsChanged notification
*
* @param Policy table struct, which contains rpc functional groups data
@@ -394,8 +413,82 @@ class PolicyManagerImpl : public PolicyManager {
GroupsNames& out_allowed_groups,
GroupsNames& out_disallowed_groups) const;
- bool SetExternalConsentStatus(const ExternalConsentStatus& status) OVERRIDE;
- ExternalConsentStatus GetExternalConsentStatus() OVERRIDE;
+ /**
+ * @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_;
@@ -403,7 +496,14 @@ class PolicyManagerImpl : public PolicyManager {
CacheManagerInterfaceSPtr cache_;
sync_primitives::Lock apps_registration_lock_;
sync_primitives::Lock app_permissions_diff_lock_;
- std::map<std::string, AppPermissions> app_permissions_diff_;
+
+ /**
+ * @brief Collection of parameters to be reported to the system with
+ * SDL.ActivateApp response or OnAppPermissionsChanged notification
+ * Being set during policy table update processing
+ */
+ typedef std::map<std::string, AppPermissions> PendingPermissions;
+ PendingPermissions app_permissions_diff_;
/**
* Timeout to wait response with UpdatePT
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 ad8ebc4c9c..73bd76f0ac 100644
--- a/src/components/policy/policy_external/include/policy/policy_types.h
+++ b/src/components/policy/policy_external/include/policy/policy_types.h
@@ -38,6 +38,7 @@
#include <vector>
#include <map>
#include <set>
+#include <utility>
#include "utils/shared_ptr.h"
#include "utils/helpers.h"
namespace policy {
diff --git a/src/components/policy/policy_external/src/cache_manager.cc b/src/components/policy/policy_external/src/cache_manager.cc
index ba71e5dc6f..b7f4f553d7 100644
--- a/src/components/policy/policy_external/src/cache_manager.cc
+++ b/src/components/policy/policy_external/src/cache_manager.cc
@@ -36,6 +36,9 @@
#include <functional>
#include <ctime>
#include <cmath>
+#include <utility>
+#include <string>
+#include <vector>
#include "utils/file_system.h"
#include "json/reader.h"
diff --git a/src/components/policy/policy_external/src/policy_helper.cc b/src/components/policy/policy_external/src/policy_helper.cc
index a477ca55d2..f4ab80d6f7 100644
--- a/src/components/policy/policy_external/src/policy_helper.cc
+++ b/src/components/policy/policy_external/src/policy_helper.cc
@@ -123,8 +123,12 @@ bool operator!=(const policy_table::ApplicationParams& first,
CheckAppPolicy::CheckAppPolicy(
PolicyManagerImpl* pm,
const utils::SharedPtr<policy_table::Table> update,
- const utils::SharedPtr<policy_table::Table> snapshot)
- : pm_(pm), update_(update), snapshot_(snapshot) {}
+ const utils::SharedPtr<policy_table::Table> snapshot,
+ CheckAppPolicyResults& out_results)
+ : pm_(pm)
+ , update_(update)
+ , snapshot_(snapshot)
+ , out_results_(out_results) {}
bool policy::CheckAppPolicy::HasRevokedGroups(
const policy::AppPoliciesValueType& app_policy,
@@ -262,37 +266,6 @@ bool CheckAppPolicy::IsKnownAppication(
return !(current_policies.end() == current_policies.find(application_id));
}
-void policy::CheckAppPolicy::NotifySystem(
- const policy::AppPoliciesValueType& app_policy) const {
- pm_->listener()->OnPendingPermissionChange(app_policy.first);
-}
-
-void CheckAppPolicy::SendPermissionsToApp(
- const AppPoliciesValueType& app_policy) const {
- const std::string app_id = app_policy.first;
-
- const std::string device_id = pm_->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;
- pm_->GetPermissionsForApp(device_id, app_id, group_permissons);
-
- Permissions notification_data;
- pm_->PrepareNotificationData(update_->policy_table.functional_groupings,
- app_policy.second.groups,
- group_permissons,
- notification_data);
-
- LOG4CXX_INFO(logger_, "Send notification for application_id: " << app_id);
- pm_->listener()->OnPermissionsUpdated(
- app_id,
- notification_data,
- policy_table::EnumToJsonString(app_policy.second.default_hmi));
-}
-
bool CheckAppPolicy::IsAppRevoked(
const AppPoliciesValueType& app_policy) const {
LOG4CXX_AUTO_TRACE(logger_);
@@ -321,6 +294,11 @@ bool CheckAppPolicy::NicknamesMatch(
return true;
}
+void CheckAppPolicy::AddResult(const std::string& app_id,
+ PermissionsCheckResult result) {
+ out_results_.insert(std::make_pair(app_id, result));
+}
+
bool CheckAppPolicy::operator()(const AppPoliciesValueType& app_policy) {
const std::string app_id = app_policy.first;
@@ -332,13 +310,13 @@ bool CheckAppPolicy::operator()(const AppPoliciesValueType& app_policy) {
if (!IsPredefinedApp(app_policy) && IsAppRevoked(app_policy)) {
SetPendingPermissions(app_policy, RESULT_APP_REVOKED);
- NotifySystem(app_policy);
+ AddResult(app_id, RESULT_APP_REVOKED);
return true;
}
if (!IsPredefinedApp(app_policy) && !NicknamesMatch(app_policy)) {
SetPendingPermissions(app_policy, RESULT_NICKNAME_MISMATCH);
- NotifySystem(app_policy);
+ AddResult(app_id, RESULT_NICKNAME_MISMATCH);
return true;
}
@@ -346,13 +324,14 @@ bool CheckAppPolicy::operator()(const AppPoliciesValueType& app_policy) {
if (!IsPredefinedApp(app_policy) && IsRequestTypeChanged(app_policy)) {
SetPendingPermissions(app_policy, RESULT_REQUEST_TYPE_CHANGED);
- NotifySystem(app_policy);
+ AddResult(app_id, RESULT_REQUEST_TYPE_CHANGED);
}
if (RESULT_NO_CHANGES == result) {
LOG4CXX_INFO(logger_,
"Permissions for application:" << app_id
<< " wasn't changed.");
+ AddResult(app_id, result);
return true;
}
@@ -362,13 +341,9 @@ bool CheckAppPolicy::operator()(const AppPoliciesValueType& app_policy) {
if (!IsPredefinedApp(app_policy) && RESULT_CONSENT_NOT_REQIURED != result) {
SetPendingPermissions(app_policy, result);
- NotifySystem(app_policy);
+ AddResult(app_id, result);
}
- // Don't sent notification for predefined apps (e.g. default, device etc.)
- if (!IsPredefinedApp(app_policy)) {
- SendPermissionsToApp(app_policy);
- }
return true;
}
@@ -439,8 +414,7 @@ void policy::CheckAppPolicy::SetPendingPermissions(
pm_->app_permissions_diff_lock_.Release();
}
-policy::CheckAppPolicy::PermissionsCheckResult
-policy::CheckAppPolicy::CheckPermissionsChanges(
+PermissionsCheckResult CheckAppPolicy::CheckPermissionsChanges(
const policy::AppPoliciesValueType& app_policy) const {
bool has_revoked_groups = HasRevokedGroups(app_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 4ce18d3c79..6e0ccb2fb6 100644
--- a/src/components/policy/policy_external/src/policy_manager_impl.cc
+++ b/src/components/policy/policy_external/src/policy_manager_impl.cc
@@ -36,6 +36,8 @@
#include <queue>
#include <iterator>
#include <limits>
+#include <vector>
+#include <functional>
#include "json/reader.h"
#include "json/writer.h"
#include "policy/policy_table.h"
@@ -55,6 +57,127 @@ policy::PolicyManager* CreateManager() {
void DeleteManager(policy::PolicyManager* pm) {
delete pm;
}
+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>& 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 {
@@ -272,7 +395,8 @@ bool PolicyManagerImpl::LoadPT(const std::string& file,
// groups, which had been present before are absent in PTU and will be
// removed after update. So in case of revoked groups system has to know
// names and ids of revoked groups before they will be removed.
- CheckPermissionsChanges(pt_update, policy_table_snapshot);
+ CheckAppPolicyResults results =
+ CheckPermissionsChanges(pt_update, policy_table_snapshot);
// Replace current data with updated
if (!cache_->ApplyUpdate(*pt_update)) {
@@ -280,6 +404,15 @@ bool PolicyManagerImpl::LoadPT(const std::string& file,
return false;
}
+ CCSStatus status = cache_->GetCCSStatus();
+ GroupsByCCSStatus groups_by_status =
+ cache_->GetGroupsWithSameEntities(status);
+
+ ProcessCCSStatusUpdate(groups_by_status);
+
+ ProcessAppPolicyCheckResults(
+ results, pt_update->policy_table.app_policies_section.apps);
+
listener_->OnCertificateUpdated(
*(pt_update->policy_table.module_config.certificate));
@@ -304,11 +437,7 @@ bool PolicyManagerImpl::LoadPT(const std::string& file,
return true;
}
-std::string PolicyManagerImpl::GetLockScreenIconUrl() const {
- return cache_->GetLockScreenIconUrl();
-}
-
-void PolicyManagerImpl::CheckPermissionsChanges(
+CheckAppPolicyResults PolicyManagerImpl::CheckPermissionsChanges(
const utils::SharedPtr<policy_table::Table> pt_update,
const utils::SharedPtr<policy_table::Table> snapshot) {
LOG4CXX_INFO(logger_, "Checking incoming permissions.");
@@ -317,9 +446,65 @@ void PolicyManagerImpl::CheckPermissionsChanges(
// to actual values of default section
UnwrapAppPolicies(pt_update->policy_table.app_policies_section.apps);
+ CheckAppPolicyResults out_results;
std::for_each(pt_update->policy_table.app_policies_section.apps.begin(),
pt_update->policy_table.app_policies_section.apps.end(),
- CheckAppPolicy(this, pt_update, snapshot));
+ CheckAppPolicy(this, pt_update, snapshot, out_results));
+
+ return out_results;
+}
+
+void PolicyManagerImpl::ProcessAppPolicyCheckResults(
+ const CheckAppPolicyResults& results,
+ const policy_table::ApplicationPolicies& app_policies) {
+ CheckAppPolicyResults::const_iterator it_results = results.begin();
+
+ for (; results.end() != it_results; ++it_results) {
+ const policy_table::ApplicationPolicies::const_iterator app_policy =
+ app_policies.find(it_results->first);
+
+ if (app_policies.end() == app_policy) {
+ continue;
+ }
+
+ if (IsPredefinedApp(*app_policy)) {
+ continue;
+ }
+
+ switch (it_results->second) {
+ case RESULT_NO_CHANGES:
+ continue;
+ case RESULT_APP_REVOKED:
+ NotifySystem(*app_policy);
+ continue;
+ case RESULT_NICKNAME_MISMATCH:
+ NotifySystem(*app_policy);
+ continue;
+ case RESULT_CONSENT_NEEDED:
+ case RESULT_PERMISSIONS_REVOKED_AND_CONSENT_NEEDED: {
+ // Post-check after CCS consent changes
+ const std::string policy_app_id = app_policy->first;
+ if (!IsConsentNeeded(policy_app_id)) {
+ sync_primitives::AutoLock lock(app_permissions_diff_lock_);
+
+ PendingPermissions::iterator app_id_diff =
+ app_permissions_diff_.find(policy_app_id);
+
+ if (app_permissions_diff_.end() != app_id_diff) {
+ app_id_diff->second.appPermissionsConsentNeeded = false;
+ }
+ }
+ } break;
+ case RESULT_CONSENT_NOT_REQIURED:
+ case RESULT_PERMISSIONS_REVOKED:
+ case RESULT_REQUEST_TYPE_CHANGED:
+ break;
+ default:
+ continue;
+ }
+ NotifySystem(*app_policy);
+ SendPermissionsToApp(*app_policy);
+ }
}
void PolicyManagerImpl::PrepareNotificationData(
@@ -457,14 +642,7 @@ void PolicyManagerImpl::CheckPermissions(const PTString& app_id,
policy_table::FunctionalGroupings functional_groupings;
cache_->GetFunctionalGroupings(functional_groupings);
- std::vector<FunctionalGroupPermission>::const_iterator it =
- app_group_permissions.begin();
- std::vector<FunctionalGroupPermission>::const_iterator it_end =
- app_group_permissions.end();
- policy_table::Strings app_groups;
- for (; it != it_end; ++it) {
- app_groups.push_back((*it).group_name);
- }
+ policy_table::Strings app_groups = GetGroupsNames(app_group_permissions);
// Undefined groups (without user consent) disallowed by default, since
// OnPermissionsChange notification has no "undefined" section
@@ -605,6 +783,16 @@ bool PolicyManagerImpl::ResetUserConsent() {
return result;
}
+policy_table::Strings PolicyManagerImpl::GetGroupsNames(
+ const std::vector<FunctionalGroupPermission>& app_group_permissions) const {
+ policy_table::Strings app_groups;
+ GroupNamesAppender appender(app_groups);
+ std::for_each(
+ app_group_permissions.begin(), app_group_permissions.end(), appender);
+
+ return app_groups;
+}
+
void PolicyManagerImpl::SendNotificationOnPermissionsUpdated(
const std::string& application_id) {
LOG4CXX_AUTO_TRACE(logger_);
@@ -622,14 +810,7 @@ void PolicyManagerImpl::SendNotificationOnPermissionsUpdated(
policy_table::FunctionalGroupings functional_groupings;
cache_->GetFunctionalGroupings(functional_groupings);
- policy_table::Strings app_groups;
- std::vector<FunctionalGroupPermission>::const_iterator it =
- app_group_permissions.begin();
- std::vector<FunctionalGroupPermission>::const_iterator it_end =
- app_group_permissions.end();
- for (; it != it_end; ++it) {
- app_groups.push_back((*it).group_name);
- }
+ policy_table::Strings app_groups = GetGroupsNames(app_group_permissions);
Permissions notification_data;
PrepareNotificationData(functional_groupings,
@@ -789,7 +970,7 @@ void PolicyManagerImpl::CheckPendingPermissionsChanges(
const std::vector<FunctionalGroupPermission>& current_permissions) {
LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock lock(app_permissions_diff_lock_);
- std::map<std::string, AppPermissions>::iterator it_pending =
+ PendingPermissions::iterator it_pending =
app_permissions_diff_.find(policy_app_id);
if (app_permissions_diff_.end() == it_pending) {
LOG4CXX_WARN(
@@ -826,6 +1007,24 @@ void PolicyManagerImpl::CheckPendingPermissionsChanges(
return;
}
+void PolicyManagerImpl::NotifyPermissionsChanges(
+ const std::string& policy_app_id,
+ const std::vector<FunctionalGroupPermission>& app_group_permissions) {
+ // Get current functional groups from DB with RPC permissions
+ policy_table::FunctionalGroupings functional_groups;
+ cache_->GetFunctionalGroupings(functional_groups);
+
+ // Get list of groups assigned to application
+ policy_table::Strings app_groups = GetGroupsNames(app_group_permissions);
+
+ // Fill notification data according to group permissions
+ Permissions notification_data;
+ PrepareNotificationData(
+ functional_groups, app_groups, app_group_permissions, notification_data);
+
+ listener()->OnPermissionsUpdated(policy_app_id, notification_data);
+}
+
void PolicyManagerImpl::SetUserConsentForApp(
const PermissionConsent& permissions) {
LOG4CXX_AUTO_TRACE(logger_);
@@ -843,6 +1042,7 @@ void PolicyManagerImpl::SetUserConsentForApp(
if (!cache_->SetUserPermissionsForApp(verified_permissions,
&app_permissions_changed)) {
LOG4CXX_WARN(logger_, "Can't set user permissions for application.");
+ return;
}
if (!app_permissions_changed) {
@@ -857,34 +1057,11 @@ void PolicyManagerImpl::SetUserConsentForApp(
verified_permissions.policy_app_id,
updated_app_group_permissons);
- // Change pending permissions isConsentNeeded state, if no unconsented
- // groups left
- CheckPendingPermissionsChanges(permissions.policy_app_id,
+ CheckPendingPermissionsChanges(verified_permissions.policy_app_id,
updated_app_group_permissons);
- // Get current functional groups from DB with RPC permissions
- policy_table::FunctionalGroupings functional_groups;
- cache_->GetFunctionalGroupings(functional_groups);
-
- // Get list of groups assigned to application
- policy_table::Strings app_groups;
- std::vector<FunctionalGroupPermission>::const_iterator it =
- updated_app_group_permissons.begin();
- std::vector<FunctionalGroupPermission>::const_iterator it_end =
- updated_app_group_permissons.end();
- for (; it != it_end; ++it) {
- app_groups.push_back((*it).group_name);
- }
-
- // Fill notification data according to group permissions
- Permissions notification_data;
- PrepareNotificationData(functional_groups,
- app_groups,
- updated_app_group_permissons,
- notification_data);
-
- listener()->OnPermissionsUpdated(verified_permissions.policy_app_id,
- notification_data);
+ NotifyPermissionsChanges(verified_permissions.policy_app_id,
+ updated_app_group_permissons);
}
bool PolicyManagerImpl::GetDefaultHmi(const std::string& policy_app_id,
@@ -998,6 +1175,13 @@ void PolicyManagerImpl::GetPermissionsForApp(
LOG4CXX_AUTO_TRACE(logger_);
std::string app_id_to_check = policy_app_id;
+ if (!cache_->IsApplicationRepresented(policy_app_id)) {
+ LOG4CXX_WARN(logger_,
+ "Application with id " << policy_app_id
+ << " is not found within known apps.");
+ return;
+ }
+
bool allowed_by_default = false;
if (cache_->IsDefaultPolicy(policy_app_id)) {
app_id_to_check = kDefaultId;
@@ -1136,115 +1320,6 @@ const PolicySettings& PolicyManagerImpl::get_settings() const {
return *settings_;
}
-void PolicyManagerImpl::UpdateAppConsentWithExternalConsent(
- const std::string& device_id,
- const std::string& application_id,
- const GroupsNames& allowed_groups,
- const GroupsNames& disallowed_groups) {
- LOG4CXX_AUTO_TRACE(logger_);
-
- if (allowed_groups.empty() && disallowed_groups.empty()) {
- LOG4CXX_DEBUG(logger_,
- "Allowed and disallowed groups are empty, skipping update by "
- "external user consent.");
- return;
- }
-
- 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);
-
- 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_);
@@ -1434,9 +1509,11 @@ void PolicyManagerImpl::SetVINValue(const std::string& value) {
AppPermissions PolicyManagerImpl::GetAppPermissionsChanges(
const std::string& policy_app_id) {
- typedef std::map<std::string, AppPermissions>::iterator PermissionsIt;
- PermissionsIt app_id_diff = app_permissions_diff_.find(policy_app_id);
+ PendingPermissions::iterator app_id_diff =
+ app_permissions_diff_.find(policy_app_id);
+
AppPermissions permissions(policy_app_id);
+
if (app_permissions_diff_.end() != app_id_diff) {
permissions = app_id_diff->second;
} else {
@@ -1580,6 +1657,22 @@ bool PolicyManagerImpl::IsPredataPolicy(
return cache_->IsPredataPolicy(policy_app_id);
}
+void PolicyManagerImpl::ProcessCCSStatusForApp(
+ const std::string& application_id) {
+ CCSStatus status = cache_->GetCCSStatus();
+ GroupsByCCSStatus groups_by_status =
+ cache_->GetGroupsWithSameEntities(status);
+
+ GroupsNames allowed_groups;
+ GroupsNames disallowed_groups;
+ CalculateGroupsConsentFromCCS(
+ groups_by_status, allowed_groups, disallowed_groups);
+
+ const std::string device_id = GetCurrentDeviceId(application_id);
+ UpdateAppConsentWithCCS(
+ device_id, application_id, allowed_groups, disallowed_groups);
+}
+
void PolicyManagerImpl::AddNewApplication(const std::string& application_id,
DeviceConsent device_consent) {
LOG4CXX_AUTO_TRACE(logger_);
@@ -1598,6 +1691,8 @@ void PolicyManagerImpl::AddNewApplication(const std::string& application_id,
<< " permissions for application id: " << application_id);
cache_->SetDefaultPolicy(application_id);
}
+
+ ProcessCCSStatusForApp(application_id);
}
void PolicyManagerImpl::PromoteExistedApplication(
@@ -1608,14 +1703,8 @@ void PolicyManagerImpl::PromoteExistedApplication(
cache_->IsPredataPolicy(application_id)) {
cache_->SetDefaultPolicy(application_id);
}
- if (HasCertificate()) {
- LOG4CXX_DEBUG(logger_, "Certificate exits, no update required.");
- return;
- }
- if (cache_->AppHasHMIType(application_id, policy_table::AHT_NAVIGATION)) {
- update_status_manager_.ScheduleUpdate();
- }
+ ProcessCCSStatusForApp(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 85448e2677..4d7d63ce51 100644
--- a/src/components/policy/policy_external/src/policy_table/types.cc
+++ b/src/components/policy/policy_external/src/policy_table/types.cc
@@ -2094,6 +2094,9 @@ bool ExternalConsentEntity::operator==(const ExternalConsentEntity& rhs) const {
}
bool ExternalConsentEntity::is_valid() const {
+ if (!is_initialized()) {
+ return false;
+ }
if (!entity_type.is_valid()) {
return false;
}
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 edc2fa14a9..fd49464528 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
@@ -1768,42 +1768,8 @@ bool SQLPTExtRepresentation::SetVINValue(const std::string& value) {
return result;
}
-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;
-}
-bool SQLPTExtRepresentation::SaveExternalConsentStatus(
+bool SQLPTExtRepresentation::SetExternalConsentStatus(
const ExternalConsentStatus& status) const {
LOG4CXX_AUTO_TRACE(logger_);
utils::dbms::SQLQuery query(db());
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 2704f03c6a..f9bee95486 100644
--- a/src/components/policy/policy_external/test/generated_code_test.cc
+++ b/src/components/policy/policy_external/test/generated_code_test.cc
@@ -135,6 +135,96 @@ TEST(PolicyGeneratedCodeTest, IntegerConstructionAndAssignmentTest) {
EXPECT_FALSE(valid_value.is_valid());
}
+TEST(PolicyGeneratedCodeTest, TestConsentsGroup_Validation) {
+ using namespace rpc::policy_table_interface_base;
+ // Need to validate CCS consents container wrapped with Optional for case w/o
+ // specific values assigned since it is of generic 'Map' type which requires
+ // to be empty + initialized in order to be valid
+ // Also Map type does not have specific validation on PT type
+
+ rpc::Optional<ConsentGroups> consent_groups;
+
+ EXPECT_TRUE(consent_groups.is_valid());
+
+ consent_groups->insert(
+ std::make_pair(std::string("Group1"), rpc::Boolean(true)));
+
+ EXPECT_TRUE(consent_groups.is_valid());
+
+ // Adds more than container maximum size
+ for (size_t number = 0; number < 256; ++number) {
+ std::stringstream name;
+ name << "Group" << number;
+ consent_groups->insert(std::make_pair(name.str(), rpc::Boolean(true)));
+ }
+
+ EXPECT_FALSE(consent_groups.is_valid());
+}
+
+TEST(PolicyGeneratedCodeTest,
+ TestConsentRecords_ExternalConsents_PT_Validation) {
+ using namespace rpc::policy_table_interface_base;
+ ConsentRecords consent_records;
+
+ // PT_SNAPSHOT does not care of consents since their type is 'optional'
+ // PT_UPDATE and PT_SNAPSHOT have consents as 'omitted' so they must be absent
+ consent_records.SetPolicyTableType(PT_UPDATE);
+ EXPECT_TRUE(consent_records.is_valid());
+
+ consent_records.SetPolicyTableType(PT_PRELOADED);
+ EXPECT_TRUE(consent_records.is_valid());
+
+ consent_records.SetPolicyTableType(PT_SNAPSHOT);
+ EXPECT_TRUE(consent_records.is_valid());
+
+ consent_records.external_consent_status_groups->insert(
+ std::make_pair(std::string("Group1"), true));
+
+ consent_records.external_consent_status_groups->insert(
+ std::make_pair(std::string("Group2"), false));
+
+ consent_records.SetPolicyTableType(PT_UPDATE);
+ EXPECT_FALSE(consent_records.is_valid());
+
+ consent_records.SetPolicyTableType(PT_PRELOADED);
+ EXPECT_FALSE(consent_records.is_valid());
+
+ consent_records.SetPolicyTableType(PT_SNAPSHOT);
+ EXPECT_TRUE(consent_records.is_valid());
+}
+
+TEST(PolicyGeneratedCodeTest, CCSEntity_ConstructionValidationTest) {
+ using namespace rpc::policy_table_interface_base;
+
+ CCS_Entity empty_entity;
+ EXPECT_FALSE(empty_entity.is_valid());
+
+ const std::string corrent_entity_type_field = "entityType";
+ const std::string correct_entity_id_field = "entityID";
+
+ Json::Value correct_json_entity;
+ 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);
+ EXPECT_TRUE(entity_from_correct_json.is_valid());
+
+ const std::string wrong_entity_id_field = "entityId";
+
+ Json::Value wrong_json_entity;
+ 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);
+ EXPECT_FALSE(entity_from_wrong_json.is_valid());
+
+ ExternalConsent_Entity 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
} // namespace components
} // namespace 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 0d2cc19db4..09a4a0e391 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
@@ -193,6 +193,35 @@ class PolicyManagerImplTest2 : public ::testing::Test {
// Load Json File and set it as PTU
void LoadPTUFromJsonFile(const std::string& update_file);
+
+ 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>
+ bool IsKeyExisted(const ParentType& parent, const Value& value) const {
+ return parent.end() != std::find(parent.begin(), parent.end(), value);
+ }
+
+ template <typename ParentType>
+ bool IsKeyExisted(const ParentType& parent, const std::string& value) const {
+ return parent.end() != parent.find(value);
+ }
+
+ template <typename ParentType, typename KeyType>
+ const KeyType& GetKeyData(const ParentType& parent,
+ const std::string& key_name) const {
+ DCHECK(IsKeyExisted<ParentType>(parent, key_name));
+ return parent.find(key_name)->second;
+ }
+
+ bool CheckPolicyTimeStamp(const std::string& str) const;
};
class PolicyManagerImplTest_RequestTypes : public ::testing::Test {
@@ -238,6 +267,37 @@ class PolicyManagerImplTest_RequestTypes : public ::testing::Test {
void TearDown() OVERRIDE;
};
+class PolicyManagerImplTest_CCS : public PolicyManagerImplTest2 {
+ public:
+ PolicyManagerImplTest_CCS()
+ : PolicyManagerImplTest2()
+ , group_name_1_("Group1")
+ , group_name_2_("Group2")
+ , group_name_3_("Group3") {}
+
+ protected:
+ void PreconditionCCSPreparePTWithAppGroupsAndConsents();
+
+ void PreconditionCCSPreparePTWithAppPolicy();
+
+ policy_table::Table PreparePTWithGroupsHavingCCS();
+
+ std::string PreparePTUWithNewGroup(const uint32_t type,
+ const uint32_t id,
+ const std::string& group_name);
+
+ const uint32_t type_1_ = 0;
+ const uint32_t id_1_ = 1;
+ const uint32_t type_2_ = 2;
+ const uint32_t id_2_ = 3;
+ const uint32_t type_3_ = 4;
+ const uint32_t id_3_ = 5;
+
+ const std::string group_name_1_;
+ const std::string group_name_2_;
+ const std::string group_name_3_;
+};
+
} // namespace policy_test
} // namespace components
} // namespace test
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 5983f3c7c8..504467d229 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
@@ -85,6 +85,7 @@ TEST_F(PolicyManagerImplTest,
TEST_F(PolicyManagerImplTest2, GetNotificationsNumberAfterPTUpdate) {
// Arrange
+ CreateLocalPT(preloaded_pt_filename_);
Json::Value table = createPTforLoad();
policy_manager_->ForcePTExchange();
@@ -125,7 +126,12 @@ TEST_F(PolicyManagerImplTest2, GetNotificationsNumberAfterPTUpdate) {
TEST_F(PolicyManagerImplTest2, IsAppRevoked_SetRevokedAppID_ExpectAppRevoked) {
// Arrange
- std::ifstream ifile(kValidSdlPtUpdateJson);
+ CreateLocalPT(preloaded_pt_filename_);
+
+ AppHmiTypes types;
+ policy_manager_->AddApplication(app_id_1_, types);
+
+ std::ifstream ifile(preloaded_pt_filename_);
Json::Reader reader;
std::string json;
Json::Value root(Json::objectValue);
@@ -138,41 +144,38 @@ TEST_F(PolicyManagerImplTest2, IsAppRevoked_SetRevokedAppID_ExpectAppRevoked) {
::policy::BinaryMessage msg(json.begin(), json.end());
ASSERT_TRUE(policy_manager_->LoadPT(kFilePtUpdateJson, msg));
EXPECT_FALSE(policy_manager_->GetCache()->IsPTPreloaded());
+ CheckRpcPermissions(
+ app_id_1_, "UnregisterAppInterface", ::policy::kRpcDisallowed);
EXPECT_TRUE(policy_manager_->IsApplicationRevoked(app_id_1_));
}
-TEST_F(
- PolicyManagerImplTest2,
- IsAppRevoked_ReregisterRevokedApp_OnHmiNotificationIsSentWithProperValues) {
+// Related to manual test APPLINK-18792
+TEST_F(PolicyManagerImplTest2, AppRevokedOne_AppRegistered) {
// Arrange
- CreateLocalPT(preloadet_pt_filename_);
-
- manager_->AddApplication(app_id_1_);
+ CreateLocalPT(preloaded_pt_filename_);
+ EmulatePTAppRevoked(kPtu2Json);
- // Check RPC is allowed and OnHMIStatus is sent
- CheckRpcPermissions("OnHMIStatus", ::policy::kRpcAllowed);
-
- 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();
- }
- ifile.close();
+ EXPECT_FALSE(policy_manager_->GetCache()->IsPTPreloaded());
+ ASSERT_TRUE(
+ (policy_manager_->GetCache())->AddDevice(device_id_2_, "Bluetooth"));
+ policy_manager_->AddApplication(application_id_, hmi_types_);
+ // Registration is allowed
+ CheckRpcPermissions("RegisterAppInterface", ::policy::kRpcAllowed);
+}
- ::policy::BinaryMessage msg(json.begin(), json.end());
- ASSERT_TRUE(manager_->LoadPT(kFilePtUpdateJson, msg));
- EXPECT_TRUE(manager_->IsApplicationRevoked(app_id_1_));
+// Related to manual test APPLINK-18794
+TEST_F(PolicyManagerImplTest2, AppRevokedOne_AppRegistered_HMIDefault) {
+ // Arrange
+ CreateLocalPT(preloaded_pt_filename_);
+ EmulatePTAppRevoked(kPtu2Json);
- // Re-register application
- manager_->AddApplication(app_id_1_);
- EXPECT_NE(typeid(utils::CallNothing),
- typeid(manager_->AddApplication(app_id_1_)));
+ EXPECT_FALSE(policy_manager_->GetCache()->IsPTPreloaded());
+ policy_manager_->AddApplication(application_id_, hmi_types_);
- // Check RPC is disallowed and OnHMIStatus is sent
- CheckRpcPermissions("OnHMIStatus", ::policy::kRpcDisallowed);
+ std::string default_hmi;
+ // Default HMI level is NONE
+ EXPECT_TRUE(policy_manager_->GetDefaultHmi(application_id_, &default_hmi));
+ EXPECT_EQ("NONE", default_hmi);
}
TEST_F(PolicyManagerImplTest2,
@@ -546,6 +549,34 @@ TEST_F(PolicyManagerImplTest2,
EXPECT_TRUE(output.list_of_undefined_params.empty());
}
+TEST_F(PolicyManagerImplTest2, GetUpdateUrl) {
+ // Arrange
+ CreateLocalPT(preloaded_pt_filename_);
+ GetPTU(preloaded_pt_filename_);
+ // Check expectations
+ const std::string update_url(
+ "http://policies.telematics.ford.com/api/policies");
+ EXPECT_EQ(update_url, policy_manager_->GetUpdateUrl(7));
+ EXPECT_EQ("", policy_manager_->GetUpdateUrl(4));
+}
+
+// Related to manual test APPLINK-18789
+TEST_F(PolicyManagerImplTest2, GetCorrectStatus_PTUSuccessful) {
+ // Precondition
+ CreateLocalPT(preloaded_pt_filename_);
+ // Check
+ 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());
+ // Before load PT we should send notification about start updating
+ policy_manager_->OnUpdateStarted();
+ // Update
+ GetPTU(kPtu3Json);
+ EXPECT_EQ("UP_TO_DATE", policy_manager_->GetPolicyTableStatus());
+}
+
TEST_F(PolicyManagerImplTest2,
CheckPermissions_NoParamsInPT_AddAppWithAllParams_CheckRpcsInDiffLvls) {
// File does not have parameters, so they all are permitted
@@ -1587,14 +1618,16 @@ TEST_F(
policy_table::RequestTypes correct_types;
correct_types.push_back(policy_table::RequestType::RT_HTTP);
- // Load RequestType with invalid values
- RefreshPT(preloadet_pt_filename_, kJsonFiles[13]);
+ ON_CALL(listener_, OnCurrentDeviceIdUpdateRequired(_))
+ .WillByDefault(Return(device_id));
+
+ utils::SharedPtr<Table> pt = (policy_manager_->GetCache())->GetPT();
// Get Request Types for "<pre_DataConsent>"
policy_table::RequestTypes received_types =
GetRequestTypesForApplication(policy::kPreDataConsentId);
- CompareRequestTypesContainers(correct_types, received_types);
+ const DeviceData& device_data = *pt->policy_table.device_data;
}
TEST_F(PolicyManagerImplTest_RequestTypes,
@@ -1602,13 +1635,25 @@ TEST_F(PolicyManagerImplTest_RequestTypes,
// Load RequestType with empty values
RefreshPT(preloadet_pt_filename_, kJsonFiles[14]);
- // Get Request Types for "<pre_DataConsent>"
- policy_table::RequestTypes received_types =
- GetRequestTypesForApplication(policy::kPreDataConsentId);
+ EXPECT_EQ(1u, device_data.size());
- // Expect
- const size_t received_size = received_types.size();
- EXPECT_EQ(0u, received_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());
+
+ EXPECT_TRUE(time_stamp_result);
+ EXPECT_EQ(DeviceConsent::kDeviceAllowed, device_consent);
}
TEST_F(
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 6a10478399..050630514c 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
@@ -259,19 +259,19 @@ TEST_F(PolicyManagerImplTest2,
TEST_F(
PolicyManagerImplTest2,
AddValidRequestTypeToPT_GetNewAppWithSpecificPoliciesViaPTU_ExpectRTAdded) {
- const std::string section_name = application_id_;
+ const std::string& app_id = application_id_;
// Arrange
CreateLocalPT(preloadet_pt_filename_);
// Add app
- policy_manager_->AddApplication(section_name);
+ policy_manager_->AddApplication(app_id, hmi_types_);
// Check app gets RequestTypes from pre_DataConsent of app_policies
// section
- pt_request_types_ = policy_manager_->GetAppRequestTypes(section_name);
+ pt_request_types_ = policy_manager_->GetAppRequestTypes(app_id);
// Only single item as in pre_DataConsent in preloaded PT
EXPECT_EQ(1u, pt_request_types_.size());
- EXPECT_CALL(listener_, OnPendingPermissionChange(section_name)).Times(1);
+ EXPECT_CALL(listener_, OnPendingPermissionChange(app_id)).Times(1);
// PTU has RequestTypes as [] - means 'all allowed'
Json::Value root = GetPTU("json/PTU2.json");
@@ -284,18 +284,18 @@ TEST_F(
// Get App Request Types from PTU
ptu_request_types_ =
- root["policy_table"]["app_policies"][section_name]["RequestType"];
+ root["policy_table"]["app_policies"][app_id]["RequestType"];
ptu_request_types_size_ = ptu_request_types_.size();
pt_request_types_.clear();
// Get RequestTypes from <app_id> section of app policies after PT update
- pt_request_types_ = policy_manager_->GetAppRequestTypes(section_name);
+ pt_request_types_ = policy_manager_->GetAppRequestTypes(app_id);
// Check sizes of Request types of PT and PTU
ASSERT_EQ(ptu_request_types_size_, pt_request_types_.size());
::policy::AppPermissions permissions =
- policy_manager_->GetAppPermissionsChanges(section_name);
+ policy_manager_->GetAppPermissionsChanges(app_id);
EXPECT_TRUE(permissions.requestTypeChanged);
::policy::StringArray result;
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 77a70f1b45..d260e16922 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
@@ -34,9 +34,11 @@
#include "json/reader.h"
#include "gtest/gtest.h"
+#include <utility>
#include "policy/policy_manager_impl_test_base.h"
#include "utils/make_shared.h"
+#include "utils/shared_ptr.h"
using ::testing::_;
using ::testing::Return;
@@ -341,6 +343,746 @@ TEST_F(PolicyManagerImplTest2, GetCurrentDeviceId) {
EXPECT_EQ("", policy_manager_->GetCurrentDeviceId(app_id_2_));
}
+TEST_F(PolicyManagerImplTest_CCS,
+ CCS_SetCCSStatusWhileAppExists_ExpectUserConsentsUpdateForApp) {
+ using namespace policy_table;
+ using namespace rpc;
+
+ PreconditionCCSPreparePTWithAppGroupsAndConsents();
+
+ utils::SharedPtr<policy_table::Table> pt =
+ policy_manager_->GetCache()->GetPT();
+
+ // Checking groups consents before setting CCS status
+ const policy_table::DeviceData::const_iterator device_data =
+ pt->policy_table.device_data->find(device_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.device_data->end() != device_data);
+
+ const UserConsentRecords::const_iterator updated_consent_records =
+ device_data->second.user_consent_records->find(app_id_1_);
+
+ EXPECT_TRUE(device_data->second.user_consent_records->end() !=
+ updated_consent_records);
+
+ const ConsentGroups::const_iterator group_1 =
+ updated_consent_records->second.consent_groups->find(group_name_1_);
+ EXPECT_TRUE(updated_consent_records->second.consent_groups->end() != group_1);
+
+ EXPECT_EQ(Boolean(true), group_1->second);
+
+ const ConsentGroups::const_iterator group_2 =
+ updated_consent_records->second.consent_groups->find(group_name_2_);
+
+ EXPECT_TRUE(updated_consent_records->second.consent_groups->end() != group_2);
+
+ EXPECT_EQ(Boolean(false), group_2->second);
+
+ const ConsentGroups::const_iterator group_3 =
+ updated_consent_records->second.consent_groups->find(group_name_3_);
+
+ 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));
+
+ EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _));
+
+ EXPECT_TRUE(policy_manager_->SetCCSStatus(status));
+
+ // Checking groups consent after setting CCS status
+ EXPECT_EQ(Boolean(false), group_1->second);
+ EXPECT_EQ(Boolean(true), group_2->second);
+
+ // Check, that no consent has been added for third groups
+ const ConsentGroups::const_iterator updated_group_3 =
+ updated_consent_records->second.consent_groups->find(group_name_3_);
+
+ EXPECT_FALSE(updated_consent_records->second.consent_groups->end() !=
+ updated_group_3);
+}
+
+TEST_F(PolicyManagerImplTest_CCS,
+ CCS_SetCCSStatusWhileAppExists_ExpectCCSConsentsUpdateForApp) {
+ using namespace policy_table;
+ using namespace rpc;
+
+ PreconditionCCSPreparePTWithAppGroupsAndConsents();
+
+ // Act
+ utils::SharedPtr<policy_table::Table> pt =
+ policy_manager_->GetCache()->GetPT();
+
+ // Checking CCS consents before setting new CCS status
+ policy_table::DeviceData::const_iterator updated_device_data =
+ pt->policy_table.device_data->find(device_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.device_data->end() != updated_device_data);
+
+ UserConsentRecords::const_iterator updated_consent_records =
+ updated_device_data->second.user_consent_records->find(app_id_1_);
+
+ EXPECT_TRUE(updated_device_data->second.user_consent_records->end() !=
+ updated_consent_records);
+
+ EXPECT_TRUE(updated_consent_records->second.ccs_consent_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));
+
+ EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _));
+
+ EXPECT_TRUE(policy_manager_->SetCCSStatus(status));
+
+ // Checking CCS consents after setting new CCS status
+ const ConsentGroups& ccs_consents =
+ *updated_consent_records->second.ccs_consent_groups;
+
+ const ApplicationPolicies::const_iterator app_parameters =
+ pt->policy_table.app_policies_section.apps.find(app_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.app_policies_section.apps.end() !=
+ app_parameters);
+
+ EXPECT_EQ(app_parameters->second.groups.size(), ccs_consents.size());
+
+ const ConsentGroups::const_iterator updated_group_1 =
+ ccs_consents.find(group_name_1_);
+
+ EXPECT_TRUE(ccs_consents.end() != updated_group_1);
+
+ const ConsentGroups::const_iterator updated_group_2 =
+ ccs_consents.find(group_name_2_);
+
+ EXPECT_TRUE(ccs_consents.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) {
+ using namespace policy_table;
+ using namespace rpc;
+
+ PreconditionCCSPreparePTWithAppPolicy();
+
+ // 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));
+
+ EXPECT_TRUE(policy_manager_->SetCCSStatus(status));
+
+ // Checking CCS consents after setting new CCS status
+ policy_table::DeviceData::const_iterator updated_device_data =
+ pt->policy_table.device_data->find(device_id_1_);
+
+ EXPECT_FALSE(pt->policy_table.device_data->end() != updated_device_data);
+
+ EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _));
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_))
+ .WillRepeatedly(Return(device_id_1_));
+
+ policy_manager_->AddApplication(app_id_1_, AppHmiTypes());
+
+ // Check CCS 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);
+
+ 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;
+
+ ApplicationPolicies::const_iterator app_parameters =
+ pt->policy_table.app_policies_section.apps.find(app_id_1_);
+
+ app_parameters = pt->policy_table.app_policies_section.apps.find(app_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.app_policies_section.apps.end() !=
+ app_parameters);
+
+ EXPECT_EQ(app_parameters->second.groups.size(), ccs_consents.size());
+
+ ConsentGroups::const_iterator updated_group_1 =
+ ccs_consents.find(group_name_1_);
+
+ EXPECT_TRUE(ccs_consents.end() != updated_group_1);
+
+ ConsentGroups::const_iterator updated_group_2 =
+ ccs_consents.find(group_name_2_);
+
+ EXPECT_TRUE(ccs_consents.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) {
+ using namespace policy_table;
+ using namespace rpc;
+
+ PreconditionCCSPreparePTWithAppPolicy();
+
+ // 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));
+
+ EXPECT_TRUE(policy_manager_->SetCCSStatus(status));
+
+ // Checking CCS consents after setting new CCS status
+ policy_table::DeviceData::const_iterator updated_device_data =
+ pt->policy_table.device_data->find(device_id_1_);
+
+ EXPECT_FALSE(pt->policy_table.device_data->end() != updated_device_data);
+
+ EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _));
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_))
+ .WillRepeatedly(Return(device_id_1_));
+
+ policy_manager_->AddApplication(app_id_1_, AppHmiTypes());
+
+ // Checking CCS consents after setting new CCS status
+ ApplicationPolicies::const_iterator app_parameters =
+ pt->policy_table.app_policies_section.apps.find(app_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.app_policies_section.apps.end() !=
+ app_parameters);
+
+ updated_device_data = pt->policy_table.device_data->find(device_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.device_data->end() != updated_device_data);
+
+ UserConsentRecords::const_iterator updated_consent_records =
+ updated_device_data->second.user_consent_records->find(app_id_1_);
+
+ EXPECT_TRUE(updated_device_data->second.user_consent_records->end() !=
+ updated_consent_records);
+
+ const ConsentGroups& ccs_consents =
+ *updated_consent_records->second.consent_groups;
+
+ EXPECT_EQ(app_parameters->second.groups.size(), ccs_consents.size());
+
+ ConsentGroups::const_iterator updated_group_1 =
+ ccs_consents.find(group_name_1_);
+
+ EXPECT_TRUE(ccs_consents.end() != updated_group_1);
+
+ ConsentGroups::const_iterator updated_group_2 =
+ ccs_consents.find(group_name_2_);
+
+ EXPECT_TRUE(ccs_consents.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) {
+ using namespace policy_table;
+ using namespace rpc;
+
+ CreateLocalPT(preloaded_pt_filename_);
+ Table t = PreparePTWithGroupsHavingCCS();
+
+ EXPECT_TRUE(policy_manager_->GetCache()->ApplyUpdate(t));
+
+ EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)).Times(AtLeast(2));
+ 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());
+
+ // 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));
+
+ EXPECT_TRUE(policy_manager_->SetCCSStatus(status));
+
+ // Checking CCS consents after setting new CCS status
+ policy_table::DeviceData::const_iterator updated_device_data =
+ pt->policy_table.device_data->find(device_id_1_);
+
+ EXPECT_FALSE(pt->policy_table.device_data->end() != updated_device_data);
+
+ ApplicationParams app_params;
+ app_params.groups.push_back(group_name_1_);
+ app_params.groups.push_back(group_name_2_);
+
+ t.policy_table.app_policies_section.apps.insert(
+ std::make_pair(app_id_1_, app_params));
+
+ // Adding application groups to consent, will be pending untill next
+ // registration
+ EXPECT_TRUE(policy_manager_->GetCache()->ApplyUpdate(t));
+
+ // Second time register w/ app having groups to consent
+ policy_manager_->AddApplication(app_id_1_, AppHmiTypes());
+
+ // Checking CCS consents after setting new CCS status
+ ApplicationPolicies::const_iterator app_parameters =
+ pt->policy_table.app_policies_section.apps.find(app_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.app_policies_section.apps.end() !=
+ app_parameters);
+
+ updated_device_data = pt->policy_table.device_data->find(device_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.device_data->end() != updated_device_data);
+
+ UserConsentRecords::const_iterator updated_consent_records =
+ updated_device_data->second.user_consent_records->find(app_id_1_);
+
+ EXPECT_TRUE(updated_device_data->second.user_consent_records->end() !=
+ updated_consent_records);
+
+ const ConsentGroups& ccs_consents =
+ *updated_consent_records->second.consent_groups;
+
+ EXPECT_EQ(app_parameters->second.groups.size(), ccs_consents.size());
+
+ ConsentGroups::const_iterator updated_group_1 =
+ ccs_consents.find(group_name_1_);
+
+ EXPECT_TRUE(ccs_consents.end() != updated_group_1);
+
+ ConsentGroups::const_iterator updated_group_2 =
+ ccs_consents.find(group_name_2_);
+
+ EXPECT_TRUE(ccs_consents.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) {
+ using namespace policy_table;
+ using namespace rpc;
+
+ CreateLocalPT(preloaded_pt_filename_);
+ Table t = PreparePTWithGroupsHavingCCS();
+
+ EXPECT_TRUE(policy_manager_->GetCache()->ApplyUpdate(t));
+
+ EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)).Times(AtLeast(2));
+ 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());
+
+ // 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));
+
+ EXPECT_TRUE(policy_manager_->SetCCSStatus(status));
+
+ // Checking CCS consents after setting new CCS status
+ policy_table::DeviceData::const_iterator updated_device_data =
+ pt->policy_table.device_data->find(device_id_1_);
+
+ EXPECT_FALSE(pt->policy_table.device_data->end() != updated_device_data);
+
+ ApplicationParams app_params;
+ app_params.groups.push_back(group_name_1_);
+ app_params.groups.push_back(group_name_2_);
+
+ t.policy_table.app_policies_section.apps.insert(
+ std::make_pair(app_id_1_, app_params));
+
+ // Adding application groups to consent, will be pending i.e. not consented
+ // yet, untill next registration
+ EXPECT_TRUE(policy_manager_->GetCache()->ApplyUpdate(t));
+
+ // Second time register w/ app having groups to consent
+ policy_manager_->AddApplication(app_id_1_, AppHmiTypes());
+
+ // Check CCS 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);
+
+ 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;
+
+ ApplicationPolicies::const_iterator app_parameters =
+ pt->policy_table.app_policies_section.apps.find(app_id_1_);
+
+ app_parameters = pt->policy_table.app_policies_section.apps.find(app_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.app_policies_section.apps.end() !=
+ app_parameters);
+
+ EXPECT_EQ(app_parameters->second.groups.size(), ccs_consents.size());
+
+ ConsentGroups::const_iterator updated_group_1 =
+ ccs_consents.find(group_name_1_);
+
+ EXPECT_TRUE(ccs_consents.end() != updated_group_1);
+
+ ConsentGroups::const_iterator updated_group_2 =
+ ccs_consents.find(group_name_2_);
+
+ EXPECT_TRUE(ccs_consents.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) {
+ using namespace policy_table;
+ using namespace rpc;
+
+ PreconditionCCSPreparePTWithAppGroupsAndConsents();
+
+ 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));
+
+ EXPECT_TRUE(policy_manager_->SetCCSStatus(status));
+
+ EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)).Times(AtLeast(1));
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_))
+ .WillRepeatedly(Return(device_id_1_));
+
+ policy_manager_->AddApplication(app_id_1_, AppHmiTypes());
+
+ utils::SharedPtr<policy_table::Table> pt =
+ policy_manager_->GetCache()->GetPT();
+
+ // Check CCS consents for application
+ policy_table::DeviceData::const_iterator initial_device_data =
+ pt->policy_table.device_data->find(device_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.device_data->end() != initial_device_data);
+
+ UserConsentRecords::const_iterator initial_consent_records =
+ initial_device_data->second.user_consent_records->find(app_id_1_);
+
+ EXPECT_TRUE(initial_device_data->second.user_consent_records->end() !=
+ initial_consent_records);
+
+ const ConsentGroups& ccs_consents =
+ *initial_consent_records->second.ccs_consent_groups;
+
+ ConsentGroups::const_iterator group_1 = ccs_consents.find(group_name_1_);
+
+ EXPECT_TRUE(ccs_consents.end() != group_1);
+
+ ConsentGroups::const_iterator group_2 = ccs_consents.find(group_name_2_);
+
+ EXPECT_TRUE(ccs_consents.end() != group_2);
+
+ ConsentGroups::const_iterator group_4 = ccs_consents.find(group_name_4);
+
+ EXPECT_FALSE(ccs_consents.end() != group_4);
+
+ // Consents for known groups have been done
+ EXPECT_EQ(Boolean(false), group_1->second);
+ EXPECT_EQ(Boolean(true), group_2->second);
+
+ ApplicationPolicies::const_iterator app_parameters =
+ pt->policy_table.app_policies_section.apps.find(app_id_1_);
+
+ app_parameters = pt->policy_table.app_policies_section.apps.find(app_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.app_policies_section.apps.end() !=
+ app_parameters);
+
+ EXPECT_EQ(app_parameters->second.groups.size(), ccs_consents.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()));
+
+ EXPECT_CALL(listener_, OnCertificateUpdated(_));
+
+ EXPECT_TRUE(policy_manager_->LoadPT("DummyFileName", msg));
+
+ pt = policy_manager_->GetCache()->GetPT();
+
+ policy_table::DeviceData::const_iterator updated_device_data =
+ pt->policy_table.device_data->find(device_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.device_data->end() != updated_device_data);
+
+ UserConsentRecords::const_iterator updated_consent_records =
+ updated_device_data->second.user_consent_records->find(app_id_1_);
+
+ 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;
+
+ group_1 = updated_ccs_consents.find(group_name_1_);
+
+ EXPECT_TRUE(updated_ccs_consents.end() != group_1);
+
+ group_2 = updated_ccs_consents.find(group_name_2_);
+
+ EXPECT_TRUE(updated_ccs_consents.end() != group_2);
+
+ group_4 = updated_ccs_consents.find(group_name_4);
+
+ EXPECT_TRUE(updated_ccs_consents.end() != group_4);
+
+ EXPECT_EQ(Boolean(false), group_1->second);
+ EXPECT_EQ(Boolean(true), group_2->second);
+ EXPECT_EQ(Boolean(false), group_4->second);
+
+ app_parameters = pt->policy_table.app_policies_section.apps.find(app_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.app_policies_section.apps.end() !=
+ app_parameters);
+
+ EXPECT_EQ(app_parameters->second.groups.size(), ccs_consents.size());
+}
+
+TEST_F(PolicyManagerImplTest_CCS,
+ CCS_PTUWithNewGroups_ExpectUserConsentsUpdateForApp) {
+ using namespace policy_table;
+ using namespace rpc;
+
+ PreconditionCCSPreparePTWithAppGroupsAndConsents();
+
+ 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));
+
+ EXPECT_TRUE(policy_manager_->SetCCSStatus(status));
+
+ EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _)).Times(AtLeast(1));
+ EXPECT_CALL(listener_, OnCurrentDeviceIdUpdateRequired(app_id_1_))
+ .WillRepeatedly(Return(device_id_1_));
+
+ policy_manager_->AddApplication(app_id_1_, AppHmiTypes());
+
+ utils::SharedPtr<policy_table::Table> pt =
+ policy_manager_->GetCache()->GetPT();
+
+ // Check CCS consents for application
+ policy_table::DeviceData::const_iterator initial_device_data =
+ pt->policy_table.device_data->find(device_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.device_data->end() != initial_device_data);
+
+ UserConsentRecords::const_iterator initial_consent_records =
+ initial_device_data->second.user_consent_records->find(app_id_1_);
+
+ EXPECT_TRUE(initial_device_data->second.user_consent_records->end() !=
+ initial_consent_records);
+
+ const ConsentGroups& user_consents =
+ *initial_consent_records->second.consent_groups;
+
+ ConsentGroups::const_iterator group_1 = user_consents.find(group_name_1_);
+
+ EXPECT_TRUE(user_consents.end() != group_1);
+
+ ConsentGroups::const_iterator group_2 = user_consents.find(group_name_2_);
+
+ EXPECT_TRUE(user_consents.end() != group_2);
+
+ ConsentGroups::const_iterator group_4 = user_consents.find(group_name_4);
+
+ EXPECT_FALSE(user_consents.end() != group_4);
+
+ EXPECT_EQ(Boolean(false), group_1->second);
+ EXPECT_EQ(Boolean(true), group_2->second);
+
+ ApplicationPolicies::const_iterator app_parameters =
+ pt->policy_table.app_policies_section.apps.find(app_id_1_);
+
+ app_parameters = pt->policy_table.app_policies_section.apps.find(app_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.app_policies_section.apps.end() !=
+ app_parameters);
+
+ EXPECT_EQ(app_parameters->second.groups.size(), user_consents.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()));
+
+ EXPECT_CALL(listener_, OnCertificateUpdated(_));
+
+ EXPECT_TRUE(policy_manager_->LoadPT("DummyFileName", msg));
+
+ pt = policy_manager_->GetCache()->GetPT();
+
+ policy_table::DeviceData::const_iterator updated_device_data =
+ pt->policy_table.device_data->find(device_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.device_data->end() != updated_device_data);
+
+ UserConsentRecords::const_iterator updated_consent_records =
+ updated_device_data->second.user_consent_records->find(app_id_1_);
+
+ EXPECT_TRUE(updated_device_data->second.user_consent_records->end() !=
+ updated_consent_records);
+
+ const ConsentGroups& updated_user_consents =
+ *updated_consent_records->second.consent_groups;
+
+ group_1 = updated_user_consents.find(group_name_1_);
+
+ EXPECT_TRUE(updated_user_consents.end() != group_1);
+
+ group_2 = updated_user_consents.find(group_name_2_);
+
+ EXPECT_TRUE(updated_user_consents.end() != group_2);
+
+ group_4 = updated_user_consents.find(group_name_4);
+
+ EXPECT_TRUE(updated_user_consents.end() != group_4);
+
+ EXPECT_EQ(Boolean(false), group_1->second);
+ EXPECT_EQ(Boolean(true), group_2->second);
+ EXPECT_EQ(Boolean(false), group_4->second);
+
+ app_parameters = pt->policy_table.app_policies_section.apps.find(app_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.app_policies_section.apps.end() !=
+ app_parameters);
+
+ EXPECT_EQ(app_parameters->second.groups.size(), user_consents.size());
+}
+
+TEST_F(PolicyManagerImplTest_CCS,
+ CCS_SetCCSStatusTurnOnThanOff_ExpectCCSConsentsUpdateForApp) {
+ using namespace policy_table;
+ using namespace rpc;
+
+ PreconditionCCSPreparePTWithAppGroupsAndConsents();
+
+ // Act
+ utils::SharedPtr<policy_table::Table> pt =
+ policy_manager_->GetCache()->GetPT();
+
+ // Checking CCS consents before setting new CCS status
+ policy_table::DeviceData::const_iterator updated_device_data =
+ pt->policy_table.device_data->find(device_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.device_data->end() != updated_device_data);
+
+ UserConsentRecords::const_iterator updated_consent_records =
+ updated_device_data->second.user_consent_records->find(app_id_1_);
+
+ EXPECT_TRUE(updated_device_data->second.user_consent_records->end() !=
+ updated_consent_records);
+
+ EXPECT_TRUE(updated_consent_records->second.ccs_consent_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));
+
+ EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _));
+
+ EXPECT_TRUE(policy_manager_->SetCCSStatus(status_on));
+
+ // Checking CCS consents after setting new CCS status
+ const ConsentGroups& ccs_consents =
+ *updated_consent_records->second.ccs_consent_groups;
+
+ ApplicationPolicies::const_iterator app_parameters =
+ pt->policy_table.app_policies_section.apps.find(app_id_1_);
+
+ EXPECT_TRUE(pt->policy_table.app_policies_section.apps.end() !=
+ app_parameters);
+
+ EXPECT_EQ(app_parameters->second.groups.size(), ccs_consents.size());
+
+ ConsentGroups::const_iterator updated_group_1 =
+ ccs_consents.find(group_name_1_);
+
+ EXPECT_TRUE(ccs_consents.end() != updated_group_1);
+
+ ConsentGroups::const_iterator updated_group_2 =
+ ccs_consents.find(group_name_2_);
+
+ EXPECT_TRUE(ccs_consents.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));
+
+ EXPECT_CALL(listener_, OnPermissionsUpdated(app_id_1_, _));
+
+ EXPECT_TRUE(policy_manager_->SetCCSStatus(status_on));
+
+ EXPECT_EQ(Boolean(true), updated_group_1->second);
+ EXPECT_EQ(Boolean(false), updated_group_2->second);
+}
+
} // namespace policy
} // namespace components
} // namespace test
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 30007babad..a2b2d14cb3 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
@@ -39,6 +39,7 @@
#include "utils/file_system.h"
#include "utils/make_shared.h"
+#include "utils/gen_hash.h"
#include "json/reader.h"
#include "policy/mock_pt_ext_representation.h"
@@ -50,6 +51,7 @@ namespace policy_test {
using ::testing::Return;
using ::testing::ReturnRef;
using ::testing::ContainerEq;
+using ::testing::_;
// Help functions
char GenRandomChar(char range_from, char range_to) {
@@ -199,8 +201,16 @@ PolicyManagerImplTest::PolicyManagerImplTest()
void PolicyManagerImplTest::SetUp() {
policy_manager_ = new PolicyManagerImpl();
cache_manager_ = new MockCacheManagerInterface();
- policy_manager_->set_cache_manager(cache_manager_);
- policy_manager_->set_listener(&listener_);
+ manager_->set_cache_manager(cache_manager_);
+ manager_->set_listener(&listener_);
+
+ ON_CALL(*cache_manager_, GetCCSStatus()).WillByDefault(Return(CCSStatus()));
+ ON_CALL(*cache_manager_, GetGroupsWithSameEntities(_))
+ .WillByDefault(Return(GroupsByCCSStatus()));
+ ON_CALL(*cache_manager_, GetKnownLinksFromPT())
+ .WillByDefault(Return(ApplicationsLinks()));
+ ON_CALL(listener_, GetRegisteredLinks())
+ .WillByDefault(Return(policy::ApplicationsLinks()));
}
void PolicyManagerImplTest::TearDown() {
@@ -235,6 +245,9 @@ PolicyManagerImplTest2::PolicyManagerImplTest2()
, ptu_request_types_(Json::arrayValue) {}
void PolicyManagerImplTest2::SetUp() {
+ ON_CALL(listener_, GetRegisteredLinks())
+ .WillByDefault(Return(policy::ApplicationsLinks()));
+
file_system::CreateDirectory(app_storage_folder_);
policy_manager_ = new PolicyManagerImpl(in_memory_);
@@ -586,6 +599,9 @@ PolicyManagerImplTest_RequestTypes::PolicyManagerImplTest_RequestTypes()
, preloadet_pt_filename_(kSdlPreloadedPtJson) {}
void PolicyManagerImplTest_RequestTypes::SetUp() {
+ ON_CALL(listener_, GetRegisteredLinks())
+ .WillByDefault(Return(policy::ApplicationsLinks()));
+
file_system::CreateDirectory(app_storage_folder_);
const bool in_memory = true;
policy_manager_impl_sptr_ = utils::MakeShared<PolicyManagerImpl>(in_memory);
@@ -705,6 +721,157 @@ void PolicyManagerImplTest_RequestTypes::TearDown() {
file_system::RemoveDirectory(app_storage_folder_, true);
}
+void PolicyManagerImplTest_CCS::
+ PreconditionCCSPreparePTWithAppGroupsAndConsents() {
+ using namespace policy_table;
+ using namespace rpc;
+
+ CreateLocalPT(preloaded_pt_filename_);
+ Table t = PreparePTWithGroupsHavingCCS();
+
+ ApplicationParams app_params;
+ app_params.groups.push_back(group_name_1_);
+ app_params.groups.push_back(group_name_2_);
+
+ t.policy_table.app_policies_section.apps.insert(
+ std::make_pair(app_id_1_, app_params));
+
+ EXPECT_TRUE(policy_manager_->GetCache()->ApplyUpdate(t));
+
+ // User allows first group and disallows second group. Third is kept
+ // untouched.
+ PermissionConsent permissions;
+ permissions.device_id = device_id_1_;
+ permissions.policy_app_id = app_id_1_;
+
+ FunctionalGroupPermission group_permissions_1;
+ group_permissions_1.group_name = group_name_1_;
+ group_permissions_1.group_alias = group_name_1_;
+ group_permissions_1.group_id = utils::Djb2HashFromString(group_name_1_);
+ group_permissions_1.state = kGroupAllowed;
+
+ FunctionalGroupPermission group_permissions_2;
+ group_permissions_2.group_name = group_name_2_;
+ group_permissions_2.group_alias = group_name_2_;
+ group_permissions_2.group_id = utils::Djb2HashFromString(group_name_2_);
+ group_permissions_2.state = kGroupDisallowed;
+
+ permissions.group_permissions.push_back(group_permissions_1);
+ permissions.group_permissions.push_back(group_permissions_2);
+
+ policy_manager_->SetUserConsentForApp(permissions);
+}
+
+void PolicyManagerImplTest_CCS::PreconditionCCSPreparePTWithAppPolicy() {
+ 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.
+ CreateLocalPT(preloaded_pt_filename_);
+ Table t = PreparePTWithGroupsHavingCCS();
+
+ ApplicationParams app_params;
+ app_params.groups.push_back(group_name_1_);
+ app_params.groups.push_back(group_name_2_);
+
+ t.policy_table.app_policies_section.apps.insert(
+ std::make_pair(app_id_1_, app_params));
+
+ EXPECT_TRUE(policy_manager_->GetCache()->ApplyUpdate(t));
+}
+
+rpc::policy_table_interface_base::Table
+PolicyManagerImplTest_CCS::PreparePTWithGroupsHavingCCS() {
+ 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.
+
+ CCS_Entity entity_1(type_1_, id_1_);
+ CCS_Entity entity_2(type_2_, id_2_);
+ CCS_Entity entity_3(type_3_, id_3_);
+
+ Rpcs rpcs_1;
+ rpcs_1.disallowed_by_ccs_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.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.user_consent_prompt = group_name_3_;
+ rpcs_3.rpcs.set_to_null();
+
+ Table t;
+ t.policy_table.functional_groupings.insert(
+ std::make_pair(group_name_1_, rpcs_1));
+ t.policy_table.functional_groupings.insert(
+ std::make_pair(group_name_2_, rpcs_2));
+ t.policy_table.functional_groupings.insert(
+ std::make_pair(group_name_3_, rpcs_3));
+
+ return t;
+}
+
+std::string PolicyManagerImplTest_CCS::PreparePTUWithNewGroup(
+ const uint32_t type, const uint32_t id, const std::string& group_name) {
+ using namespace policy_table;
+ using namespace rpc;
+
+ std::ifstream ifile(preloaded_pt_filename_);
+ Json::Reader reader;
+ std::string json;
+ Json::Value root(Json::objectValue);
+ if (ifile.is_open() && reader.parse(ifile, root, true)) {
+ Table t = PreparePTWithGroupsHavingCCS();
+
+ CCS_Entity entity_4(type, id);
+
+ Rpcs rpcs_4;
+ rpcs_4.disallowed_by_ccs_entities_on->push_back(entity_4);
+ *rpcs_4.user_consent_prompt = group_name;
+ rpcs_4.rpcs.set_to_null();
+
+ t.policy_table.functional_groupings.insert(
+ std::make_pair(group_name, rpcs_4));
+
+ ApplicationParams app_params;
+ app_params.groups.push_back(group_name_1_);
+ app_params.groups.push_back(group_name_2_);
+ app_params.groups.push_back(group_name);
+ app_params.keep_context = Boolean(true);
+ app_params.steal_focus = Boolean(true);
+ app_params.default_hmi = HL_FULL;
+ app_params.priority = P_EMERGENCY;
+
+ t.policy_table.app_policies_section.apps.insert(
+ std::make_pair(app_id_1_, app_params));
+
+ const Json::Value overriden_table = t.ToJsonValue();
+
+ const std::string policy_table_key = "policy_table";
+ const std::string functional_groupings_key = "functional_groupings";
+ const std::string app_policies_key = "app_policies";
+
+ root[policy_table_key][functional_groupings_key] =
+ overriden_table[policy_table_key][functional_groupings_key];
+
+ root[policy_table_key][app_policies_key][app_id_1_] =
+ overriden_table[policy_table_key][app_policies_key][app_id_1_];
+
+ json = root.toStyledString();
+ }
+ ifile.close();
+
+ return json;
+}
+
} // namespace policy_test
} // namespace components
} // namespace test
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 231da9fcac..8d5c980ccd 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
@@ -1399,7 +1399,238 @@ TEST_F(SQLPTExtRepresentationTest,
"1, 64, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app));
// Check
- EXPECT_TRUE(reps->IsPredataPolicy("12345"));
+ EXPECT_TRUE(reps_->IsPredataPolicy("12345"));
+}
+
+TEST_F(SQLPTExtRepresentationTest, SaveUserConsentRecords_ExpectedSaved) {
+ using namespace policy_table;
+ using namespace rpc;
+
+ 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 consent_group = "ConsentGroup";
+ const std::string time_stamp = "2016-08-29T17:12:07Z";
+ const Input input = Input::I_GUI;
+
+ Table original_table;
+ UserConsentRecords& user_consent_records =
+ *(*original_table.policy_table.device_data)[device_id]
+ .user_consent_records;
+
+ 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.consent_groups->insert(
+ std::make_pair(consent_group, Boolean(true)));
+
+ *app_records.input = input;
+ *app_records.time_stamp = time_stamp;
+
+ // Act
+ EXPECT_TRUE(reps_->Save(original_table));
+ utils::SharedPtr<Table> loaded_table = reps_->GenerateSnapshot();
+
+ // GetData/GetKeyData methods do internal existence check - no need to do it
+ // separately. In case of data is missing expectations will be violated.
+ DeviceData device_data = GetData<Table, DeviceData>(*loaded_table);
+
+ policy_table::DeviceParams device_parameters =
+ GetKeyData<DeviceData, policy_table::DeviceParams>(device_data,
+ device_id);
+
+ ConsentRecords consents = GetKeyData<UserConsentRecords, ConsentRecords>(
+ *device_parameters.user_consent_records, app_id);
+
+ EXPECT_TRUE(
+ (IsKeyExist<ConsentGroups>(*consents.consent_groups, consent_group)));
+ EXPECT_TRUE(
+ (IsKeyExist<ConsentGroups>(*consents.ccs_consent_groups, ccs_group)));
+ EXPECT_EQ((String<1, 255>(time_stamp)), *consents.time_stamp);
+ EXPECT_EQ(input, *consents.input);
+}
+
+TEST_F(SQLPTExtRepresentationTest, SaveFunctionalGroupings_ExpectedSaved) {
+ using namespace policy_table;
+ using namespace rpc;
+
+ const std::string group_name = "GroupName";
+ const std::string another_group_name = "AnotherGroup";
+ 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);
+
+ const HmiLevel test_level_1 = HL_FULL;
+ const HmiLevel test_level_2 = HL_LIMITED;
+ const policy_table::Parameter test_parameter_1 = P_GPS;
+ const policy_table::Parameter test_parameter_2 = P_SPEED;
+
+ 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_ccs_entities_on->push_back(on_entity_1);
+ rpcs.disallowed_by_ccs_entities_on->push_back(on_entity_2);
+
+ *rpcs.user_consent_prompt = user_consent_prompt;
+
+ RpcParameters parameters;
+ parameters.hmi_levels.push_back(test_level_1);
+ parameters.hmi_levels.push_back(test_level_2);
+ parameters.parameters->push_back(test_parameter_1);
+ parameters.parameters->push_back(test_parameter_2);
+ rpcs.rpcs.insert(std::make_pair(rpc_name, parameters));
+
+ Table original_table;
+ FunctionalGroupings& groupings =
+ 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);
+
+ 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.user_consent_prompt = another_user_consent_prompt;
+
+ const HmiLevel test_level_3 = HL_BACKGROUND;
+ const policy_table::Parameter test_parameter_3 = P_BELTSTATUS;
+
+ RpcParameters another_parameters;
+ another_parameters.hmi_levels.push_back(test_level_3);
+ another_parameters.parameters->push_back(test_parameter_3);
+ another_rpcs.rpcs.insert(std::make_pair(rpc_name, another_parameters));
+
+ groupings.insert(std::make_pair(another_group_name, another_rpcs));
+
+ // Act
+ EXPECT_TRUE(reps_->Save(original_table));
+ utils::SharedPtr<Table> loaded_table = reps_->GenerateSnapshot();
+
+ FunctionalGroupings loaded_groupings =
+ GetData<Table, FunctionalGroupings>(*loaded_table);
+
+ 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<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)));
+
+ RpcParameters loaded_parameters =
+ GetKeyData<Rpc, RpcParameters>(loaded_rpcs.rpcs, rpc_name);
+
+ EXPECT_TRUE(
+ (IsKeyExist<HmiLevels>(loaded_parameters.hmi_levels, test_level_1)));
+ EXPECT_TRUE(
+ (IsKeyExist<HmiLevels>(loaded_parameters.hmi_levels, test_level_2)));
+
+ EXPECT_TRUE((
+ IsKeyExist<Parameters>(*loaded_parameters.parameters, test_parameter_1)));
+ EXPECT_TRUE((
+ IsKeyExist<Parameters>(*loaded_parameters.parameters, test_parameter_2)));
+
+ 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<DisallowedByCCSEntities>(
+ *another_loaded_rpcs.disallowed_by_ccs_entities_on, on_entity_3)));
+
+ RpcParameters another_loaded_parameters =
+ GetKeyData<Rpc, RpcParameters>(another_loaded_rpcs.rpcs, rpc_name);
+
+ EXPECT_TRUE((IsKeyExist<HmiLevels>(another_loaded_parameters.hmi_levels,
+ test_level_3)));
+
+ EXPECT_TRUE((IsKeyExist<Parameters>(*another_loaded_parameters.parameters,
+ test_parameter_3)));
+}
+
+TEST_F(SQLPTExtRepresentationTest, JsonContentsCCS_ExpectParsed) {
+ using namespace policy_table;
+ using namespace rpc;
+
+ const std::string group_name = "GroupName";
+ const int32_t entity_on_type = 1;
+ const int32_t entity_on_id = 2;
+ const int32_t entity_off_type = 3;
+ const int32_t entity_off_id = 4;
+
+ Json::Value json_table(Json::objectValue);
+ json_table["policy_table"] = Json::Value(Json::objectValue);
+
+ Json::Value& policy_table = json_table["policy_table"];
+ policy_table["functional_groupings"] = Json::Value(Json::objectValue);
+
+ Json::Value& functional_groupings = policy_table["functional_groupings"];
+ functional_groupings[group_name] = Json::Value(Json::objectValue);
+ functional_groupings[group_name]["rpcs"];
+
+ Json::Value entity_on = Json::Value(Json::objectValue);
+ entity_on["entityType"] = entity_on_type;
+ entity_on["entityID"] = entity_on_id;
+
+ functional_groupings[group_name]["disallowed_by_ccs_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;
+
+ policy_table::Table parsed_table(&json_table);
+
+ FunctionalGroupings loaded_groupings =
+ GetData<Table, FunctionalGroupings>(parsed_table);
+
+ 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);
+
+ EXPECT_TRUE((IsKeyExist<DisallowedByCCSEntities>(
+ *loaded_rpcs.disallowed_by_ccs_entities_off, off_entity_1)));
+
+ EXPECT_TRUE((IsKeyExist<DisallowedByCCSEntities>(
+ *loaded_rpcs.disallowed_by_ccs_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;
+ in_status.insert(item_1);
+ in_status.insert(item_2);
+
+ EXPECT_TRUE(reps_->SaveCCSStatus(in_status));
+
+ CCSStatus out_status = reps_->GetCCSStatus();
+ EXPECT_TRUE(in_status.size() == out_status.size());
+
+ EXPECT_TRUE(out_status.end() !=
+ find(out_status.begin(), out_status.end(), item_1));
+ EXPECT_TRUE(out_status.end() !=
+ find(out_status.begin(), out_status.end(), item_2));
}
} // namespace policy_test