summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYana Chernysheva (GitHub) <59469418+ychernysheva@users.noreply.github.com>2020-08-24 19:28:25 +0300
committerGitHub <noreply@github.com>2020-08-24 12:28:25 -0400
commit979492b415698d1bba26efbfd5d9ee08bbb01147 (patch)
treea25145cb99fb5024cc1708d81a3d2d96ee95b99a
parentb476821b44a3bb3333a17202763daca808a44f70 (diff)
downloadsdl_core-979492b415698d1bba26efbfd5d9ee08bbb01147.tar.gz
Add check for result codes from HMI IsReady response (#3433)
* Add check for result code and minor changes to related responses * Update corresponding unit tests * Add other successful result codes Co-authored-by: Dmitriy Boltovskiy <dboltovskyi@luxoft.com>
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/rc_is_ready_request_test.cc74
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc11
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/unsubscribe_vehicle_data_request.cc2
-rw-r--r--src/components/application_manager/src/commands/command_request_impl.cc4
-rw-r--r--src/components/application_manager/src/commands/request_to_hmi.cc53
6 files changed, 120 insertions, 26 deletions
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc
index fc342a6d86..98f168c015 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc
@@ -137,7 +137,7 @@ void RCCommandRequest::Run() {
LOG4CXX_WARN(logger_, "HMI interface RC is not available");
SendResponse(false,
mobile_apis::Result::UNSUPPORTED_RESOURCE,
- "Remote control is not supported by system");
+ "RC is not supported by system");
return;
}
LOG4CXX_TRACE(logger_, "RC interface is available!");
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/rc_is_ready_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/rc_is_ready_request_test.cc
index b569ecb83f..cb90859018 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/rc_is_ready_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/rc_is_ready_request_test.cc
@@ -56,7 +56,6 @@ namespace am = ::application_manager;
using am::commands::MessageSharedPtr;
using am::event_engine::Event;
using sdl_rpc_plugin::commands::RCIsReadyRequest;
-
typedef std::shared_ptr<RCIsReadyRequest> RCIsReadyRequestPtr;
class RCIsReadyRequestTest
@@ -102,15 +101,23 @@ class RCIsReadyRequestTest
EXPECT_CALL(mock_rpc_service_, ManageHMICommand(capabilities, _));
}
- void PrepareEvent(bool is_message_contain_param,
- Event& event,
- bool is_rc_cooperating_available = false) {
+ MessageSharedPtr CreateResultMessage(
+ bool is_rc_cooperating_available,
+ hmi_apis::Common_Result::eType result_code =
+ hmi_apis::Common_Result::INVALID_ENUM) {
MessageSharedPtr msg = CreateMessage(smart_objects::SmartType_Map);
- if (is_message_contain_param) {
- (*msg)[am::strings::msg_params][am::strings::available] =
- is_rc_cooperating_available;
+ (*msg)[am::strings::msg_params][am::strings::available] =
+ is_rc_cooperating_available;
+ if (hmi_apis::Common_Result::INVALID_ENUM != result_code) {
+ (*msg)[am::strings::params][am::hmi_response::code] = result_code;
}
- event.set_smart_object(*msg);
+ return msg;
+ }
+
+ MessageSharedPtr CreateErrorMessage() {
+ MessageSharedPtr msg = CreateMessage(smart_objects::SmartType_Map);
+ (*msg)[am::strings::params][am::strings::error_msg] = true;
+ return msg;
}
void HMICapabilitiesExpectations() {
@@ -128,8 +135,11 @@ TEST_F(RCIsReadyRequestTest, Run_NoKeyAvailableInMessage_HmiInterfacesIgnored) {
const bool is_send_message_to_hmi = true;
const bool is_message_contain_param = false;
Event event(hmi_apis::FunctionID::RC_IsReady);
- PrepareEvent(is_message_contain_param, event);
+
+ MessageSharedPtr msg = CreateMessage(smart_objects::SmartType_Map);
+ event.set_smart_object(*msg);
HMICapabilitiesExpectations();
+
SetUpExpectations(is_rc_cooperating_available,
is_send_message_to_hmi,
is_message_contain_param,
@@ -142,7 +152,8 @@ TEST_F(RCIsReadyRequestTest, Run_KeyAvailableEqualToFalse_StateNotAvailable) {
const bool is_send_message_to_hmi = false;
const bool is_message_contain_param = true;
Event event(hmi_apis::FunctionID::RC_IsReady);
- PrepareEvent(is_message_contain_param, event);
+ MessageSharedPtr msg = CreateResultMessage(is_rc_cooperating_available);
+ event.set_smart_object(*msg);
SetUpExpectations(is_rc_cooperating_available,
is_send_message_to_hmi,
is_message_contain_param,
@@ -150,13 +161,20 @@ TEST_F(RCIsReadyRequestTest, Run_KeyAvailableEqualToFalse_StateNotAvailable) {
command_->on_event(event);
}
-TEST_F(RCIsReadyRequestTest, Run_KeyAvailableEqualToTrue_StateAvailable) {
+TEST_F(RCIsReadyRequestTest,
+ Run_KeyAvailableEqualToTrueResultCodeSuccess_StateAvailable) {
const bool is_rc_cooperating_available = true;
const bool is_send_message_to_hmi = true;
const bool is_message_contain_param = true;
+ const hmi_apis::Common_Result::eType result_code =
+ hmi_apis::Common_Result::SUCCESS;
Event event(hmi_apis::FunctionID::RC_IsReady);
- PrepareEvent(is_message_contain_param, event, is_rc_cooperating_available);
+
+ MessageSharedPtr msg =
+ CreateResultMessage(is_rc_cooperating_available, result_code);
+ event.set_smart_object(*msg);
HMICapabilitiesExpectations();
+
SetUpExpectations(is_rc_cooperating_available,
is_send_message_to_hmi,
is_message_contain_param,
@@ -164,6 +182,38 @@ TEST_F(RCIsReadyRequestTest, Run_KeyAvailableEqualToTrue_StateAvailable) {
command_->on_event(event);
}
+TEST_F(RCIsReadyRequestTest,
+ Run_KeyAvailableEqualToTrueResultCodeUnsuccess_StateNotAvailable) {
+ const bool is_rc_cooperating_available = false;
+ const bool is_send_message_to_hmi = false;
+ const bool is_message_contain_param = true;
+ const hmi_apis::Common_Result::eType result_code =
+ hmi_apis::Common_Result::GENERIC_ERROR;
+ Event event(hmi_apis::FunctionID::RC_IsReady);
+ MessageSharedPtr msg =
+ CreateResultMessage(is_rc_cooperating_available, result_code);
+ event.set_smart_object(*msg);
+ SetUpExpectations(is_rc_cooperating_available,
+ is_send_message_to_hmi,
+ is_message_contain_param,
+ am::HmiInterfaces::STATE_NOT_AVAILABLE);
+ command_->on_event(event);
+}
+
+TEST_F(RCIsReadyRequestTest, Run_ErrorMessage_StateNotAvailable) {
+ const bool is_rc_cooperating_available = false;
+ const bool is_send_message_to_hmi = false;
+ const bool is_message_contain_param = true;
+ Event event(hmi_apis::FunctionID::RC_IsReady);
+ MessageSharedPtr msg = CreateErrorMessage();
+ event.set_smart_object(*msg);
+ SetUpExpectations(is_rc_cooperating_available,
+ is_send_message_to_hmi,
+ is_message_contain_param,
+ am::HmiInterfaces::STATE_NOT_AVAILABLE);
+ command_->on_event(event);
+}
+
TEST_F(RCIsReadyRequestTest, Run_HMIDoestRespond_SendMessageToHMIByTimeout) {
HMICapabilitiesExpectations();
ExpectSendMessagesToHMI();
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc
index 36d972d5fd..29818232c0 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc
@@ -287,8 +287,8 @@ void SubscribeVehicleDataRequest::CheckVISubscriptions(
smart_objects::SmartObject& out_response_params,
smart_objects::SmartObject& out_request_params,
bool& out_result) {
- const bool is_interface_not_available =
- (HmiInterfaces::STATE_NOT_AVAILABLE ==
+ const bool is_interface_available =
+ (HmiInterfaces::STATE_NOT_AVAILABLE !=
application_manager_.hmi_interfaces().GetInterfaceState(
HmiInterfaces::HMI_INTERFACE_VehicleInfo));
@@ -355,7 +355,7 @@ void SubscribeVehicleDataRequest::CheckVISubscriptions(
VehicleInfoSubscriptions::size_type items_to_subscribe = 0;
auto item_names = (*message_)[strings::msg_params].enumerate();
- if (!is_interface_not_available) {
+ if (is_interface_available) {
for (const auto& name : item_names) {
auto enabled = (*message_)[strings::msg_params][name].asBool();
if (!enabled) {
@@ -386,6 +386,9 @@ void SubscribeVehicleDataRequest::CheckVISubscriptions(
if (0 == items_to_subscribe) {
if (HasDisallowedParams()) {
out_result_code = mobile_apis::Result::DISALLOWED;
+ } else if (!is_interface_available) {
+ out_result_code = mobile_apis::Result::UNSUPPORTED_RESOURCE;
+ out_info = "VehicleInfo is not supported by system";
} else {
out_result_code = mobile_apis::Result::INVALID_DATA;
out_info = "No data in the request";
@@ -394,7 +397,7 @@ void SubscribeVehicleDataRequest::CheckVISubscriptions(
return;
}
- if (0 == subscribed_items && !is_interface_not_available) {
+ if (0 == subscribed_items && is_interface_available) {
out_result_code = mobile_apis::Result::IGNORED;
out_info = "Already subscribed on provided VehicleData.";
out_result = false;
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/unsubscribe_vehicle_data_request.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/unsubscribe_vehicle_data_request.cc
index 32d63f0c35..fccf56ecf5 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/unsubscribe_vehicle_data_request.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/unsubscribe_vehicle_data_request.cc
@@ -153,7 +153,7 @@ void UnsubscribeVehicleDataRequest::Run() {
if (0 == unsubscribed_items) {
SendResponse(false,
mobile_apis::Result::IGNORED,
- "Was not subscribed on any VehicleData.",
+ "Some provided VehicleData was not subscribed.",
&response_params_);
return;
}
diff --git a/src/components/application_manager/src/commands/command_request_impl.cc b/src/components/application_manager/src/commands/command_request_impl.cc
index d20039bf70..e770a4e07f 100644
--- a/src/components/application_manager/src/commands/command_request_impl.cc
+++ b/src/components/application_manager/src/commands/command_request_impl.cc
@@ -92,13 +92,13 @@ const std::string CreateInfoForUnsupportedResult(
return "UI is not supported by system";
}
case (HmiInterfaces::InterfaceID::HMI_INTERFACE_Navigation): {
- return "Navi is not supported by system";
+ return "Navigation is not supported by system";
}
case (HmiInterfaces::InterfaceID::HMI_INTERFACE_VehicleInfo): {
return "VehicleInfo is not supported by system";
}
case (HmiInterfaces::InterfaceID::HMI_INTERFACE_RC): {
- return "Remote control is not supported by system";
+ return "RC is not supported by system";
}
default:
#ifdef ENABLE_LOG
diff --git a/src/components/application_manager/src/commands/request_to_hmi.cc b/src/components/application_manager/src/commands/request_to_hmi.cc
index ac34d091af..db191eadb3 100644
--- a/src/components/application_manager/src/commands/request_to_hmi.cc
+++ b/src/components/application_manager/src/commands/request_to_hmi.cc
@@ -33,6 +33,7 @@
#include "application_manager/commands/request_to_hmi.h"
#include "application_manager/message_helper.h"
#include "application_manager/rpc_service.h"
+#include "utils/helpers.h"
namespace application_manager {
@@ -77,19 +78,59 @@ bool CheckAvailabilityHMIInterfaces(ApplicationManager& application_manager,
return HmiInterfaces::STATE_NOT_AVAILABLE != state;
}
+bool IsResponseCodeSuccess(
+ const smart_objects::SmartObject& response_from_hmi) {
+ auto response_code = static_cast<hmi_apis::Common_Result::eType>(
+ response_from_hmi[strings::params][hmi_response::code].asInt());
+
+ using helpers::Compare;
+ using helpers::EQ;
+ using helpers::ONE;
+
+ const bool is_result_success =
+ Compare<hmi_apis::Common_Result::eType, EQ, ONE>(
+ response_code,
+ hmi_apis::Common_Result::SUCCESS,
+ hmi_apis::Common_Result::WARNINGS,
+ hmi_apis::Common_Result::WRONG_LANGUAGE,
+ hmi_apis::Common_Result::RETRY,
+ hmi_apis::Common_Result::SAVED);
+ return is_result_success;
+}
+
bool ChangeInterfaceState(ApplicationManager& application_manager,
const smart_objects::SmartObject& response_from_hmi,
HmiInterfaces::InterfaceID interface) {
if (response_from_hmi[strings::msg_params].keyExists(strings::available)) {
const bool is_available =
response_from_hmi[strings::msg_params][strings::available].asBool();
- const HmiInterfaces::InterfaceState interface_state =
- is_available ? HmiInterfaces::STATE_AVAILABLE
- : HmiInterfaces::STATE_NOT_AVAILABLE;
- application_manager.hmi_interfaces().SetInterfaceState(interface,
- interface_state);
- return is_available;
+
+ if (!is_available) {
+ application_manager.hmi_interfaces().SetInterfaceState(
+ interface, HmiInterfaces::STATE_NOT_AVAILABLE);
+ return false;
+ }
+
+ // Process response with result
+ if (response_from_hmi[strings::params].keyExists(hmi_response::code) &&
+ !IsResponseCodeSuccess(response_from_hmi)) {
+ application_manager.hmi_interfaces().SetInterfaceState(
+ interface, HmiInterfaces::STATE_NOT_AVAILABLE);
+ return false;
+ }
+
+ application_manager.hmi_interfaces().SetInterfaceState(
+ interface, HmiInterfaces::STATE_AVAILABLE);
+ return true;
}
+
+ // Process response with error
+ if (response_from_hmi[strings::params].keyExists(strings::error_msg)) {
+ application_manager.hmi_interfaces().SetInterfaceState(
+ interface, HmiInterfaces::STATE_NOT_AVAILABLE);
+ return false;
+ }
+
return false;
}