diff options
author | Yana Chernysheva (GitHub) <59469418+ychernysheva@users.noreply.github.com> | 2020-10-20 16:38:46 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-20 09:38:46 -0400 |
commit | 3ec2b6bbd6c99fd6a624c854d5782c7c73c09ade (patch) | |
tree | 1379a3a5ef7a8aceccc7b1903ba92ea48d48d7d4 | |
parent | 4304cc9c71f6d65688ec0c191b66f5c30ef64ca6 (diff) | |
download | sdl_core-3ec2b6bbd6c99fd6a624c854d5782c7c73c09ade.tar.gz |
Add check for non-existent parent ID to AddSubMenuRequest (#3534)
* Add check for non-existent parent ID to AddSubMenuRequest
* fixup! Add check for non-existent parent ID to AddSubMenuRequest
2 files changed, 38 insertions, 3 deletions
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 c83538c023..e2a37f17bd 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 @@ -96,14 +96,24 @@ void AddSubMenuRequest::Run() { return; } - const std::string& menu_name = - received_msg_params[strings::menu_name].asString(); - const uint32_t parent_id = received_msg_params.keyExists(strings::parent_id) ? received_msg_params[strings::parent_id].asUInt() : 0; + if (0 != parent_id) { + smart_objects::SmartObject parent = app->FindSubMenu(parent_id); + if (smart_objects::SmartType_Null == parent.getType()) { + SDL_LOG_ERROR("Parent ID " << parent_id << " doesn't exist"); + SendResponse( + false, mobile_apis::Result::INVALID_ID, "Parent ID doesn't exist"); + return; + } + } + + const std::string& menu_name = + received_msg_params[strings::menu_name].asString(); + if (app->IsSubMenuNameAlreadyExist(menu_name, parent_id)) { SDL_LOG_ERROR("Menu name " << menu_name << " is duplicated."); SendResponse(false, mobile_apis::Result::DUPLICATE_NAME); 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 a88a1ade69..23e4418726 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 @@ -104,6 +104,31 @@ TEST_F(AddSubMenuRequestTest, Run_ImageVerificationFailed_EXPECT_INVALID_DATA) { request_ptr->Run(); } +TEST_F(AddSubMenuRequestTest, Run_NonExistentParentID_EXPECT_INVALID_ID) { + const uint32_t menu_id = 10; + const uint32_t parent_id = 4; + MessageSharedPtr msg = CreateMsgParams(); + SmartObject& msg_params = (*msg)[am::strings::msg_params]; + + msg_params[am::strings::menu_id] = menu_id; + msg_params[am::strings::menu_name] = "test"; + msg_params[am::strings::parent_id] = parent_id; + + SmartObject sub_menu(smart_objects::SmartType_Null); + EXPECT_CALL(*mock_app, FindSubMenu(menu_id)).WillOnce(Return(sub_menu)); + + SmartObject parent(smart_objects::SmartType_Null); + EXPECT_CALL(*mock_app, FindSubMenu(parent_id)).WillOnce(Return(parent)); + + EXPECT_CALL(mock_rpc_service_, + ManageMobileCommand( + MobileResultCodeIs(mobile_apis::Result::INVALID_ID), _)); + std::shared_ptr<AddSubMenuRequest> request_ptr = + CreateCommand<AddSubMenuRequest>(msg); + + request_ptr->Run(); +} + TEST_F(AddSubMenuRequestTest, OnEvent_UI_UNSUPPORTED_RESOURCE) { const uint32_t menu_id = 10u; MessageSharedPtr msg = CreateMessage(smart_objects::SmartType_Map); |