diff options
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.cc | 334 |
1 files changed, 185 insertions, 149 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 index 97613550f2..58f526d7d3 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 @@ -38,12 +38,14 @@ #include <utility> #include <vector> #include "gtest/gtest.h" +#include "json/reader.h" #include "policy/mock_policy_settings.h" #include "policy/policy_table/types.h" #include "rpc_base/rpc_base.h" #include "sqlite_wrapper/sql_query.h" #include "utils/file_system.h" #include "utils/gen_hash.h" +#include "utils/jsoncpp_reader_wrapper.h" using namespace ::policy; namespace policy_table = rpc::policy_table_interface_base; @@ -57,6 +59,44 @@ namespace test { namespace components { namespace policy_test { +namespace { +const std::string kSdlPreloadedPtJson = "json/sdl_preloaded_pt.json"; +const std::string kHardwareVersion = "1.1.1.0"; +const std::string kSoftwareVersion = "4.1.3.B_EB355B"; +const std::string kWersCountryCode = "WAEGB"; +const std::string kLanguage = "EN-US"; +const std::string kFunctionalGroupWithParams = "Location-1"; +const std::string kUserConsentForGroupWithParams = "Location"; +const std::string kRpcForGroupWithParams = "GetVehicleData"; +} // namespace + +policy_table::Table LoadPreloadedPT(const std::string& filename) { + std::ifstream ifile(filename); + EXPECT_TRUE(ifile.good()); + Json::CharReaderBuilder reader_builder; + Json::Value root(Json::objectValue); + Json::parseFromStream(reader_builder, ifile, &root, nullptr); + root["policy_table"]["module_config"].removeMember("preloaded_pt"); + ifile.close(); + policy_table::Table table(&root); + return table; +} + +Json::Value GetDefaultSnapshotModuleMeta(policy_table::Table& policy_table) { + auto json_table = policy_table.ToJsonValue(); + + Json::Value default_module_meta = json_table["policy_table"]["module_meta"]; + default_module_meta["ccpu_version"] = Json::Value(""); + default_module_meta["hardware_version"] = Json::Value(""); + default_module_meta["language"] = Json::Value(""); + default_module_meta["wers_country_code"] = Json::Value(""); + default_module_meta["pt_exchanged_at_odometer_x"] = Json::Value(0); + default_module_meta["pt_exchanged_x_days_after_epoch"] = Json::Value(0); + default_module_meta["ignition_cycles_since_last_exchange"] = Json::Value(0); + default_module_meta["vin"] = Json::Value(""); + return default_module_meta; +} + class SQLPTExtRepresentationTest : public ::testing::Test { public: // Collection of pairs of group alias and corresponding group name @@ -264,163 +304,147 @@ SQLPTExtRepresentationTest::GetDataInternal( } 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); + GenerateSnapshot_DefaultContentOfModuleMeta_MetaInfoPresentInSnapshot) { + policy_table::Table update = LoadPreloadedPT(kSdlPreloadedPtJson); - 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["subtle_notifications_per_minute_by_priority"] = - Json::Value(Json::objectValue); - module_config["subtle_notifications_per_minute_by_priority"]["emergency"] = - Json::Value(7); - module_config["subtle_notifications_per_minute_by_priority"]["navigation"] = - Json::Value(8); - module_config["subtle_notifications_per_minute_by_priority"]["VOICECOMM"] = - Json::Value(9); - module_config["subtle_notifications_per_minute_by_priority"] - ["communication"] = Json::Value(10); - module_config["subtle_notifications_per_minute_by_priority"]["normal"] = - Json::Value(11); - module_config["subtle_notifications_per_minute_by_priority"]["none"] = - Json::Value(12); - 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"); + ASSERT_TRUE(IsValid(update)); + EXPECT_TRUE(reps_->Save(update)); - 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); + std::shared_ptr<policy_table::Table> snapshot = reps_->GenerateSnapshot(); + + auto expected_module_meta = GetDefaultSnapshotModuleMeta(update); + auto& snapshot_module_meta = snapshot->policy_table.module_meta; + EXPECT_EQ(expected_module_meta.toStyledString(), + snapshot_module_meta.ToJsonValue().toStyledString()); +} + +TEST_F( + SQLPTExtRepresentationTest, + GenerateSnapshot_SetMandatoryMetaInfo_MandatoryMetaInfoIsPresentInSnapshot) { + policy_table::Table update = LoadPreloadedPT(kSdlPreloadedPtJson); - // Assert ASSERT_TRUE(IsValid(update)); ASSERT_TRUE(reps_->Save(update)); - // Act + EXPECT_TRUE( + reps_->SetMetaInfo(kSoftwareVersion, kWersCountryCode, kLanguage)); + std::shared_ptr<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); + auto expected_module_meta = GetDefaultSnapshotModuleMeta(update); + expected_module_meta["ccpu_version"] = Json::Value(kSoftwareVersion); + expected_module_meta["language"] = Json::Value(kLanguage); + expected_module_meta["wers_country_code"] = Json::Value(kWersCountryCode); - 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(""); + auto& snapshot_module_meta = snapshot->policy_table.module_meta; + EXPECT_EQ(expected_module_meta.toStyledString(), + snapshot_module_meta.ToJsonValue().toStyledString()); +} - 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); +TEST_F(SQLPTExtRepresentationTest, + GenerateSnapshot_SetHardwareVersion_HardwareVersionIsPresentInSnapshot) { + policy_table::Table update = LoadPreloadedPT(kSdlPreloadedPtJson); - policy_table::Table expected(&table); + ASSERT_TRUE(IsValid(update)); + EXPECT_TRUE(reps_->Save(update)); - // Assert - EXPECT_EQ(expected.ToJsonValue().toStyledString(), - snapshot->ToJsonValue().toStyledString()); + reps_->SetHardwareVersion(kHardwareVersion); + std::shared_ptr<policy_table::Table> snapshot = reps_->GenerateSnapshot(); + + auto expected_module_meta = GetDefaultSnapshotModuleMeta(update); + expected_module_meta["hardware_version"] = Json::Value(kHardwareVersion); + + auto& snapshot_module_meta = snapshot->policy_table.module_meta; + EXPECT_EQ(expected_module_meta.toStyledString(), + snapshot_module_meta.ToJsonValue().toStyledString()); +} + +TEST_F(SQLPTExtRepresentationTest, Save_ParametersPresent_ParametersSaved) { + policy_table::Table update = LoadPreloadedPT(kSdlPreloadedPtJson); + ASSERT_TRUE(IsValid(update)); + + policy_table::FunctionalGroupings func_groups; + ASSERT_TRUE(reps_->GetFunctionalGroupings(func_groups)); + EXPECT_TRUE(func_groups.empty()); + + EXPECT_TRUE(reps_->Save(update)); + ASSERT_TRUE(reps_->GetFunctionalGroupings(func_groups)); + + policy_table::FunctionalGroupings::iterator func_groups_iter = + func_groups.find(kFunctionalGroupWithParams); + ASSERT_TRUE(func_groups.end() != func_groups_iter); + policy_table::Rpcs& rpcs = func_groups_iter->second; + EXPECT_EQ(kUserConsentForGroupWithParams, + static_cast<std::string>(*rpcs.user_consent_prompt)); + policy_table::Rpc& rpc = rpcs.rpcs; + policy_table::Rpc::const_iterator rpc_iter = rpc.find(kRpcForGroupWithParams); + EXPECT_TRUE(rpc.end() != rpc_iter); + const ::policy_table::Parameters& parameters = *(rpc_iter->second.parameters); + EXPECT_TRUE(!parameters.empty()); +} + +TEST_F(SQLPTExtRepresentationTest, Save_NoParameters_NoParametersSaved) { + policy_table::Table update = LoadPreloadedPT(kSdlPreloadedPtJson); + ASSERT_TRUE(IsValid(update)); + + policy_table::FunctionalGroupings func_groups; + ASSERT_TRUE(reps_->GetFunctionalGroupings(func_groups)); + EXPECT_TRUE(func_groups.empty()); + + EXPECT_TRUE(reps_->Save(update)); + ASSERT_TRUE(reps_->GetFunctionalGroupings(func_groups)); + + const std::string func_group_without_params = "Notifications"; + const std::string user_consent = "Notifications"; + const std::string rpc_without_params = "Alert"; + + policy_table::FunctionalGroupings::iterator func_groups_iter = + func_groups.find(func_group_without_params); + ASSERT_TRUE(func_groups.end() != func_groups_iter); + policy_table::Rpcs& rpcs = func_groups_iter->second; + EXPECT_EQ(user_consent, static_cast<std::string>(*rpcs.user_consent_prompt)); + policy_table::Rpc& rpc = rpcs.rpcs; + EXPECT_EQ(1u, rpc.size()); + policy_table::Rpc::const_iterator rpc_iter = rpc.find(rpc_without_params); + EXPECT_TRUE(rpc.end() != rpc_iter); + // Check parameters + const ::policy_table::Parameters& parameters = *(rpc_iter->second.parameters); + EXPECT_FALSE(parameters.is_initialized()); + EXPECT_TRUE(parameters.empty()); +} + +TEST_F(SQLPTExtRepresentationTest, Save_EmptyParameters_ParametersEmpty) { + policy_table::Table update = LoadPreloadedPT(kSdlPreloadedPtJson); + ASSERT_TRUE(IsValid(update)); + + policy_table::FunctionalGroupings func_groups; + EXPECT_TRUE(reps_->GetFunctionalGroupings(func_groups)); + EXPECT_TRUE(func_groups.empty()); + + auto json_update = update.ToJsonValue(); + json_update["policy_table"]["functional_groupings"] + [kFunctionalGroupWithParams]["rpcs"][kRpcForGroupWithParams] + ["parameters"] = Json::Value(Json::arrayValue); + policy_table::Table update_with_empty_param(&json_update); + + EXPECT_TRUE(reps_->Save(update_with_empty_param)); + EXPECT_TRUE(reps_->GetFunctionalGroupings(func_groups)); + + policy_table::FunctionalGroupings::iterator func_groups_iter = + func_groups.find(kFunctionalGroupWithParams); + ASSERT_TRUE(func_groups.end() != func_groups_iter); + policy_table::Rpcs& rpcs = func_groups_iter->second; + EXPECT_EQ(kUserConsentForGroupWithParams, + static_cast<std::string>(*rpcs.user_consent_prompt)); + policy_table::Rpc& rpc = rpcs.rpcs; + policy_table::Rpc::const_iterator rpc_iter = rpc.find(kRpcForGroupWithParams); + EXPECT_TRUE(rpc.end() != rpc_iter); + // Check parameters + const ::policy_table::Parameters& parameters = *(rpc_iter->second.parameters); + // 'parameters' : [] - represented as initialized, but empty + // missing 'parameters' - represented as non-initialized and empty + EXPECT_TRUE(parameters.is_initialized()); + EXPECT_TRUE(parameters.empty()); } TEST_F( @@ -1159,7 +1183,8 @@ TEST_F( TEST_F(SQLPTExtRepresentationTest, SetMetaInfo_SetMetaInfo_ExpectValuesSetInParams) { // Arrange - ASSERT_TRUE(reps_->SetMetaInfo("4.1.3.B_EB355B", "WAEGB", "ru-ru")); + ASSERT_TRUE( + reps_->SetMetaInfo(kSoftwareVersion, kWersCountryCode, kLanguage)); utils::dbms::SQLQuery query(reps_->db()); const std::string query_select_ccpu = "SELECT `ccpu_version` FROM `module_meta`"; @@ -1171,13 +1196,13 @@ TEST_F(SQLPTExtRepresentationTest, // Assert query.Prepare(query_select_ccpu); query.Next(); - EXPECT_EQ("4.1.3.B_EB355B", query.GetString(0)); + EXPECT_EQ(kSoftwareVersion, query.GetString(0)); query.Prepare(query_select_wers_country_code); query.Next(); - EXPECT_EQ("WAEGB", query.GetString(0)); + EXPECT_EQ(kWersCountryCode, query.GetString(0)); query.Prepare(query_select_language); query.Next(); - EXPECT_EQ("ru-ru", query.GetString(0)); + EXPECT_EQ(kLanguage, query.GetString(0)); } TEST_F(SQLPTExtRepresentationTest, @@ -1203,6 +1228,17 @@ TEST_F(SQLPTExtRepresentationTest, EXPECT_EQ("ru-ru", query.GetString(0)); } +TEST_F(SQLPTExtRepresentationTest, SetHardwareVersion_ValueIsSetInModuleMeta) { + utils::dbms::SQLQuery query(reps_->db()); + reps_->SetHardwareVersion(kHardwareVersion); + const std::string query_select_hardware_version = + "SELECT `hardware_version` FROM `module_meta`"; + + query.Prepare(query_select_hardware_version); + query.Next(); + EXPECT_EQ(kHardwareVersion, query.GetString(0)); +} + TEST_F( SQLPTExtRepresentationTest, GetFunctionalGroupNames_SetGroupsManuallyThenGetGroupNames_ExpectAllGroupsReceived) { |