From de1f0e371bc514464cd3ed343c4cc45e355c16f9 Mon Sep 17 00:00:00 2001 From: JackLivio Date: Wed, 27 Jun 2018 10:50:28 -0400 Subject: Merge Develop --- .../application_manager/application_data_impl.h | 20 +++--- .../include/application_manager/application_impl.h | 4 +- .../application_manager/application_manager_impl.h | 5 +- .../on_interior_vehicle_data_notification_test.cc | 2 +- .../commands/on_remote_control_settings_test.cc | 2 +- .../test/resource_allocation_manager_impl_test.cc | 9 +-- .../src/commands/mobile/add_sub_menu_request.cc | 35 ++++++++-- .../test/commands/hmi/hmi_notifications_test.cc | 6 +- .../hmi/on_driver_distraction_notification_test.cc | 4 +- .../commands/hmi/sdl_activate_app_request_test.cc | 7 +- .../commands/mobile/add_command_request_test.cc | 77 +++++++++++---------- .../commands/mobile/add_sub_menu_request_test.cc | 43 +++++++++++- .../commands/mobile/change_registration_test.cc | 17 +++-- .../mobile/create_interaction_choice_set_test.cc | 5 +- .../mobile/delete_interaction_choice_set_test.cc | 7 +- .../test/commands/mobile/delete_sub_menu_test.cc | 9 +-- .../on_hmi_status_notification_from_mobile_test.cc | 4 +- .../mobile/on_keyboard_input_notification_test.cc | 4 +- .../mobile/register_app_interface_request_test.cc | 11 +-- .../commands/mobile/set_global_properties_test.cc | 16 +++-- .../mobile/unsubscribe_vehicle_request_test.cc | 8 ++- .../src/application_data_impl.cc | 31 +++++---- .../application_manager/src/application_impl.cc | 13 ++-- .../src/application_manager_impl.cc | 42 +++++------ .../src/message_helper/message_helper.cc | 8 +++ .../src/policies/policy_handler.cc | 7 ++ .../test/commands/command_request_impl_test.cc | 7 +- .../test/hmi_language_handler_test.cc | 5 +- .../application_manager/resumption_data_test.h | 17 +++-- .../test/message_helper/message_helper_test.cc | 19 +++-- .../test/policy_handler_test.cc | 7 +- .../test/rc_policy_handler_test.cc | 9 +-- .../test/resumption/resume_ctrl_test.cc | 23 +++--- .../test/resumption/resumption_data_test.cc | 8 +-- .../test/state_controller/state_controller_test.cc | 11 +-- src/components/include/utils/data_accessor.h | 15 ++-- src/components/include/utils/lock.h | Bin 5079 -> 5418 bytes src/components/interfaces/HMI_API.xml | 3 + src/components/interfaces/MOBILE_API.xml | 3 + src/components/utils/src/lock_posix.cc | 13 ++-- .../utils/test/conditional_variable_test.cc | 4 +- 41 files changed, 345 insertions(+), 195 deletions(-) diff --git a/src/components/application_manager/include/application_manager/application_data_impl.h b/src/components/application_manager/include/application_manager/application_data_impl.h index dc9be4e1d8..8da8dec8f1 100644 --- a/src/components/application_manager/include/application_manager/application_data_impl.h +++ b/src/components/application_manager/include/application_manager/application_data_impl.h @@ -275,13 +275,14 @@ class DynamicApplicationDataImpl : public virtual Application { std::string display_layout_; CommandsMap commands_; - mutable sync_primitives::Lock commands_lock_; + mutable std::shared_ptr commands_lock_ptr_; SubMenuMap sub_menu_; - mutable sync_primitives::Lock sub_menu_lock_; + mutable std::shared_ptr sub_menu_lock_ptr_; ChoiceSetMap choice_set_map_; - mutable sync_primitives::Lock choice_set_map_lock_; + mutable std::shared_ptr choice_set_map_lock_ptr_; PerformChoiceSetMap performinteraction_choice_set_map_; - mutable sync_primitives::Lock performinteraction_choice_set_lock_; + mutable std::shared_ptr + performinteraction_choice_set_lock_ptr_; uint32_t is_perform_interaction_active_; bool is_reset_global_properties_active_; int32_t perform_interaction_mode_; @@ -295,21 +296,22 @@ class DynamicApplicationDataImpl : public virtual Application { }; DataAccessor DynamicApplicationDataImpl::commands_map() const { - return DataAccessor(commands_, commands_lock_); + return DataAccessor(commands_, commands_lock_ptr_); } DataAccessor DynamicApplicationDataImpl::sub_menu_map() const { - return DataAccessor(sub_menu_, sub_menu_lock_); + return DataAccessor(sub_menu_, sub_menu_lock_ptr_); } DataAccessor DynamicApplicationDataImpl::choice_set_map() const { - return DataAccessor(choice_set_map_, choice_set_map_lock_); + return DataAccessor(choice_set_map_, choice_set_map_lock_ptr_); } DataAccessor DynamicApplicationDataImpl::performinteraction_choice_set_map() const { - return DataAccessor(performinteraction_choice_set_map_, - performinteraction_choice_set_lock_); + return DataAccessor( + performinteraction_choice_set_map_, + performinteraction_choice_set_lock_ptr_); } uint32_t DynamicApplicationDataImpl::is_perform_interaction_active() const { diff --git a/src/components/application_manager/include/application_manager/application_impl.h b/src/components/application_manager/include/application_manager/application_impl.h index 5061bd1208..496f591a50 100644 --- a/src/components/application_manager/include/application_manager/application_impl.h +++ b/src/components/application_manager/include/application_manager/application_impl.h @@ -499,8 +499,8 @@ class ApplicationImpl : public virtual Application, CommandSoftButtonID cmd_softbuttonid_; // Lock for command soft button id sync_primitives::Lock cmd_softbuttonid_lock_; - mutable sync_primitives::Lock vi_lock_; - sync_primitives::Lock button_lock_; + mutable std::shared_ptr vi_lock_ptr_; + mutable std::shared_ptr button_lock_ptr_; std::string folder_name_; ApplicationManager& application_manager_; diff --git a/src/components/application_manager/include/application_manager/application_manager_impl.h b/src/components/application_manager/include/application_manager/application_manager_impl.h index 4ff4381036..7433a5560f 100644 --- a/src/components/application_manager/include/application_manager/application_manager_impl.h +++ b/src/components/application_manager/include/application_manager/application_manager_impl.h @@ -1423,8 +1423,9 @@ class ApplicationManagerImpl ForbiddenApps forbidden_applications; // Lock for applications list - mutable sync_primitives::Lock applications_list_lock_; - mutable sync_primitives::Lock apps_to_register_list_lock_; + mutable std::shared_ptr applications_list_lock_ptr_; + mutable std::shared_ptr + apps_to_register_list_lock_ptr_; mutable sync_primitives::Lock subscribed_way_points_apps_lock_; /** diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/on_interior_vehicle_data_notification_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/on_interior_vehicle_data_notification_test.cc index e26b5b9e0f..2f2a47315a 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/on_interior_vehicle_data_notification_test.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/on_interior_vehicle_data_notification_test.cc @@ -108,7 +108,7 @@ TEST_F(OnInteriorVehicleDataNotificationTest, MessageSharedPtr mobile_message = CreateBasicMessage(); ApplicationSet app_set = {mock_app_}; MessageSharedPtr message; - const sync_primitives::Lock apps_lock; + std::shared_ptr apps_lock = std::make_shared(); DataAccessor accessor(app_set, apps_lock); // Expectations EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(accessor)); diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/on_remote_control_settings_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/on_remote_control_settings_test.cc index 0c61a7d118..361fa8a655 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/on_remote_control_settings_test.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/on_remote_control_settings_test.cc @@ -134,7 +134,7 @@ TEST_F(RCOnRemoteControlSettingsNotificationTest, ApplicationSet app_set = {mock_app_}; - const sync_primitives::Lock apps_lock; + std::shared_ptr apps_lock = std::make_shared(); DataAccessor accessor(app_set, apps_lock); // Expectations EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(accessor)); diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/resource_allocation_manager_impl_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/resource_allocation_manager_impl_test.cc index 0ff17a9c59..faef188245 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/resource_allocation_manager_impl_test.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/resource_allocation_manager_impl_test.cc @@ -84,7 +84,8 @@ class RAManagerTest : public ::testing::Test { protocol_handler::ServiceType::kRpc))) , mock_app_1_(utils::MakeShared >()) , mock_app_2_(utils::MakeShared >()) - , apps_da_(apps_, apps_lock_) { + , apps_lock_ptr_(std::make_shared()) + , apps_da_(apps_, apps_lock_ptr_) { ON_CALL(mock_app_mngr_, GetPolicyHandler()) .WillByDefault(ReturnRef(mock_policy_handler_)); auto plugin_id = rc_rpc_plugin::RCRPCPlugin::kRCPluginID; @@ -109,7 +110,7 @@ class RAManagerTest : public ::testing::Test { utils::SharedPtr > mock_app_1_; utils::SharedPtr > mock_app_2_; application_manager::ApplicationSet apps_; - const sync_primitives::Lock apps_lock_; + std::shared_ptr apps_lock_ptr_; DataAccessor apps_da_; }; @@ -395,7 +396,7 @@ TEST_F(RAManagerTest, AppsDisallowed_ReleaseAllResources) { application_manager::ApplicationSet apps; apps.insert(mock_app_1_); - const sync_primitives::Lock apps_lock; + std::shared_ptr apps_lock = std::make_shared(); DataAccessor apps_da(apps, apps_lock); EXPECT_CALL(mock_app_mngr_, applications()).WillRepeatedly(Return(apps_da)); @@ -456,7 +457,7 @@ TEST_F(RAManagerTest, AppGotRevokedModulesWithPTU_ReleaseRevokedResource) { application_manager::ApplicationSet apps; apps.insert(mock_app_1_); - const sync_primitives::Lock apps_lock; + std::shared_ptr apps_lock = std::make_shared(); DataAccessor apps_da(apps, apps_lock); EXPECT_CALL(mock_app_mngr_, applications()).WillRepeatedly(Return(apps_da)); diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/add_sub_menu_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/add_sub_menu_request.cc index 9e945e6d5f..d9075b707e 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/add_sub_menu_request.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/add_sub_menu_request.cc @@ -67,8 +67,27 @@ void AddSubMenuRequest::Run() { return; } + + smart_objects::SmartObject received_msg_params = + (*message_)[strings::msg_params]; + mobile_apis::Result::eType verification_result = + mobile_apis::Result::INVALID_ENUM; + + if (received_msg_params.keyExists(strings::menu_icon)) { + verification_result = MessageHelper::VerifyImage( + received_msg_params[strings::menu_icon], + app, + application_manager_); + + if (mobile_apis::Result::SUCCESS != verification_result) { + LOG4CXX_ERROR(logger_,"MessageHelper::VerifyImage return " << verification_result); + SendResponse(false, verification_result); + return; + } + } + const int32_t menu_id = - (*message_)[strings::msg_params][strings::menu_id].asInt(); + received_msg_params[strings::menu_id].asInt(); if (app->FindSubMenu(menu_id)) { LOG4CXX_ERROR(logger_, "Menu with id " << menu_id << " is not found."); SendResponse(false, mobile_apis::Result::INVALID_ID); @@ -76,7 +95,7 @@ void AddSubMenuRequest::Run() { } const std::string& menu_name = - (*message_)[strings::msg_params][strings::menu_name].asString(); + received_msg_params[strings::menu_name].asString(); if (app->IsSubMenuNameAlreadyExist(menu_name)) { LOG4CXX_ERROR(logger_, "Menu name " << menu_name << " is duplicated."); @@ -94,15 +113,19 @@ void AddSubMenuRequest::Run() { smart_objects::SmartObject(smart_objects::SmartType_Map); msg_params[strings::menu_id] = - (*message_)[strings::msg_params][strings::menu_id]; - if ((*message_)[strings::msg_params].keyExists(strings::position)) { + received_msg_params[strings::menu_id]; + if (received_msg_params.keyExists(strings::position)) { msg_params[strings::menu_params][strings::position] = - (*message_)[strings::msg_params][strings::position]; + received_msg_params[strings::position]; } msg_params[strings::menu_params][strings::menu_name] = - (*message_)[strings::msg_params][strings::menu_name]; + received_msg_params[strings::menu_name]; msg_params[strings::app_id] = app->app_id(); + if (mobile_apis::Result::SUCCESS == verification_result) { + msg_params[strings::menu_icon] = received_msg_params[strings::menu_icon]; + } + StartAwaitForInterface(HmiInterfaces::HMI_INTERFACE_UI); SendHMIRequest(hmi_apis::FunctionID::UI_AddSubMenu, &msg_params, true); } diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc index 92436d8ad7..b498d07d99 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc @@ -223,7 +223,9 @@ class HMICommandsNotificationsTest CommandsTestMocks::kIsNice> { public: HMICommandsNotificationsTest() - : applications_(application_set_, applications_lock_), app_ptr_(NULL) {} + : applications_lock_(std::make_shared()) + , applications_(application_set_, applications_lock_) + , app_ptr_(NULL) {} ~HMICommandsNotificationsTest() { // Fix DataAccessor release and WinQt crash @@ -233,7 +235,7 @@ class HMICommandsNotificationsTest protected: am::ApplicationSet application_set_; - sync_primitives::Lock applications_lock_; + std::shared_ptr applications_lock_; DataAccessor applications_; NiceMock mock_event_dispatcher_; diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/on_driver_distraction_notification_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/on_driver_distraction_notification_test.cc index bc307a9e97..60a7b01612 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/on_driver_distraction_notification_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/on_driver_distraction_notification_test.cc @@ -68,7 +68,9 @@ typedef ::utils::SharedPtr NotificationPtr; class HMIOnDriverDistractionNotificationTest : public CommandsTest { public: - ::sync_primitives::Lock app_set_lock_; + HMIOnDriverDistractionNotificationTest() + : app_set_lock_(std::make_shared()) {} + std::shared_ptr app_set_lock_; policy_test::MockPolicyHandlerInterface mock_policy_handler_interface_; }; diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc index 900682eaf2..c21791e913 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc @@ -99,6 +99,10 @@ MATCHER_P2(CheckMsgParams, result, corr_id, "") { class SDLActivateAppRequestTest : public CommandRequestTest { + public: + SDLActivateAppRequestTest() + : lock_(std::make_shared()) {} + protected: ~SDLActivateAppRequestTest() { // Fix DataAccessor release and WinQt crash @@ -118,7 +122,8 @@ class SDLActivateAppRequestTest } ApplicationSet app_list_; - ::sync_primitives::Lock lock_; + std::shared_ptr lock_; + policy_test::MockPolicyHandlerInterface policy_handler_; application_manager_test::MockStateController mock_state_controller_; NiceMock mock_event_dispatcher_; }; diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_command_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_command_request_test.cc index 138de72c1f..0db14a13ce 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_command_request_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_command_request_test.cc @@ -103,6 +103,7 @@ class AddCommandRequestTest AddCommandRequestTest() : msg_(CreateMessage()) , default_app_name_("test_default_app_name_") + , lock_ptr_(std::make_shared()) , mock_app_(CreateMockApp()) { EXPECT_CALL(app_mngr_, application(kConnectionKey)) .WillRepeatedly(Return(mock_app_)); @@ -176,7 +177,7 @@ class AddCommandRequestTest CreateCommandsMap(first_command, second_command); EXPECT_CALL(*mock_app_, commands_map()) .WillRepeatedly(Return(DataAccessor( - commands_map, lock_))); + commands_map, lock_ptr_))); so_ptr_ = utils::MakeShared(SmartType_Map); EXPECT_CALL(*mock_app_, FindSubMenu(kSecondParentId)) .WillOnce(Return(so_ptr_.get())); @@ -224,7 +225,7 @@ class AddCommandRequestTest MessageSharedPtr msg_; SmartObjectSPtr so_ptr_; const utils::custom_string::CustomString default_app_name_; - sync_primitives::Lock lock_; + std::shared_ptr lock_ptr_; MockAppPtr mock_app_; }; @@ -269,8 +270,8 @@ TEST_F(AddCommandRequestTest, Run_MenuNameHasSyntaxError_EXPECT_INVALID_DATA) { EXPECT_CALL(*mock_app_, FindCommand(kCmdId)).WillOnce(Return(so_ptr_.get())); am::CommandsMap commands_map; EXPECT_CALL(*mock_app_, commands_map()) - .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + .WillRepeatedly(Return(DataAccessor( + commands_map, lock_ptr_))); SmartObject parent = SmartObject(SmartType_Map); EXPECT_CALL(*mock_app_, FindSubMenu(kFirstParentId)) .WillOnce(Return(&parent)); @@ -292,7 +293,7 @@ TEST_F(AddCommandRequestTest, am::CommandsMap commands_map; EXPECT_CALL(*mock_app_, commands_map()) .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + DataAccessor(commands_map, lock_ptr_))); EXPECT_CALL(mock_rpc_service_, ManageMobileCommand( @@ -318,7 +319,7 @@ TEST_F(AddCommandRequestTest, Run_CMDIconHasError_EXPECT_INVALID_DATA) { am::CommandsMap commands_map; EXPECT_CALL(*mock_app_, commands_map()) .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + DataAccessor(commands_map, lock_ptr_))); EXPECT_CALL(mock_rpc_service_, ManageMobileCommand( @@ -360,7 +361,7 @@ TEST_F(AddCommandRequestTest, CreateCommandsMap(first_command, second_command); EXPECT_CALL(*mock_app_, commands_map()) .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + DataAccessor(commands_map, lock_ptr_))); EXPECT_CALL(mock_rpc_service_, ManageMobileCommand( @@ -384,8 +385,8 @@ TEST_F(AddCommandRequestTest, const am::CommandsMap commands_map = CreateCommandsMap(first_command, second_command); EXPECT_CALL(*mock_app_, commands_map()) - .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + .WillRepeatedly(Return(DataAccessor( + commands_map, lock_ptr_))); EXPECT_CALL(*mock_app_, FindSubMenu(kSecondParentId)) .WillOnce(Return(so_ptr_.get())); @@ -413,8 +414,8 @@ TEST_F(AddCommandRequestTest, const am::CommandsMap commands_map = CreateCommandsMap(first_command, second_command); EXPECT_CALL(*mock_app_, commands_map()) - .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + .WillRepeatedly(Return(DataAccessor( + commands_map, lock_ptr_))); so_ptr_ = utils::MakeShared(SmartType_Map); EXPECT_CALL(*mock_app_, FindSubMenu(kSecondParentId)) .WillOnce(Return(so_ptr_.get())); @@ -458,8 +459,8 @@ TEST_F(AddCommandRequestTest, const am::CommandsMap commands_map = CreateCommandsMap(first_command, second_command); EXPECT_CALL(*mock_app_, commands_map()) - .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + .WillRepeatedly(Return(DataAccessor( + commands_map, lock_ptr_))); so_ptr_ = utils::MakeShared(SmartType_Map); EXPECT_CALL(*mock_app_, FindSubMenu(kSecondParentId)) .WillOnce(Return(so_ptr_.get())); @@ -492,7 +493,7 @@ TEST_F(AddCommandRequestTest, GetRunMethods_SUCCESS) { am::CommandsMap commands_map; EXPECT_CALL(*mock_app_, commands_map()) .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + DataAccessor(commands_map, lock_ptr_))); EXPECT_CALL( mock_rpc_service_, @@ -514,7 +515,7 @@ TEST_F(AddCommandRequestTest, OnEvent_UI_SUCCESS) { am::CommandsMap commands_map; EXPECT_CALL(*mock_app_, commands_map()) .WillRepeatedly( - Return(DataAccessor(commands_map, lock_))); + Return(DataAccessor(commands_map, lock_ptr_))); Event event(hmi_apis::FunctionID::UI_AddCommand); event.set_smart_object(*msg_); @@ -542,7 +543,7 @@ TEST_F(AddCommandRequestTest, OnEvent_VR_SUCCESS) { am::CommandsMap commands_map; EXPECT_CALL(*mock_app_, commands_map()) .WillRepeatedly( - Return(DataAccessor(commands_map, lock_))); + Return(DataAccessor(commands_map, lock_ptr_))); EXPECT_CALL( mock_rpc_service_, @@ -617,7 +618,7 @@ TEST_F(AddCommandRequestTest, am::CommandsMap commands_map; EXPECT_CALL(*mock_app_, commands_map()) .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + DataAccessor(commands_map, lock_ptr_))); EXPECT_CALL( mock_rpc_service_, @@ -647,8 +648,8 @@ TEST_F(AddCommandRequestTest, .WillOnce(Return(mobile_apis::Result::SUCCESS)); am::CommandsMap commands_map; EXPECT_CALL(*mock_app_, commands_map()) - .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + .WillRepeatedly(Return(DataAccessor( + commands_map, lock_ptr_))); { InSequence dummy; @@ -687,8 +688,8 @@ TEST_F( .WillOnce(Return(mobile_apis::Result::SUCCESS)); am::CommandsMap commands_map; EXPECT_CALL(*mock_app_, commands_map()) - .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + .WillRepeatedly(Return(DataAccessor( + commands_map, lock_ptr_))); { InSequence dummy; EXPECT_CALL( @@ -731,8 +732,8 @@ TEST_F( .WillOnce(Return(mobile_apis::Result::SUCCESS)); am::CommandsMap commands_map; EXPECT_CALL(*mock_app_, commands_map()) - .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + .WillRepeatedly(Return(DataAccessor( + commands_map, lock_ptr_))); { InSequence dummy; @@ -776,8 +777,8 @@ TEST_F( .WillOnce(Return(mobile_apis::Result::SUCCESS)); am::CommandsMap commands_map; EXPECT_CALL(*mock_app_, commands_map()) - .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + .WillRepeatedly(Return(DataAccessor( + commands_map, lock_ptr_))); { InSequence dummy; @@ -826,8 +827,8 @@ TEST_F( .WillOnce(Return(mobile_apis::Result::SUCCESS)); am::CommandsMap commands_map; EXPECT_CALL(*mock_app_, commands_map()) - .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + .WillRepeatedly(Return(DataAccessor( + commands_map, lock_ptr_))); { InSequence dummy; EXPECT_CALL( @@ -874,8 +875,8 @@ TEST_F( .WillOnce(Return(mobile_apis::Result::SUCCESS)); am::CommandsMap commands_map; EXPECT_CALL(*mock_app_, commands_map()) - .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + .WillRepeatedly(Return(DataAccessor( + commands_map, lock_ptr_))); EXPECT_CALL( mock_rpc_service_, ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::UI_AddCommand))) @@ -911,7 +912,7 @@ TEST_F( am::CommandsMap commands_map; EXPECT_CALL(*mock_app_, commands_map()) .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + DataAccessor(commands_map, lock_ptr_))); EXPECT_CALL( mock_rpc_service_, @@ -949,8 +950,8 @@ TEST_F(AddCommandRequestTest, .WillOnce(Return(mobile_apis::Result::SUCCESS)); am::CommandsMap commands_map; EXPECT_CALL(*mock_app_, commands_map()) - .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + .WillRepeatedly(Return(DataAccessor( + commands_map, lock_ptr_))); { InSequence dummy; EXPECT_CALL( @@ -997,8 +998,8 @@ TEST_F(AddCommandRequestTest, .WillOnce(Return(mobile_apis::Result::SUCCESS)); am::CommandsMap commands_map; EXPECT_CALL(*mock_app_, commands_map()) - .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + .WillRepeatedly(Return(DataAccessor( + commands_map, lock_ptr_))); { InSequence dummy; EXPECT_CALL( @@ -1069,8 +1070,8 @@ TEST_F(AddCommandRequestTest, OnTimeOut_AppRemoveCommandCalled) { const am::CommandsMap commands_map = CreateCommandsMap(first_command, second_command); EXPECT_CALL(*mock_app_, commands_map()) - .WillRepeatedly(Return( - DataAccessor(commands_map, lock_))); + .WillRepeatedly(Return(DataAccessor( + commands_map, lock_ptr_))); so_ptr_ = utils::MakeShared(SmartType_Map); EXPECT_CALL(*mock_app_, FindSubMenu(kSecondParentId)) .WillOnce(Return(so_ptr_.get())); @@ -1104,8 +1105,8 @@ TEST_F(AddCommandRequestTest, OnTimeOut_AppRemoveCommandCalled) { base_class_request->onTimeOut(); } -} // namespace add_command_test +} // namespace add_command_request } // namespace mobile_commands_test } // namespace commands_test } // namespace components -} // namespace tests +} // namespace test diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_sub_menu_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_sub_menu_request_test.cc index 21b3e771ce..b692b75bec 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_sub_menu_request_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_sub_menu_request_test.cc @@ -61,10 +61,50 @@ typedef SharedPtr AddSubMenuPtr; namespace { const uint32_t kConnectionKey = 2u; +const uint32_t kAppId = 1u; } // namespace class AddSubMenuRequestTest - : public CommandRequestTest {}; + : public CommandRequestTest { + public: + AddSubMenuRequestTest() + : mock_app(CreateMockApp()) { + EXPECT_CALL(app_mngr_, application(kConnectionKey)) + .WillRepeatedly(Return(mock_app)); + } + + MockAppPtr mock_app; + + MessageSharedPtr CreateMsgParams() { + MessageSharedPtr msg = CreateMessage(); + (*msg)[am::strings::params][am::strings::connection_key] = kConnectionKey; + (*msg)[am::strings::msg_params][am::strings::app_id] = kAppId; + return msg; + } +}; + + +TEST_F(AddSubMenuRequestTest, Run_ImageVerificationFailed_EXPECT_INVALID_DATA) { + const uint32_t menu_id = 10u; + MessageSharedPtr msg = CreateMsgParams(); + SmartObject& msg_params = (*msg)[am::strings::msg_params]; + + msg_params[am::strings::menu_icon] = 1; + msg_params[am::strings::menu_icon][am::strings::value] = "10"; + msg_params[am::strings::menu_id] = menu_id; + msg_params[am::strings::menu_name] = "test"; + SmartObject& image = msg_params[am::strings::menu_icon]; + + EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _)) + .WillOnce(Return(mobile_apis::Result::INVALID_DATA)); + EXPECT_CALL(mock_rpc_service_, + ManageMobileCommand(MobileResultCodeIs(mobile_apis::Result::INVALID_DATA), _)); + utils::SharedPtr request_ptr = + CreateCommand(msg); + + request_ptr->Run(); +} + TEST_F(AddSubMenuRequestTest, OnEvent_UI_UNSUPPORTED_RESOURCE) { const uint32_t menu_id = 10u; @@ -75,7 +115,6 @@ TEST_F(AddSubMenuRequestTest, OnEvent_UI_UNSUPPORTED_RESOURCE) { utils::SharedPtr command = CreateCommand(msg); - MockAppPtr mock_app = CreateMockApp(); ON_CALL(app_mngr_, application(kConnectionKey)) .WillByDefault(Return(mock_app)); ON_CALL(*mock_app, app_id()).WillByDefault(Return(kConnectionKey)); diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/change_registration_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/change_registration_test.cc index 30f01e390e..3d6a345ced 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/change_registration_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/change_registration_test.cc @@ -88,7 +88,8 @@ class ChangeRegistrationRequestTest : public CommandRequestTest { public: ChangeRegistrationRequestTest() - : mock_app_(CreateMockApp()) + : app_set_lock_ptr_(std::make_shared()) + , mock_app_(CreateMockApp()) , supported_languages_(CreateMessage(smart_objects::SmartType_Array)) {} MessageSharedPtr CreateMsgFromMobile() { @@ -158,7 +159,8 @@ class ChangeRegistrationRequestTest MockAppPtr app = CreateMockApp(); app->set_name(name); - DataAccessor accessor(application_set, app_set_lock_); + DataAccessor accessor(application_set, + app_set_lock_ptr_); application_set.insert(app); @@ -265,7 +267,8 @@ class ChangeRegistrationRequestTest NiceMock, application_manager_test::MockHMICapabilities>::Result MockHMICapabilities; - sync_primitives::Lock app_set_lock_; + std::shared_ptr app_set_lock_ptr_; + MockHMICapabilities hmi_capabilities_; MockAppPtr mock_app_; MessageSharedPtr supported_languages_; MockPolicyHandlerInterface mock_policy_handler_; @@ -284,7 +287,7 @@ TEST_F(ChangeRegistrationRequestTest, MockAppPtr app = CreateMockApp(); app->set_name(name); - DataAccessor accessor(application_set, app_set_lock_); + DataAccessor accessor(application_set, app_set_lock_ptr_); application_set.insert(app); @@ -373,7 +376,7 @@ TEST_F(ChangeRegistrationRequestTest, const utils::custom_string::CustomString name("name"); MockAppPtr app = CreateMockApp(); app->set_name(name); - DataAccessor accessor(application_set, app_set_lock_); + DataAccessor accessor(application_set, app_set_lock_ptr_); application_set.insert(app); EXPECT_CALL(app_mngr_, applications()).WillOnce(Return(accessor)); EXPECT_CALL(*app, name()).WillOnce(ReturnRef(name)); @@ -477,7 +480,7 @@ TEST_F(ChangeRegistrationRequestTest, MockAppPtr app = CreateMockApp(); app->set_name(name); - DataAccessor accessor(application_set, app_set_lock_); + DataAccessor accessor(application_set, app_set_lock_ptr_); application_set.insert(app); @@ -556,4 +559,4 @@ TEST_F(ChangeRegistrationRequestTest, } // namespace mobile_commands_test } // namespace commands_test } // namespace components -} // namespace tests +} // namespace test diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/create_interaction_choice_set_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/create_interaction_choice_set_test.cc index 6f5850c1bd..10ffbded09 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/create_interaction_choice_set_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/create_interaction_choice_set_test.cc @@ -113,7 +113,8 @@ class CreateInteractionChoiceSetRequestTest CreateInteractionChoiceSetRequestTest() : message_(CreateMessage()) , command_(CreateCommand(message_)) - , mock_app_(CreateMockApp()) {} + , mock_app_(CreateMockApp()) + , lock_(std::make_shared()) {} MessageSharedPtr CreateFullParamsVRSO() { MessageSharedPtr msg = CreateMessage(smart_objects::SmartType_Map); @@ -158,7 +159,7 @@ class CreateInteractionChoiceSetRequestTest MessageSharedPtr message_; CreateInteractionChoiceSetRequestPtr command_; MockAppPtr mock_app_; - sync_primitives::Lock lock_; + std::shared_ptr lock_; }; class CreateInteractionChoiceSetResponseTest diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/delete_interaction_choice_set_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/delete_interaction_choice_set_test.cc index ac4acfcdbc..b2daef9cd2 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/delete_interaction_choice_set_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/delete_interaction_choice_set_test.cc @@ -84,7 +84,9 @@ class DeleteInteractionChoiceSetRequestTest : public CommandRequestTest { public: DeleteInteractionChoiceSetRequestTest() - : accessor_(choice_set_map_, performinteraction_choice_set_lock_) {} + : performinteraction_choice_set_lock_( + std::make_shared()) + , accessor_(choice_set_map_, performinteraction_choice_set_lock_) {} ~DeleteInteractionChoiceSetRequestTest() { // Fix DataAccessor release and WinQt crash @@ -92,7 +94,8 @@ class DeleteInteractionChoiceSetRequestTest } am::PerformChoiceSetMap choice_set_map_; - mutable sync_primitives::Lock performinteraction_choice_set_lock_; + mutable std::shared_ptr + performinteraction_choice_set_lock_; DataAccessor accessor_; protected: diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/delete_sub_menu_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/delete_sub_menu_test.cc index ea7752ff4e..7a187c46d1 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/delete_sub_menu_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/delete_sub_menu_test.cc @@ -95,13 +95,14 @@ class DeleteSubMenuRequestTest : public CommandRequestTest { public: DeleteSubMenuRequestTest() - : accessor_(commands_map_, commands_lock_) + : commands_lock_(std::make_shared()) + , accessor_(commands_map_, commands_lock_) , message_(CreateMessage()) , command_(CreateCommand(message_)) , app_(CreateMockApp()) {} am::CommandsMap commands_map_; - mutable sync_primitives::Lock commands_lock_; + mutable std::shared_ptr commands_lock_; DataAccessor accessor_; MessageSharedPtr message_; @@ -143,8 +144,8 @@ TEST_F(DeleteSubMenuRequestTest, DISABLED_OnEvent_UI_UNSUPPORTED_RESOURCE) { am::CommandsMap commands_map; smart_objects::SmartObject commands_msg(smart_objects::SmartType_Map); commands_map.insert(std::pair(1u, &commands_msg)); - sync_primitives::Lock lock; - DataAccessor accessor(commands_map, lock); + DataAccessor accessor( + commands_map, std::make_shared()); EXPECT_CALL(*mock_app, commands_map()) .WillOnce(Return(accessor)) .WillOnce(Return(accessor)); diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_hmi_status_notification_from_mobile_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_hmi_status_notification_from_mobile_test.cc index 8e11e82b57..43e01c5a3d 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_hmi_status_notification_from_mobile_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_hmi_status_notification_from_mobile_test.cc @@ -61,6 +61,8 @@ using testing::_; class OnHMIStatusNotificationFromMobileTest : public CommandsTest { public: + OnHMIStatusNotificationFromMobileTest() + : lock_(std::make_shared()) {} MessageSharedPtr CreateMsgParams( const mobile_apis::HMILevel::eType kHMIState) { MessageSharedPtr msg = CreateMessage(); @@ -69,7 +71,7 @@ class OnHMIStatusNotificationFromMobileTest return msg; } ApplicationSet app_set_; - sync_primitives::Lock lock_; + std::shared_ptr lock_; }; TEST_F(OnHMIStatusNotificationFromMobileTest, diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_keyboard_input_notification_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_keyboard_input_notification_test.cc index adece503a3..ebfc2256ac 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_keyboard_input_notification_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_keyboard_input_notification_test.cc @@ -61,6 +61,8 @@ using testing::_; class OnKeyBoardInputNotificationTest : public CommandsTest { public: + OnKeyBoardInputNotificationTest() + : lock_(std::make_shared()) {} void SetSendNotificationExpectations(MessageSharedPtr msg) { EXPECT_CALL(mock_message_helper_, PrintSmartObject(_)) .WillOnce(Return(false)); @@ -87,7 +89,7 @@ class OnKeyBoardInputNotificationTest } SharedPtr app_set_; - sync_primitives::Lock lock_; + std::shared_ptr lock_; }; TEST_F(OnKeyBoardInputNotificationTest, Run_ActionActive_SUCCESS) { diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc index 96419f021d..8b21ceff17 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc @@ -93,6 +93,7 @@ class RegisterAppInterfaceRequestTest : msg_(CreateMessage()) , command_(CreateCommand(msg_)) , app_name_("test_app_name_") + , lock_ptr_(std::make_shared()) , mock_application_helper_( application_manager_test::MockApplicationHelper:: application_helper_mock()) { @@ -227,7 +228,7 @@ class RegisterAppInterfaceRequestTest SharedPtr command_; const utils::custom_string::CustomString app_name_; - sync_primitives::Lock lock_; + std::shared_ptr lock_ptr_; am::ApplicationSet app_set_; typedef IsNiceMock(app_set_, lock_))); + .WillByDefault( + Return(DataAccessor(app_set_, lock_ptr_))); ON_CALL(mock_policy_handler_, PolicyEnabled()).WillByDefault(Return(true)); ON_CALL(mock_policy_handler_, GetInitialAppData(kAppId, _, _)) .WillByDefault(Return(true)); @@ -348,7 +350,7 @@ TEST_F(RegisterAppInterfaceRequestTest, display_capabilities[am::hmi_response::text_fields] = "test_text_fields"; display_capabilities[am::hmi_response::image_fields] = "test_image_fields"; display_capabilities[am::hmi_response::media_clock_formats] = - "test_media_clock_formats"; + "test_media_clock_ptr_formats"; display_capabilities[am::hmi_response::num_custom_presets_available] = "test_num_custom_presets_available"; display_capabilities[am::hmi_response::graphic_supported] = @@ -368,7 +370,8 @@ TEST_F(RegisterAppInterfaceRequestTest, Return(&(*expected_message)[am::hmi_response::display_capabilities])); ON_CALL(app_mngr_, applications()) - .WillByDefault(Return(DataAccessor(app_set_, lock_))); + .WillByDefault( + Return(DataAccessor(app_set_, lock_ptr_))); ON_CALL(mock_policy_handler_, PolicyEnabled()).WillByDefault(Return(true)); ON_CALL(mock_policy_handler_, GetInitialAppData(kAppId, _, _)) .WillByDefault(Return(true)); diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/set_global_properties_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/set_global_properties_test.cc index 610f923fb8..5d31f48970 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/set_global_properties_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/set_global_properties_test.cc @@ -74,7 +74,9 @@ const uint32_t kPosition = 1u; class SetGlobalPropertiesRequestTest : public CommandRequestTest { public: - SetGlobalPropertiesRequestTest() : mock_app_(CreateMockApp()) {} + SetGlobalPropertiesRequestTest() + : lock_ptr_(std::make_shared()) + , mock_app_(CreateMockApp()) {} MessageSharedPtr CreateFullParamsUISO() { MessageSharedPtr msg = CreateMessage(smart_objects::SmartType_Map); @@ -248,7 +250,7 @@ class SetGlobalPropertiesRequestTest GetInterfaceState(am::HmiInterfaces::HMI_INTERFACE_TTS)) .WillByDefault(Return(am::HmiInterfaces::STATE_AVAILABLE)); } - sync_primitives::Lock lock_; + std::shared_ptr lock_ptr_; MockAppPtr mock_app_; }; @@ -621,7 +623,7 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_VRCouldNotGenerate_INVALID_DATA) { CommandsMap commands_map; SmartObject empty_msg(smart_objects::SmartType_Map); commands_map.insert(std::pair(1u, &empty_msg)); - DataAccessor accessor(commands_map, lock_); + DataAccessor accessor(commands_map, lock_ptr_); EXPECT_CALL(*mock_app_, commands_map()).WillOnce(Return(accessor)); EXPECT_CALL(*mock_app_, vr_help_title()).WillOnce(Return(vr_help_title)); EXPECT_CALL(*mock_app_, set_menu_title(_)).Times(0); @@ -652,7 +654,7 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_NoVRNoDataNoDefault_Canceled) { .WillOnce(Return(&vr_help_title)); CommandsMap commands_map; - DataAccessor accessor(commands_map, lock_); + DataAccessor accessor(commands_map, lock_ptr_); EXPECT_CALL(*mock_app_, commands_map()).WillOnce(Return(accessor)); const CustomString name("name"); EXPECT_CALL(*mock_app_, name()).WillOnce(ReturnRef(name)); @@ -695,7 +697,7 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_NoVRNoDataDefaultCreated_SUCCESS) { SmartObject command_text(smart_objects::SmartType_Map); commands_map[0] = &command_text; (*commands_map[0])[am::strings::vr_commands] = SmartObject("one"); - DataAccessor accessor(commands_map, lock_); + DataAccessor accessor(commands_map, lock_ptr_); EXPECT_CALL(*mock_app_, commands_map()).WillOnce(Return(accessor)); EXPECT_CALL(*mock_app_, set_vr_help(_)); const CustomString name("name"); @@ -737,7 +739,7 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_NoVRNoDataFromSynonyms_SUCCESS) { .WillRepeatedly(Return(&vr_help_title)); CommandsMap commands_map; - DataAccessor accessor(commands_map, lock_); + DataAccessor accessor(commands_map, lock_ptr_); EXPECT_CALL(*mock_app_, commands_map()).WillOnce(Return(accessor)); SmartObject vr_help_array(smart_objects::SmartType_Array); vr_help_array[0] = SmartObject(smart_objects::SmartType_Map); @@ -1246,4 +1248,4 @@ TEST_F(SetGlobalPropertiesRequestTest, } // namespace mobile_commands_test } // namespace commands_test } // namespace components -} // namespace tests +} // namespace test diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/unsubscribe_vehicle_request_test.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/unsubscribe_vehicle_request_test.cc index a8ef820905..6a88812028 100644 --- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/unsubscribe_vehicle_request_test.cc +++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/unsubscribe_vehicle_request_test.cc @@ -72,9 +72,11 @@ class UnsubscribeVehicleRequestTest : mock_app_(CreateMockApp()) , vi_app_extension_ptr_( utils::MakeShared( - vi_plugin_, *mock_app_)) {} + vi_plugin_, *mock_app_)) + , app_set_lock_ptr_(std::make_shared()){} protected: + void UnsubscribeSuccessfully(); void SetUp() OVERRIDE { vi_plugin_.Init(app_mngr_, mock_rpc_service_, @@ -92,7 +94,7 @@ class UnsubscribeVehicleRequestTest MockAppPtr mock_app_; application_manager::AppExtensionPtr vi_app_extension_ptr_; - sync_primitives::Lock app_set_lock_; + std::shared_ptr app_set_lock_ptr_; vehicle_info_plugin::VehicleInfoPlugin vi_plugin_; }; @@ -156,7 +158,7 @@ TEST_F(UnsubscribeVehicleRequestTest, ASSERT_TRUE(vi_app_extension->subscribeToVehicleInfo(kVehicleType)); application_manager::ApplicationSet app_set = {mock_app_}; DataAccessor accessor(app_set, - app_set_lock_); + app_set_lock_ptr_); // Expectations EXPECT_CALL(app_mngr_, applications()).WillRepeatedly(Return(accessor)); CommandPtr command(CreateCommand(command_msg)); diff --git a/src/components/application_manager/src/application_data_impl.cc b/src/components/application_manager/src/application_data_impl.cc index 226c83dbf6..f271b7ff6a 100644 --- a/src/components/application_manager/src/application_data_impl.cc +++ b/src/components/application_manager/src/application_data_impl.cc @@ -44,6 +44,7 @@ InitialApplicationDataImpl::InitialApplicationDataImpl() , vr_synonyms_(NULL) , tts_name_(NULL) , ngn_media_screen_name_(NULL) + , language_(mobile_api::Language::INVALID_ENUM) , ui_language_(mobile_api::Language::INVALID_ENUM) {} @@ -177,11 +178,13 @@ DynamicApplicationDataImpl::DynamicApplicationDataImpl() , night_color_scheme_(NULL) , display_layout_("") , commands_() - , commands_lock_(true) + , commands_lock_ptr_(new sync_primitives::Lock(true)) , sub_menu_() + , sub_menu_lock_ptr_(std::make_shared()) , choice_set_map_() + , choice_set_map_lock_ptr_(std::make_shared()) , performinteraction_choice_set_map_() - , performinteraction_choice_set_lock_(true) + , performinteraction_choice_set_lock_ptr_(new sync_primitives::Lock(true)) , is_perform_interaction_active_(false) , is_reset_global_properties_active_(false) , perform_interaction_mode_(-1) {} @@ -471,7 +474,7 @@ void DynamicApplicationDataImpl::SetGlobalProperties( void DynamicApplicationDataImpl::AddCommand( uint32_t cmd_id, const smart_objects::SmartObject& command) { - sync_primitives::AutoLock lock(commands_lock_); + sync_primitives::AutoLock lock(commands_lock_ptr_); CommandsMap::const_iterator it = commands_.find(cmd_id); if (commands_.end() == it) { commands_[cmd_id] = new smart_objects::SmartObject(command); @@ -479,7 +482,7 @@ void DynamicApplicationDataImpl::AddCommand( } void DynamicApplicationDataImpl::RemoveCommand(uint32_t cmd_id) { - sync_primitives::AutoLock lock(commands_lock_); + sync_primitives::AutoLock lock(commands_lock_ptr_); CommandsMap::iterator it = commands_.find(cmd_id); if (commands_.end() != it) { delete it->second; @@ -489,7 +492,7 @@ void DynamicApplicationDataImpl::RemoveCommand(uint32_t cmd_id) { smart_objects::SmartObject* DynamicApplicationDataImpl::FindCommand( uint32_t cmd_id) { - sync_primitives::AutoLock lock(commands_lock_); + sync_primitives::AutoLock lock(commands_lock_ptr_); CommandsMap::const_iterator it = commands_.find(cmd_id); if (it != commands_.end()) { return it->second; @@ -501,7 +504,7 @@ smart_objects::SmartObject* DynamicApplicationDataImpl::FindCommand( // TODO(VS): Create common functions for processing collections void DynamicApplicationDataImpl::AddSubMenu( uint32_t menu_id, const smart_objects::SmartObject& menu) { - sync_primitives::AutoLock lock(sub_menu_lock_); + sync_primitives::AutoLock lock(sub_menu_lock_ptr_); SubMenuMap::const_iterator it = sub_menu_.find(menu_id); if (sub_menu_.end() == it) { sub_menu_[menu_id] = new smart_objects::SmartObject(menu); @@ -509,7 +512,7 @@ void DynamicApplicationDataImpl::AddSubMenu( } void DynamicApplicationDataImpl::RemoveSubMenu(uint32_t menu_id) { - sync_primitives::AutoLock lock(sub_menu_lock_); + sync_primitives::AutoLock lock(sub_menu_lock_ptr_); SubMenuMap::iterator it = sub_menu_.find(menu_id); if (sub_menu_.end() != it) { @@ -520,7 +523,7 @@ void DynamicApplicationDataImpl::RemoveSubMenu(uint32_t menu_id) { smart_objects::SmartObject* DynamicApplicationDataImpl::FindSubMenu( uint32_t menu_id) const { - sync_primitives::AutoLock lock(sub_menu_lock_); + sync_primitives::AutoLock lock(sub_menu_lock_ptr_); SubMenuMap::const_iterator it = sub_menu_.find(menu_id); if (it != sub_menu_.end()) { return it->second; @@ -531,7 +534,7 @@ smart_objects::SmartObject* DynamicApplicationDataImpl::FindSubMenu( bool DynamicApplicationDataImpl::IsSubMenuNameAlreadyExist( const std::string& name) { - sync_primitives::AutoLock lock(sub_menu_lock_); + sync_primitives::AutoLock lock(sub_menu_lock_ptr_); for (SubMenuMap::iterator it = sub_menu_.begin(); sub_menu_.end() != it; ++it) { smart_objects::SmartObject* menu = it->second; @@ -544,7 +547,7 @@ bool DynamicApplicationDataImpl::IsSubMenuNameAlreadyExist( void DynamicApplicationDataImpl::AddChoiceSet( uint32_t choice_set_id, const smart_objects::SmartObject& choice_set) { - sync_primitives::AutoLock lock(choice_set_map_lock_); + sync_primitives::AutoLock lock(choice_set_map_lock_ptr_); ChoiceSetMap::const_iterator it = choice_set_map_.find(choice_set_id); if (choice_set_map_.end() == it) { choice_set_map_[choice_set_id] = new smart_objects::SmartObject(choice_set); @@ -552,7 +555,7 @@ void DynamicApplicationDataImpl::AddChoiceSet( } void DynamicApplicationDataImpl::RemoveChoiceSet(uint32_t choice_set_id) { - sync_primitives::AutoLock lock(choice_set_map_lock_); + sync_primitives::AutoLock lock(choice_set_map_lock_ptr_); ChoiceSetMap::iterator it = choice_set_map_.find(choice_set_id); if (choice_set_map_.end() != it) { @@ -563,7 +566,7 @@ void DynamicApplicationDataImpl::RemoveChoiceSet(uint32_t choice_set_id) { smart_objects::SmartObject* DynamicApplicationDataImpl::FindChoiceSet( uint32_t choice_set_id) { - sync_primitives::AutoLock lock(choice_set_map_lock_); + sync_primitives::AutoLock lock(choice_set_map_lock_ptr_); ChoiceSetMap::const_iterator it = choice_set_map_.find(choice_set_id); if (it != choice_set_map_.end()) { return it->second; @@ -576,14 +579,14 @@ void DynamicApplicationDataImpl::AddPerformInteractionChoiceSet( uint32_t correlation_id, uint32_t choice_set_id, const smart_objects::SmartObject& vr_commands) { - sync_primitives::AutoLock lock(performinteraction_choice_set_lock_); + sync_primitives::AutoLock lock(performinteraction_choice_set_lock_ptr_); performinteraction_choice_set_map_[correlation_id].insert(std::make_pair( choice_set_id, new smart_objects::SmartObject(vr_commands))); } void DynamicApplicationDataImpl::DeletePerformInteractionChoiceSet( uint32_t correlation_id) { - sync_primitives::AutoLock lock(performinteraction_choice_set_lock_); + sync_primitives::AutoLock lock(performinteraction_choice_set_lock_ptr_); PerformChoice::iterator it = performinteraction_choice_set_map_[correlation_id].begin(); for (; performinteraction_choice_set_map_[correlation_id].end() != it; ++it) { diff --git a/src/components/application_manager/src/application_impl.cc b/src/components/application_manager/src/application_impl.cc index cc912ec40a..3242dace4d 100644 --- a/src/components/application_manager/src/application_impl.cc +++ b/src/components/application_manager/src/application_impl.cc @@ -72,7 +72,7 @@ mobile_apis::FileType::eType StringToFileType(const char* str) { return mobile_apis::FileType::BINARY; } } -} +} // namespace CREATE_LOGGERPTR_GLOBAL(logger_, "ApplicationManager") @@ -140,6 +140,8 @@ ApplicationImpl::ApplicationImpl( "AudioStreamSuspend", new ::timer::TimerTaskImpl( this, &ApplicationImpl::OnAudioStreamSuspend)) + , vi_lock_ptr_(std::make_shared()) + , button_lock_ptr_(std::make_shared()) , application_manager_(application_manager) { cmd_number_to_time_limits_[mobile_apis::FunctionID::ReadDIDID] = { date_time::DateTime::getCurrentTime(), 0}; @@ -739,13 +741,13 @@ const AppFile* ApplicationImpl::GetFile(const std::string& file_name) { bool ApplicationImpl::SubscribeToButton( mobile_apis::ButtonName::eType btn_name) { - sync_primitives::AutoLock lock(button_lock_); + sync_primitives::AutoLock lock(button_lock_ptr_); return subscribed_buttons_.insert(btn_name).second; } bool ApplicationImpl::IsSubscribedToButton( mobile_apis::ButtonName::eType btn_name) { - sync_primitives::AutoLock lock(button_lock_); + sync_primitives::AutoLock lock(button_lock_ptr_); std::set::iterator it = subscribed_buttons_.find(btn_name); return (subscribed_buttons_.end() != it); @@ -753,7 +755,7 @@ bool ApplicationImpl::IsSubscribedToButton( bool ApplicationImpl::UnsubscribeFromButton( mobile_apis::ButtonName::eType btn_name) { - sync_primitives::AutoLock lock(button_lock_); + sync_primitives::AutoLock lock(button_lock_ptr_); return subscribed_buttons_.erase(btn_name); } @@ -863,7 +865,8 @@ bool ApplicationImpl::AreCommandLimitsExceeded( } DataAccessor ApplicationImpl::SubscribedButtons() const { - return DataAccessor(subscribed_buttons_, button_lock_); + return DataAccessor(subscribed_buttons_, + button_lock_ptr_); } const std::string& ApplicationImpl::curHash() const { diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index 8bb6d7de57..35deddfc8d 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -79,7 +79,7 @@ namespace { int get_rand_from_range(uint32_t from = 0, int to = RAND_MAX) { return std::rand() % to + from; } -} +} // namespace namespace application_manager { @@ -137,7 +137,8 @@ ApplicationManagerImpl::ApplicationManagerImpl( const ApplicationManagerSettings& am_settings, const policy::PolicySettings& policy_settings) : settings_(am_settings) - , applications_list_lock_(true) + , applications_list_lock_ptr_(std::make_shared(true)) + , apps_to_register_list_lock_ptr_(std::make_shared()) , audio_pass_thru_active_(false) , audio_pass_thru_app_id_(0) , driver_distraction_state_( @@ -224,7 +225,8 @@ ApplicationManagerImpl::~ApplicationManagerImpl() { } DataAccessor ApplicationManagerImpl::applications() const { - DataAccessor accessor(applications_, applications_list_lock_); + DataAccessor accessor(applications_, + applications_list_lock_ptr_); return accessor; } @@ -362,7 +364,7 @@ void ApplicationManagerImpl::IviInfoUpdated( void ApplicationManagerImpl::OnApplicationRegistered(ApplicationSharedPtr app) { LOG4CXX_AUTO_TRACE(logger_); DCHECK_OR_RETURN_VOID(app); - sync_primitives::AutoLock lock(applications_list_lock_); + sync_primitives::AutoLock lock(applications_list_lock_ptr_); const mobile_apis::HMILevel::eType default_level = GetDefaultHmiLevel(app); state_ctrl_.OnApplicationRegistered(app, default_level); @@ -597,13 +599,13 @@ ApplicationSharedPtr ApplicationManagerImpl::RegisterApplication( } // Keep HMI add id in case app is present in "waiting for registration" list - apps_to_register_list_lock_.Acquire(); + apps_to_register_list_lock_ptr_->Acquire(); AppsWaitRegistrationSet::iterator it = apps_to_register_.find(application); if (apps_to_register_.end() != it) { application->set_hmi_application_id((*it)->hmi_app_id()); apps_to_register_.erase(application); } - apps_to_register_list_lock_.Release(); + apps_to_register_list_lock_ptr_->Release(); if (!application->hmi_app_id()) { const bool is_saved = @@ -636,11 +638,11 @@ ApplicationSharedPtr ApplicationManagerImpl::RegisterApplication( // Add application to registered app list and set appropriate mark. // Lock has to be released before adding app to policy DB to avoid possible // deadlock with simultaneous PTU processing - applications_list_lock_.Acquire(); + applications_list_lock_ptr_->Acquire(); application->MarkRegistered(); applications_.insert(application); apps_size_ = applications_.size(); - applications_list_lock_.Release(); + applications_list_lock_ptr_->Release(); return application; } @@ -936,12 +938,12 @@ ApplicationConstSharedPtr ApplicationManagerImpl::WaitingApplicationByID( DataAccessor ApplicationManagerImpl::AppsWaitingForRegistration() const { return DataAccessor(apps_to_register_, - apps_to_register_list_lock_); + apps_to_register_list_lock_ptr_); } bool ApplicationManagerImpl::IsAppsQueriedFrom( const connection_handler::DeviceHandle handle) const { - sync_primitives::AutoLock lock(apps_to_register_list_lock_); + sync_primitives::AutoLock lock(apps_to_register_list_lock_ptr_); AppsWaitRegistrationSet::iterator it = apps_to_register_.begin(); AppsWaitRegistrationSet::const_iterator it_end = apps_to_register_.end(); for (; it != it_end; ++it) { @@ -962,7 +964,7 @@ const ApplicationManagerSettings& ApplicationManagerImpl::get_settings() const { void application_manager::ApplicationManagerImpl::MarkAppsGreyOut( const connection_handler::DeviceHandle handle, bool is_greyed_out) { - sync_primitives::AutoLock lock(apps_to_register_list_lock_); + sync_primitives::AutoLock lock(apps_to_register_list_lock_ptr_); AppsWaitRegistrationSet::iterator it = apps_to_register_.begin(); AppsWaitRegistrationSet::const_iterator it_end = apps_to_register_.end(); for (; it != it_end; ++it) { @@ -1128,7 +1130,7 @@ void ApplicationManagerImpl::SwitchApplication(ApplicationSharedPtr app, const std::string& mac_address) { LOG4CXX_AUTO_TRACE(logger_); DCHECK_OR_RETURN_VOID(app); - sync_primitives::AutoLock lock(applications_list_lock_); + sync_primitives::AutoLock lock(applications_list_lock_ptr_); DCHECK_OR_RETURN_VOID(1 == applications_.erase(app)); LOG4CXX_DEBUG(logger_, @@ -2076,7 +2078,7 @@ void ApplicationManagerImpl::CreateApplications(SmartArray& obj_array, app->set_vr_synonyms(vrSynonym); app->set_tts_name(ttsName); - sync_primitives::AutoLock lock(apps_to_register_list_lock_); + sync_primitives::AutoLock lock(apps_to_register_list_lock_ptr_); LOG4CXX_DEBUG( logger_, "apps_to_register_ size before: " << apps_to_register_.size()); apps_to_register_.insert(app); @@ -2342,7 +2344,7 @@ void ApplicationManagerImpl::UnregisterAllApplications() { void ApplicationManagerImpl::RemoveAppsWaitingForRegistration( const connection_handler::DeviceHandle handle) { DevicePredicate device_finder(handle); - apps_to_register_list_lock_.Acquire(); + apps_to_register_list_lock_ptr_->Acquire(); AppsWaitRegistrationSet::iterator it_app = std::find_if( apps_to_register_.begin(), apps_to_register_.end(), device_finder); @@ -2355,7 +2357,7 @@ void ApplicationManagerImpl::RemoveAppsWaitingForRegistration( apps_to_register_.begin(), apps_to_register_.end(), device_finder); } - apps_to_register_list_lock_.Release(); + apps_to_register_list_lock_ptr_->Release(); } void ApplicationManagerImpl::UnregisterApplication( @@ -2426,7 +2428,7 @@ void ApplicationManagerImpl::UnregisterApplication( ApplicationSharedPtr app_to_remove; connection_handler::DeviceHandle handle = 0; { - sync_primitives::AutoLock lock(applications_list_lock_); + sync_primitives::AutoLock lock(applications_list_lock_ptr_); auto it_app = applications_.begin(); while (applications_.end() != it_app) { if (app_id == (*it_app)->app_id()) { @@ -3069,9 +3071,9 @@ bool ApplicationManagerImpl::IsHMICooperating() const { void ApplicationManagerImpl::OnApplicationListUpdateTimer() { LOG4CXX_DEBUG(logger_, "Application list update timer finished"); - apps_to_register_list_lock_.Acquire(); + apps_to_register_list_lock_ptr_->Acquire(); const bool trigger_ptu = apps_size_ != applications_.size(); - apps_to_register_list_lock_.Release(); + apps_to_register_list_lock_ptr_->Release(); SendUpdateAppList(); GetPolicyHandler().OnAppsSearchCompleted(trigger_ptu); } @@ -3579,10 +3581,10 @@ bool ApplicationManagerImpl::IsSOStructValid( #ifdef BUILD_TESTS void ApplicationManagerImpl::AddMockApplication(ApplicationSharedPtr mock_app) { - applications_list_lock_.Acquire(); + applications_list_lock_ptr_->Acquire(); applications_.insert(mock_app); apps_size_ = applications_.size(); - applications_list_lock_.Release(); + applications_list_lock_ptr_->Release(); } void ApplicationManagerImpl::SetMockMediaManager( 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 75ca9e49b0..8386ffb7d3 100644 --- a/src/components/application_manager/src/message_helper/message_helper.cc +++ b/src/components/application_manager/src/message_helper/message_helper.cc @@ -1686,6 +1686,14 @@ smart_objects::SmartObjectList MessageHelper::CreateAddSubMenuRequestToHMI( (*i->second)[strings::menu_name]; msg_params[strings::app_id] = app->app_id(); (*ui_sub_menu)[strings::msg_params] = msg_params; + if (((*i->second).keyExists(strings::menu_icon)) && + (0 < (*i->second)[strings::menu_icon][strings::value].length())) { + msg_params[strings::menu_icon] = + (*i->second)[strings::menu_icon]; + msg_params[strings::menu_icon][strings::value] = + (*i->second)[strings::menu_icon][strings::value] + .asString(); + } requsets.push_back(ui_sub_menu); } return requsets; diff --git a/src/components/application_manager/src/policies/policy_handler.cc b/src/components/application_manager/src/policies/policy_handler.cc index 2ba7d63cdc..1cff7b7c96 100644 --- a/src/components/application_manager/src/policies/policy_handler.cc +++ b/src/components/application_manager/src/policies/policy_handler.cc @@ -1521,6 +1521,13 @@ void PolicyHandler::CheckPermissions( POLICY_LIB_CHECK_VOID(); const std::string hmi_level = MessageHelper::StringifiedHMILevel(app->hmi_level()); + if (hmi_level.empty()) { + LOG4CXX_WARN(logger_, + "HMI level for " << app->policy_app_id() << " is invalid, rpc " + << rpc << " is not allowed."); + result.hmi_level_permitted = policy::kRpcDisallowed; + return; + } const std::string device_id = MessageHelper::GetDeviceMacAddressForHandle( app->device(), application_manager_); LOG4CXX_INFO(logger_, diff --git a/src/components/application_manager/test/commands/command_request_impl_test.cc b/src/components/application_manager/test/commands/command_request_impl_test.cc index dc0690af91..c5a3459673 100644 --- a/src/components/application_manager/test/commands/command_request_impl_test.cc +++ b/src/components/application_manager/test/commands/command_request_impl_test.cc @@ -96,6 +96,9 @@ const std::string kMissedParam = "missed_param"; class CommandRequestImplTest : public CommandRequestTest { public: + CommandRequestImplTest() + : app_set_lock_ptr_(std::make_shared()) {} + class UnwrappedCommandRequestImpl : public CommandRequestImpl { public: using CommandRequestImpl::CheckAllowedParameters; @@ -137,11 +140,11 @@ class CommandRequestImplTest app_set->insert(app); EXPECT_CALL(app_mngr_, applications()) .WillOnce( - Return(DataAccessor(*app_set, app_set_lock_))); + Return(DataAccessor(*app_set, app_set_lock_ptr_))); return app; } - sync_primitives::Lock app_set_lock_; + std::shared_ptr app_set_lock_ptr_; }; typedef CommandRequestImplTest::UnwrappedCommandRequestImpl UCommandRequestImpl; diff --git a/src/components/application_manager/test/hmi_language_handler_test.cc b/src/components/application_manager/test/hmi_language_handler_test.cc index 97ca88a4dd..9b8bddc6bc 100644 --- a/src/components/application_manager/test/hmi_language_handler_test.cc +++ b/src/components/application_manager/test/hmi_language_handler_test.cc @@ -84,7 +84,8 @@ const uint32_t kDefaultAppsSize = 0u; class HmiLanguageHandlerTest : public ::testing::Test { public: - HmiLanguageHandlerTest() { + HmiLanguageHandlerTest() + : app_set_lock_(std::make_shared()) { EXPECT_CALL(app_manager_, event_dispatcher()) .WillOnce(ReturnRef(event_dispatcher_)); hmi_language_handler_ = @@ -135,7 +136,7 @@ class HmiLanguageHandlerTest : public ::testing::Test { MockHMICapabilities hmi_capabilities_; MockEventDispatcher event_dispatcher_; SharedPtr hmi_language_handler_; - ::sync_primitives::Lock app_set_lock_; + std::shared_ptr app_set_lock_; resumption_test::MockLastState last_state_; MockRPCService mock_rpc_service_; }; diff --git a/src/components/application_manager/test/include/application_manager/resumption_data_test.h b/src/components/application_manager/test/include/application_manager/resumption_data_test.h index 7043e3f623..0d34c113b2 100644 --- a/src/components/application_manager/test/include/application_manager/resumption_data_test.h +++ b/src/components/application_manager/test/include/application_manager/resumption_data_test.h @@ -69,7 +69,12 @@ class ResumptionDataTest : public ::testing::Test { , kCountOfSubmenues_(3u) , kCountOfFiles_(8u) , kCountOfVrhelptitle_(2u) - , kMacAddress_("12345") {} + , kMacAddress_("12345") + , sublock_ptr_(std::make_shared()) + , comlock_ptr_(std::make_shared()) + , setlock_ptr_(std::make_shared()) + , btnlock_ptr_(std::make_shared()) + , ivilock_ptr_(std::make_shared()) {} // Check structure in saved application void CheckSavedApp(sm::SmartObject& saved_data); // Set data for resumption @@ -139,11 +144,11 @@ class ResumptionDataTest : public ::testing::Test { am::ButtonSubscriptions btn_subscr; - sync_primitives::Lock sublock_; - sync_primitives::Lock comlock_; - sync_primitives::Lock setlock_; - sync_primitives::Lock btnlock_; - sync_primitives::Lock ivilock_; + std::shared_ptr sublock_ptr_; + std::shared_ptr comlock_ptr_; + std::shared_ptr setlock_ptr_; + std::shared_ptr btnlock_ptr_; + std::shared_ptr ivilock_ptr_; application_manager_test::MockApplicationManagerSettings mock_application_manager_settings_; application_manager_test::MockApplicationManager mock_application_manager_; 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 088eb1ca1b..e43348cc80 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 @@ -39,6 +39,7 @@ #include "application_manager/policies/policy_handler.h" #include "application_manager/mock_application.h" #include "utils/custom_string.h" +#include "utils/lock.h" #include "policy/mock_policy_settings.h" #include "application_manager/policies/policy_handler.h" #include "application_manager/mock_application_manager.h" @@ -237,7 +238,8 @@ TEST(MessageHelperTestCreate, CreateAddCommandRequestToHMI_SendSmartObject_Empty) { MockApplicationSharedPtr appSharedMock = utils::MakeShared(); ::application_manager::CommandsMap vis; - DataAccessor data_accessor(vis, true); + DataAccessor data_accessor( + vis, std::make_shared(true)); EXPECT_CALL(*appSharedMock, commands_map()).WillOnce(Return(data_accessor)); application_manager_test::MockApplicationManager mock_application_manager; @@ -252,7 +254,8 @@ TEST(MessageHelperTestCreate, CreateAddCommandRequestToHMI_SendSmartObject_Equal) { MockApplicationSharedPtr appSharedMock = utils::MakeShared(); CommandsMap vis; - DataAccessor data_accessor(vis, true); + DataAccessor data_accessor( + vis, std::make_shared(true)); smart_objects::SmartObjectSPtr smartObjectPtr = utils::MakeShared(); @@ -293,7 +296,8 @@ TEST(MessageHelperTestCreate, CreateAddVRCommandRequestFromChoiceToHMI_SendEmptyData_EmptyList) { MockApplicationSharedPtr appSharedMock = utils::MakeShared(); application_manager::ChoiceSetMap vis; - DataAccessor< ::application_manager::ChoiceSetMap> data_accessor(vis, true); + DataAccessor< ::application_manager::ChoiceSetMap> data_accessor( + vis, std::make_shared(true)); EXPECT_CALL(*appSharedMock, choice_set_map()).WillOnce(Return(data_accessor)); application_manager_test::MockApplicationManager mock_application_manager; @@ -308,7 +312,8 @@ TEST(MessageHelperTestCreate, CreateAddVRCommandRequestFromChoiceToHMI_SendObject_EqualList) { MockApplicationSharedPtr appSharedMock = utils::MakeShared(); application_manager::ChoiceSetMap vis; - DataAccessor< ::application_manager::ChoiceSetMap> data_accessor(vis, true); + DataAccessor< ::application_manager::ChoiceSetMap> data_accessor( + vis, std::make_shared(true)); smart_objects::SmartObjectSPtr smartObjectPtr = utils::MakeShared(); @@ -354,7 +359,8 @@ TEST(MessageHelperTestCreate, TEST(MessageHelperTestCreate, CreateAddSubMenuRequestToHMI_SendObject_Equal) { MockApplicationSharedPtr appSharedMock = utils::MakeShared(); application_manager::SubMenuMap vis; - DataAccessor< ::application_manager::SubMenuMap> data_accessor(vis, true); + DataAccessor< ::application_manager::SubMenuMap> data_accessor( + vis, std::make_shared(true)); smart_objects::SmartObjectSPtr smartObjectPtr = utils::MakeShared(); @@ -393,7 +399,8 @@ TEST(MessageHelperTestCreate, CreateAddSubMenuRequestToHMI_SendEmptyMap_EmptySmartObjectList) { MockApplicationSharedPtr appSharedMock = utils::MakeShared(); application_manager::SubMenuMap vis; - DataAccessor< ::application_manager::SubMenuMap> data_accessor(vis, true); + DataAccessor< ::application_manager::SubMenuMap> data_accessor( + vis, std::make_shared(true)); EXPECT_CALL(*appSharedMock, sub_menu_map()).WillOnce(Return(data_accessor)); diff --git a/src/components/application_manager/test/policy_handler_test.cc b/src/components/application_manager/test/policy_handler_test.cc index bb487290fa..57fa67bf0a 100644 --- a/src/components/application_manager/test/policy_handler_test.cc +++ b/src/components/application_manager/test/policy_handler_test.cc @@ -108,7 +108,8 @@ class PolicyHandlerTest : public ::testing::Test { , default_hmi_("fake_hmi") , kPreloadPTFile_("sdl_preloaded_pt.json") , kAppStorageFolder_("storage") - , app_set(test_app, app_lock) + , app_lock_(std::make_shared()) + , app_set(test_app, app_lock_) , kAppId1_(10u) , kAppId2_(11u) , kConnectionKey_(1u) @@ -152,7 +153,7 @@ class PolicyHandlerTest : public ::testing::Test { const std::string kPreloadPTFile_; const std::string kAppStorageFolder_; ApplicationSet test_app; - sync_primitives::Lock app_lock; + std::shared_ptr app_lock_; DataAccessor app_set; const uint32_t kAppId1_; const uint32_t kAppId2_; @@ -301,7 +302,7 @@ class WaitAsync { const uint32_t timeout_; sync_primitives::ConditionalVariable cond_var_; }; -} +} // namespace TEST_F(PolicyHandlerTest, LoadPolicyLibrary_Method_ExpectLibraryLoaded) { // Check before policy enabled from ini file diff --git a/src/components/application_manager/test/rc_policy_handler_test.cc b/src/components/application_manager/test/rc_policy_handler_test.cc index 7faf3e36cb..0d9cbfe6aa 100644 --- a/src/components/application_manager/test/rc_policy_handler_test.cc +++ b/src/components/application_manager/test/rc_policy_handler_test.cc @@ -67,11 +67,11 @@ using namespace application_manager; using namespace policy; using namespace utils::custom_string; using testing::_; +using ::testing::DoAll; using ::testing::Mock; +using ::testing::NiceMock; using ::testing::Return; using ::testing::ReturnRef; -using ::testing::NiceMock; -using ::testing::DoAll; using ::testing::SetArgPointee; class RCPolicyHandlerTest : public ::testing::Test { @@ -83,7 +83,8 @@ class RCPolicyHandlerTest : public ::testing::Test { , kDeviceId_("fake_device_id") , kHmiLevel_("NONE") , default_hmi_("fake_hmi") - , app_set(test_app, app_lock) + , app_lock_ptr_(std::make_shared()) + , app_set(test_app, app_lock_ptr_) , kAppId1_(10u) , kAppId2_(11u) , kConnectionKey_(1u) @@ -107,7 +108,7 @@ class RCPolicyHandlerTest : public ::testing::Test { const std::string kHmiLevel_; std::string default_hmi_; ApplicationSet test_app; - sync_primitives::Lock app_lock; + std::shared_ptr app_lock_ptr_; DataAccessor app_set; const uint32_t kAppId1_; const uint32_t kAppId2_; diff --git a/src/components/application_manager/test/resumption/resume_ctrl_test.cc b/src/components/application_manager/test/resumption/resume_ctrl_test.cc index 70bbe4bd96..1a5d070941 100644 --- a/src/components/application_manager/test/resumption/resume_ctrl_test.cc +++ b/src/components/application_manager/test/resumption/resume_ctrl_test.cc @@ -56,14 +56,14 @@ namespace resumption_test { using ::testing::_; using ::testing::A; -using ::testing::Return; -using ::testing::ReturnRef; +using ::testing::AtLeast; using ::testing::DoAll; -using ::testing::SetArgReferee; +using ::testing::Eq; using ::testing::Mock; using ::testing::NiceMock; -using ::testing::AtLeast; -using ::testing::Eq; +using ::testing::Return; +using ::testing::ReturnRef; +using ::testing::SetArgReferee; using namespace application_manager_test; using namespace resumption; @@ -81,7 +81,8 @@ class ResumeCtrlTest : public ::testing::Test { , kTestGrammarId_(10) , kHash_("saved_hash") , kAppResumingTimeout_(30000u) // miliseconds - , kTestTimeStamp_(1452074434u) {} + , kTestTimeStamp_(1452074434u) + , app_set_lock_ptr_(std::make_shared()) {} virtual void SetUp() OVERRIDE { Mock::VerifyAndClearExpectations(&mock_app_mngr_); @@ -141,7 +142,7 @@ class ResumeCtrlTest : public ::testing::Test { const std::string kHash_; const uint32_t kAppResumingTimeout_; const uint32_t kTestTimeStamp_; - sync_primitives::Lock app_set_lock_; + std::shared_ptr app_set_lock_ptr_; }; /** @@ -660,7 +661,7 @@ TEST_F(ResumeCtrlTest, ApplicationResumptiOnTimer_AppInFull) { /** * @brief group of tests which check correct SetAppHMIState -*/ + */ TEST_F(ResumeCtrlTest, SetAppHMIState_HMINone_WithoutCheckPolicy) { GetInfoFromApp(); @@ -742,7 +743,7 @@ TEST_F(ResumeCtrlTest, SaveAllApplications) { app_set.insert(test_app); DataAccessor accessor(app_set, - app_set_lock_); + app_set_lock_ptr_); ON_CALL(mock_app_mngr_, applications()).WillByDefault(Return(accessor)); EXPECT_CALL(*mock_storage_, SaveApplication(Eq(test_app))); @@ -756,7 +757,7 @@ TEST_F(ResumeCtrlTest, SaveAllApplications_EmptyApplicationlist) { application_manager::ApplicationSet app_set; DataAccessor accessor(app_set, - app_set_lock_); + app_set_lock_ptr_); ON_CALL(mock_app_mngr_, applications()).WillByDefault(Return(accessor)); EXPECT_CALL(*mock_storage_, SaveApplication(mock_app)).Times(0); @@ -906,7 +907,7 @@ TEST_F(ResumeCtrlTest, OnSuspend_EmptyApplicationlist) { application_manager::ApplicationSet app_set; DataAccessor accessor(app_set, - app_set_lock_); + app_set_lock_ptr_); ON_CALL(mock_app_mngr_, applications()).WillByDefault(Return(accessor)); EXPECT_CALL(*mock_storage_, SaveApplication(mock_app)).Times(0); diff --git a/src/components/application_manager/test/resumption/resumption_data_test.cc b/src/components/application_manager/test/resumption/resumption_data_test.cc index 9501da5c60..e80349dd47 100644 --- a/src/components/application_manager/test/resumption/resumption_data_test.cc +++ b/src/components/application_manager/test/resumption/resumption_data_test.cc @@ -332,12 +332,12 @@ void ResumptionDataTest::PrepareData() { SetChoiceSet(); SetAppFiles(); - DataAccessor sub_menu_m(test_submenu_map, sublock_); - DataAccessor commands_m(test_commands_map, comlock_); - DataAccessor choice_set_m(test_choiceset_map, setlock_); + DataAccessor sub_menu_m(test_submenu_map, sublock_ptr_); + DataAccessor commands_m(test_commands_map, comlock_ptr_); + DataAccessor choice_set_m(test_choiceset_map, setlock_ptr_); SetSubscriptions(); - DataAccessor btn_sub(btn_subscr, btnlock_); + DataAccessor btn_sub(btn_subscr, btnlock_ptr_); ON_CALL(*app_mock, is_application_data_changed()).WillByDefault(Return(true)); diff --git a/src/components/application_manager/test/state_controller/state_controller_test.cc b/src/components/application_manager/test/state_controller/state_controller_test.cc index 4000326849..bbd7220bc9 100644 --- a/src/components/application_manager/test/state_controller/state_controller_test.cc +++ b/src/components/application_manager/test/state_controller/state_controller_test.cc @@ -77,7 +77,7 @@ namespace state_controller_test { namespace constants { const uint32_t kCorrID = 314u; const uint32_t kHMIAppID = 2718u; -} +} // namespace constants struct HmiStatesComparator { mobile_apis::HMILevel::eType hmi_level_; @@ -140,7 +140,8 @@ class StateControllerImplTest : public ::testing::Test { , usage_stat("0", utils::SharedPtr( new usage_statistics_test::MockStatisticsManager)) - , applications_(application_set_, applications_lock_) + , applications_lock_ptr_(std::make_shared()) + , applications_(application_set_, applications_lock_ptr_) , message_helper_mock_( *application_manager::MockMessageHelper::message_helper_mock()) { Mock::VerifyAndClearExpectations(&message_helper_mock_); @@ -161,7 +162,7 @@ class StateControllerImplTest : public ::testing::Test { NiceMock mock_event_dispatcher_; am::ApplicationSet application_set_; - mutable sync_primitives::Lock applications_lock_; + mutable std::shared_ptr applications_lock_ptr_; DataAccessor applications_; utils::SharedPtr state_ctrl_; @@ -1080,8 +1081,8 @@ class StateControllerImplTest : public ::testing::Test { am::ApplicationSharedPtr app, NiceMock& app_mock, std::vector& state_ids) { - using smart_objects::SmartObject; using am::event_engine::Event; + using smart_objects::SmartObject; namespace FunctionID = hmi_apis::FunctionID; EXPECT_CALL(app_mock, CurrentHmiState()) @@ -1139,8 +1140,8 @@ class StateControllerImplTest : public ::testing::Test { am::ApplicationSharedPtr app, NiceMock& app_mock, std::vector& state_ids) { - using smart_objects::SmartObject; using am::event_engine::Event; + using smart_objects::SmartObject; namespace FunctionID = hmi_apis::FunctionID; EXPECT_CALL(app_mock, CurrentHmiState()) diff --git a/src/components/include/utils/data_accessor.h b/src/components/include/utils/data_accessor.h index 9be28a638b..645886592c 100644 --- a/src/components/include/utils/data_accessor.h +++ b/src/components/include/utils/data_accessor.h @@ -32,6 +32,7 @@ #ifndef SRC_COMPONENTS_INCLUDE_UTILS_DATA_ACCESSOR_H_ #define SRC_COMPONENTS_INCLUDE_UTILS_DATA_ACCESSOR_H_ +#include #include "utils/lock.h" #include "utils/shared_ptr.h" @@ -39,11 +40,10 @@ template class DataAccessor { public: - DataAccessor(const T& data, const sync_primitives::Lock& lock) - : data_(data) - , lock_(const_cast(lock)) - , counter_(new uint32_t(0)) { - lock_.Acquire(); + DataAccessor(const T& data, + const std::shared_ptr& lock) + : data_(data), lock_(lock), counter_(new uint32_t(0)) { + lock_->Acquire(); } DataAccessor(const DataAccessor& other) @@ -53,7 +53,7 @@ class DataAccessor { ~DataAccessor() { if (0 == *counter_) { - lock_.Release(); + lock_->Release(); } else { --(*counter_); } @@ -65,7 +65,8 @@ class DataAccessor { private: void* operator new(size_t size); const T& data_; - sync_primitives::Lock& lock_; + // Require that the lock lives at least as long as the DataAccessor + const std::shared_ptr lock_; utils::SharedPtr counter_; }; diff --git a/src/components/include/utils/lock.h b/src/components/include/utils/lock.h index e615a58f9d..081e651b13 100644 Binary files a/src/components/include/utils/lock.h and b/src/components/include/utils/lock.h differ diff --git a/src/components/interfaces/HMI_API.xml b/src/components/interfaces/HMI_API.xml index d20efdd7dc..ec4eb73adf 100644 --- a/src/components/interfaces/HMI_API.xml +++ b/src/components/interfaces/HMI_API.xml @@ -3583,6 +3583,9 @@ Position and name of menu to be added. 'parent' field is omitted for this RPC. + + The image field for AddSubMenu + ID of application that requested this RPC. diff --git a/src/components/interfaces/MOBILE_API.xml b/src/components/interfaces/MOBILE_API.xml index 40a4892fff..310bbc34f4 100644 --- a/src/components/interfaces/MOBILE_API.xml +++ b/src/components/interfaces/MOBILE_API.xml @@ -3453,6 +3453,9 @@ Text to show in the menu for this sub menu. + + The image field for AddSubMenu + diff --git a/src/components/utils/src/lock_posix.cc b/src/components/utils/src/lock_posix.cc index 9b90ad20b9..e5e6d7fad0 100644 --- a/src/components/utils/src/lock_posix.cc +++ b/src/components/utils/src/lock_posix.cc @@ -63,14 +63,16 @@ Lock::Lock(bool is_recursive) Lock::~Lock() { #ifndef NDEBUG if (lock_taken_ > 0) { - LOG4CXX_ERROR(logger_, "Destroying non-released mutex " << &mutex_); + LOG4CXX_FATAL(logger_, "Destroying non-released mutex " << &mutex_); + NOTREACHED(); } #endif int32_t status = pthread_mutex_destroy(&mutex_); if (status != 0) { - LOG4CXX_ERROR(logger_, + LOG4CXX_FATAL(logger_, "Failed to destroy mutex " << &mutex_ << ": " << strerror(status)); + NOTREACHED(); } } @@ -90,9 +92,10 @@ void Lock::Release() { AssertTakenAndMarkFree(); const int32_t status = pthread_mutex_unlock(&mutex_); if (status != 0) { - LOG4CXX_ERROR(logger_, + LOG4CXX_FATAL(logger_, "Failed to unlock mutex" << &mutex_ << ": " << strerror(status)); + NOTREACHED(); } } @@ -110,14 +113,14 @@ bool Lock::Try() { #ifndef NDEBUG void Lock::AssertFreeAndMarkTaken() { if ((lock_taken_ > 0) && !is_mutex_recursive_) { - LOG4CXX_ERROR(logger_, "Locking already taken not recursive mutex"); + LOG4CXX_FATAL(logger_, "Locking already taken not recursive mutex"); NOTREACHED(); } lock_taken_++; } void Lock::AssertTakenAndMarkFree() { if (lock_taken_ == 0) { - LOG4CXX_ERROR(logger_, "Unlocking a mutex that is not taken"); + LOG4CXX_FATAL(logger_, "Unlocking a mutex that is not taken"); NOTREACHED(); } lock_taken_--; diff --git a/src/components/utils/test/conditional_variable_test.cc b/src/components/utils/test/conditional_variable_test.cc index 524d53cafa..48e2e53200 100644 --- a/src/components/utils/test/conditional_variable_test.cc +++ b/src/components/utils/test/conditional_variable_test.cc @@ -61,8 +61,8 @@ class ConditionalVariableTest : public ::testing::Test { protected: std::string test_value_; - sync_primitives::ConditionalVariable cond_var_; sync_primitives::Lock test_mutex_; + sync_primitives::ConditionalVariable cond_var_; unsigned counter_; }; @@ -116,6 +116,8 @@ TEST_F(ConditionalVariableTest, ASSERT_FALSE(thread_created) << "thread2 is not created!"; check_counter(); EXPECT_EQ(2u, counter_); + pthread_join(thread1, NULL); + pthread_join(thread2, NULL); } TEST_F( -- cgit v1.2.1