summaryrefslogtreecommitdiff
path: root/src/components/policy/policy_external/test/sql_pt_ext_representation_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/policy/policy_external/test/sql_pt_ext_representation_test.cc')
-rw-r--r--src/components/policy/policy_external/test/sql_pt_ext_representation_test.cc1718
1 files changed, 1718 insertions, 0 deletions
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
new file mode 100644
index 0000000000..92525c646d
--- /dev/null
+++ b/src/components/policy/policy_external/test/sql_pt_ext_representation_test.cc
@@ -0,0 +1,1718 @@
+/* Copyright (c) 2015, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <vector>
+#include <map>
+#include <algorithm>
+#include <utility>
+#include <string>
+#include <iterator>
+#include <iostream>
+#include "gtest/gtest.h"
+#include "policy/sql_pt_ext_representation.h"
+#include "utils/gen_hash.h"
+#include "utils/file_system.h"
+#include "sqlite_wrapper/sql_query.h"
+#include "rpc_base/rpc_base.h"
+#include "policy/policy_table/types.h"
+#include "policy/mock_policy_settings.h"
+#include "utils/shared_ptr.h"
+#include "utils/make_shared.h"
+
+using namespace ::policy;
+namespace policy_table = rpc::policy_table_interface_base;
+using std::string;
+using std::map;
+using std::pair;
+using std::vector;
+using testing::ReturnRef;
+
+namespace test {
+namespace components {
+namespace policy_test {
+
+class SQLPTExtRepresentationTest : public ::testing::Test {
+ public:
+ // Collection of pairs of group alias and corresponding group name
+ typedef vector<pair<string, string> > GroupsAliasNameCollection;
+
+ SQLPTExtRepresentationTest() : reps_(NULL) {}
+
+ protected:
+ SQLPTExtRepresentation* reps_;
+ policy_handler_test::MockPolicySettings policy_settings_;
+ static const string kDatabaseName;
+ PermissionConsent perm_consent;
+ FunctionalGroupPermission group1_perm;
+ FunctionalGroupPermission group2_perm;
+ utils::dbms::SQLQuery* query_wrapper_;
+ static const bool in_memory_;
+ const std::string kAppStorageFolder = "storage_SQLPTExtRepresentationTest";
+
+ void SetUp() OVERRIDE {
+ file_system::DeleteFile(kDatabaseName);
+ reps_ = new SQLPTExtRepresentation(in_memory_);
+ ASSERT_TRUE(reps_ != NULL);
+ ON_CALL(policy_settings_, app_storage_folder())
+ .WillByDefault(ReturnRef(kAppStorageFolder));
+ ASSERT_EQ(SUCCESS, reps_->Init(&policy_settings_));
+ query_wrapper_ = new utils::dbms::SQLQuery(reps_->db());
+ ASSERT_TRUE(query_wrapper_ != NULL);
+ }
+
+ void TearDown() OVERRIDE {
+ delete query_wrapper_;
+ EXPECT_TRUE(reps_->Drop());
+ EXPECT_TRUE(reps_->Close());
+ delete reps_;
+ }
+
+ void FillGroupPermission(
+ vector<FunctionalGroupPermission>& groups_permissions,
+ FunctionalGroupPermission group,
+ const GroupsAliasNameCollection& groups_names,
+ GroupConsent state) {
+ GroupsAliasNameCollection::const_iterator groups_names_it =
+ groups_names.begin();
+ while (groups_names_it != groups_names.end()) {
+ group.group_alias = groups_names_it->first;
+ group.group_name = groups_names_it->second;
+ group.group_id = ::utils::Djb2HashFromString(groups_names_it->second);
+ group.state = state;
+ groups_permissions.push_back(group);
+ ++groups_names_it;
+ }
+ }
+
+ void FillPermissionStruct(
+ const string& dev_id,
+ const string& app_id,
+ const string& consent_source,
+ const GroupsAliasNameCollection& allowed_groups_names,
+ const GroupsAliasNameCollection& disallowed_groups_names) {
+ // Arrange
+ vector<FunctionalGroupPermission> groups_permissions;
+ perm_consent.device_id = dev_id;
+ perm_consent.policy_app_id = app_id;
+ perm_consent.consent_source = consent_source;
+ // Fill groups
+ FillGroupPermission(groups_permissions,
+ group1_perm,
+ allowed_groups_names,
+ GroupConsent::kGroupAllowed);
+ FillGroupPermission(groups_permissions,
+ group2_perm,
+ disallowed_groups_names,
+ GroupConsent::kGroupDisallowed);
+ perm_consent.group_permissions = groups_permissions;
+ }
+
+ bool Check(const GroupsAliasNameCollection& groups_names,
+ const vector<int32_t>& group_Ids) {
+ vector<int32_t>::const_iterator group_Ids_it = group_Ids.begin();
+ GroupsAliasNameCollection::const_iterator group_alias_name_it =
+ groups_names.begin();
+
+ EXPECT_EQ(groups_names.size(), group_Ids.size());
+ while (group_Ids_it != group_Ids.end()) {
+ while (group_alias_name_it != groups_names.end()) {
+ if (group_Ids.end() != std::find(group_Ids.begin(),
+ group_Ids.end(),
+ ::utils::Djb2HashFromString(
+ group_alias_name_it->second))) {
+ return true;
+ }
+ ++group_alias_name_it;
+ }
+ ++group_Ids_it;
+ }
+ return false;
+ }
+
+ bool CheckGroupTypesExist(
+ const FunctionalIdType& group_types,
+ const GroupsAliasNameCollection& allowed_groups_names,
+ const GroupsAliasNameCollection& disallowed_groups_names) {
+ bool result = true;
+ map<GroupType, FunctionalGroupIDs>::const_iterator functional_id_type_it1 =
+ group_types.find(GroupType::kTypeAllowed);
+ map<GroupType, FunctionalGroupIDs>::const_iterator functional_id_type_it2 =
+ group_types.find(GroupType::kTypeDisallowed);
+
+ if (functional_id_type_it1 == group_types.end() ||
+ functional_id_type_it2 == group_types.end()) {
+ return false;
+ }
+
+ const std::vector<int32_t>& allowedGroupIDs =
+ functional_id_type_it1->second;
+ const std::vector<int32_t>& disallowedGroupIDs =
+ functional_id_type_it2->second;
+ if (0u == allowedGroupIDs.size() && 0u == disallowedGroupIDs.size()) {
+ result = false;
+ } else if (0u != allowedGroupIDs.size() &&
+ 0u == disallowedGroupIDs.size()) {
+ result = Check(allowed_groups_names, allowedGroupIDs);
+ } else if (0u != disallowedGroupIDs.size() &&
+ 0u == allowedGroupIDs.size()) {
+ result = Check(disallowed_groups_names, disallowedGroupIDs);
+ } else if (0u != allowedGroupIDs.size() &&
+ 0u != disallowedGroupIDs.size()) {
+ result = Check(allowed_groups_names, allowedGroupIDs) &&
+ Check(disallowed_groups_names, disallowedGroupIDs);
+ } else {
+ result = false;
+ }
+ return result;
+ }
+ // Attempt of simplifying policy table checks, hides internal stuff, add
+ // basic checks for data existence before getting of data
+ // For usage example see SaveUserConsentRecords_ExpectedSaved,
+ // SaveFunctionalGroupings_ExpectedSaved tests
+ template <typename ParentType, typename KeyType>
+ bool IsExist(const ParentType& parent) const;
+
+ template <typename ParentType, typename Value>
+ bool IsKeyExist(const ParentType& parent, const Value& value) const {
+ return parent.end() != std::find(parent.begin(), parent.end(), value);
+ }
+
+ template <typename ParentType>
+ bool IsKeyExist(const ParentType& parent, const std::string& value) const {
+ return parent.end() != parent.find(value);
+ }
+
+ template <typename ParentType, typename KeyType>
+ const KeyType& GetData(const ParentType& parent) const {
+ EXPECT_TRUE((IsExist<ParentType, KeyType>(parent)));
+ return GetDataInternal<ParentType, KeyType>(parent);
+ }
+
+ template <typename ParentType, typename KeyType>
+ const KeyType& GetKeyData(const ParentType& parent,
+ const std::string& key_name) const {
+ EXPECT_TRUE((IsKeyExist<ParentType>(parent, key_name)));
+ return GetKeyDataInternal<ParentType, KeyType>(parent, key_name);
+ }
+
+ private:
+ template <typename ParentType, typename KeyType>
+ const KeyType& GetDataInternal(const ParentType& parent) const;
+
+ template <typename ParentType, typename KeyType>
+ const KeyType& GetKeyDataInternal(const ParentType& parent,
+ const std::string& key_name) const {
+ return parent.find(key_name)->second;
+ }
+};
+
+// Specializations for 'policy_table' section
+
+template <>
+bool SQLPTExtRepresentationTest::IsExist<policy_table::Table,
+ policy_table::DeviceData>(
+ const policy_table::Table& table) const {
+ return table.policy_table.device_data.is_initialized();
+}
+
+template <>
+bool SQLPTExtRepresentationTest::IsExist<policy_table::Table,
+ policy_table::FunctionalGroupings>(
+ const policy_table::Table& table) const {
+ return table.policy_table.functional_groupings.is_initialized();
+}
+
+template <>
+const policy_table::DeviceData& SQLPTExtRepresentationTest::GetDataInternal(
+ const policy_table::Table& table) const {
+ return *table.policy_table.device_data;
+}
+
+template <>
+const policy_table::FunctionalGroupings&
+SQLPTExtRepresentationTest::GetDataInternal(
+ const policy_table::Table& table) const {
+ return table.policy_table.functional_groupings;
+}
+
+const string SQLPTExtRepresentationTest::kDatabaseName = ":memory:";
+const bool SQLPTExtRepresentationTest::in_memory_ = true;
+
+::testing::AssertionResult IsValid(const policy_table::Table& table) {
+ if (table.is_valid()) {
+ return ::testing::AssertionSuccess();
+ } else {
+ ::rpc::ValidationReport report(" - table");
+ table.ReportErrors(&report);
+ return ::testing::AssertionFailure() << ::rpc::PrettyFormat(report);
+ }
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ DISABLED_GenerateSnapshot_SetPolicyTable_SnapshotIsPresent) {
+ // TODO(AKutsan): APPLINK-31526 Test requires initial preloaded pt for
+ // preloaded date reading
+ // Arrange
+ Json::Value table(Json::objectValue);
+ table["policy_table"] = Json::Value(Json::objectValue);
+
+ Json::Value& policy_table = table["policy_table"];
+ policy_table["module_config"] = Json::Value(Json::objectValue);
+ policy_table["functional_groupings"] = Json::Value(Json::objectValue);
+ policy_table["consumer_friendly_messages"] = Json::Value(Json::objectValue);
+ policy_table["app_policies"] = Json::Value(Json::objectValue);
+
+ Json::Value& module_config = policy_table["module_config"];
+ module_config["preloaded_date"] = Json::Value("");
+ module_config["exchange_after_x_ignition_cycles"] = Json::Value(10);
+ module_config["exchange_after_x_kilometers"] = Json::Value(100);
+ module_config["exchange_after_x_days"] = Json::Value(5);
+ module_config["timeout_after_x_seconds"] = Json::Value(500);
+ module_config["seconds_between_retries"] = Json::Value(Json::arrayValue);
+ module_config["seconds_between_retries"][0] = Json::Value(10);
+ module_config["seconds_between_retries"][1] = Json::Value(20);
+ module_config["seconds_between_retries"][2] = Json::Value(30);
+ module_config["endpoints"] = Json::Value(Json::objectValue);
+ module_config["endpoints"]["0x00"] = Json::Value(Json::objectValue);
+ module_config["endpoints"]["0x00"]["default"] = Json::Value(Json::arrayValue);
+ module_config["endpoints"]["0x00"]["default"][0] =
+ Json::Value("http://ford.com/cloud/default");
+ module_config["notifications_per_minute_by_priority"] =
+ Json::Value(Json::objectValue);
+ module_config["notifications_per_minute_by_priority"]["emergency"] =
+ Json::Value(1);
+ module_config["notifications_per_minute_by_priority"]["navigation"] =
+ Json::Value(2);
+ module_config["notifications_per_minute_by_priority"]["VOICECOMM"] =
+ Json::Value(3);
+ module_config["notifications_per_minute_by_priority"]["communication"] =
+ Json::Value(4);
+ module_config["notifications_per_minute_by_priority"]["normal"] =
+ Json::Value(5);
+ module_config["notifications_per_minute_by_priority"]["none"] =
+ Json::Value(6);
+ module_config["vehicle_make"] = Json::Value("MakeT");
+ module_config["vehicle_model"] = Json::Value("ModelT");
+ module_config["vehicle_year"] = Json::Value("2014");
+ module_config["certificate"] = Json::Value("my_cert");
+
+ Json::Value& functional_groupings = policy_table["functional_groupings"];
+ functional_groupings["default"] = Json::Value(Json::objectValue);
+ Json::Value& default_group = functional_groupings["default"];
+ default_group["rpcs"] = Json::Value(Json::objectValue);
+ default_group["rpcs"]["Update"] = Json::Value(Json::objectValue);
+ default_group["rpcs"]["Update"]["hmi_levels"] = Json::Value(Json::arrayValue);
+ default_group["rpcs"]["Update"]["hmi_levels"][0] = Json::Value("FULL");
+ default_group["rpcs"]["Update"]["parameters"] = Json::Value(Json::arrayValue);
+ default_group["rpcs"]["Update"]["parameters"][0] = Json::Value("speed");
+
+ Json::Value& consumer_friendly_messages =
+ policy_table["consumer_friendly_messages"];
+ consumer_friendly_messages["version"] = Json::Value("1.2");
+ consumer_friendly_messages["messages"] = Json::Value(Json::objectValue);
+ consumer_friendly_messages["messages"]["MSG1"] =
+ Json::Value(Json::objectValue);
+ Json::Value& msg1 = consumer_friendly_messages["messages"]["MSG1"];
+ msg1["languages"] = Json::Value(Json::objectValue);
+ msg1["languages"]["en-us"] = Json::Value(Json::objectValue);
+ msg1["languages"]["en-us"]["tts"] = Json::Value("TTS message");
+ msg1["languages"]["en-us"]["label"] = Json::Value("LABEL message");
+ msg1["languages"]["en-us"]["line1"] = Json::Value("LINE1 message");
+ msg1["languages"]["en-us"]["line2"] = Json::Value("LINE2 message");
+ msg1["languages"]["en-us"]["textBody"] = Json::Value("TEXTBODY message");
+
+ Json::Value& app_policies = policy_table["app_policies"];
+ app_policies["default"] = Json::Value(Json::objectValue);
+ app_policies["default"]["memory_kb"] = Json::Value(50);
+ app_policies["default"]["heart_beat_timeout_ms"] = Json::Value(100);
+ app_policies["default"]["groups"] = Json::Value(Json::arrayValue);
+ app_policies["default"]["groups"][0] = Json::Value("default");
+ app_policies["default"]["priority"] = Json::Value("EMERGENCY");
+ app_policies["default"]["default_hmi"] = Json::Value("FULL");
+ app_policies["default"]["keep_context"] = Json::Value(true);
+ app_policies["default"]["steal_focus"] = Json::Value(true);
+ app_policies["pre_DataConsent"] = Json::Value(Json::objectValue);
+ app_policies["pre_DataConsent"]["memory_kb"] = Json::Value(50);
+ app_policies["pre_DataConsent"]["heart_beat_timeout_ms"] = Json::Value(100);
+ app_policies["pre_DataConsent"]["groups"] = Json::Value(Json::arrayValue);
+ app_policies["pre_DataConsent"]["groups"][0] = Json::Value("default");
+ app_policies["pre_DataConsent"]["priority"] = Json::Value("EMERGENCY");
+ app_policies["pre_DataConsent"]["default_hmi"] = Json::Value("FULL");
+ app_policies["pre_DataConsent"]["keep_context"] = Json::Value(true);
+ app_policies["pre_DataConsent"]["steal_focus"] = Json::Value(true);
+ app_policies["1234"] = Json::Value(Json::objectValue);
+ app_policies["1234"]["memory_kb"] = Json::Value(50);
+ app_policies["1234"]["heart_beat_timeout_ms"] = Json::Value(100);
+ app_policies["1234"]["groups"] = Json::Value(Json::arrayValue);
+ app_policies["1234"]["groups"][0] = Json::Value("default");
+ app_policies["1234"]["priority"] = Json::Value("EMERGENCY");
+ app_policies["1234"]["default_hmi"] = Json::Value("FULL");
+ app_policies["1234"]["keep_context"] = Json::Value(true);
+ app_policies["1234"]["steal_focus"] = Json::Value(true);
+ app_policies["device"] = Json::Value(Json::objectValue);
+ app_policies["device"]["groups"] = Json::Value(Json::arrayValue);
+ app_policies["device"]["groups"][0] = Json::Value("default");
+ app_policies["device"]["priority"] = Json::Value("EMERGENCY");
+ app_policies["device"]["default_hmi"] = Json::Value("FULL");
+ app_policies["device"]["keep_context"] = Json::Value(true);
+ app_policies["device"]["steal_focus"] = Json::Value(true);
+
+ policy_table::Table update(&table);
+ update.SetPolicyTableType(rpc::policy_table_interface_base::PT_UPDATE);
+
+ // Assert
+ ASSERT_TRUE(IsValid(update));
+ ASSERT_TRUE(reps_->Save(update));
+
+ // Act
+ utils::SharedPtr<policy_table::Table> snapshot = reps_->GenerateSnapshot();
+ snapshot->SetPolicyTableType(rpc::policy_table_interface_base::PT_SNAPSHOT);
+
+ policy_table["module_meta"] = Json::Value(Json::objectValue);
+ policy_table["usage_and_error_counts"] = Json::Value(Json::objectValue);
+ policy_table["device_data"] = Json::Value(Json::objectValue);
+ policy_table["module_config"]["preloaded_pt"] = Json::Value(false);
+
+ Json::Value& module_meta = policy_table["module_meta"];
+ module_meta["ccpu_version"] = Json::Value("");
+ module_meta["language"] = Json::Value("");
+ module_meta["wers_country_code"] = Json::Value("");
+ module_meta["pt_exchanged_at_odometer_x"] = Json::Value(0);
+ module_meta["pt_exchanged_x_days_after_epoch"] = Json::Value(0);
+ module_meta["ignition_cycles_since_last_exchange"] = Json::Value(0);
+ module_meta["vin"] = Json::Value("");
+
+ Json::Value& usage_and_error_counts = policy_table["usage_and_error_counts"];
+ usage_and_error_counts["count_of_iap_buffer_full"] = Json::Value(0);
+ usage_and_error_counts["count_sync_out_of_memory"] = Json::Value(0);
+ usage_and_error_counts["count_of_sync_reboots"] = Json::Value(0);
+
+ policy_table::Table expected(&table);
+
+ // Assert
+ EXPECT_EQ(expected.ToJsonValue().toStyledString(),
+ snapshot->ToJsonValue().toStyledString());
+}
+
+TEST_F(
+ SQLPTExtRepresentationTest,
+ CanAppKeepContext_InsertKeepContext_ExpectValuesThatSetInKeepContextParams) {
+ // Arrange
+ const std::string query_delete = "DELETE FROM `application`; ";
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_delete));
+ // Act
+ const std::string query_insert_12345 =
+ "INSERT INTO `application` (`id`, `memory_kb`,"
+ " `heart_beat_timeout_ms`, `keep_context`) VALUES ('12345', 5, 10, 1)";
+
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_12345));
+ EXPECT_FALSE(reps_->CanAppKeepContext("0"));
+ EXPECT_TRUE(reps_->CanAppKeepContext("12345"));
+ // Act
+ const std::string query_insert_123 =
+ "INSERT INTO `application` (`id`, `memory_kb`,"
+ " `heart_beat_timeout_ms`, `keep_context`) VALUES ('123', 10, 7, 0)";
+
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_123));
+ EXPECT_FALSE(reps_->CanAppKeepContext("123"));
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ CanAppStealFocus_SetStealFocus_ExpectValuesThatSetInStealFocusParam) {
+ // Arrange
+ const std::string query_delete = "DELETE FROM `application`; ";
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_delete));
+ // Act
+ const std::string query_insert_12345 =
+ "INSERT INTO `application` (`id`, `memory_kb`,"
+ " `heart_beat_timeout_ms`, `steal_focus`) VALUES ('12345', 5, 10, 1)";
+
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_12345));
+ EXPECT_TRUE(reps_->CanAppStealFocus("12345"));
+ EXPECT_FALSE(reps_->CanAppStealFocus("0"));
+ // Act
+ const std::string query_insert_123 =
+ "INSERT INTO `application` (`id`, `memory_kb`,"
+ " `heart_beat_timeout_ms`, `steal_focus`) VALUES ('123', 10, 7, 0)";
+
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_123));
+ EXPECT_FALSE(reps_->CanAppStealFocus("123"));
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ GetDefaultHMI_SetHMI_ExpectValuesThatSetInHMIParam) {
+ // Arrange
+ const std::string query_delete = "DELETE FROM `application`; ";
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_delete));
+ // Act
+ const std::string query_insert_12345 =
+ "INSERT INTO `application` (`id`, `memory_kb`,"
+ " `heart_beat_timeout_ms`, `default_hmi`) VALUES ('12345', 5, 10, "
+ "'NONE')";
+ std::string result;
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_12345));
+ EXPECT_TRUE(reps_->GetDefaultHMI("12345", &result));
+ EXPECT_EQ("NONE", result);
+ const std::string query_insert_123 =
+ "INSERT INTO `application` (`id`, `memory_kb`,"
+ " `heart_beat_timeout_ms`, `default_hmi`) VALUES ('123', 5, 10, "
+ "'LIMITED')";
+
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_123));
+ EXPECT_TRUE(reps_->GetDefaultHMI("123", &result));
+ EXPECT_EQ("LIMITED", result);
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ GetUserPermissionsForDevice_SetPermissions_ExpectValuesThatSetInParams) {
+ // Arrange
+ StringArray allowed_groups;
+ StringArray disallowed_groups;
+ EXPECT_TRUE(reps_->GetUserPermissionsForDevice(
+ "XXX12345ZZZ", &allowed_groups, &disallowed_groups));
+ EXPECT_EQ(0u, allowed_groups.size());
+ EXPECT_EQ(0u, disallowed_groups.size());
+
+ const std::string query_delete = "DELETE FROM `device_consent_group`; ";
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_delete));
+ // Act
+ const std::string query_insert_DataConsent =
+ "INSERT INTO `device_consent_group` (`device_id`, "
+ "`functional_group_id`,'is_consented', `input`, `time_stamp`) VALUES "
+ "('XXX12345ZZZ', 'DataConsent-2', 1,'GUI', '2014-01-01T00:00:52Z')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_DataConsent));
+ const std::string query_insert_Navigation =
+ "INSERT INTO `device_consent_group` (`device_id`, "
+ "`functional_group_id`,'is_consented', `input`, `time_stamp`) VALUES "
+ "('XXX12345ZZZ', 'Navigation-1', 0,'GUI', '2015-01-01T00:00:52Z')";
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_Navigation));
+ EXPECT_TRUE(reps_->GetUserPermissionsForDevice(
+ "XXX12345ZZZ", &allowed_groups, &disallowed_groups));
+ EXPECT_EQ(1u, allowed_groups.size());
+ EXPECT_EQ(1u, disallowed_groups.size());
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ SetUserPermissionsForDevice_SetPermissions_ExpectValuesThatSetInParams) {
+ // Arrange
+ StringArray allowed_groups;
+ StringArray disallowed_groups;
+ EXPECT_TRUE(reps_->GetUserPermissionsForDevice(
+ "XXX12345ZZZ", &allowed_groups, &disallowed_groups));
+ EXPECT_EQ(0u, allowed_groups.size());
+ EXPECT_EQ(0u, disallowed_groups.size());
+ allowed_groups.push_back("DataConsent-2");
+ disallowed_groups.push_back("Navigation-1");
+ EXPECT_TRUE(reps_->SetUserPermissionsForDevice(
+ "XXX12345ZZZ", allowed_groups, disallowed_groups));
+
+ allowed_groups.clear();
+ disallowed_groups.clear();
+ // Act
+ EXPECT_TRUE(reps_->GetUserPermissionsForDevice(
+ "XXX12345ZZZ", &allowed_groups, &disallowed_groups));
+ // Checks
+ EXPECT_EQ(1u, allowed_groups.size());
+ EXPECT_EQ(1u, disallowed_groups.size());
+ EXPECT_TRUE(std::find(allowed_groups.begin(),
+ allowed_groups.end(),
+ "DataConsent-2") != allowed_groups.end());
+ EXPECT_TRUE(std::find(disallowed_groups.begin(),
+ disallowed_groups.end(),
+ "Navigation-1") != disallowed_groups.end());
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ ResetDeviceConsents_SetConsentThenReset_ExpectValuesReset) {
+ // Arrange
+ StringArray allowed_groups;
+ StringArray disallowed_groups;
+ EXPECT_TRUE(reps_->GetUserPermissionsForDevice(
+ "XXX12345ZZZ", &allowed_groups, &disallowed_groups));
+ EXPECT_EQ(0u, allowed_groups.size());
+ EXPECT_EQ(0u, disallowed_groups.size());
+ allowed_groups.push_back("DataConsent-2");
+ disallowed_groups.push_back("Navigation-1");
+ EXPECT_TRUE(reps_->SetUserPermissionsForDevice(
+ "XXX12345ZZZ", allowed_groups, disallowed_groups));
+
+ allowed_groups.clear();
+ disallowed_groups.clear();
+ // Act
+ EXPECT_TRUE(reps_->GetUserPermissionsForDevice(
+ "XXX12345ZZZ", &allowed_groups, &disallowed_groups));
+ // Checks
+ EXPECT_EQ(1u, allowed_groups.size());
+ EXPECT_EQ(1u, disallowed_groups.size());
+ EXPECT_TRUE(std::find(allowed_groups.begin(),
+ allowed_groups.end(),
+ "DataConsent-2") != allowed_groups.end());
+ EXPECT_TRUE(std::find(disallowed_groups.begin(),
+ disallowed_groups.end(),
+ "Navigation-1") != disallowed_groups.end());
+ allowed_groups.clear();
+ disallowed_groups.clear();
+ // Act
+ reps_->ResetDeviceConsents();
+ EXPECT_TRUE(reps_->GetUserPermissionsForDevice(
+ "XXX12345ZZZ", &allowed_groups, &disallowed_groups));
+ // Checks
+ EXPECT_EQ(0u, allowed_groups.size());
+ EXPECT_EQ(0u, disallowed_groups.size());
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ GetPermissionsForApp_SetPermissions_ExpectValuesThatSetInParams) {
+ // Arrange
+ const std::string query_insert_input_0 =
+ "INSERT INTO `consent_group` (`device_id`, 'application_id' , "
+ "`functional_group_id`, 'is_consented', `input`, `time_stamp`) VALUES "
+ "('XXX12345ZZZ', '12345', 414812216, 1,'GUI', "
+ "'2014-01-01T00:00:52Z')";
+
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_input_0));
+ const std::string query_insert_input_1 =
+ "INSERT INTO `consent_group` (`device_id`, 'application_id' , "
+ "`functional_group_id`, 'is_consented', `input`, `time_stamp`) VALUES "
+ "('XXX12345ZZZ', '12345', 686787169, 0,'GUI', "
+ "'2014-01-01T00:00:52Z')";
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_input_1));
+ GroupsAliasNameCollection allowed_groups;
+ allowed_groups.push_back(std::make_pair("DataConsent", "DataConsent-2"));
+
+ GroupsAliasNameCollection disallowed_groups;
+ disallowed_groups.push_back(std::make_pair("", "Base-4"));
+ FillPermissionStruct("", "", "", allowed_groups, disallowed_groups);
+ FunctionalIdType group_types;
+ ASSERT_TRUE(
+ reps_->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types));
+ EXPECT_TRUE(
+ CheckGroupTypesExist(group_types, allowed_groups, disallowed_groups));
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ SetUserPermissionsForApp_SetPermissions_ExpectValuesThatSetInParams) {
+ // Arrange
+ GroupsAliasNameCollection allowed_groups;
+ allowed_groups.push_back(std::make_pair("Notifications", "Notifications"));
+
+ GroupsAliasNameCollection disallowed_groups;
+ disallowed_groups.push_back(std::make_pair("DataConsent", "DataConsent-2"));
+ FillPermissionStruct(
+ "XXX12345ZZZ", "12345", "VR", allowed_groups, disallowed_groups);
+ EXPECT_TRUE(reps_->SetUserPermissionsForApp(perm_consent));
+
+ FunctionalIdType group_types;
+ ASSERT_TRUE(
+ reps_->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types));
+ EXPECT_TRUE(
+ CheckGroupTypesExist(group_types, allowed_groups, disallowed_groups));
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ ResetAppConsents_SetPermissionsThenReset_ExpectValuesReset) {
+ // Arrange
+ GroupsAliasNameCollection allowed_groups;
+ allowed_groups.push_back(std::make_pair("Notifications", "Notifications"));
+
+ GroupsAliasNameCollection disallowed_groups;
+ disallowed_groups.push_back(std::make_pair("DataConsent", "DataConsent-2"));
+ FillPermissionStruct(
+ "XXX12345ZZZ", "12345", "VR", allowed_groups, disallowed_groups);
+ EXPECT_TRUE(reps_->SetUserPermissionsForApp(perm_consent));
+
+ FunctionalIdType group_types;
+ ASSERT_TRUE(
+ reps_->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types));
+ EXPECT_TRUE(
+ CheckGroupTypesExist(group_types, allowed_groups, disallowed_groups));
+
+ reps_->ResetAppConsents();
+ ASSERT_TRUE(
+ reps_->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types));
+ EXPECT_FALSE(
+ CheckGroupTypesExist(group_types, allowed_groups, disallowed_groups));
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ ResetUserConsent_SetConsentThenReset_ExpectValuesReset) {
+ // Arrange
+ GroupsAliasNameCollection perm_allowed_groups;
+ perm_allowed_groups.push_back(
+ std::make_pair("Notifications", "Notifications"));
+
+ GroupsAliasNameCollection perm_disallowed_groups;
+ perm_disallowed_groups.push_back(
+ std::make_pair("DataConsent", "DataConsent-2"));
+ FillPermissionStruct("XXX12345ZZZ",
+ "12345",
+ "VR",
+ perm_allowed_groups,
+ perm_disallowed_groups);
+ // Set permissions for app
+ EXPECT_TRUE(reps_->SetUserPermissionsForApp(perm_consent));
+
+ FunctionalIdType group_types;
+ ASSERT_TRUE(
+ reps_->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types));
+ EXPECT_TRUE(CheckGroupTypesExist(
+ group_types, perm_allowed_groups, perm_disallowed_groups));
+
+ StringArray allowed_groups;
+ StringArray disallowed_groups;
+ allowed_groups.push_back("DataConsent-2");
+ disallowed_groups.push_back("Navigation-1");
+ // Set permissions for device
+ EXPECT_TRUE(reps_->SetUserPermissionsForDevice(
+ "XXX12345ZZZ", allowed_groups, disallowed_groups));
+
+ allowed_groups.clear();
+ disallowed_groups.clear();
+ // Act
+ reps_->ResetUserConsent();
+ EXPECT_TRUE(reps_->GetUserPermissionsForDevice(
+ "XXX12345ZZZ", &allowed_groups, &disallowed_groups));
+ // Checks
+ EXPECT_EQ(0u, allowed_groups.size());
+ EXPECT_EQ(0u, disallowed_groups.size());
+ EXPECT_TRUE(
+ reps_->GetPermissionsForApp("XXX12345ZZZ", "12345", &group_types));
+ EXPECT_FALSE(CheckGroupTypesExist(
+ group_types, perm_allowed_groups, perm_disallowed_groups));
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ GetDeviceGroupsFromPolicies_SetGroups_ExpectValuesThatSetInParams) {
+ // Arrange
+ const std::string query_insert_app_group_1 =
+ "INSERT INTO `app_group` (`application_id`, 'functional_group_id') "
+ "VALUES ('device', '414812216')";
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_group_1));
+
+ const std::string query_insert_DataConsent =
+ "INSERT INTO `functional_group` (`id`, 'user_consent_prompt', 'name') "
+ "VALUES ('414812216', 'DataConsent', 'DataConsent-2')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_DataConsent));
+
+ const std::string query_insert_app_group_2 =
+ "INSERT INTO `app_group` (`application_id`, 'functional_group_id') "
+ "VALUES ('device', 1809526495)";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_group_2));
+
+ const std::string query_insert_Notifications =
+ "INSERT INTO `functional_group` (`id`, 'user_consent_prompt', 'name') "
+ "VALUES (1809526495, 'Notifications', 'Notifications')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_Notifications));
+
+ const std::string query_insert_preconsented_group =
+ "INSERT INTO `preconsented_group` (`application_id`, "
+ "`functional_group_id`) "
+ "VALUES ('device', 686787169)";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_preconsented_group));
+
+ const std::string query_insert_Base =
+ "INSERT INTO `functional_group` (`id`, 'user_consent_prompt', 'name') "
+ "VALUES (686787169, '', 'Base-4')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_Base));
+
+ policy_table::Strings groups;
+ policy_table::Strings preconsented_groups;
+
+ EXPECT_TRUE(
+ reps_->GetDeviceGroupsFromPolicies(&groups, &preconsented_groups));
+ EXPECT_EQ(2u, groups.size());
+ EXPECT_EQ(1u, preconsented_groups.size());
+
+ const uint32_t min_size = 1u;
+ const uint32_t max_size = 255u;
+
+ rpc::String<min_size, max_size> temp1("DataConsent-2");
+ rpc::String<min_size, max_size> temp2("Notifications");
+ rpc::String<min_size, max_size> temp3("Base-4");
+
+ EXPECT_NE(groups.end(), std::find(groups.begin(), groups.end(), temp1));
+ EXPECT_NE(groups.end(), std::find(groups.begin(), groups.end(), temp2));
+ EXPECT_NE(
+ preconsented_groups.end(),
+ std::find(preconsented_groups.begin(), preconsented_groups.end(), temp3));
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ SetDeviceData_SetDeviceData_ExpectValuesThatSetInParams) {
+ // Arrange
+ utils::dbms::SQLQuery query(reps_->db());
+ reps_->SetDeviceData("08-00-27-CE-76-FE",
+ "hardware IPX",
+ "v.8.0.1",
+ "Android",
+ "4.4.2",
+ "Life",
+ 2,
+ "Bluetooth");
+ const std::string query_select_hardware =
+ "SELECT `hardware` FROM `device` WHERE `id` = '08-00-27-CE-76-FE'";
+ const std::string query_select_firmware_rev =
+ "SELECT `firmware_rev` FROM `device` WHERE `id` = '08-00-27-CE-76-FE'";
+ const std::string query_select_os =
+ "SELECT `os` FROM `device` WHERE `id` = '08-00-27-CE-76-FE'";
+ const std::string query_select_os_version =
+ "SELECT `os_version` FROM `device` WHERE `id` = '08-00-27-CE-76-FE'";
+ const std::string query_select_carrier =
+ "SELECT `carrier` FROM `device` WHERE `id` = '08-00-27-CE-76-FE'";
+ const std::string query_select_max_rfports_number =
+ "SELECT `max_number_rfcom_ports` FROM `device` WHERE `id` = "
+ "'08-00-27-CE-76-FE'";
+ const std::string query_select_connection_type =
+ "SELECT `connection_type` FROM `device` WHERE `id` = '08-00-27-CE-76-FE'";
+
+ // Checks
+ query.Prepare(query_select_hardware);
+ query.Next();
+ EXPECT_EQ(string("hardware IPX"), query.GetString(0));
+
+ query.Prepare(query_select_firmware_rev);
+ query.Next();
+ EXPECT_EQ("v.8.0.1", query.GetString(0));
+
+ query.Prepare(query_select_os);
+ query.Next();
+ EXPECT_EQ("Android", query.GetString(0));
+
+ query.Prepare(query_select_os_version);
+ query.Next();
+ EXPECT_EQ("4.4.2", query.GetString(0));
+
+ query.Prepare(query_select_carrier);
+ query.Next();
+ EXPECT_EQ("Life", query.GetString(0));
+
+ query.Prepare(query_select_max_rfports_number);
+ query.Next();
+ EXPECT_EQ(2, query.GetInteger(0));
+
+ query.Prepare(query_select_connection_type);
+ query.Next();
+ EXPECT_EQ("Bluetooth", query.GetString(0));
+}
+
+TEST_F(
+ SQLPTExtRepresentationTest,
+ ReactOnUserDevConsentForApp_SetDeviceAllowedAppHasPreDataConsent_ExpectAppHasDefaultPolicies) {
+ // Arrange
+ const std::string query_insert_device =
+ "INSERT INTO `app_group` (`application_id`, `functional_group_id`) "
+ "VALUES ('device', '414812216')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_device));
+
+ const std::string query_insert_default =
+ "INSERT INTO `app_group` (`application_id`, `functional_group_id`) "
+ "VALUES ('default', '686787169')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_default));
+
+ const std::string query_insert_pre_DataConsent =
+ "INSERT INTO `app_group` (`application_id`, `functional_group_id`) "
+ "VALUES ('pre_DataConsent', '129372391')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_pre_DataConsent));
+
+ const std::string query_insert_1234 =
+ "INSERT INTO `app_group` (`application_id`, `functional_group_id`) "
+ "VALUES ('1234', '129372391')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_1234));
+
+ const std::string query_insert_preconsented_group =
+ "INSERT INTO `preconsented_group` (`application_id`, "
+ "`functional_group_id`) "
+ "VALUES ('1234', '129372391')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_preconsented_group));
+
+ const std::string query_insert_functional_group =
+ "INSERT INTO `functional_group` (`id`, `user_consent_prompt`, `name`) "
+ "VALUES (129372391, '', 'pre_DataConsent')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_functional_group));
+
+ const std::string query_insert_application =
+ "INSERT INTO `application` (`id`, `memory_kb`,"
+ " `heart_beat_timeout_ms`, `is_predata`, `keep_context`) VALUES ('1234', "
+ "5, 10, 1, 0)";
+
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_application));
+
+ EXPECT_TRUE(reps_->IsPredataPolicy("1234"));
+ reps_->ReactOnUserDevConsentForApp("1234", true);
+ EXPECT_TRUE(reps_->IsDefaultPolicy("1234"));
+}
+
+TEST_F(
+ SQLPTExtRepresentationTest,
+ ReactOnUserDevConsentForApp_SetDeviceAllowedAppHasSpecificPoliciesThenSetPredata_ExpectAppGroupsRestored) {
+ // Arrange
+ const std::string query_insert_device_consent_group =
+ "INSERT INTO `device_consent_group` (`device_id`, "
+ "`functional_group_id`,'is_consented', `input`, `time_stamp`) VALUES "
+ "('XXX12345ZZZ', 'Location-1', 1,'GUI', '2015-01-01T00:00:52Z')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_device_consent_group));
+
+ const std::string query_insert_consent_group_1 =
+ "INSERT INTO `consent_group` (`device_id`, 'application_id' , "
+ "`functional_group_id`, `is_consented`, `input`, `time_stamp`) VALUES "
+ "('XXX12345ZZZ', '1234', 156072572, 1,'GUI', "
+ "'2014-01-01T00:00:52Z')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_consent_group_1));
+
+ const std::string query_insert_consent_group_2 =
+ "INSERT INTO `consent_group` (`device_id`, 'application_id' , "
+ "`functional_group_id`, `is_consented`, `input`, `time_stamp`) VALUES "
+ "('XXX12345ZZZ', '1234', 1809526495, 1,'GUI', "
+ "'2014-01-01T00:00:52Z')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_consent_group_2));
+
+ const std::string query_insert_pre_DataConsent =
+ "INSERT INTO `functional_group` (`id`, `user_consent_prompt`, `name`) "
+ "VALUES (129372391, '', 'pre_DataConsent')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_pre_DataConsent));
+
+ const std::string query_insert_Notifications =
+ "INSERT INTO `functional_group` (`id`, `user_consent_prompt`, `name`) "
+ "VALUES (1809526495, 'Notifications', 'Notifications')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_Notifications));
+
+ const std::string query_insert_Location =
+ "INSERT INTO `functional_group` (`id`, `user_consent_prompt`, `name`) "
+ "VALUES (156072572, 'Location', 'Location-1')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_Location));
+
+ // Add to app_group
+ const std::string query_insert_app_group_1 =
+ "INSERT INTO `app_group` (`application_id`, `functional_group_id`) "
+ "VALUES ('1234', '1809526495')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_group_1));
+
+ const std::string query_insert_app_group_2 =
+ "INSERT INTO `app_group` (`application_id`, `functional_group_id`) "
+ "VALUES ('1234', '156072572')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_group_2));
+ // Add to pre_consented groups
+ const std::string query_insert_preconsented_group =
+ "INSERT INTO `preconsented_group` (`application_id`, "
+ "`functional_group_id`) "
+ "VALUES ('1234', '129372391')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_preconsented_group));
+
+ const std::string query_insert_application =
+ "INSERT INTO `application` (`id`, `memory_kb`,"
+ " `heart_beat_timeout_ms`, `is_predata`, `keep_context`) VALUES ('1234', "
+ "5, 10, 0, 0)";
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_application));
+ FunctionalIdType group_types;
+ ASSERT_TRUE(reps_->GetPermissionsForApp("XXX12345ZZZ", "1234", &group_types));
+ EXPECT_FALSE(reps_->IsPredataPolicy("1234"));
+ EXPECT_FALSE(reps_->IsDefaultPolicy("1234"));
+ std::map<GroupType, FunctionalGroupIDs>::iterator it1 =
+ group_types.find(GroupType::kTypeAllowed);
+ EXPECT_TRUE(group_types.end() != it1);
+ EXPECT_EQ(2u, it1->second.size());
+ std::vector<int32_t>::iterator it2 =
+ std::find(it1->second.begin(), it1->second.end(), 156072572);
+ ASSERT_TRUE(it2 != it1->second.end());
+ it2 = std::find(it1->second.begin(), it1->second.end(), 1809526495);
+ ASSERT_TRUE(it2 != it1->second.end());
+ reps_->SetIsPredata("1234", true);
+ EXPECT_TRUE(reps_->IsPredataPolicy("1234"));
+ reps_->ReactOnUserDevConsentForApp("1234", true);
+ group_types.clear();
+ ASSERT_TRUE(reps_->GetPermissionsForApp("XXX12345ZZZ", "1234", &group_types));
+ EXPECT_FALSE(reps_->IsPredataPolicy("1234"));
+ EXPECT_FALSE(reps_->IsDefaultPolicy("1234"));
+ it1 = group_types.find(GroupType::kTypeAllowed);
+ EXPECT_TRUE(group_types.end() != it1);
+ EXPECT_EQ(2u, it1->second.size());
+ it2 = std::find(it1->second.begin(), it1->second.end(), 156072572);
+ ASSERT_TRUE(it2 != it1->second.end());
+ it2 = std::find(it1->second.begin(), it1->second.end(), 1809526495);
+ ASSERT_TRUE(it2 != it1->second.end());
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ GetUserFriendlyMsg_SetMsg_ExpectReceivedMsgSetInParams) {
+ // Arrange
+ const std::string query_insert_message =
+ "INSERT INTO `message` (`tts`, `label`,`line1`, `line2`, `textBody`, "
+ "`language_code`, `message_type_name`) VALUES ('test tts message', "
+ "'GPS and speed', 'test', 'test1', 'test3', 'en-en', 'AppPermissions')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_message));
+ const std::string query_insert_message_type =
+ "INSERT INTO `message_type` (`name`) VALUES ('AppPermissions')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_message_type));
+ std::vector<string> msg_code;
+ msg_code.push_back("AppPermissions");
+ // Act
+ std::vector<UserFriendlyMessage> result =
+ reps_->GetUserFriendlyMsg(msg_code, string("en-en"));
+ // Checks
+ ASSERT_EQ(1u, result.size());
+ EXPECT_EQ(result[0].message_code, "AppPermissions");
+ EXPECT_EQ(result[0].tts, "test tts message");
+ EXPECT_EQ(result[0].label, "GPS and speed");
+ EXPECT_EQ(result[0].line1, "test");
+ EXPECT_EQ(result[0].line2, "test1");
+ EXPECT_EQ(result[0].text_body, "test3");
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ IncrementGlobalCounter_IncrementThreeTimes_ExpectCountEqual3) {
+ // Arrange
+ utils::dbms::SQLQuery query(reps_->db());
+ const std::string query_update =
+ "UPDATE `usage_and_error_count` SET"
+ " `count_of_sync_reboots` = 0";
+
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_update));
+
+ // Act
+ reps_->Increment("count_of_sync_reboots");
+ reps_->Increment("count_of_sync_reboots");
+ reps_->Increment("count_of_sync_reboots");
+
+ const std::string query_select =
+ "SELECT `count_of_sync_reboots` FROM `usage_and_error_count`";
+ // Assert
+ query.Prepare(query_select);
+ query.Next();
+ EXPECT_EQ(3, query.GetInteger(0));
+}
+
+TEST_F(
+ SQLPTExtRepresentationTest,
+ IncrementAppCounter_IncrementCountOfUserSelections3Times_ExpectCountEqual3) {
+ // Arrange
+ utils::dbms::SQLQuery query(reps_->db());
+ const std::string query_delete =
+ "DELETE FROM `app_level` WHERE `application_id` = '12345'";
+
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_delete));
+
+ // Act
+ reps_->Increment("12345", "count_of_user_selections");
+ reps_->Increment("12345", "count_of_user_selections");
+ reps_->Increment("12345", "count_of_user_selections");
+
+ const std::string query_select =
+ "SELECT `count_of_user_selections` FROM `app_level`"
+ " WHERE `application_id` = '12345'";
+
+ // Assert
+ query.Prepare(query_select);
+ query.Next();
+ EXPECT_EQ(3, query.GetInteger(0));
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ AppInfo_SetLanguageRuInGUIAndEnInVUI_ExpectRuInGUIAndEnInVUI) {
+ // Arrange
+ utils::dbms::SQLQuery query(reps_->db());
+ const std::string query_delete =
+ "DELETE FROM `app_level` WHERE `application_id` = '12345'";
+
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_delete));
+ // Act
+ reps_->Set("12345", "app_registration_language_gui", "ru-ru");
+ reps_->Set("12345", "app_registration_language_vui", "en-en");
+
+ const std::string query_select_gui =
+ "SELECT `app_registration_language_gui`"
+ " FROM `app_level` WHERE `application_id` = '12345'";
+
+ const std::string query_select_vui =
+ "SELECT `app_registration_language_vui`"
+ " FROM `app_level` WHERE `application_id` = '12345'";
+
+ // Assert
+ query.Prepare(query_select_gui);
+ query.Next();
+ EXPECT_EQ("ru-ru", query.GetString(0));
+
+ query.Prepare(query_select_vui);
+ query.Next();
+ EXPECT_EQ("en-en", query.GetString(0));
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ AddAppStopwatch_Set10And60MinutesForStopwatch_Expect70Minutes) {
+ // Arrange
+ utils::dbms::SQLQuery query(reps_->db());
+ const std::string query_delete =
+ "DELETE FROM `app_level` WHERE `application_id` = '12345'";
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_delete));
+ // Act
+ reps_->Add("12345", "minutes_in_hmi_full", 10);
+ reps_->Add("12345", "minutes_in_hmi_full", 60);
+
+ const std::string query_select =
+ "SELECT `minutes_in_hmi_full` FROM `app_level`"
+ " WHERE `application_id` = '12345'";
+
+ // Assert
+ query.Prepare(query_select);
+ query.Next();
+ EXPECT_EQ(70, query.GetInteger(0));
+}
+
+TEST_F(
+ SQLPTExtRepresentationTest,
+ SetUnpairedDevice_SetUnpairedDeviceId12345_ExpectUnpairedDeviceIdEquals12345) {
+ // Arrange
+ utils::dbms::SQLQuery query(reps_->db());
+ const std::string query_delete = "DELETE FROM `device`";
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_delete));
+ // Act
+ const std::string query_insert =
+ "INSERT INTO `device` (`id`) VALUES('12345')";
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert));
+ ASSERT_TRUE(reps_->SetUnpairedDevice("12345", true));
+ // Act
+ const std::string query_select =
+ "SELECT `id` FROM `device` WHERE `unpaired` = 1";
+ // Assert
+ query.Prepare(query_select);
+ query.Next();
+ EXPECT_EQ("12345", query.GetString(0));
+}
+
+TEST_F(
+ SQLPTExtRepresentationTest,
+ UnpairedDevicesList_SetUnpairedDevicesWithId12345AndId54321_Expect2UnpairedDevices) {
+ // Arrange
+ const std::string query_delete = "DELETE FROM `device`";
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_delete));
+ // Act
+ const std::string query_insert_12345 =
+ "INSERT INTO `device` (`id`, `unpaired`)"
+ " VALUES('12345', 1)";
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_12345));
+ // Act
+ const std::string query_insert_54321 =
+ "INSERT INTO `device` (`id`, `unpaired`) VALUES('54321', 1)";
+ // Assert
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_54321));
+ // Act
+ std::vector<std::string> output;
+ // Assert
+ ASSERT_TRUE(reps_->UnpairedDevicesList(&output));
+ ASSERT_EQ(2u, output.size());
+ EXPECT_NE(output.end(), std::find(output.begin(), output.end(), "12345"));
+ EXPECT_NE(output.end(), std::find(output.begin(), output.end(), "54321"));
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ SetMetaInfo_SetMetaInfo_ExpectValuesSetInParams) {
+ // Arrange
+ ASSERT_TRUE(reps_->SetMetaInfo("4.1.3.B_EB355B", "WAEGB", "ru-ru"));
+ utils::dbms::SQLQuery query(reps_->db());
+ const std::string query_select_ccpu =
+ "SELECT `ccpu_version` FROM `module_meta`";
+ const std::string query_select_wers_country_code =
+ "SELECT `wers_country_code` FROM `module_meta`";
+ const std::string query_select_language =
+ "SELECT `language` FROM `module_meta`";
+
+ // Assert
+ query.Prepare(query_select_ccpu);
+ query.Next();
+ EXPECT_EQ("4.1.3.B_EB355B", query.GetString(0));
+ query.Prepare(query_select_wers_country_code);
+ query.Next();
+ EXPECT_EQ("WAEGB", query.GetString(0));
+ query.Prepare(query_select_language);
+ query.Next();
+ EXPECT_EQ("ru-ru", query.GetString(0));
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ IsMetaInfoPresent_SetMetaInfo_ExpectMetaInfoPresent) {
+ // Arrange
+ const std::string query_insert_meta_info =
+ "UPDATE `module_meta` SET `ccpu_version` = '4.1.3.B_EB355B', "
+ "`wers_country_code` = 'WAEGB', `language` = 'ru-ru' ";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_meta_info));
+ EXPECT_TRUE(reps_->IsMetaInfoPresent());
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ SetSystemLanguage_SetSystemLanguage_ExpectValueSetInParams) {
+ // Arrange
+ utils::dbms::SQLQuery query(reps_->db());
+ ASSERT_TRUE(reps_->SetSystemLanguage("ru-ru"));
+ const std::string query_select_language =
+ "SELECT `language` FROM `module_meta`";
+ // Assert
+ query.Prepare(query_select_language);
+ query.Next();
+ EXPECT_EQ("ru-ru", query.GetString(0));
+}
+
+TEST_F(
+ SQLPTExtRepresentationTest,
+ GetFunctionalGroupNames_SetGroupsManuallyThenGetGroupNames_ExpectAllGroupsReceived) {
+ // Arrange
+ const std::string query_insert_pre_DataConsent =
+ "INSERT INTO `functional_group` (`id`, `user_consent_prompt`, `name`) "
+ "VALUES (129372391, '', 'pre_DataConsent')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_pre_DataConsent));
+
+ const std::string query_insert_Notifications =
+ "INSERT INTO `functional_group` (`id`, `user_consent_prompt`, `name`) "
+ "VALUES (1809526495, 'Notifications', 'Notifications')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_Notifications));
+
+ const std::string query_insert_Location =
+ "INSERT INTO `functional_group` (`id`, `user_consent_prompt`, `name`) "
+ "VALUES (156072572, 'Location', 'Location-1')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_Location));
+
+ std::map<uint32_t, std::pair<std::string, std::string> > FunctionalGroupNames;
+ std::map<uint32_t, std::pair<std::string, std::string> >::iterator it;
+ reps_->GetFunctionalGroupNames(FunctionalGroupNames);
+ EXPECT_EQ(3u, FunctionalGroupNames.size());
+ ASSERT_TRUE(FunctionalGroupNames.end() !=
+ (it = FunctionalGroupNames.find(129372391)));
+ EXPECT_EQ("", it->second.first);
+ EXPECT_EQ("pre_DataConsent", it->second.second);
+
+ ASSERT_TRUE(FunctionalGroupNames.end() !=
+ (it = FunctionalGroupNames.find(156072572)));
+ EXPECT_EQ("Location", it->second.first);
+ EXPECT_EQ("Location-1", it->second.second);
+
+ ASSERT_TRUE(FunctionalGroupNames.end() !=
+ (it = FunctionalGroupNames.find(1809526495)));
+ EXPECT_EQ("Notifications", it->second.first);
+ EXPECT_EQ("Notifications", it->second.second);
+}
+
+TEST_F(
+ SQLPTExtRepresentationTest,
+ RemoveAppConsentForGroup_SetAppConsentThenRemove_ExpectAppConsentForGroupRemoved) {
+ // Arrange
+ const std::string query_insert_pre_DataConsent =
+ "INSERT INTO `functional_group` (`id`, `user_consent_prompt`, `name`) "
+ "VALUES (129372391, '', 'pre_DataConsent')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_pre_DataConsent));
+
+ const std::string query_insert_Notifications =
+ "INSERT INTO `functional_group` (`id`, `user_consent_prompt`, `name`) "
+ "VALUES (1809526495, 'Notifications', 'Notifications')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_Notifications));
+
+ const std::string query_insert_Location =
+ "INSERT INTO `functional_group` (`id`, `user_consent_prompt`, `name`) "
+ "VALUES (156072572, 'Location', 'Location-1')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_Location));
+
+ const std::string query_insert_consent_group_1 =
+ "INSERT INTO `consent_group` (`device_id`, 'application_id' , "
+ "`functional_group_id`, `is_consented`, `input`, `time_stamp`) VALUES "
+ "('XXX12345ZZZ', '1234', 1809526495, 1,'GUI', "
+ "'2014-01-01T00:00:52Z')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_consent_group_1));
+
+ const std::string query_insert_consent_group_2 =
+ "INSERT INTO `consent_group` (`device_id`, 'application_id' , "
+ "`functional_group_id`, `is_consented`, `input`, `time_stamp`) VALUES "
+ "('XXX12345ZZZ', '1234', 156072572, 1,'GUI', "
+ "'2015-01-01T00:00:52Z')";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_consent_group_2));
+
+ GroupsAliasNameCollection allowed_groups;
+ allowed_groups.push_back(std::make_pair("Location", "Location-1"));
+ allowed_groups.push_back(std::make_pair("Notifications", "Notifications"));
+
+ GroupsAliasNameCollection disallowed_groups;
+
+ FillPermissionStruct(
+ "XXX12345ZZZ", "1234", "VR", allowed_groups, disallowed_groups);
+ FunctionalIdType group_types;
+ ASSERT_TRUE(reps_->GetPermissionsForApp("XXX12345ZZZ", "1234", &group_types));
+ EXPECT_TRUE(
+ CheckGroupTypesExist(group_types, allowed_groups, disallowed_groups));
+ group_types.clear();
+ reps_->RemoveAppConsentForGroup("1234", "Notifications");
+ ASSERT_TRUE(reps_->GetPermissionsForApp("XXX12345ZZZ", "1234", &group_types));
+ allowed_groups.pop_back();
+ EXPECT_TRUE(
+ CheckGroupTypesExist(group_types, allowed_groups, disallowed_groups));
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ CleanUnpaireDevices_SetDevicesThenCleanup_ExpectDevicesDeleted) {
+ // Arrange
+ utils::dbms::SQLQuery query(reps_->db());
+ reps_->SetDeviceData("XXX12345ZZZ",
+ "hardware IPX",
+ "v.8.0.1",
+ "Android",
+ "4.4.2",
+ "Life",
+ 2,
+ "Bluetooth");
+
+ StringArray allowed_groups;
+ StringArray disallowed_groups;
+ EXPECT_TRUE(reps_->GetUserPermissionsForDevice(
+ "XXX12345ZZZ", &allowed_groups, &disallowed_groups));
+ EXPECT_EQ(0u, allowed_groups.size());
+ EXPECT_EQ(0u, disallowed_groups.size());
+ allowed_groups.push_back("DataConsent-2");
+ disallowed_groups.push_back("Navigation-1");
+ EXPECT_TRUE(reps_->SetUserPermissionsForDevice(
+ "XXX12345ZZZ", allowed_groups, disallowed_groups));
+
+ GroupsAliasNameCollection perm_allowed_groups;
+ perm_allowed_groups.push_back(
+ std::make_pair("Notifications", "Notifications"));
+
+ GroupsAliasNameCollection perm_disallowed_groups;
+ perm_disallowed_groups.push_back(std::make_pair("Location", "Location-1"));
+ FillPermissionStruct("XXX12345ZZZ",
+ "12345",
+ "VR",
+ perm_allowed_groups,
+ perm_disallowed_groups);
+
+ EXPECT_TRUE(reps_->SetUserPermissionsForApp(perm_consent));
+
+ const std::string query_select_device =
+ "SELECT COUNT(*) FROM `device` WHERE `id` = 'XXX12345ZZZ'";
+ const std::string query_select_device_consent =
+ "SELECT COUNT(*) FROM `device_consent_group` WHERE `device_id` = "
+ "'XXX12345ZZZ'";
+ const std::string query_select_consent_group =
+ "SELECT COUNT(*) FROM `consent_group` WHERE `device_id` = 'XXX12345ZZZ'";
+
+ query.Prepare(query_select_device);
+ query.Next();
+ EXPECT_EQ(1, query.GetInteger(0));
+
+ query.Prepare(query_select_device_consent);
+ query.Next();
+ EXPECT_EQ(2, query.GetInteger(0));
+
+ query.Prepare(query_select_consent_group);
+ query.Next();
+ EXPECT_EQ(2, query.GetInteger(0));
+
+ EXPECT_TRUE(reps_->SetUnpairedDevice("XXX12345ZZZ", true));
+
+ std::vector<std::string> DeviceIds;
+ DeviceIds.push_back("XXX12345ZZZ");
+ EXPECT_TRUE(reps_->CleanupUnpairedDevices(DeviceIds));
+
+ // Assert
+ query.Prepare(query_select_device);
+ query.Next();
+ EXPECT_EQ(0, query.GetInteger(0));
+
+ query.Prepare(query_select_device_consent);
+ query.Next();
+ EXPECT_EQ(0, query.GetInteger(0));
+
+ query.Prepare(query_select_consent_group);
+ query.Next();
+ EXPECT_EQ(0, query.GetInteger(0));
+}
+
+TEST_F(
+ SQLPTExtRepresentationTest,
+ SetDefaultPolicy_SetPredataThenChangeToDefaultPolicy_ExpectDefaultPolicySet) {
+ // Arrange
+ const std::string query_insert_app =
+ "INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
+ "`steal_focus`, "
+ " `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
+ "`is_predata`, `memory_kb`, "
+ " `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'NONE', 0, 0, "
+ "0, 64, 10) ";
+
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_app));
+ GroupsAliasNameCollection allowed_groups;
+ allowed_groups.push_back(std::make_pair("Notifications", "Notifications"));
+
+ GroupsAliasNameCollection disallowed_groups;
+ disallowed_groups.push_back(std::make_pair("DataConsent", "DataConsent-2"));
+ FillPermissionStruct(
+ "XXX12345ZZZ", "12345", "VR", allowed_groups, disallowed_groups);
+ EXPECT_TRUE(reps_->SetUserPermissionsForApp(perm_consent));
+ // Act
+ ASSERT_TRUE(reps_->SetIsPredata("12345", true));
+ // Check
+ EXPECT_TRUE(reps_->IsPredataPolicy("12345"));
+ // Act
+ EXPECT_TRUE(reps_->SetDefaultPolicy("12345"));
+ // Check
+ EXPECT_TRUE(reps_->IsDefaultPolicy("12345"));
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ SetIsPreData_SetSpecificPoliciesThenSetIsPredata_ExpectPreDataSet) {
+ // Arrange
+ const std::string query_insert_app =
+ "INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
+ "`steal_focus`, "
+ " `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
+ "`is_predata`, `memory_kb`, "
+ " `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'NONE', 0, 0, "
+ "0, 64, 10) ";
+
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_app));
+ GroupsAliasNameCollection allowed_groups;
+ allowed_groups.push_back(std::make_pair("Notifications", "Notifications"));
+
+ GroupsAliasNameCollection disallowed_groups;
+ disallowed_groups.push_back(std::make_pair("DataConsent", "DataConsent-2"));
+ FillPermissionStruct(
+ "XXX12345ZZZ", "12345", "VR", allowed_groups, disallowed_groups);
+ EXPECT_TRUE(reps_->SetUserPermissionsForApp(perm_consent));
+ EXPECT_FALSE(reps_->IsPredataPolicy("12345"));
+ // Act
+ ASSERT_TRUE(reps_->SetIsPredata("12345", false));
+ // Check
+ EXPECT_FALSE(reps_->IsPredataPolicy("12345"));
+ // Act
+ ASSERT_TRUE(reps_->SetIsPredata("12345", true));
+ // Check
+ EXPECT_TRUE(reps_->IsPredataPolicy("12345"));
+}
+
+TEST_F(
+ SQLPTExtRepresentationTest,
+ SetPreDataPolicy_SetSpecificPoliciesThenSetPredataPolicy_ExpectPreDataPolicySet) {
+ // Arrange
+ const std::string query_insert_app =
+ "INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
+ "`steal_focus`, "
+ " `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
+ "`is_predata`, `memory_kb`, "
+ " `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'NONE', 0, 0, "
+ "0, 64, 10) ";
+
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_app));
+ GroupsAliasNameCollection allowed_groups;
+ allowed_groups.push_back(std::make_pair("Notifications", "Notifications"));
+
+ GroupsAliasNameCollection disallowed_groups;
+ disallowed_groups.push_back(std::make_pair("DataConsent", "DataConsent-2"));
+ FillPermissionStruct(
+ "XXX12345ZZZ", "12345", "VR", allowed_groups, disallowed_groups);
+ EXPECT_TRUE(reps_->SetUserPermissionsForApp(perm_consent));
+ EXPECT_FALSE(reps_->IsPredataPolicy("12345"));
+ // Act
+ ASSERT_TRUE(reps_->SetPredataPolicy("12345"));
+ // Check
+ EXPECT_TRUE(reps_->IsPredataPolicy("12345"));
+}
+
+TEST_F(SQLPTExtRepresentationTest,
+ IsPreDataPolicy_SetPredataPolicy_ExpectPreDataPolicySet) {
+ // Arrange
+ const std::string query_insert_app =
+ "INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
+ "`steal_focus`, "
+ " `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
+ "`is_predata`, `memory_kb`, "
+ " `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'NONE', 0, 0, "
+ "1, 64, 10) ";
+ ASSERT_TRUE(query_wrapper_->Exec(query_insert_app));
+ // Check
+ 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 external_consent_group = "ExternalConsentGroup";
+ const std::string consent_group = "ConsentGroup";
+ const std::string time_stamp = "2016-08-29T17:12:07Z";
+ const Input input = Input::I_GUI;
+
+ 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.external_consent_status_groups->insert(
+ std::make_pair(external_consent_group, Boolean(true)));
+
+ app_records.consent_groups->insert(
+ std::make_pair(consent_group, Boolean(true)));
+
+ *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.external_consent_status_groups, external_consent_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";
+ ExternalConsentEntity off_entity_1(0, 0);
+ ExternalConsentEntity off_entity_2(0, 1);
+ ExternalConsentEntity on_entity_1(1, 0);
+ ExternalConsentEntity on_entity_2(1, 1);
+
+ const HmiLevel test_level_1 = HL_FULL;
+ const HmiLevel test_level_2 = HL_LIMITED;
+ const policy_table::Parameter test_parameter_1 = P_GPS;
+ const policy_table::Parameter test_parameter_2 = P_SPEED;
+
+ Rpcs rpcs;
+
+ rpcs.disallowed_by_external_consent_entities_off->push_back(off_entity_1);
+ rpcs.disallowed_by_external_consent_entities_off->push_back(off_entity_2);
+
+ rpcs.disallowed_by_external_consent_entities_on->push_back(on_entity_1);
+ rpcs.disallowed_by_external_consent_entities_on->push_back(on_entity_2);
+
+ *rpcs.user_consent_prompt = user_consent_prompt;
+
+ 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));
+
+ ExternalConsentEntity off_entity_3(3, 4);
+ ExternalConsentEntity on_entity_3(5, 6);
+
+ Rpcs another_rpcs;
+
+ another_rpcs.disallowed_by_external_consent_entities_off->push_back(
+ off_entity_3);
+ another_rpcs.disallowed_by_external_consent_entities_on->push_back(
+ on_entity_3);
+ *another_rpcs.user_consent_prompt = another_user_consent_prompt;
+
+ const HmiLevel test_level_3 = HL_BACKGROUND;
+ 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<DisallowedByExternalConsentEntities>(
+ *loaded_rpcs.disallowed_by_external_consent_entities_off, off_entity_1)));
+ EXPECT_TRUE((IsKeyExist<DisallowedByExternalConsentEntities>(
+ *loaded_rpcs.disallowed_by_external_consent_entities_off, off_entity_2)));
+
+ EXPECT_TRUE((IsKeyExist<DisallowedByExternalConsentEntities>(
+ *loaded_rpcs.disallowed_by_external_consent_entities_on, on_entity_1)));
+ EXPECT_TRUE((IsKeyExist<DisallowedByExternalConsentEntities>(
+ *loaded_rpcs.disallowed_by_external_consent_entities_on, on_entity_2)));
+
+ RpcParameters loaded_parameters =
+ GetKeyData<Rpc, RpcParameters>(loaded_rpcs.rpcs, rpc_name);
+
+ 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<DisallowedByExternalConsentEntities>(
+ *another_loaded_rpcs.disallowed_by_external_consent_entities_off,
+ off_entity_3)));
+
+ EXPECT_TRUE((IsKeyExist<DisallowedByExternalConsentEntities>(
+ *another_loaded_rpcs.disallowed_by_external_consent_entities_on,
+ on_entity_3)));
+
+ RpcParameters another_loaded_parameters =
+ GetKeyData<Rpc, RpcParameters>(another_loaded_rpcs.rpcs, rpc_name);
+
+ 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, JsonContentsExternalConsent_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_external_consent_entities_on"]
+ [0] = entity_on;
+
+ Json::Value entity_off = Json::Value(Json::objectValue);
+ entity_off["entityType"] = entity_off_type;
+ entity_off["entityID"] = entity_off_id;
+ functional_groupings[group_name]
+ ["disallowed_by_external_consent_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);
+
+ ExternalConsentEntity off_entity_1(entity_off_type, entity_off_id);
+ ExternalConsentEntity on_entity_1(entity_on_type, entity_on_id);
+
+ EXPECT_TRUE((IsKeyExist<DisallowedByExternalConsentEntities>(
+ *loaded_rpcs.disallowed_by_external_consent_entities_off, off_entity_1)));
+
+ EXPECT_TRUE((IsKeyExist<DisallowedByExternalConsentEntities>(
+ *loaded_rpcs.disallowed_by_external_consent_entities_on, on_entity_1)));
+}
+
+TEST_F(SQLPTExtRepresentationTest, SaveExternalConsentStatus_ExpectSaved) {
+ ExternalConsentStatusItem item_1(0, 0, kStatusOn);
+ ExternalConsentStatusItem item_2(1, 1, kStatusOff);
+ ExternalConsentStatus in_status;
+ in_status.insert(item_1);
+ in_status.insert(item_2);
+
+ EXPECT_TRUE(reps_->SaveExternalConsentStatus(in_status));
+
+ ExternalConsentStatus out_status = reps_->GetExternalConsentStatus();
+ 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
+} // namespace components
+} // namespace test