diff options
author | Serhii Niukalov (GitHub) <36993782+SNiukalov@users.noreply.github.com> | 2020-08-10 22:34:26 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-10 15:34:26 -0400 |
commit | cb42c627b837df0ce184ba849c232dd36bd92c91 (patch) | |
tree | 8dd21d73aba2ab48649afac45c9093aa40dfbbe3 | |
parent | 6e5ef3dd422f8da25d224928979a8c7e59d54723 (diff) | |
download | sdl_core-cb42c627b837df0ce184ba849c232dd36bd92c91.tar.gz |
Feature/Removing url parameter max length (#3259)
* Add unit tests to cover a test case
* Removing maxlength attribute for OnSystemRequest,StartStream
and StartAudioStream
Sometimes, it is necessary to provide a URL which is very large
and thus cannot fit in the current 1,000 or 500 character limit.
* Update path length for video and audio
streaming files
* fixup! Update path length for video and audio streaming files
* fixup! Add unit tests to cover a test case
* fixup! Add unit tests to cover a test case
* fixup! Removing maxlength attribute for OnSystemRequest,StartStream and StartAudioStream
Co-authored-by: sniukalov <sniukaov@luxoft.com>
Co-authored-by: LitvinenkoIra <ilytvynenko@luxoft.com>
8 files changed, 362 insertions, 59 deletions
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/navi_audio_start_stream_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/navi_audio_start_stream_request_test.cc index 926e51446f..00c95b5425 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/navi_audio_start_stream_request_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/navi_audio_start_stream_request_test.cc @@ -60,6 +60,7 @@ using sdl_rpc_plugin::commands::AudioStartStreamRequest; namespace { const uint32_t kHmiAppId = 13u; +const uint32_t kCorrelationId = 2u; const am::HmiInterfaces::InterfaceID kHmiInterface = am::HmiInterfaces::HMI_INTERFACE_Navigation; } // namespace @@ -74,11 +75,24 @@ class AudioStartStreamRequestTest command_ = CreateCommand<AudioStartStreamRequest>(msg_); } + void UpdateMsgParams(MessageSharedPtr& message) { + (*message)[am::strings::params][am::strings::correlation_id] = + kCorrelationId; + (*message)[am::strings::params][am::strings::message_type] = + am::MessageType::kRequest; + (*message)[am::strings::params][am::strings::function_id] = + static_cast<int32_t>(hmi_apis::FunctionID::Navigation_StartAudioStream); + (*message)[am::strings::msg_params][am::strings::app_id] = kHmiAppId; + } + std::pair<uint32_t, int32_t> start_stream_retry_amount_; MessageSharedPtr msg_; std::shared_ptr<AudioStartStreamRequest> command_; + static const std::string big_url_; }; +const std::string AudioStartStreamRequestTest::big_url_(20000u, 'a'); + TEST_F(AudioStartStreamRequestTest, Run_HmiInterfaceNotAvailable_NoRequest) { EXPECT_CALL(mock_hmi_interfaces_, GetInterfaceState(kHmiInterface)) .WillOnce(Return(am::HmiInterfaces::STATE_NOT_AVAILABLE)); @@ -114,6 +128,48 @@ TEST_F(AudioStartStreamRequestTest, Run_HmiInterfaceAvailable_SentRequest) { command_->Run(); } +TEST_F(AudioStartStreamRequestTest, Run_HmiHugeUrl_SentRequest_SUCCESS) { + UpdateMsgParams(msg_); + + (*msg_)[am::strings::msg_params][am::strings::url] = big_url_; + + ON_CALL(mock_hmi_interfaces_, GetInterfaceState(kHmiInterface)) + .WillByDefault(Return(am::HmiInterfaces::STATE_AVAILABLE)); + MockAppPtr mock_app = CreateMockApp(); + ON_CALL(app_mngr_, application_by_hmi_app(kHmiAppId)) + .WillByDefault(Return(mock_app)); + + ON_CALL(app_mngr_, application(kHmiAppId)).WillByDefault(Return(mock_app)); + ON_CALL(*mock_app, hmi_app_id()).WillByDefault(Return(kHmiAppId)); + + EXPECT_CALL(*mock_app, set_audio_streaming_allowed(true)); + EXPECT_CALL(mock_rpc_service_, SendMessageToHMI(msg_)); + + ASSERT_TRUE(command_->Init()); + command_->Run(); +} + +TEST_F(AudioStartStreamRequestTest, ValidateSchema_HmiHugeUrl_SUCCESS) { + UpdateMsgParams(msg_); + + (*msg_)[am::strings::params][am::strings::protocol_type] = + am::commands::CommandImpl::hmi_protocol_type_; + (*msg_)[am::strings::params][am::strings::protocol_version] = + am::commands::CommandImpl::protocol_version_; + + (*msg_)[am::strings::msg_params][am::strings::url] = big_url_; + + hmi_apis::HMI_API hmi_so_factory; + ns_smart_device_link::ns_smart_objects::CSmartSchema schema; + hmi_so_factory.GetSchema(hmi_apis::FunctionID::Navigation_StartAudioStream, + hmi_apis::messageType::eType::request, + schema); + + rpc::ValidationReport report("RPC"); + EXPECT_EQ(smart_objects::errors::eType::OK, schema.validate(*msg_, &report)); + EXPECT_EQ("", rpc::PrettyFormat(report)); +} + } // namespace navi_audio_start_stream_request } // namespace hmi_commands_test } // namespace commands_test diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/navi_start_stream_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/navi_start_stream_request_test.cc index 232d5ab628..ba4eefeee1 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/navi_start_stream_request_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/navi_start_stream_request_test.cc @@ -59,6 +59,7 @@ using sdl_rpc_plugin::commands::NaviStartStreamRequest; namespace { const uint32_t kHmiAppId = 13u; +const uint32_t kCorrelationId = 2u; const am::HmiInterfaces::InterfaceID kHmiInterface = am::HmiInterfaces::HMI_INTERFACE_Navigation; } // namespace @@ -73,11 +74,24 @@ class NaviStartStreamRequestTest command_ = CreateCommand<NaviStartStreamRequest>(msg_); } + void UpdateMsgParams(MessageSharedPtr& message) { + (*message)[am::strings::params][am::strings::correlation_id] = + kCorrelationId; + (*message)[am::strings::params][am::strings::message_type] = + am::MessageType::kRequest; + (*message)[am::strings::params][am::strings::function_id] = + static_cast<int32_t>(hmi_apis::FunctionID::Navigation_StartStream); + (*message)[am::strings::msg_params][am::strings::app_id] = kHmiAppId; + } + std::pair<uint32_t, int32_t> start_stream_retry_amount_; MessageSharedPtr msg_; std::shared_ptr<NaviStartStreamRequest> command_; + static const std::string big_url_; }; +const std::string NaviStartStreamRequestTest::big_url_(20000u, 'a'); + TEST_F(NaviStartStreamRequestTest, Run_HmiInterfaceNotAvailable_NoRequest) { EXPECT_CALL(mock_hmi_interfaces_, GetInterfaceState(kHmiInterface)) .WillOnce(Return(am::HmiInterfaces::STATE_NOT_AVAILABLE)); @@ -113,6 +127,48 @@ TEST_F(NaviStartStreamRequestTest, Run_HmiInterfaceAvailable_SentRequest) { command_->Run(); } +TEST_F(NaviStartStreamRequestTest, Run_HmiHugeUrl_SentRequest_SUCCESS) { + UpdateMsgParams(msg_); + + (*msg_)[am::strings::msg_params][am::strings::url] = big_url_; + + ON_CALL(mock_hmi_interfaces_, GetInterfaceState(kHmiInterface)) + .WillByDefault(Return(am::HmiInterfaces::STATE_AVAILABLE)); + MockAppPtr mock_app = CreateMockApp(); + ON_CALL(app_mngr_, application_by_hmi_app(kHmiAppId)) + .WillByDefault(Return(mock_app)); + + ON_CALL(app_mngr_, application(kHmiAppId)).WillByDefault(Return(mock_app)); + ON_CALL(*mock_app, hmi_app_id()).WillByDefault(Return(kHmiAppId)); + + EXPECT_CALL(*mock_app, set_video_streaming_allowed(true)); + EXPECT_CALL(mock_rpc_service_, SendMessageToHMI(msg_)); + + ASSERT_TRUE(command_->Init()); + command_->Run(); +} + +TEST_F(NaviStartStreamRequestTest, ValidateSchema_HmiHugeUrl_SUCCESS) { + UpdateMsgParams(msg_); + + (*msg_)[am::strings::params][am::strings::protocol_type] = + am::commands::CommandImpl::hmi_protocol_type_; + (*msg_)[am::strings::params][am::strings::protocol_version] = + am::commands::CommandImpl::protocol_version_; + + (*msg_)[am::strings::msg_params][am::strings::url] = big_url_; + + hmi_apis::HMI_API hmi_so_factory; + ns_smart_device_link::ns_smart_objects::CSmartSchema schema; + hmi_so_factory.GetSchema(hmi_apis::FunctionID::Navigation_StartStream, + hmi_apis::messageType::eType::request, + schema); + + rpc::ValidationReport report("RPC"); + EXPECT_EQ(smart_objects::errors::eType::OK, schema.validate(*msg_, &report)); + EXPECT_EQ("", rpc::PrettyFormat(report)); +} + } // namespace navi_start_stream_request } // namespace hmi_commands_test } // namespace commands_test diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_system_request_notification_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_system_request_notification_test.cc index ffa7203f1f..93ccf6c435 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_system_request_notification_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_system_request_notification_test.cc @@ -77,10 +77,25 @@ class OnSystemRequestNotificationTest ON_CALL(*mock_app_, device()).WillByDefault(Return(kDeviceId)); } + MessageSharedPtr CreateBasicMessage() { + MessageSharedPtr message = CreateMessage(); + (*message)[strings::params][strings::connection_key] = kConnectionKey; + (*message)[strings::params][strings::function_id] = + static_cast<int32_t>(mobile_apis::FunctionID::eType::OnSystemRequestID); + const mobile_apis::RequestType::eType request_type = + RequestType::NAVIGATION; + (*message)[strings::msg_params][strings::request_type] = request_type; + return message; + } + + static const std::string big_url_; + protected: MockAppPtr mock_app_; }; +const std::string OnSystemRequestNotificationTest::big_url_(20000u, 'a'); + TEST_F(OnSystemRequestNotificationTest, Run_ProprietaryType_SUCCESS) { const mobile_apis::RequestType::eType request_type = mobile_apis::RequestType::PROPRIETARY; @@ -160,6 +175,56 @@ TEST_F(OnSystemRequestNotificationTest, Run_HTTPType_SUCCESS) { (*msg)[strings::params][strings::protocol_version].asInt()); } +TEST_F(OnSystemRequestNotificationTest, Run_NavigationHugeUrl_SUCCESS) { + MessageSharedPtr msg = CreateBasicMessage(); + + (*msg)[strings::msg_params][strings::url] = big_url_; + + auto command = CreateCommand<OnSystemRequestNotification>(msg); + + PreConditions(); + + ON_CALL(app_mngr_, application(kConnectionKey)) + .WillByDefault(Return(mock_app_)); + ON_CALL(*mock_app_, policy_app_id()).WillByDefault(Return(kPolicyAppId)); + ON_CALL( + mock_policy_handler_, + IsRequestTypeAllowed(kDeviceId, kPolicyAppId, RequestType::NAVIGATION)) + .WillByDefault(Return(true)); + + EXPECT_CALL(mock_rpc_service_, SendMessageToMobile(msg, false)); + + ASSERT_TRUE(command->Init()); + command->Run(); + + EXPECT_EQ(application_manager::MessageType::kNotification, + (*msg)[strings::params][strings::message_type].asInt()); +} + +TEST_F(OnSystemRequestNotificationTest, + ValidateSchema_NavigationHugeUrl_SUCCESS) { + MessageSharedPtr msg = CreateBasicMessage(); + + (*msg)[strings::params][strings::protocol_type] = + CommandImpl::hmi_protocol_type_; + (*msg)[strings::params][strings::protocol_version] = + CommandImpl::protocol_version_; + (*msg)[strings::params][strings::message_type] = + static_cast<int32_t>(application_manager::MessageType::kNotification); + + (*msg)[strings::msg_params][strings::url] = big_url_; + + mobile_apis::MOBILE_API mobile_so_factoy; + ns_smart_device_link::ns_smart_objects::CSmartSchema schema; + mobile_so_factoy.GetSchema(mobile_apis::FunctionID::eType::OnSystemRequestID, + mobile_apis::messageType::eType::notification, + schema); + + rpc::ValidationReport report("RPC"); + EXPECT_EQ(smart_objects::errors::eType::OK, schema.validate(*msg, &report)); + EXPECT_EQ("", rpc::PrettyFormat(report)); +} + TEST_F(OnSystemRequestNotificationTest, Run_InvalidApp_NoNotification) { const mobile_apis::RequestType::eType request_type = mobile_apis::RequestType::HTTP; 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 83e93d9c80..d351ea91b8 100644 --- a/src/components/application_manager/src/message_helper/message_helper.cc +++ b/src/components/application_manager/src/message_helper/message_helper.cc @@ -2378,25 +2378,20 @@ void MessageHelper::SendNaviStartStream(const int32_t app_id, (*start_stream)[strings::params][strings::function_id] = hmi_apis::FunctionID::Navigation_StartStream; - char url[100] = {'\0'}; + std::string url; if ("socket" == app_mngr.get_settings().video_server_type()) { - snprintf(url, - sizeof(url) / sizeof(url[0]), - "http://%s:%d", - app_mngr.get_settings().server_address().c_str(), - app_mngr.get_settings().video_streaming_port()); + auto const port = app_mngr.get_settings().video_streaming_port(); + url = "http://"; + url += app_mngr.get_settings().server_address(); + url += ":"; + url += std::to_string(port); } else if ("pipe" == app_mngr.get_settings().video_server_type()) { - snprintf(url, - sizeof(url) / sizeof(url[0]), - "%s", - app_mngr.get_settings().named_video_pipe_path().c_str()); + url.reserve(PATH_MAX); + url.insert( + 0, app_mngr.get_settings().named_video_pipe_path(), 0, PATH_MAX - 1); } else { - int snprintf_result = - snprintf(url, - sizeof(url) / sizeof(url[0]), - "%s", - app_mngr.get_settings().video_stream_file().c_str()); - DCHECK(snprintf_result); + url.reserve(PATH_MAX); + url.insert(0, app_mngr.get_settings().video_stream_file(), 0, PATH_MAX - 1); } (*start_stream)[strings::msg_params][strings::app_id] = app_id; @@ -2435,25 +2430,20 @@ void MessageHelper::SendAudioStartStream(const int32_t app_id, (*start_stream)[strings::params][strings::function_id] = hmi_apis::FunctionID::Navigation_StartAudioStream; - char url[100] = {'\0'}; + std::string url; if ("socket" == app_mngr.get_settings().audio_server_type()) { - snprintf(url, - sizeof(url) / sizeof(url[0]), - "http://%s:%d", - app_mngr.get_settings().server_address().c_str(), - app_mngr.get_settings().audio_streaming_port()); + auto const port = app_mngr.get_settings().audio_streaming_port(); + url = "http://"; + url += app_mngr.get_settings().server_address(); + url += ":"; + url += std::to_string(port); } else if ("pipe" == app_mngr.get_settings().audio_server_type()) { - snprintf(url, - sizeof(url) / sizeof(url[0]), - "%s", - app_mngr.get_settings().named_audio_pipe_path().c_str()); + url.reserve(PATH_MAX); + url.insert( + 0, app_mngr.get_settings().named_audio_pipe_path(), 0, PATH_MAX - 1); } else { - int snprintf_result = - snprintf(url, - sizeof(url) / sizeof(url[0]), - "%s", - app_mngr.get_settings().audio_stream_file().c_str()); - DCHECK(snprintf_result); + url.reserve(PATH_MAX); + url.insert(0, app_mngr.get_settings().audio_stream_file(), 0, PATH_MAX - 1); } (*start_stream)[strings::msg_params][strings::app_id] = app_id; 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 f85a49dec7..1a033fe87a 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 @@ -41,6 +41,7 @@ #include "application_manager/event_engine/event_dispatcher.h" #include "application_manager/mock_application.h" #include "application_manager/mock_application_manager.h" +#include "application_manager/mock_application_manager_settings.h" #include "application_manager/mock_help_prompt_manager.h" #include "application_manager/mock_rpc_service.h" #include "application_manager/policies/policy_handler.h" @@ -79,6 +80,11 @@ using testing::ReturnRef; using testing::ReturnRefOfCopy; using testing::SaveArg; +namespace { +const uint32_t kAppId = 123u; +const uint32_t kCorrelationId_ = 1939u; +} // namespace + TEST(MessageHelperTestCreate, CreateBlockedByPoliciesResponse_SmartObject_Equal) { mobile_apis::FunctionID::eType function_id = @@ -604,9 +610,21 @@ class MessageHelperTest : public ::testing::Test { , hmi_level_strings{"FULL", "LIMITED", "BACKGROUND", "NONE"} , delta_from_functions_id(32768) {} + void StartStreamPreConditions() { + ON_CALL(mock_application_manager_, GetNextHMICorrelationID()) + .WillByDefault(Return(kCorrelationId_)); + ON_CALL(mock_application_manager_, get_settings()) + .WillByDefault(ReturnRef(mock_app_mngr_settings_)); + ON_CALL(mock_application_manager_, GetRPCService()) + .WillByDefault(ReturnRef(mock_rpc_service_)); + } + protected: - application_manager_test::MockApplicationManager mock_application_manager; - application_manager_test::MockRPCService mock_rpc_service_; + testing::NiceMock<application_manager_test::MockApplicationManager> + mock_application_manager_; + testing::NiceMock<application_manager_test::MockApplicationManagerSettings> + mock_app_mngr_settings_; + testing::NiceMock<application_manager_test::MockRPCService> mock_rpc_service_; const StringArray language_strings; const StringArray hmi_result_strings; const StringArray mobile_result_strings; @@ -750,10 +768,10 @@ TEST_F(MessageHelperTest, smart_objects::SmartObject object; policy_handler_test::MockPolicySettings policy_settings_; const policy::PolicyHandler policy_handler(policy_settings_, - mock_application_manager); + mock_application_manager_); // Method call mobile_apis::Result::eType result = MessageHelper::ProcessSoftButtons( - object, appSharedMock, policy_handler, mock_application_manager); + object, appSharedMock, policy_handler, mock_application_manager_); // Expect EXPECT_EQ(mobile_apis::Result::SUCCESS, result); } @@ -769,10 +787,10 @@ TEST_F(MessageHelperTest, buttons[0][strings::image][strings::value] = "invalid\\nvalue"; policy_handler_test::MockPolicySettings policy_settings_; const policy::PolicyHandler policy_handler(policy_settings_, - mock_application_manager); + mock_application_manager_); // Method call mobile_apis::Result::eType result = MessageHelper::ProcessSoftButtons( - object, appSharedMock, policy_handler, mock_application_manager); + object, appSharedMock, policy_handler, mock_application_manager_); // Expect EXPECT_EQ(mobile_apis::Result::INVALID_DATA, result); } @@ -786,7 +804,7 @@ TEST_F(MessageHelperTest, VerifyImage_ImageTypeIsStatic_Success) { image[strings::value] = "static_icon"; // Method call mobile_apis::Result::eType result = MessageHelper::VerifyImage( - image, appSharedMock, mock_application_manager); + image, appSharedMock, mock_application_manager_); // EXPECT EXPECT_EQ(mobile_apis::Result::SUCCESS, result); } @@ -801,7 +819,7 @@ TEST_F(MessageHelperTest, VerifyImage_ImageValueNotValid_InvalidData) { image[strings::value] = " "; // Method call mobile_apis::Result::eType result = MessageHelper::VerifyImage( - image, appSharedMock, mock_application_manager); + image, appSharedMock, mock_application_manager_); // EXPECT EXPECT_EQ(mobile_apis::Result::INVALID_DATA, result); } @@ -815,7 +833,7 @@ TEST_F(MessageHelperTest, VerifyImageApplyPath_ImageTypeIsStatic_Success) { image[strings::value] = "icon.png"; // Method call mobile_apis::Result::eType result = MessageHelper::VerifyImage( - image, appSharedMock, mock_application_manager); + image, appSharedMock, mock_application_manager_); EXPECT_EQ(mobile_apis::Result::SUCCESS, result); // EXPECT EXPECT_EQ("icon.png", image[strings::value].asString()); @@ -831,7 +849,7 @@ TEST_F(MessageHelperTest, VerifyImageApplyPath_ImageValueNotValid_InvalidData) { image[strings::value] = " "; // Method call mobile_apis::Result::eType result = MessageHelper::VerifyImage( - image, appSharedMock, mock_application_manager); + image, appSharedMock, mock_application_manager_); // EXPECT EXPECT_EQ(mobile_apis::Result::INVALID_DATA, result); } @@ -847,7 +865,7 @@ TEST_F(MessageHelperTest, VerifyImageFiles_SmartObjectWithValidData_Success) { images[1][strings::value] = "static_icon"; // Method call mobile_apis::Result::eType result = MessageHelper::VerifyImageFiles( - images, appSharedMock, mock_application_manager); + images, appSharedMock, mock_application_manager_); // EXPECT EXPECT_EQ(mobile_apis::Result::SUCCESS, result); } @@ -865,7 +883,7 @@ TEST_F(MessageHelperTest, images[1][strings::value] = "image\\n"; // Method call mobile_apis::Result::eType result = MessageHelper::VerifyImageFiles( - images, appSharedMock, mock_application_manager); + images, appSharedMock, mock_application_manager_); // EXPECT EXPECT_EQ(mobile_apis::Result::INVALID_DATA, result); } @@ -885,7 +903,7 @@ TEST_F(MessageHelperTest, message[1][strings::image][strings::value] = "static_icon"; // Method call mobile_apis::Result::eType result = MessageHelper::VerifyImageVrHelpItems( - message, appSharedMock, mock_application_manager); + message, appSharedMock, mock_application_manager_); // EXPECT EXPECT_EQ(mobile_apis::Result::SUCCESS, result); } @@ -905,7 +923,7 @@ TEST_F(MessageHelperTest, message[1][strings::image][strings::value] = "image\\n"; // Method call mobile_apis::Result::eType result = MessageHelper::VerifyImageVrHelpItems( - message, appSharedMock, mock_application_manager); + message, appSharedMock, mock_application_manager_); // EXPECT EXPECT_EQ(mobile_apis::Result::INVALID_DATA, result); } @@ -975,7 +993,7 @@ TEST_F(MessageHelperTest, SendGetListOfPermissionsResponse_SUCCESS) { smart_objects::SmartObjectSPtr result; - ON_CALL(mock_application_manager, GetRPCService()) + ON_CALL(mock_application_manager_, GetRPCService()) .WillByDefault(ReturnRef(mock_rpc_service_)); EXPECT_CALL(mock_rpc_service_, ManageHMICommand(_, _)) .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); @@ -984,7 +1002,7 @@ TEST_F(MessageHelperTest, SendGetListOfPermissionsResponse_SUCCESS) { MessageHelper::SendGetListOfPermissionsResponse(permissions, external_consent_status, correlation_id, - mock_application_manager); + mock_application_manager_); ASSERT_TRUE(result.get()); @@ -1015,7 +1033,7 @@ TEST_F(MessageHelperTest, smart_objects::SmartObjectSPtr result; - ON_CALL(mock_application_manager, GetRPCService()) + ON_CALL(mock_application_manager_, GetRPCService()) .WillByDefault(ReturnRef(mock_rpc_service_)); EXPECT_CALL(mock_rpc_service_, ManageHMICommand(_, _)) .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); @@ -1024,7 +1042,7 @@ TEST_F(MessageHelperTest, MessageHelper::SendGetListOfPermissionsResponse(permissions, external_consent_status, correlation_id, - mock_application_manager); + mock_application_manager_); ASSERT_TRUE(result.get()); @@ -1061,7 +1079,7 @@ TEST_F(MessageHelperTest, TEST_F(MessageHelperTest, SendNaviSetVideoConfigRequest) { smart_objects::SmartObjectSPtr result; - ON_CALL(mock_application_manager, GetRPCService()) + ON_CALL(mock_application_manager_, GetRPCService()) .WillByDefault(ReturnRef(mock_rpc_service_)); EXPECT_CALL(mock_rpc_service_, ManageHMICommand(_, _)) .WillOnce(DoAll(SaveArg<0>(&result), Return(true))); @@ -1075,7 +1093,7 @@ TEST_F(MessageHelperTest, SendNaviSetVideoConfigRequest) { video_params[strings::height] = 480; MessageHelper::SendNaviSetVideoConfig( - app_id, mock_application_manager, video_params); + app_id, mock_application_manager_, video_params); EXPECT_EQ(hmi_apis::FunctionID::Navigation_SetVideoConfig, (*result)[strings::params][strings::function_id].asInt()); @@ -1093,6 +1111,120 @@ TEST_F(MessageHelperTest, SendNaviSetVideoConfigRequest) { EXPECT_EQ(480, msg_params[strings::config][strings::height].asInt()); } +TEST_F(MessageHelperTest, + SendAudioStartStream_SendAudioStreamUrl_MaxPath_Equal) { + // baskslash-2 and place for a null character-1 + auto const special_characters = 3; + std::string audio_stream_file = "/"; + audio_stream_file += + std::string(PATH_MAX - NAME_MAX - special_characters, 'u') + "/"; + audio_stream_file += std::string(NAME_MAX, 'u'); + std::string audio_server_type; + smart_objects::SmartObjectSPtr start_stream; + + StartStreamPreConditions(); + + ON_CALL(mock_app_mngr_settings_, audio_server_type()) + .WillByDefault(ReturnRef(audio_server_type)); + ON_CALL(mock_app_mngr_settings_, audio_stream_file()) + .WillByDefault(ReturnRef(audio_stream_file)); + ON_CALL(mock_rpc_service_, ManageHMICommand(_, _)) + .WillByDefault(DoAll(SaveArg<0>(&start_stream), Return(true))); + + MessageHelper::SendAudioStartStream(kAppId, mock_application_manager_); + + smart_objects::SmartObject& msg_params = (*start_stream)[strings::msg_params]; + + EXPECT_TRUE(msg_params.keyExists(strings::url)); + EXPECT_EQ(msg_params[strings::url], audio_stream_file); +} + +TEST_F(MessageHelperTest, + SendAudioStartStream_SendAudioStreamUrl_ViolationOfLimits_NotEqual) { + // baskslash-2 and place for a null character-1 + auto const special_characters = 3; + std::string audio_stream_file = "/"; + audio_stream_file += + std::string(PATH_MAX - NAME_MAX - special_characters, 'u') + "/"; + audio_stream_file += std::string(NAME_MAX + 1, 'u'); + std::string audio_server_type; + smart_objects::SmartObjectSPtr start_stream; + + StartStreamPreConditions(); + + ON_CALL(mock_app_mngr_settings_, audio_server_type()) + .WillByDefault(ReturnRef(audio_server_type)); + ON_CALL(mock_app_mngr_settings_, audio_stream_file()) + .WillByDefault(ReturnRef(audio_stream_file)); + ON_CALL(mock_rpc_service_, ManageHMICommand(_, _)) + .WillByDefault(DoAll(SaveArg<0>(&start_stream), Return(true))); + + MessageHelper::SendAudioStartStream(kAppId, mock_application_manager_); + + smart_objects::SmartObject& msg_params = (*start_stream)[strings::msg_params]; + + EXPECT_TRUE(msg_params.keyExists(strings::url)); + EXPECT_STRNE(msg_params[strings::url].asCharArray(), + audio_stream_file.c_str()); +} + +TEST_F(MessageHelperTest, + SendNaviStartStream_SendVideoStreamUrl_MaxPath_Equal) { + // baskslash-2 and place for a null character-1 + auto const special_characters = 3; + std::string video_stream_file = "/"; + video_stream_file += + std::string(PATH_MAX - NAME_MAX - special_characters, 'u') + "/"; + video_stream_file += std::string(NAME_MAX, 'u'); + std::string video_server_type; + smart_objects::SmartObjectSPtr start_stream; + + StartStreamPreConditions(); + + ON_CALL(mock_app_mngr_settings_, video_server_type()) + .WillByDefault(ReturnRef(video_server_type)); + ON_CALL(mock_app_mngr_settings_, video_stream_file()) + .WillByDefault(ReturnRef(video_stream_file)); + ON_CALL(mock_rpc_service_, ManageHMICommand(_, _)) + .WillByDefault(DoAll(SaveArg<0>(&start_stream), Return(true))); + + MessageHelper::SendNaviStartStream(kAppId, mock_application_manager_); + + smart_objects::SmartObject& msg_params = (*start_stream)[strings::msg_params]; + + EXPECT_TRUE(msg_params.keyExists(strings::url)); + EXPECT_EQ(msg_params[strings::url], video_stream_file); +} + +TEST_F(MessageHelperTest, + SendNaviStartStream_SendVideoStreamUrl_ViolationOfLimits_NotEqual) { + // baskslash-2 and place for a null character-1 + auto const special_characters = 3; + std::string video_stream_file = "/"; + video_stream_file += + std::string(PATH_MAX - NAME_MAX - special_characters, 'u') + "/"; + video_stream_file += std::string(NAME_MAX + 1, 'u'); + std::string video_server_type; + smart_objects::SmartObjectSPtr start_stream; + + StartStreamPreConditions(); + + ON_CALL(mock_app_mngr_settings_, video_server_type()) + .WillByDefault(ReturnRef(video_server_type)); + ON_CALL(mock_app_mngr_settings_, video_stream_file()) + .WillByDefault(ReturnRef(video_stream_file)); + ON_CALL(mock_rpc_service_, ManageHMICommand(_, _)) + .WillByDefault(DoAll(SaveArg<0>(&start_stream), Return(true))); + + MessageHelper::SendNaviStartStream(kAppId, mock_application_manager_); + + smart_objects::SmartObject& msg_params = (*start_stream)[strings::msg_params]; + + EXPECT_TRUE(msg_params.keyExists(strings::url)); + EXPECT_STRNE(msg_params[strings::url].asCharArray(), + video_stream_file.c_str()); +} + TEST_F(MessageHelperTest, ExtractWindowIdFromSmartObject_SUCCESS) { const WindowID window_id = 145; smart_objects::SmartObject message(smart_objects::SmartType_Map); diff --git a/src/components/config_profile/src/profile.cc b/src/components/config_profile/src/profile.cc index 00fd546a02..26e5bb0c54 100644 --- a/src/components/config_profile/src/profile.cc +++ b/src/components/config_profile/src/profile.cc @@ -1552,7 +1552,8 @@ void Profile::UpdateValues() { kMediaManagerSection, kNamedVideoPipePathKey); - named_video_pipe_path_ = app_storage_folder_ + "/" + named_video_pipe_path_; + named_video_pipe_path_ = app_storage_folder_ + "/" + + std::string(named_video_pipe_path_, 0, NAME_MAX); LOG_UPDATED_VALUE( named_video_pipe_path_, kNamedVideoPipePathKey, kMediaManagerSection); @@ -1563,7 +1564,8 @@ void Profile::UpdateValues() { kMediaManagerSection, kNamedAudioPipePathKey); - named_audio_pipe_path_ = app_storage_folder_ + "/" + named_audio_pipe_path_; + named_audio_pipe_path_ = app_storage_folder_ + "/" + + std::string(named_audio_pipe_path_, 0, NAME_MAX); LOG_UPDATED_VALUE( named_audio_pipe_path_, kNamedAudioPipePathKey, kMediaManagerSection); @@ -1572,7 +1574,8 @@ void Profile::UpdateValues() { ReadStringValue( &video_stream_file_, "", kMediaManagerSection, kVideoStreamFileKey); - video_stream_file_ = app_storage_folder_ + "/" + video_stream_file_; + video_stream_file_ = + app_storage_folder_ + "/" + std::string(video_stream_file_, 0, NAME_MAX); LOG_UPDATED_VALUE( video_stream_file_, kVideoStreamFileKey, kMediaManagerSection); @@ -1581,7 +1584,8 @@ void Profile::UpdateValues() { ReadStringValue( &audio_stream_file_, "", kMediaManagerSection, kAudioStreamFileKey); - audio_stream_file_ = app_storage_folder_ + "/" + audio_stream_file_; + audio_stream_file_ = + app_storage_folder_ + "/" + std::string(audio_stream_file_, 0, NAME_MAX); LOG_UPDATED_VALUE( audio_stream_file_, kAudioStreamFileKey, kMediaManagerSection); diff --git a/src/components/interfaces/HMI_API.xml b/src/components/interfaces/HMI_API.xml index 116ab91060..02d62154f0 100644 --- a/src/components/interfaces/HMI_API.xml +++ b/src/components/interfaces/HMI_API.xml @@ -4587,7 +4587,7 @@ This parameter is filled for supporting OEM proprietary data exchanges. </description> </param> - <param name="url" type="String" maxlength="1000" minlength="1" mandatory="false"> + <param name="url" type="String" minlength="1" mandatory="false"> <description>Optional array of URL(s) for HTTP requests.</description> </param> <param name="fileType" type="Common.FileType" mandatory="false"> @@ -5911,7 +5911,7 @@ </function> <function name="StartStream" messagetype="request"> <description>Request from SmartDeviceLinkCore to HMI to start playing video streaming.</description> - <param name="url" type="String" minlength="21" maxlength="500" mandatory="true"> + <param name="url" type="String" minlength="21" mandatory="true"> <description>URL that HMI start playing.</description> </param> <param name="appID" type="Integer" mandatory="true"> @@ -5930,7 +5930,7 @@ </function> <function name="StartAudioStream" messagetype="request"> <description>Request from SmartDeviceLinkCore to HMI to start playing audio streaming.</description> - <param name="url" type="String" minlength="21" maxlength="500" mandatory="true"> + <param name="url" type="String" minlength="21" mandatory="true"> <description>URL that HMI start playing.</description> </param> <param name="appID" type="Integer" mandatory="true"> diff --git a/tools/rpc_spec b/tools/rpc_spec -Subproject fc985db8d7c4f9eb973b4b431227566a1ae79cb +Subproject 117269e429c24a67bd1dd5ed10703f84fe1e58f |