diff options
16 files changed, 598 insertions, 521 deletions
diff --git a/.travis.yml b/.travis.yml index 55dfdc3b00..69db195531 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,7 +27,7 @@ addons: - binutils before_install: - sudo apt-get -qq update - - sudo apt-get -q -y install libavahi-client-dev bluez-tools sqlite3 libsqlite3-dev automake1.11 + - sudo apt-get -q -y install bluez-tools sqlite3 libsqlite3-dev automake1.11 - wget http://archive.ubuntu.com/ubuntu/pool/main/l/lcov/lcov_1.11-3_all.deb - sudo dpkg -i lcov_1.11-3_all.deb script: diff --git a/src/components/application_manager/include/application_manager/commands/command_request_impl.h b/src/components/application_manager/include/application_manager/commands/command_request_impl.h index db9203a8fc..f585410e97 100644 --- a/src/components/application_manager/include/application_manager/commands/command_request_impl.h +++ b/src/components/application_manager/include/application_manager/commands/command_request_impl.h @@ -259,30 +259,6 @@ class CommandRequestImpl : public CommandImpl, mobile_apis::Result::eType PrepareResultCodeForResponse( const ResponseInfo& first, const ResponseInfo& second); - /** - * @brief Resolves if the return code must be - * UNSUPPORTED_RESOURCE - * @param first contains result_code from HMI response and - * interface that returns response - * @param second contains result_code from HMI response and - * interface that returns response. - * @return if the communication return code must be - * UNSUPPORTED_RESOURCE, function returns true, else - * false - */ - bool IsResultCodeUnsupported(const ResponseInfo& first, - const ResponseInfo& second) const; - /** - * @brief Checks result code from HMI for split RPC - * and set flags to the info structures. - * @param first contains result_code from HMI response and - * interface that returns response - * @param second contains result_code from HMI response and - * interface that returns response - */ - void SetResultCodeFlagsForHMIResponses(ResponseInfo& out_first, - ResponseInfo& out_second) const; - protected: /** * @brief Returns policy parameters permissions diff --git a/src/components/application_manager/include/application_manager/commands/mobile/perform_audio_pass_thru_request.h b/src/components/application_manager/include/application_manager/commands/mobile/perform_audio_pass_thru_request.h index 2639651e1a..99f86ea1d5 100644 --- a/src/components/application_manager/include/application_manager/commands/mobile/perform_audio_pass_thru_request.h +++ b/src/components/application_manager/include/application_manager/commands/mobile/perform_audio_pass_thru_request.h @@ -133,57 +133,11 @@ class PerformAudioPassThruRequest : public CommandRequestImpl { */ bool IsWaitingHMIResponse(); - /** - * @brief Validates audioPassThruIcon parameter and - * removes it if is not valid - * @param app Pointer to the application whose storage directory - * must be accessed - */ - void ProcessAudioPassThruIcon(ApplicationSharedPtr app); - - /** - * @brief Checks if the audioPassThruIcon parameter value - * contains special characters (\n,\t) or - * contains only white spaces - * @return If the audioPassthruIcon parameter value contains - * above mentioned symbols, the function returns FALSE, else - * the parameter value is valid and it returns TRUE - */ - bool IsAudioPassThruIconParamValid(); - - /** - * @brief Checks result code from HMI for splitted RPC - * and returns parameter for sending to mobile app in - * audioPassThru communication. - * @param ui_response contains result_code from UI - * @param tts_response contains result_code from TTS - * @return result code - 1) UI error code has precedence than TTS's - * 2) error_code from TTS is turned to WARNINGS - */ - mobile_apis::Result::eType PrepareAudioPassThruResultCodeForResponse( - const ResponseInfo& ui_response, const ResponseInfo& tts_response); - - /** - * @brief Checks if any of audioPassThru communication components - * returned ABORTED code - * @param ui contains result_code from UI - * @param tts contains result_code from TTS - * @return if TTS or UI responded with ABORTED function returns TRUE, - * else is returns FALSE - */ - bool IsAnyHMIComponentAborted(const ResponseInfo& ui, - const ResponseInfo& tts); - /* flag display state of speak and ui perform audio during perform audio pass thru*/ bool awaiting_tts_speak_response_; bool awaiting_ui_response_; - /* flag shows if last received audioPassThruIcon exists - * in the file system - */ - bool audio_pass_thru_icon_exists_; - hmi_apis::Common_Result::eType result_tts_speak_; hmi_apis::Common_Result::eType result_ui_; std::string ui_info_; diff --git a/src/components/application_manager/include/application_manager/message_helper.h b/src/components/application_manager/include/application_manager/message_helper.h index 891d5af335..0ea4fc8ca5 100644 --- a/src/components/application_manager/include/application_manager/message_helper.h +++ b/src/components/application_manager/include/application_manager/message_helper.h @@ -178,7 +178,7 @@ class MessageHelper { * @param hmi_level Desired HMI Level */ static std::string StringifiedHMILevel( - mobile_apis::HMILevel::eType hmi_level); + const mobile_apis::HMILevel::eType hmi_level); /* * @brief Used to obtain function name by its id diff --git a/src/components/application_manager/include/application_manager/smart_object_keys.h b/src/components/application_manager/include/application_manager/smart_object_keys.h index e73972d7b6..9a9e5933bf 100644 --- a/src/components/application_manager/include/application_manager/smart_object_keys.h +++ b/src/components/application_manager/include/application_manager/smart_object_keys.h @@ -164,7 +164,6 @@ extern const char* speech_capabilities; extern const char* vr_capabilities; extern const char* audio_pass_thru_capabilities; extern const char* pcm_stream_capabilities; -extern const char* audio_pass_thru_icon; // PutFile extern const char* sync_file_name; 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 6fec7877d5..ab0a17f1fb 100644 --- a/src/components/application_manager/src/commands/command_request_impl.cc +++ b/src/components/application_manager/src/commands/command_request_impl.cc @@ -109,6 +109,15 @@ bool CheckResultCode(const ResponseInfo& first, const ResponseInfo& second) { return false; } +bool IsResultCodeUnsupported(const ResponseInfo& first, + const ResponseInfo& second) { + return ((first.is_ok || first.is_invalid_enum) && + second.is_unsupported_resource) || + ((second.is_ok || second.is_invalid_enum) && + first.is_unsupported_resource) || + (first.is_unsupported_resource && second.is_unsupported_resource); +} + struct DisallowedParamsInserter { DisallowedParamsInserter(smart_objects::SmartObject& response, mobile_apis::VehicleDataResultCode::eType code) @@ -681,18 +690,6 @@ bool CommandRequestImpl::PrepareResultForMobileResponse( bool CommandRequestImpl::PrepareResultForMobileResponse( ResponseInfo& out_first, ResponseInfo& out_second) const { - SetResultCodeFlagsForHMIResponses(out_first, out_second); - - bool result = (out_first.is_ok && out_second.is_ok) || - (out_second.is_invalid_enum && out_first.is_ok) || - (out_first.is_invalid_enum && out_second.is_ok); - result = result || CheckResultCode(out_first, out_second); - result = result || CheckResultCode(out_second, out_first); - return result; -} - -void CommandRequestImpl::SetResultCodeFlagsForHMIResponses( - ResponseInfo& out_first, ResponseInfo& out_second) const { using namespace helpers; out_first.is_ok = Compare<hmi_apis::Common_Result::eType, EQ, ONE>( @@ -729,6 +726,13 @@ void CommandRequestImpl::SetResultCodeFlagsForHMIResponses( out_second.interface_state = application_manager_.hmi_interfaces().GetInterfaceState( out_second.interface); + + bool result = (out_first.is_ok && out_second.is_ok) || + (out_second.is_invalid_enum && out_first.is_ok) || + (out_first.is_invalid_enum && out_second.is_ok); + result = result || CheckResultCode(out_first, out_second); + result = result || CheckResultCode(out_second, out_first); + return result; } void CommandRequestImpl::GetInfo( @@ -771,15 +775,6 @@ const CommandParametersPermissions& CommandRequestImpl::parameters_permissions() return parameters_permissions_; } -bool CommandRequestImpl::IsResultCodeUnsupported( - const ResponseInfo& first, const ResponseInfo& second) const { - return ((first.is_ok || first.is_invalid_enum) && - second.is_unsupported_resource) || - ((second.is_ok || second.is_invalid_enum) && - first.is_unsupported_resource) || - (first.is_unsupported_resource && second.is_unsupported_resource); -} - } // namespace commands } // namespace application_manager diff --git a/src/components/application_manager/src/commands/mobile/perform_audio_pass_thru_request.cc b/src/components/application_manager/src/commands/mobile/perform_audio_pass_thru_request.cc index 8a631ec393..9f5fd937f9 100644 --- a/src/components/application_manager/src/commands/mobile/perform_audio_pass_thru_request.cc +++ b/src/components/application_manager/src/commands/mobile/perform_audio_pass_thru_request.cc @@ -37,7 +37,6 @@ #include "application_manager/application_impl.h" #include "application_manager/message_helper.h" #include "utils/helpers.h" -#include "utils/file_system.h" namespace application_manager { @@ -50,7 +49,6 @@ PerformAudioPassThruRequest::PerformAudioPassThruRequest( : CommandRequestImpl(message, application_manager) , awaiting_tts_speak_response_(false) , awaiting_ui_response_(false) - , audio_pass_thru_icon_exists_(true) , result_tts_speak_(hmi_apis::Common_Result::INVALID_ENUM) , result_ui_(hmi_apis::Common_Result::INVALID_ENUM) { subscribe_on_event(hmi_apis::FunctionID::TTS_OnResetTimeout); @@ -99,7 +97,6 @@ void PerformAudioPassThruRequest::Run() { // According with new implementation processing of UNSUPPORTE_RESOURCE // need set flag before sending to hmi - ProcessAudioPassThruIcon(app); awaiting_ui_response_ = true; if ((*message_)[str::msg_params].keyExists(str::initial_prompt) && (0 < (*message_)[str::msg_params][str::initial_prompt].length())) { @@ -196,34 +193,21 @@ bool PerformAudioPassThruRequest::PrepareResponseParameters( mobile_apis::Result::eType& result_code, std::string& info) { LOG4CXX_AUTO_TRACE(logger_); - bool result = true; ResponseInfo ui_perform_info(result_ui_, HmiInterfaces::HMI_INTERFACE_UI); ResponseInfo tts_perform_info(result_tts_speak_, HmiInterfaces::HMI_INTERFACE_TTS); + const bool result = + PrepareResultForMobileResponse(ui_perform_info, tts_perform_info); - SetResultCodeFlagsForHMIResponses(ui_perform_info, tts_perform_info); if (ui_perform_info.is_ok && tts_perform_info.is_unsupported_resource && HmiInterfaces::STATE_AVAILABLE == tts_perform_info.interface_state) { result_code = mobile_apis::Result::WARNINGS; tts_info_ = "Unsupported phoneme type sent in a prompt"; - } else if (IsResultCodeUnsupported(ui_perform_info, tts_perform_info)) { - result_code = mobile_apis::Result::UNSUPPORTED_RESOURCE; - } else if (IsAnyHMIComponentAborted(ui_perform_info, tts_perform_info)) { - result_code = mobile_apis::Result::ABORTED; - result = false; - } else { - result_code = PrepareAudioPassThruResultCodeForResponse(ui_perform_info, - tts_perform_info); - if (!ui_perform_info.is_ok) { - result = false; - } + info = MergeInfos(ui_perform_info, ui_info_, tts_perform_info, tts_info_); + return result; } - + result_code = PrepareResultCodeForResponse(ui_perform_info, tts_perform_info); info = MergeInfos(ui_perform_info, ui_info_, tts_perform_info, tts_info_); - if (!audio_pass_thru_icon_exists_) { - info = MergeInfos("Reference image(s) not found", info); - } - return result; } @@ -252,53 +236,45 @@ void PerformAudioPassThruRequest::SendSpeakRequest() { void PerformAudioPassThruRequest::SendPerformAudioPassThruRequest() { LOG4CXX_AUTO_TRACE(logger_); - smart_objects::SmartObject msg_params_send = + smart_objects::SmartObject msg_params = smart_objects::SmartObject(smart_objects::SmartType_Map); - smart_objects::SmartObject msg_params_rcvd = (*message_)[str::msg_params]; - msg_params_send[str::app_id] = connection_key(); + msg_params[str::app_id] = connection_key(); - msg_params_send[hmi_request::max_duration] = - msg_params_rcvd[str::max_duration]; + msg_params[hmi_request::max_duration] = + (*message_)[str::msg_params][str::max_duration]; - msg_params_send[hmi_request::audio_pass_display_texts] = + msg_params[hmi_request::audio_pass_display_texts] = smart_objects::SmartObject(smart_objects::SmartType_Array); - if (msg_params_rcvd.keyExists(str::audio_pass_display_text1)) { - msg_params_send - [hmi_request::audio_pass_display_texts][0][hmi_request::field_name] = - static_cast<int32_t>( - hmi_apis::Common_TextFieldName::audioPassThruDisplayText1); - msg_params_send[hmi_request::audio_pass_display_texts][0] - [hmi_request::field_text] = - msg_params_rcvd[str::audio_pass_display_text1]; + if ((*message_)[str::msg_params].keyExists(str::audio_pass_display_text1)) { + msg_params[hmi_request::audio_pass_display_texts][0] + [hmi_request::field_name] = static_cast<int32_t>( + hmi_apis::Common_TextFieldName::audioPassThruDisplayText1); + msg_params[hmi_request::audio_pass_display_texts][0] + [hmi_request::field_text] = + (*message_)[str::msg_params][str::audio_pass_display_text1]; } - if (msg_params_rcvd.keyExists(str::audio_pass_display_text2)) { - msg_params_send - [hmi_request::audio_pass_display_texts][1][hmi_request::field_name] = - static_cast<int32_t>( - hmi_apis::Common_TextFieldName::audioPassThruDisplayText2); - msg_params_send[hmi_request::audio_pass_display_texts][1] - [hmi_request::field_text] = - msg_params_rcvd[str::audio_pass_display_text2]; + if ((*message_)[str::msg_params].keyExists(str::audio_pass_display_text2)) { + msg_params[hmi_request::audio_pass_display_texts][1] + [hmi_request::field_name] = static_cast<int32_t>( + hmi_apis::Common_TextFieldName::audioPassThruDisplayText2); + msg_params[hmi_request::audio_pass_display_texts][1] + [hmi_request::field_text] = + (*message_)[str::msg_params][str::audio_pass_display_text2]; } - if (msg_params_rcvd.keyExists(str::mute_audio)) { - msg_params_send[str::mute_audio] = - msg_params_rcvd[str::mute_audio].asBool(); + if ((*message_)[str::msg_params].keyExists(str::mute_audio)) { + msg_params[str::mute_audio] = + (*message_)[str::msg_params][str::mute_audio].asBool(); } else { // If omitted, the value is set to true - msg_params_send[str::mute_audio] = true; - } - - if (msg_params_rcvd.keyExists(str::audio_pass_thru_icon)) { - msg_params_send[str::audio_pass_thru_icon] = - msg_params_rcvd[str::audio_pass_thru_icon]; + msg_params[str::mute_audio] = true; } SendHMIRequest( - hmi_apis::FunctionID::UI_PerformAudioPassThru, &msg_params_send, true); + hmi_apis::FunctionID::UI_PerformAudioPassThru, &msg_params, true); } void PerformAudioPassThruRequest::SendRecordStartNotification() { @@ -389,78 +365,6 @@ bool PerformAudioPassThruRequest::IsWaitingHMIResponse() { return awaiting_tts_speak_response_ || awaiting_ui_response_; } -void PerformAudioPassThruRequest::ProcessAudioPassThruIcon( - ApplicationSharedPtr app) { - LOG4CXX_AUTO_TRACE(logger_); - smart_objects::SmartObject msg_params = (*message_)[strings::msg_params]; - - audio_pass_thru_icon_exists_ = true; - if (msg_params.keyExists(strings::audio_pass_thru_icon)) { - if (IsAudioPassThruIconParamValid()) { - smart_objects::SmartObject icon = - msg_params[strings::audio_pass_thru_icon]; - if (MessageHelper::VerifyImage(icon, app, application_manager_) != - mobile_apis::Result::SUCCESS) { - LOG4CXX_WARN( - logger_, - "Invalid audio_pass_thru_icon doesn't exist in the file system"); - audio_pass_thru_icon_exists_ = false; - } - } else { - LOG4CXX_WARN(logger_, - "Invalid audio_pass_thru_icon validation check failed"); - msg_params.erase(strings::audio_pass_thru_icon); - } - } -} - -mobile_apis::Result::eType -PerformAudioPassThruRequest::PrepareAudioPassThruResultCodeForResponse( - const ResponseInfo& ui_response, const ResponseInfo& tts_response) { - mobile_apis::Result::eType result_code = mobile_apis::Result::INVALID_ENUM; - - hmi_apis::Common_Result::eType common_result = - hmi_apis::Common_Result::INVALID_ENUM; - const hmi_apis::Common_Result::eType ui_result = ui_response.result_code; - const hmi_apis::Common_Result::eType tts_result = tts_response.result_code; - - if ((ui_result == hmi_apis::Common_Result::SUCCESS) && - (tts_result != hmi_apis::Common_Result::SUCCESS)) { - common_result = hmi_apis::Common_Result::WARNINGS; - } else if (ui_result == hmi_apis::Common_Result::INVALID_ENUM) { - common_result = tts_result; - } else { - common_result = ui_result; - } - - result_code = MessageHelper::HMIToMobileResult(common_result); - return result_code; -} - -bool PerformAudioPassThruRequest::IsAudioPassThruIconParamValid() { - LOG4CXX_AUTO_TRACE(logger_); - - const std::string& value = - (*message_)[strings::msg_params][strings::audio_pass_thru_icon] - [strings::value].asString(); - - if (!CheckSyntax(value, false)) { - LOG4CXX_WARN(logger_, - "Invalid audio_pass_thru_icon value syntax check failed"); - return false; - } - - return true; -} - -bool PerformAudioPassThruRequest::IsAnyHMIComponentAborted( - const ResponseInfo& ui, const ResponseInfo& tts) { - using namespace helpers; - - return ((ui.result_code == hmi_apis::Common_Result::ABORTED) || - (tts.result_code == hmi_apis::Common_Result::ABORTED)); -} - } // namespace commands } // namespace application_manager 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 65d6574b41..bdae1459a8 100644 --- a/src/components/application_manager/src/message_helper/message_helper.cc +++ b/src/components/application_manager/src/message_helper/message_helper.cc @@ -387,8 +387,7 @@ mobile_apis::HMILevel::eType MessageHelper::StringToHMILevel( return mobile_apis::HMILevel::INVALID_ENUM; } -std::string MessageHelper::StringifiedHMILevel( - mobile_apis::HMILevel::eType hmi_level) { +std::string MessageHelper::StringifiedHMILevel(const mobile_apis::HMILevel::eType hmi_level) { using namespace NsSmartDeviceLink::NsSmartObjects; const char* str = 0; if (EnumConversionHelper<mobile_apis::HMILevel::eType>::EnumToCString( diff --git a/src/components/application_manager/src/smart_object_keys.cc b/src/components/application_manager/src/smart_object_keys.cc index 8bc8b570f9..5339546a24 100644 --- a/src/components/application_manager/src/smart_object_keys.cc +++ b/src/components/application_manager/src/smart_object_keys.cc @@ -131,7 +131,6 @@ const char* speech_capabilities = "speechCapabilities"; const char* vr_capabilities = "vrCapabilities"; const char* audio_pass_thru_capabilities = "audioPassThruCapabilities"; const char* pcm_stream_capabilities = "pcmStreamCapabilities"; -const char* audio_pass_thru_icon = "audioPassThruIcon"; // PutFile const char* sync_file_name = "syncFileName"; const char* file_name = "fileName"; @@ -350,7 +349,6 @@ const char* file = "file"; const char* file_name = "fileName"; const char* retry = "retry"; const char* service = "service"; -const char* audio_pass_thru_icon = "audioPassThruIcon"; } // namespace hmi_request namespace hmi_response { @@ -409,4 +407,4 @@ const char* event_name = "eventName"; } // namespace hmi_notification -} // namespace application_manager +} // namespace application_manager
\ No newline at end of file diff --git a/src/components/application_manager/test/CMakeLists.txt b/src/components/application_manager/test/CMakeLists.txt index bcc114dc0d..7f7e3e201a 100644 --- a/src/components/application_manager/test/CMakeLists.txt +++ b/src/components/application_manager/test/CMakeLists.txt @@ -64,9 +64,15 @@ set(testSources ${AM_TEST_DIR}/application_state_test.cc ${AM_TEST_DIR}/usage_statistics_test.cc ${AM_TEST_DIR}/policy_handler_test.cc + ${AM_TEST_DIR}/mock_message_helper.cc ${AM_TEST_DIR}/application_manager_impl_test.cc ) +set (RequestController_SOURCES + ${AM_TEST_DIR}/request_controller/request_controller_test.cc + ${AM_TEST_DIR}/mock_message_helper.cc +) + set(LIBRARIES Utils ApplicationManager @@ -113,6 +119,7 @@ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath=${CMAKE_CURRENT_BINARY_DIR}" ) create_test("application_manager_test" "${testSources}" "${LIBRARIES}") +create_test("request_controller_test" "${RequestController_SOURCES}" "${LIBRARIES}") # TODO [AKozoriz] : Fix not buildable tests set(ResumptionData_SOURCES diff --git a/src/components/application_manager/test/include/application_manager/mock_request.h b/src/components/application_manager/test/include/application_manager/mock_request.h new file mode 100644 index 0000000000..e4cfa84841 --- /dev/null +++ b/src/components/application_manager/test/include/application_manager/mock_request.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2017, Ford Motor Company + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the + * distribution. + * + * Neither the name of the Ford Motor Company nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef SRC_COMPONENTS_APPLICATION_MANAGER_TEST_INCLUDE_APPLICATION_MANAGER_MOCK_REQUEST_H_ +#define SRC_COMPONENTS_APPLICATION_MANAGER_TEST_INCLUDE_APPLICATION_MANAGER_MOCK_REQUEST_H_ + +#include "gmock/gmock.h" +#include "application_manager/commands/command.h" + +namespace test { +namespace components { +namespace application_manager_test { + +using ::testing::Return; + +class MockRequest : public application_manager::commands::Command { + public: + MockRequest(uint32_t connection_key, uint32_t correlation_id) { + ON_CALL(*this, correlation_id()).WillByDefault(Return(correlation_id)); + ON_CALL(*this, connection_key()).WillByDefault(Return(connection_key)); + } + + MOCK_METHOD0(CheckPermissions, bool()); + MOCK_METHOD0(Init, bool()); + MOCK_METHOD0(Run, void()); + MOCK_METHOD0(CleanUp, bool()); + MOCK_CONST_METHOD0(default_timeout, uint32_t()); + MOCK_CONST_METHOD0(function_id, int32_t()); + MOCK_METHOD0(onTimeOut, void()); + MOCK_METHOD0(AllowedToTerminate, bool()); + MOCK_METHOD1(SetAllowedToTerminate, void(bool is_allowed)); + + MOCK_CONST_METHOD0(connection_key, uint32_t()); + MOCK_CONST_METHOD0(correlation_id, uint32_t()); +}; + +} // namespace application_manager_test +} // namespace components +} // namespace test + +#endif // SRC_COMPONENTS_APPLICATION_MANAGER_TEST_INCLUDE_APPLICATION_MANAGER_MOCK_REQUEST_H_ diff --git a/src/components/application_manager/test/request_controller/request_controller_test.cc b/src/components/application_manager/test/request_controller/request_controller_test.cc index d820921981..f93240aeae 100644 --- a/src/components/application_manager/test/request_controller/request_controller_test.cc +++ b/src/components/application_manager/test/request_controller/request_controller_test.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Ford Motor Company + * Copyright (c) 2017, Ford Motor Company * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -30,8 +30,11 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include <stdint.h> + #include "gtest/gtest.h" #include "application_manager/request_controller.h" +#include "application_manager/request_info.h" #include "application_manager/mock_request.h" #include "utils/shared_ptr.h" #include "smart_objects/smart_object.h" @@ -52,91 +55,147 @@ namespace test { namespace components { namespace request_controller_test { -using application_manager::request_controller::RequestController; -using application_manager::request_controller::RequestInfo; +using ::application_manager::request_controller::RequestController; +using ::application_manager::request_controller::RequestInfo; using ::testing::Return; using ::testing::ReturnRef; +using ::testing::NiceMock; -typedef utils::SharedPtr<application_manager_test::MockRequest> RequestPtr; +typedef NiceMock<application_manager_test::MockRequest> MRequest; +typedef utils::SharedPtr<MRequest> RequestPtr; typedef utils::SharedPtr<RequestController> RequestControllerSPtr; +namespace { +const size_t kNumberOfRequests = 10u; +const uint32_t kTimeScale = 5000u; // 5 seconds +const uint32_t kMaxRequestAmount = 2u; +const uint32_t kDefaultCorrelationID = 1u; +const uint32_t kDefaultConnectionKey = 0u; +const uint32_t kDefaultTimeout = 100u; +const uint32_t kThreadPoolSize = 1u; +} // namespace + class RequestControllerTestClass : public ::testing::Test { public: - RequestControllerTestClass() - : request_ctrl_(utils::MakeShared<RequestController>( - mock_request_controller_settings_)) { - register_request_ = GetMockRequest(); + struct TestSettings { + uint32_t app_hmi_level_none_requests_time_scale_; + uint32_t app_hmi_level_none_time_scale_max_requests_; + uint32_t app_time_scale_max_requests_; + uint32_t app_requests_time_scale_; + uint32_t pending_requests_amount_; + + TestSettings(const uint32_t app_hmi_level_none_requests_time_scale = 0u, + const uint32_t app_hmi_level_none_time_scale_max_requests = 0u, + const uint32_t app_time_scale_max_requests = 0u, + const uint32_t app_requests_time_scale = 0u, + const uint32_t pending_requests_amount = 0u) + : app_hmi_level_none_requests_time_scale_( + app_hmi_level_none_requests_time_scale) + , app_hmi_level_none_time_scale_max_requests_( + app_hmi_level_none_time_scale_max_requests) + , app_time_scale_max_requests_(app_time_scale_max_requests) + , app_requests_time_scale_(app_requests_time_scale) + , pending_requests_amount_(pending_requests_amount) {} + }; + + RequestControllerTestClass() { + ON_CALL(mock_request_controller_settings_, thread_pool_size()) + .WillByDefault(Return(kThreadPoolSize)); + request_ctrl_ = + utils::MakeShared<RequestController>(mock_request_controller_settings_); + } + + RequestPtr GetMockRequest( + const uint32_t correlation_id = kDefaultCorrelationID, + const uint32_t connection_key = kDefaultConnectionKey, + const uint32_t default_timeout = kDefaultTimeout) { + RequestPtr output = + utils::MakeShared<MRequest>(connection_key, correlation_id); + ON_CALL(*output, default_timeout()).WillByDefault(Return(default_timeout)); + return output; } RequestController::TResult AddRequest( - const RequestInfo::RequestType request_type, - const bool RegisterRequest = false, + const TestSettings& settings, + RequestPtr request, + const RequestInfo::RequestType request_type = + RequestInfo::RequestType::HMIRequest, const mobile_apis::HMILevel::eType& hmi_level = mobile_apis::HMILevel::INVALID_ENUM) { - RequestPtr request; - if (RegisterRequest) { - request = register_request_; - EXPECT_CALL(*register_request_, default_timeout()).WillOnce(Return(0)); - } else { - request = empty_register_request_; - } if (RequestInfo::RequestType::HMIRequest == request_type) { return request_ctrl_->addHMIRequest(request); } + CallSettings(settings); return request_ctrl_->addMobileRequest(request, hmi_level); } - RequestPtr GetMockRequest(const uint32_t id = 1, - const uint32_t connection_key = 0) { - return utils::MakeShared<application_manager_test::MockRequest>( - connection_key, id); - } - void CallSettings() { - EXPECT_CALL(mock_request_controller_settings_, - app_hmi_level_none_time_scale()) - .WillOnce(ReturnRef(kDefaultAppHmiLevelNoneRequestsTimeScale)); - EXPECT_CALL(mock_request_controller_settings_, - app_hmi_level_none_time_scale_max_requests()) - .WillOnce(ReturnRef(kDefaultAppHmiLevelNoneTimeScaleMaxRequests)); - - EXPECT_CALL(mock_request_controller_settings_, app_time_scale()) - .WillOnce(ReturnRef(kDefaultAppRequestsTimeScale)); - EXPECT_CALL(mock_request_controller_settings_, - app_time_scale_max_requests()) - .WillOnce(ReturnRef(kDefaultAppTimeScaleMaxRequests)); - - EXPECT_CALL(mock_request_controller_settings_, pending_requests_amount()) - .WillOnce(ReturnRef(kDefaultPendingRequestsAmount)); + void CallSettings(const TestSettings& settings) const { + ON_CALL(mock_request_controller_settings_, app_hmi_level_none_time_scale()) + .WillByDefault( + ReturnRef(settings.app_hmi_level_none_requests_time_scale_)); + + ON_CALL(mock_request_controller_settings_, + app_hmi_level_none_time_scale_max_requests()) + .WillByDefault( + ReturnRef(settings.app_hmi_level_none_time_scale_max_requests_)); + + ON_CALL(mock_request_controller_settings_, app_time_scale()) + .WillByDefault(ReturnRef(settings.app_requests_time_scale_)); + + ON_CALL(mock_request_controller_settings_, app_time_scale_max_requests()) + .WillByDefault(ReturnRef(settings.app_time_scale_max_requests_)); + + ON_CALL(mock_request_controller_settings_, pending_requests_amount()) + .WillByDefault(ReturnRef(settings.pending_requests_amount_)); } - application_manager_test::MockRequestControlerSettings + NiceMock<application_manager_test::MockRequestControlerSettings> mock_request_controller_settings_; - RequestPtr register_request_; - RequestPtr empty_register_request_; RequestControllerSPtr request_ctrl_; - - const uint32_t kDefaultAppHmiLevelNoneRequestsTimeScale = 10; - const uint32_t kDefaultAppHmiLevelNoneTimeScaleMaxRequests = 100u; - const uint32_t kDefaultAppTimeScaleMaxRequests = 0; - const uint32_t kDefaultAppRequestsTimeScale = 0; - const uint32_t kDefaultPendingRequestsAmount = 0; + RequestPtr empty_mock_request_; + const TestSettings default_settings_; }; -TEST_F(RequestControllerTestClass, CheckPosibilitytoAdd_HMI_FULL_SUCCESS) { - CallSettings(); - EXPECT_EQ(RequestController::TResult::SUCCESS, - AddRequest(RequestInfo::RequestType::MobileRequest, - true, - mobile_apis::HMILevel::HMI_FULL)); +TEST_F(RequestControllerTestClass, + CheckPosibilitytoAdd_ZeroValueLimiters_SUCCESS) { + // Test case than pending_requests_amount, + // app_time_scale_max_requests_ and + // app_hmi_level_none_time_scale_max_requests_ equals 0 + // (in the default settings they setted to 0) + for (size_t i = 0; i < kMaxRequestAmount; ++i) { + EXPECT_EQ(RequestController::SUCCESS, + AddRequest(default_settings_, + GetMockRequest(i), + RequestInfo::RequestType::MobileRequest, + mobile_apis::HMILevel::HMI_FULL)); + } } -TEST_F(RequestControllerTestClass, CheckPosibilitytoAdd_HMI_NONE_SUCCESS) { - CallSettings(); - EXPECT_EQ(RequestController::TResult::SUCCESS, - AddRequest(RequestInfo::RequestType::MobileRequest, - true, - mobile_apis::HMILevel::HMI_NONE)); +TEST_F( + RequestControllerTestClass, + CheckPosibilitytoAdd_ExcessPendingRequestsAmount_TooManyPendingRequests) { + TestSettings settings; + settings.pending_requests_amount_ = kNumberOfRequests; + + request_ctrl_->DestroyThreadpool(); + + // Adding requests to fit in pending_requests_amount_ + for (size_t i = 0; i < kNumberOfRequests; ++i) { + EXPECT_EQ(RequestController::TResult::SUCCESS, + AddRequest(settings, + GetMockRequest(), + RequestInfo::RequestType::MobileRequest, + mobile_apis::HMILevel::HMI_FULL)); + } + + // Trying to add one more extra request + // Expect overflow and TOO_MANY_PENDING_REQUESTS result + EXPECT_EQ(RequestController::TResult::TOO_MANY_PENDING_REQUESTS, + AddRequest(settings, + GetMockRequest(), + RequestInfo::RequestType::MobileRequest, + mobile_apis::HMILevel::HMI_FULL)); } TEST_F(RequestControllerTestClass, IsLowVoltage_SetOnLowVoltage_TRUE) { @@ -151,34 +210,51 @@ TEST_F(RequestControllerTestClass, IsLowVoltage_SetOnWakeUp_FALSE) { EXPECT_EQ(result, request_ctrl_->IsLowVoltage()); } +TEST_F(RequestControllerTestClass, AddMobileRequest_SetValidData_SUCCESS) { + EXPECT_EQ(RequestController::SUCCESS, + AddRequest(default_settings_, + GetMockRequest(), + RequestInfo::RequestType::MobileRequest, + mobile_apis::HMILevel::HMI_FULL)); +} + TEST_F(RequestControllerTestClass, AddMobileRequest_SetInvalidData_INVALID_DATA) { EXPECT_EQ(RequestController::INVALID_DATA, - AddRequest(RequestInfo::RequestType::MobileRequest, - false, + AddRequest(default_settings_, + empty_mock_request_, + RequestInfo::RequestType::MobileRequest, mobile_apis::HMILevel::HMI_NONE)); } -TEST_F(RequestControllerTestClass, addHMIRequest_AddRequest_SUCCESS) { +TEST_F(RequestControllerTestClass, AddHMIRequest_AddRequest_SUCCESS) { EXPECT_EQ(RequestController::SUCCESS, - AddRequest(RequestInfo::RequestType::HMIRequest, true)); + AddRequest(default_settings_, + GetMockRequest(), + RequestInfo::RequestType::HMIRequest)); } -TEST_F(RequestControllerTestClass, addHMIRequest_AddInvalidData_INVALID_DATA) { +TEST_F(RequestControllerTestClass, AddHMIRequest_AddInvalidData_INVALID_DATA) { EXPECT_EQ(RequestController::INVALID_DATA, - AddRequest(RequestInfo::RequestType::HMIRequest)); + AddRequest(default_settings_, + empty_mock_request_, + RequestInfo::RequestType::HMIRequest)); } -TEST_F(RequestControllerTestClass, ZeroValuePendingRequestsAmount) { - // Bigger than pending_requests_amount count - const uint32_t big_count_of_requests_for_test_ = 10; - for (uint32_t i = 0; i < big_count_of_requests_for_test_; ++i) { - CallSettings(); - EXPECT_EQ(RequestController::SUCCESS, - AddRequest(RequestInfo::RequestType::MobileRequest, - true, - mobile_apis::HMILevel::HMI_FULL)); - } +TEST_F(RequestControllerTestClass, OnTimer_SUCCESS) { + const uint32_t request_timeout = 1u; + RequestPtr mock_request = GetMockRequest( + kDefaultCorrelationID, kDefaultConnectionKey, request_timeout); + + EXPECT_EQ(RequestController::SUCCESS, + AddRequest(default_settings_, + mock_request, + RequestInfo::RequestType::MobileRequest)); + + EXPECT_CALL(*mock_request, onTimeOut()); + + // Waiting for call of `onTimeOut` for `kTimeScale` seconds + testing::Mock::AsyncVerifyAndClearExpectations(kTimeScale); } } // namespace request_controller_test diff --git a/src/components/application_manager/test/request_info_test.cc b/src/components/application_manager/test/request_info_test.cc index 62d9897a18..11b2d2f259 100644 --- a/src/components/application_manager/test/request_info_test.cc +++ b/src/components/application_manager/test/request_info_test.cc @@ -31,6 +31,7 @@ */ #include "application_manager/request_info.h" +#include "application_manager/mock_request.h" #include <iostream> #include <vector> #include <limits> @@ -44,30 +45,6 @@ namespace test { namespace components { namespace application_manager_test { -class MockRequest : public application_manager::commands::Command { - public: - MockRequest(uint32_t connection_key, uint32_t correlation_id) - : connection_key_(connection_key), correlation_id_(correlation_id) {} - MOCK_METHOD0(CheckPermissions, bool()); - MOCK_METHOD0(Init, bool()); - MOCK_METHOD0(Run, void()); - MOCK_METHOD0(CleanUp, bool()); - MOCK_CONST_METHOD0(default_timeout, uint32_t()); - MOCK_CONST_METHOD0(function_id, int32_t()); - MOCK_METHOD0(onTimeOut, void()); - MOCK_METHOD0(AllowedToTerminate, bool()); - MOCK_METHOD1(SetAllowedToTerminate, void(bool)); - - uint32_t connection_key_; - uint32_t correlation_id_; - virtual uint32_t connection_key() const { - return connection_key_; - } - virtual uint32_t correlation_id() const { - return correlation_id_; - } -}; - class TestRequestInfo : public request_info::RequestInfo { public: TestRequestInfo(request_info::RequestPtr request, 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 14f6cf58cd..386e81d4ba 100644 --- a/src/components/application_manager/test/resumption/resume_ctrl_test.cc +++ b/src/components/application_manager/test/resumption/resume_ctrl_test.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Ford Motor Company + * Copyright (c) 2017, Ford Motor Company * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -61,6 +61,7 @@ using ::testing::SetArgReferee; using ::testing::Mock; using ::testing::NiceMock; using ::testing::AtLeast; +using ::testing::Eq; using namespace application_manager_test; using namespace resumption; @@ -77,17 +78,21 @@ class ResumeCtrlTest : public ::testing::Test { , kTestDevId_(5u) , kTestGrammarId_(10) , kHash_("saved_hash") - , kAppResumingTimeout_(30000000u) {} + , kAppResumingTimeout_(30000u) // miliseconds + , kTestTimeStamp_(1452074434u) {} virtual void SetUp() OVERRIDE { + Mock::VerifyAndClearExpectations(&app_mngr_); ON_CALL(app_mngr_, event_dispatcher()) .WillByDefault(ReturnRef(mock_event_dispatcher_)); - mock_storage = + mock_storage_ = ::utils::MakeShared<NiceMock<resumption_test::MockResumptionData> >( app_mngr_); - app_mock = utils::MakeShared<NiceMock<MockApplication> >(); - res_ctrl = utils::MakeShared<ResumeCtrlImpl>(app_mngr_); - res_ctrl->set_resumption_storage(mock_storage); + app_mock_ = utils::MakeShared<NiceMock<MockApplication> >(); + const_app_ = + static_cast<application_manager::ApplicationConstSharedPtr>(app_mock_); + res_ctrl_ = utils::MakeShared<ResumeCtrlImpl>(app_mngr_); + res_ctrl_->set_resumption_storage(mock_storage_); ON_CALL(app_mngr_, state_controller()) .WillByDefault(ReturnRef(state_controller_)); @@ -99,12 +104,15 @@ class ResumeCtrlTest : public ::testing::Test { ON_CALL(mock_application_manager_settings_, app_resuming_timeout()) .WillByDefault(ReturnRef(kAppResumingTimeout_)); } + void TearDown() OVERRIDE { + Mock::VerifyAndClearExpectations(&app_mngr_); + } void GetInfoFromApp() { - ON_CALL(*app_mock, policy_app_id()) + ON_CALL(*app_mock_, policy_app_id()) .WillByDefault(Return(kTestPolicyAppId_)); - ON_CALL(*app_mock, mac_address()).WillByDefault(ReturnRef(kMacAddress_)); - ON_CALL(*app_mock, device()).WillByDefault(Return(kTestDevId_)); - ON_CALL(*app_mock, app_id()).WillByDefault(Return(kTestAppId_)); + ON_CALL(*app_mock_, mac_address()).WillByDefault(ReturnRef(kMacAddress_)); + ON_CALL(*app_mock_, device()).WillByDefault(Return(kTestDevId_)); + ON_CALL(*app_mock_, app_id()).WillByDefault(Return(kTestAppId_)); } NiceMock<event_engine_test::MockEventDispatcher> mock_event_dispatcher_; @@ -112,20 +120,22 @@ class ResumeCtrlTest : public ::testing::Test { mock_application_manager_settings_; application_manager_test::MockApplicationManager app_mngr_; MockStateController state_controller_; - utils::SharedPtr<ResumeCtrl> res_ctrl; - utils::SharedPtr<NiceMock<resumption_test::MockResumptionData> > mock_storage; - utils::SharedPtr<NiceMock<MockApplication> > app_mock; - // app_mock.app_id() will return this value + utils::SharedPtr<ResumeCtrl> res_ctrl_; + utils::SharedPtr<NiceMock<resumption_test::MockResumptionData> > + mock_storage_; + utils::SharedPtr<NiceMock<MockApplication> > app_mock_; + application_manager::ApplicationConstSharedPtr const_app_; const uint32_t kTestAppId_; const std::string kTestPolicyAppId_; const std::string kMacAddress_; const mobile_apis::HMILevel::eType kDefaultTestLevel_; const uint32_t kCorId_; - // app_mock.Device() will return this value const uint32_t kTestDevId_; const uint32_t kTestGrammarId_; const std::string kHash_; const uint32_t kAppResumingTimeout_; + const uint32_t kTestTimeStamp_; + sync_primitives::Lock app_set_lock_; }; /** @@ -139,15 +149,16 @@ TEST_F(ResumeCtrlTest, StartResumption_AppWithGrammarId) { // Check RestoreApplicationData GetInfoFromApp(); - EXPECT_CALL(app_mngr_, GetDefaultHmiLevel(_)) - .WillRepeatedly(Return(kDefaultTestLevel_)); - EXPECT_CALL(*mock_storage, - GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) - .WillRepeatedly(DoAll(SetArgReferee<2>(saved_app), Return(true))); - EXPECT_CALL(*app_mock, UpdateHash()); - EXPECT_CALL(*app_mock, set_grammar_id(kTestGrammarId_)); - - bool res = res_ctrl->StartResumption(app_mock, kHash_); + + ON_CALL(app_mngr_, GetDefaultHmiLevel(const_app_)) + .WillByDefault(Return(kDefaultTestLevel_)); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); + EXPECT_CALL(*app_mock_, UpdateHash()); + EXPECT_CALL(*app_mock_, set_grammar_id(kTestGrammarId_)); + + const bool res = res_ctrl_->StartResumption(app_mock_, kHash_); EXPECT_TRUE(res); } @@ -163,15 +174,16 @@ TEST_F(ResumeCtrlTest, StartResumption_WithoutGrammarId) { saved_app[application_manager::strings::hash_id] = kHash_; GetInfoFromApp(); - EXPECT_CALL(app_mngr_, GetDefaultHmiLevel(_)) - .WillRepeatedly(Return(kDefaultTestLevel_)); + ON_CALL(app_mngr_, GetDefaultHmiLevel(const_app_)) + .WillByDefault(Return(kDefaultTestLevel_)); // Check RestoreApplicationData - EXPECT_CALL(*mock_storage, GetSavedApplication(_, _, _)) - .WillRepeatedly(DoAll(SetArgReferee<2>(saved_app), Return(true))); - EXPECT_CALL(*app_mock, UpdateHash()); - EXPECT_CALL(*app_mock, set_grammar_id(kTestGrammarId_)).Times(0); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); + EXPECT_CALL(*app_mock_, UpdateHash()); + EXPECT_CALL(*app_mock_, set_grammar_id(kTestGrammarId_)).Times(0); - bool res = res_ctrl->StartResumption(app_mock, kHash_); + bool res = res_ctrl_->StartResumption(app_mock_, kHash_); EXPECT_FALSE(res); } @@ -210,14 +222,15 @@ TEST_F(ResumeCtrlTest, StartResumption_AppWithFiles) { test_application_files; // Check RestoreApplicationData - EXPECT_CALL(app_mngr_, GetDefaultHmiLevel(_)) - .WillRepeatedly(Return(kDefaultTestLevel_)); - EXPECT_CALL(*mock_storage, GetSavedApplication(_, _, _)) - .WillRepeatedly(DoAll(SetArgReferee<2>(saved_app), Return(true))); - EXPECT_CALL(*app_mock, UpdateHash()); - EXPECT_CALL(*app_mock, set_grammar_id(kTestGrammarId_)); + ON_CALL(app_mngr_, GetDefaultHmiLevel(const_app_)) + .WillByDefault(Return(kDefaultTestLevel_)); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); + EXPECT_CALL(*app_mock_, UpdateHash()); + EXPECT_CALL(*app_mock_, set_grammar_id(kTestGrammarId_)); for (uint32_t i = 0; i < count_of_files; ++i) { - EXPECT_CALL(*app_mock, + EXPECT_CALL(*app_mock_, AddFile(CheckAppFile( true, true, @@ -225,7 +238,7 @@ TEST_F(ResumeCtrlTest, StartResumption_AppWithFiles) { static_cast<mobile_apis::FileType::eType>(file_types[i])))); } - bool res = res_ctrl->StartResumption(app_mock, kHash_); + const bool res = res_ctrl_->StartResumption(app_mock_, kHash_); EXPECT_TRUE(res); } @@ -247,15 +260,16 @@ TEST_F(ResumeCtrlTest, StartResumption_AppWithSubmenues) { test_application_submenues; // Check RestoreApplicationData - EXPECT_CALL(app_mngr_, GetDefaultHmiLevel(_)) - .WillRepeatedly(Return(kDefaultTestLevel_)); - EXPECT_CALL(*mock_storage, GetSavedApplication(_, _, _)) - .WillRepeatedly(DoAll(SetArgReferee<2>(saved_app), Return(true))); + ON_CALL(app_mngr_, GetDefaultHmiLevel(const_app_)) + .WillByDefault(Return(kDefaultTestLevel_)); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); - EXPECT_CALL(*app_mock, set_grammar_id(kTestGrammarId_)); + EXPECT_CALL(*app_mock_, set_grammar_id(kTestGrammarId_)); for (uint32_t i = 0; i < count_of_submenues; ++i) { - EXPECT_CALL(*app_mock, AddSubMenu(i, test_application_submenues[i])); + EXPECT_CALL(*app_mock_, AddSubMenu(i, test_application_submenues[i])); } smart_objects::SmartObjectList requests; @@ -265,8 +279,8 @@ TEST_F(ResumeCtrlTest, StartResumption_AppWithSubmenues) { CreateAddSubMenuRequestToHMI(_, kCorId_)) .WillRepeatedly(Return(requests)); - EXPECT_CALL(*app_mock, UpdateHash()); - bool res = res_ctrl->StartResumption(app_mock, kHash_); + EXPECT_CALL(*app_mock_, UpdateHash()); + const bool res = res_ctrl_->StartResumption(app_mock_, kHash_); EXPECT_TRUE(res); } @@ -287,16 +301,17 @@ TEST_F(ResumeCtrlTest, StartResumption_AppWithCommands) { saved_app[application_manager::strings::application_commands] = test_application_commands; - EXPECT_CALL(app_mngr_, GetDefaultHmiLevel(_)) - .WillRepeatedly(Return(kDefaultTestLevel_)); + ON_CALL(app_mngr_, GetDefaultHmiLevel(const_app_)) + .WillByDefault(Return(kDefaultTestLevel_)); // Check RestoreApplicationData - EXPECT_CALL(*mock_storage, GetSavedApplication(_, _, _)) - .WillRepeatedly(DoAll(SetArgReferee<2>(saved_app), Return(true))); - EXPECT_CALL(*app_mock, UpdateHash()); - EXPECT_CALL(*app_mock, set_grammar_id(kTestGrammarId_)); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); + EXPECT_CALL(*app_mock_, UpdateHash()); + EXPECT_CALL(*app_mock_, set_grammar_id(kTestGrammarId_)); for (uint32_t i = 0; i < count_of_commands; ++i) { - EXPECT_CALL(*app_mock, AddCommand(i, test_application_commands[i])); + EXPECT_CALL(*app_mock_, AddCommand(i, test_application_commands[i])); } smart_objects::SmartObjectList requests; @@ -304,7 +319,7 @@ TEST_F(ResumeCtrlTest, StartResumption_AppWithCommands) { CreateAddCommandRequestToHMI(_, _)) .WillRepeatedly(Return(requests)); - bool res = res_ctrl->StartResumption(app_mock, kHash_); + const bool res = res_ctrl_->StartResumption(app_mock_, kHash_); EXPECT_TRUE(res); } @@ -338,16 +353,17 @@ TEST_F(ResumeCtrlTest, StartResumption_AppWithChoiceSet) { application_choice_sets; // Check RestoreApplicationData - EXPECT_CALL(app_mngr_, GetDefaultHmiLevel(_)) - .WillRepeatedly(Return(kDefaultTestLevel_)); + ON_CALL(app_mngr_, GetDefaultHmiLevel(const_app_)) + .WillByDefault(Return(kDefaultTestLevel_)); GetInfoFromApp(); - EXPECT_CALL(*mock_storage, GetSavedApplication(_, _, _)) - .WillRepeatedly(DoAll(SetArgReferee<2>(saved_app), Return(true))); - EXPECT_CALL(*app_mock, UpdateHash()); - EXPECT_CALL(*app_mock, set_grammar_id(kTestGrammarId_)); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); + EXPECT_CALL(*app_mock_, UpdateHash()); + EXPECT_CALL(*app_mock_, set_grammar_id(kTestGrammarId_)); for (uint32_t i = 0; i < count_of_choice_sets; ++i) { - EXPECT_CALL(*app_mock, AddChoiceSet(i, application_choice_sets[i])); + EXPECT_CALL(*app_mock_, AddChoiceSet(i, application_choice_sets[i])); } smart_objects::SmartObjectList requests; @@ -355,7 +371,7 @@ TEST_F(ResumeCtrlTest, StartResumption_AppWithChoiceSet) { CreateAddVRCommandRequestFromChoiceToHMI(_)) .WillRepeatedly(Return(requests)); - bool res = res_ctrl->StartResumption(app_mock, kHash_); + const bool res = res_ctrl_->StartResumption(app_mock_, kHash_); EXPECT_TRUE(res); } @@ -369,21 +385,22 @@ TEST_F(ResumeCtrlTest, StartResumption_AppWithGlobalProperties) { test_global_properties; // Check RestoreApplicationData - EXPECT_CALL(app_mngr_, GetDefaultHmiLevel(_)) - .WillRepeatedly(Return(kDefaultTestLevel_)); + ON_CALL(app_mngr_, GetDefaultHmiLevel(const_app_)) + .WillByDefault(Return(kDefaultTestLevel_)); GetInfoFromApp(); - EXPECT_CALL(*mock_storage, GetSavedApplication(_, _, _)) - .WillRepeatedly(DoAll(SetArgReferee<2>(saved_app), Return(true))); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); - EXPECT_CALL(*app_mock, set_grammar_id(kTestGrammarId_)); + EXPECT_CALL(*app_mock_, set_grammar_id(kTestGrammarId_)); EXPECT_CALL(*application_manager::MockMessageHelper::message_helper_mock(), SendGlobalPropertiesToHMI(_)); - EXPECT_CALL(*app_mock, load_global_properties(test_global_properties)); + EXPECT_CALL(*app_mock_, load_global_properties(test_global_properties)); - EXPECT_CALL(*app_mock, UpdateHash()); - bool res = res_ctrl->StartResumption(app_mock, kHash_); + EXPECT_CALL(*app_mock_, UpdateHash()); + const bool res = res_ctrl_->StartResumption(app_mock_, kHash_); EXPECT_TRUE(res); } @@ -407,25 +424,26 @@ TEST_F(ResumeCtrlTest, StartResumption_AppWithSubscribeOnButtons) { test_subscriptions; // Check RestoreApplicationData - EXPECT_CALL(app_mngr_, GetDefaultHmiLevel(_)) - .WillRepeatedly(Return(kDefaultTestLevel_)); + ON_CALL(app_mngr_, GetDefaultHmiLevel(const_app_)) + .WillByDefault(Return(kDefaultTestLevel_)); GetInfoFromApp(); - EXPECT_CALL(*mock_storage, GetSavedApplication(_, _, _)) - .WillRepeatedly(DoAll(SetArgReferee<2>(saved_app), Return(true))); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); - EXPECT_CALL(*app_mock, set_grammar_id(kTestGrammarId_)); + EXPECT_CALL(*app_mock_, set_grammar_id(kTestGrammarId_)); for (uint32_t i = 0; i < count_of_buttons; ++i) { EXPECT_CALL( - *app_mock, + *app_mock_, SubscribeToButton(static_cast<mobile_apis::ButtonName::eType>(i))); } - EXPECT_CALL(*app_mock, UpdateHash()); + EXPECT_CALL(*app_mock_, UpdateHash()); EXPECT_CALL(*application_manager::MockMessageHelper::message_helper_mock(), SendAllOnButtonSubscriptionNotificationsForApp(_, _)).Times(2); - bool res = res_ctrl->StartResumption(app_mock, kHash_); + const bool res = res_ctrl_->StartResumption(app_mock_, kHash_); EXPECT_TRUE(res); } @@ -451,17 +469,18 @@ TEST_F(ResumeCtrlTest, StartResumption_AppWithSubscriptionToIVI) { test_subscriptions; // Check RestoreApplicationData - EXPECT_CALL(app_mngr_, GetDefaultHmiLevel(_)) - .WillRepeatedly(Return(kDefaultTestLevel_)); + ON_CALL(app_mngr_, GetDefaultHmiLevel(const_app_)) + .WillByDefault(Return(kDefaultTestLevel_)); GetInfoFromApp(); - EXPECT_CALL(*mock_storage, GetSavedApplication(_, _, _)) - .WillRepeatedly(DoAll(SetArgReferee<2>(saved_app), Return(true))); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); - EXPECT_CALL(*app_mock, set_grammar_id(kTestGrammarId_)); + EXPECT_CALL(*app_mock_, set_grammar_id(kTestGrammarId_)); for (size_t i = 0; i < app_vi.length(); ++i) { EXPECT_CALL( - *app_mock, + *app_mock_, SubscribeToIVI(static_cast<application_manager::VehicleDataType>(i))); } @@ -469,20 +488,44 @@ TEST_F(ResumeCtrlTest, StartResumption_AppWithSubscriptionToIVI) { EXPECT_CALL(*application_manager::MockMessageHelper::message_helper_mock(), GetIVISubscriptionRequests(_)).WillRepeatedly(Return(requests)); - EXPECT_CALL(*app_mock, UpdateHash()); - bool res = res_ctrl->StartResumption(app_mock, kHash_); + EXPECT_CALL(*app_mock_, UpdateHash()); + const bool res = res_ctrl_->StartResumption(app_mock_, kHash_); EXPECT_TRUE(res); } +TEST_F(ResumeCtrlTest, StartResumption_AppWithSubscriptionToWayPoints) { + smart_objects::SmartObject saved_app; + saved_app[application_manager::strings::hash_id] = kHash_; + saved_app[application_manager::strings::grammar_id] = kTestGrammarId_; + saved_app[application_manager::strings::subscribed_for_way_points] = true; + saved_app[application_manager::strings::time_stamp] = kTestTimeStamp_; + + GetInfoFromApp(); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); + EXPECT_CALL(*app_mock_, set_grammar_id(kTestGrammarId_)); + EXPECT_CALL(app_mngr_, SubscribeAppForWayPoints(_)); + const mobile_apis::HMILevel::eType hmi_test_level = + mobile_apis::HMILevel::HMI_FULL; + ON_CALL(app_mngr_, GetDefaultHmiLevel(const_app_)) + .WillByDefault(Return(hmi_test_level)); + EXPECT_CALL(state_controller_, SetRegularState(_, hmi_test_level)); + + const bool result = res_ctrl_->StartResumption(app_mock_, kHash_); + EXPECT_TRUE(result); +} + TEST_F(ResumeCtrlTest, StartResumptionOnlyHMILevel) { smart_objects::SmartObject saved_app; - EXPECT_CALL(app_mngr_, GetDefaultHmiLevel(_)) - .WillOnce(Return(kDefaultTestLevel_)); + ON_CALL(app_mngr_, GetDefaultHmiLevel(const_app_)) + .WillByDefault(Return(kDefaultTestLevel_)); GetInfoFromApp(); - EXPECT_CALL(*mock_storage, GetSavedApplication(kTestPolicyAppId_, _, _)) - .WillOnce(DoAll(SetArgReferee<2>(saved_app), Return(true))); - bool res = res_ctrl->StartResumptionOnlyHMILevel(app_mock); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); + const bool res = res_ctrl_->StartResumptionOnlyHMILevel(app_mock_); EXPECT_TRUE(res); } @@ -496,15 +539,17 @@ TEST_F(ResumeCtrlTest, StartAppHmiStateResumption_AppInFull) { EXPECT_CALL(state_controller_, SetRegularState(_, restored_test_type)) .Times(AtLeast(1)); GetInfoFromApp(); - EXPECT_CALL(*mock_storage, GetSavedApplication(kTestPolicyAppId_, _, _)) - .WillRepeatedly(DoAll(SetArgReferee<2>(saved_app), Return(true))); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); - EXPECT_CALL(*mock_storage, RemoveApplicationFromSaved(_, _)) + EXPECT_CALL(*mock_storage_, + RemoveApplicationFromSaved(kTestPolicyAppId_, kMacAddress_)) .WillOnce(Return(true)); - EXPECT_CALL(app_mngr_, GetUserConsentForDevice("12345")) - .WillRepeatedly(Return(policy::kDeviceAllowed)); - res_ctrl->StartAppHmiStateResumption(app_mock); + ON_CALL(app_mngr_, GetUserConsentForDevice("12345")) + .WillByDefault(Return(policy::kDeviceAllowed)); + res_ctrl_->StartAppHmiStateResumption(app_mock_); } TEST_F(ResumeCtrlTest, StartAppHmiStateResumption_AppInBackground) { @@ -517,10 +562,11 @@ TEST_F(ResumeCtrlTest, StartAppHmiStateResumption_AppInBackground) { EXPECT_CALL(app_mngr_, state_controller()).Times(0); GetInfoFromApp(); - EXPECT_CALL(*mock_storage, GetSavedApplication(kTestPolicyAppId_, _, _)) - .WillRepeatedly(DoAll(SetArgReferee<2>(saved_app), Return(true))); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); - res_ctrl->StartAppHmiStateResumption(app_mock); + res_ctrl_->StartAppHmiStateResumption(app_mock_); } /** @@ -538,14 +584,15 @@ TEST_F(ResumeCtrlTest, RestoreAppHMIState_RestoreHMILevelFull) { EXPECT_CALL(state_controller_, SetRegularState(_, restored_test_type)) .Times(AtLeast(1)); GetInfoFromApp(); - EXPECT_CALL(*mock_storage, GetSavedApplication(_, _, _)) - .WillOnce(DoAll(SetArgReferee<2>(saved_app), Return(true))); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); - EXPECT_CALL(app_mngr_, GetUserConsentForDevice("12345")) - .WillOnce(Return(policy::kDeviceAllowed)); - EXPECT_CALL(*app_mock, set_is_resuming(true)); + ON_CALL(app_mngr_, GetUserConsentForDevice("12345")) + .WillByDefault(Return(policy::kDeviceAllowed)); + EXPECT_CALL(*app_mock_, set_is_resuming(true)); - bool res = res_ctrl->RestoreAppHMIState(app_mock); + const bool res = res_ctrl_->RestoreAppHMIState(app_mock_); EXPECT_TRUE(res); } @@ -554,18 +601,46 @@ TEST_F(ResumeCtrlTest, SetupDefaultHMILevel) { saved_app[application_manager::strings::hmi_level] = kDefaultTestLevel_; - EXPECT_CALL(app_mngr_, GetDefaultHmiLevel(_)) - .WillRepeatedly(Return(kDefaultTestLevel_)); + ON_CALL(app_mngr_, GetDefaultHmiLevel(const_app_)) + .WillByDefault(Return(kDefaultTestLevel_)); GetInfoFromApp(); EXPECT_CALL(app_mngr_, GetUserConsentForDevice("12345")).Times(0); - EXPECT_CALL(app_mngr_, GetDefaultHmiLevel(_)) - .WillOnce(Return(kDefaultTestLevel_)); + ON_CALL(app_mngr_, GetDefaultHmiLevel(const_app_)) + .WillByDefault(Return(kDefaultTestLevel_)); EXPECT_CALL(state_controller_, SetRegularState(_, kDefaultTestLevel_)) .Times(AtLeast(1)); - res_ctrl->SetupDefaultHMILevel(app_mock); + res_ctrl_->SetupDefaultHMILevel(app_mock_); +} + +TEST_F(ResumeCtrlTest, ApplicationResumptiOnTimer_AppInFull) { + ON_CALL(app_mngr_, application(kTestAppId_)).WillByDefault(Return(app_mock_)); + + mobile_apis::HMILevel::eType restored_test_type = eType::HMI_FULL; + const uint32_t ign_off_count = 0u; + smart_objects::SmartObject saved_app; + saved_app[application_manager::strings::ign_off_count] = ign_off_count; + saved_app[application_manager::strings::hmi_level] = restored_test_type; + + MockStateController state_controller; + EXPECT_CALL(app_mngr_, state_controller()) + .WillOnce(ReturnRef(state_controller)); + EXPECT_CALL(state_controller, SetRegularState(_, restored_test_type)) + .Times(AtLeast(1)); + GetInfoFromApp(); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); + + EXPECT_CALL(*mock_storage_, + RemoveApplicationFromSaved(kTestPolicyAppId_, kMacAddress_)) + .WillOnce(Return(true)); + + ON_CALL(app_mngr_, GetUserConsentForDevice(kMacAddress_)) + .WillByDefault(Return(policy::kDeviceAllowed)); + res_ctrl_->StartAppHmiStateResumption(app_mock_); } /** @@ -577,10 +652,10 @@ TEST_F(ResumeCtrlTest, SetAppHMIState_HMINone_WithoutCheckPolicy) { EXPECT_CALL(app_mngr_, GetUserConsentForDevice("12345")).Times(0); - EXPECT_CALL(*app_mock, set_is_resuming(true)); + EXPECT_CALL(*app_mock_, set_is_resuming(true)); EXPECT_CALL(state_controller_, SetRegularState(_, kDefaultTestLevel_)) .Times(AtLeast(1)); - bool res = res_ctrl->SetAppHMIState(app_mock, kDefaultTestLevel_, false); + const bool res = res_ctrl_->SetAppHMIState(app_mock_, kDefaultTestLevel_, false); EXPECT_TRUE(res); } @@ -589,10 +664,10 @@ TEST_F(ResumeCtrlTest, SetAppHMIState_HMILimited_WithoutCheckPolicy) { GetInfoFromApp(); EXPECT_CALL(app_mngr_, GetUserConsentForDevice("12345")).Times(0); - EXPECT_CALL(*app_mock, set_is_resuming(true)); + EXPECT_CALL(*app_mock_, set_is_resuming(true)); EXPECT_CALL(state_controller_, SetRegularState(_, test_type)) .Times(AtLeast(1)); - bool res = res_ctrl->SetAppHMIState(app_mock, test_type, false); + const bool res = res_ctrl_->SetAppHMIState(app_mock_, test_type, false); EXPECT_TRUE(res); } @@ -600,14 +675,14 @@ TEST_F(ResumeCtrlTest, SetAppHMIState_HMIFull_WithoutCheckPolicy) { mobile_apis::HMILevel::eType test_type = eType::HMI_FULL; GetInfoFromApp(); // GetDefaultHmiLevel should not be called - EXPECT_CALL(app_mngr_, GetDefaultHmiLevel(_)).Times(0); + EXPECT_CALL(app_mngr_, GetDefaultHmiLevel(const_app_)).Times(0); EXPECT_CALL(app_mngr_, GetUserConsentForDevice("12345")).Times(0); - EXPECT_CALL(*app_mock, set_is_resuming(true)); + EXPECT_CALL(*app_mock_, set_is_resuming(true)); EXPECT_CALL(state_controller_, SetRegularState(_, test_type)) .Times(AtLeast(1)); - bool res = res_ctrl->SetAppHMIState(app_mock, test_type, false); + const bool res = res_ctrl_->SetAppHMIState(app_mock_, test_type, false); EXPECT_TRUE(res); } @@ -615,14 +690,14 @@ TEST_F(ResumeCtrlTest, SetAppHMIState_HMIFull_WithPolicy_DevAllowed) { mobile_apis::HMILevel::eType test_type = eType::HMI_FULL; GetInfoFromApp(); - EXPECT_CALL(app_mngr_, GetUserConsentForDevice("12345")) - .WillOnce(Return(policy::kDeviceAllowed)); + ON_CALL(app_mngr_, GetUserConsentForDevice("12345")) + .WillByDefault(Return(policy::kDeviceAllowed)); - EXPECT_CALL(*app_mock, set_is_resuming(true)); + EXPECT_CALL(*app_mock_, set_is_resuming(true)); EXPECT_CALL(state_controller_, SetRegularState(_, test_type)) .Times(AtLeast(1)); - bool res = res_ctrl->SetAppHMIState(app_mock, test_type, true); + const bool res = res_ctrl_->SetAppHMIState(app_mock_, test_type, true); EXPECT_TRUE(res); } @@ -630,78 +705,124 @@ TEST_F(ResumeCtrlTest, SetAppHMIState_HMIFull_WithPolicy_DevDisallowed) { mobile_apis::HMILevel::eType test_type = eType::HMI_FULL; GetInfoFromApp(); - EXPECT_CALL(app_mngr_, GetUserConsentForDevice("12345")) - .WillOnce(Return(policy::kDeviceDisallowed)); + ON_CALL(app_mngr_, GetUserConsentForDevice("12345")) + .WillByDefault(Return(policy::kDeviceDisallowed)); - EXPECT_CALL(*app_mock, set_is_resuming(true)); - EXPECT_CALL(app_mngr_, GetDefaultHmiLevel(_)) - .WillOnce(Return(kDefaultTestLevel_)); + EXPECT_CALL(*app_mock_, set_is_resuming(true)); + ON_CALL(app_mngr_, GetDefaultHmiLevel(const_app_)) + .WillByDefault(Return(kDefaultTestLevel_)); EXPECT_CALL(state_controller_, SetRegularState(_, kDefaultTestLevel_)) .Times(AtLeast(1)); - bool res = res_ctrl->SetAppHMIState(app_mock, test_type, true); + const bool res = res_ctrl_->SetAppHMIState(app_mock_, test_type, true); EXPECT_FALSE(res); } +TEST_F(ResumeCtrlTest, SaveAllApplications) { + utils::SharedPtr<application_manager_test::MockApplication> test_app = + ::utils::MakeShared<application_manager_test::MockApplication>(); + EXPECT_CALL(*test_app, app_id()).WillRepeatedly(Return(kTestAppId_)); + + application_manager::ApplicationSet app_set; + app_set.insert(test_app); + + DataAccessor<application_manager::ApplicationSet> accessor(app_set, + app_set_lock_); + + ON_CALL(app_mngr_, applications()).WillByDefault(Return(accessor)); + EXPECT_CALL(*mock_storage_, SaveApplication(Eq(test_app))); + res_ctrl_->SaveAllApplications(); +} + +TEST_F(ResumeCtrlTest, SaveAllApplications_EmptyApplicationlist) { + utils::SharedPtr<application_manager::Application> mock_app = + ::utils::MakeShared<application_manager_test::MockApplication>(); + + application_manager::ApplicationSet app_set; + + DataAccessor<application_manager::ApplicationSet> accessor(app_set, + app_set_lock_); + + ON_CALL(app_mngr_, applications()).WillByDefault(Return(accessor)); + EXPECT_CALL(*mock_storage_, SaveApplication(mock_app)).Times(0); + res_ctrl_->SaveAllApplications(); +} + TEST_F(ResumeCtrlTest, SaveApplication) { utils::SharedPtr<application_manager::Application> app_sh_mock = ::utils::MakeShared<application_manager_test::MockApplication>(); - EXPECT_CALL(*mock_storage, SaveApplication(app_sh_mock)); - res_ctrl->SaveApplication(app_sh_mock); + EXPECT_CALL(*mock_storage_, SaveApplication(app_sh_mock)); + res_ctrl_->SaveApplication(app_sh_mock); } TEST_F(ResumeCtrlTest, OnAppActivated_ResumptionHasStarted) { smart_objects::SmartObject saved_app; GetInfoFromApp(); - EXPECT_CALL(app_mngr_, GetDefaultHmiLevel(_)) - .WillOnce(Return(kDefaultTestLevel_)); - EXPECT_CALL(*mock_storage, GetSavedApplication(kTestPolicyAppId_, _, _)) - .WillOnce(DoAll(SetArgReferee<2>(saved_app), Return(true))); - ON_CALL(*app_mock, app_id()).WillByDefault(Return(kTestAppId_)); + ON_CALL(app_mngr_, GetDefaultHmiLevel(const_app_)) + .WillByDefault(Return(kDefaultTestLevel_)); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); + ON_CALL(*app_mock_, app_id()).WillByDefault(Return(kTestAppId_)); - bool res = res_ctrl->StartResumptionOnlyHMILevel(app_mock); + const bool res = res_ctrl_->StartResumptionOnlyHMILevel(app_mock_); EXPECT_TRUE(res); utils::SharedPtr<application_manager_test::MockApplication> app_sh_mock = ::utils::MakeShared<application_manager_test::MockApplication>(); EXPECT_CALL(*app_sh_mock, app_id()).WillOnce(Return(kTestAppId_)); - res_ctrl->OnAppActivated(app_sh_mock); + res_ctrl_->OnAppActivated(app_sh_mock); } TEST_F(ResumeCtrlTest, OnAppActivated_ResumptionNotActive) { utils::SharedPtr<application_manager_test::MockApplication> app_sh_mock = ::utils::MakeShared<application_manager_test::MockApplication>(); EXPECT_CALL(*app_sh_mock, app_id()).Times(0); - res_ctrl->OnAppActivated(app_sh_mock); + res_ctrl_->OnAppActivated(app_sh_mock); } TEST_F(ResumeCtrlTest, IsHMIApplicationIdExist) { uint32_t hmi_app_id = 10; - EXPECT_CALL(*mock_storage, IsHMIApplicationIdExist(hmi_app_id)) + EXPECT_CALL(*mock_storage_, IsHMIApplicationIdExist(hmi_app_id)) .WillOnce(Return(true)); - EXPECT_TRUE(res_ctrl->IsHMIApplicationIdExist(hmi_app_id)); + EXPECT_TRUE(res_ctrl_->IsHMIApplicationIdExist(hmi_app_id)); } TEST_F(ResumeCtrlTest, GetHMIApplicationID) { uint32_t hmi_app_id = 10; std::string device_id = "test_device_id"; - EXPECT_CALL(*mock_storage, GetHMIApplicationID(kTestPolicyAppId_, device_id)) + EXPECT_CALL(*mock_storage_, GetHMIApplicationID(kTestPolicyAppId_, device_id)) .WillOnce(Return(hmi_app_id)); EXPECT_EQ(hmi_app_id, - res_ctrl->GetHMIApplicationID(kTestPolicyAppId_, device_id)); + res_ctrl_->GetHMIApplicationID(kTestPolicyAppId_, device_id)); } TEST_F(ResumeCtrlTest, IsApplicationSaved) { - std::string policy_app_id = "policy_app_id"; - std::string device_id = "device_id"; + const bool is_app_saved = true; + EXPECT_CALL(*mock_storage_, + IsApplicationSaved(kTestPolicyAppId_, kMacAddress_)) + .WillOnce(Return(is_app_saved)); + EXPECT_TRUE(res_ctrl_->IsApplicationSaved(kTestPolicyAppId_, kMacAddress_)); +} - EXPECT_CALL(*mock_storage, IsApplicationSaved(policy_app_id, device_id)) - .WillOnce(Return(true)); - EXPECT_TRUE(res_ctrl->IsApplicationSaved(policy_app_id, device_id)); +TEST_F(ResumeCtrlTest, OnAppRegistrationStart) { + const bool is_app_saved = false; + EXPECT_CALL(*mock_storage_, + IsApplicationSaved(kTestPolicyAppId_, kMacAddress_)) + .WillOnce(Return(is_app_saved)); + res_ctrl_->OnAppRegistrationStart(kTestPolicyAppId_, kMacAddress_); +} + +TEST_F(ResumeCtrlTest, OnAppRegistrationEnd) { + const uint32_t timeout = 1000u; + EXPECT_CALL(mock_application_manager_settings_, + app_resumption_save_persistent_data_timeout()) + .WillOnce(ReturnRef(timeout)); + res_ctrl_->OnAppRegistrationEnd(); } TEST_F(ResumeCtrlTest, CheckPersistenceFiles_WithoutCommandAndChoiceSets) { @@ -711,10 +832,11 @@ TEST_F(ResumeCtrlTest, CheckPersistenceFiles_WithoutCommandAndChoiceSets) { saved_app[application_manager::strings::hmi_level] = HMI_FULL; GetInfoFromApp(); - EXPECT_CALL(*mock_storage, GetSavedApplication(_, _, _)) - .WillOnce(DoAll(SetArgReferee<2>(saved_app), Return(true))); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); - EXPECT_TRUE(res_ctrl->CheckPersistenceFilesForResumption(app_mock)); + EXPECT_TRUE(res_ctrl_->CheckPersistenceFilesForResumption(app_mock_)); } TEST_F(ResumeCtrlTest, CheckPersistenceFilesForResumption_WithCommands) { @@ -727,14 +849,15 @@ TEST_F(ResumeCtrlTest, CheckPersistenceFilesForResumption_WithCommands) { test_application_commands; GetInfoFromApp(); - EXPECT_CALL(*mock_storage, GetSavedApplication(_, _, _)) - .WillOnce(DoAll(SetArgReferee<2>(saved_app), Return(true))); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); EXPECT_CALL(*application_manager::MockMessageHelper::message_helper_mock(), VerifyImageFiles(_, _, _)) .WillRepeatedly(Return(mobile_apis::Result::SUCCESS)); - EXPECT_TRUE(res_ctrl->CheckPersistenceFilesForResumption(app_mock)); + EXPECT_TRUE(res_ctrl_->CheckPersistenceFilesForResumption(app_mock_)); } TEST_F(ResumeCtrlTest, CheckPersistenceFilesForResumption_WithChoiceSet) { @@ -747,16 +870,34 @@ TEST_F(ResumeCtrlTest, CheckPersistenceFilesForResumption_WithChoiceSet) { test_choice_sets; GetInfoFromApp(); - EXPECT_CALL(*mock_storage, GetSavedApplication(_, _, _)) - .WillOnce(DoAll(SetArgReferee<2>(saved_app), Return(true))); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); - EXPECT_TRUE(res_ctrl->CheckPersistenceFilesForResumption(app_mock)); + EXPECT_TRUE(res_ctrl_->CheckPersistenceFilesForResumption(app_mock_)); } // TODO (VVeremjova) APPLINK-16718 TEST_F(ResumeCtrlTest, DISABLED_OnSuspend) { - EXPECT_CALL(*mock_storage, OnSuspend()); - res_ctrl->OnSuspend(); + EXPECT_CALL(*mock_storage_, OnSuspend()); + res_ctrl_->OnSuspend(); +} + +TEST_F(ResumeCtrlTest, OnSuspend_EmptyApplicationlist) { + utils::SharedPtr<application_manager::Application> mock_app = + ::utils::MakeShared<application_manager_test::MockApplication>(); + + application_manager::ApplicationSet app_set; + + DataAccessor<application_manager::ApplicationSet> accessor(app_set, + app_set_lock_); + + ON_CALL(app_mngr_, applications()).WillByDefault(Return(accessor)); + EXPECT_CALL(*mock_storage_, SaveApplication(mock_app)).Times(0); + + EXPECT_CALL(*mock_storage_, OnSuspend()); + EXPECT_CALL(*mock_storage_, Persist()); + res_ctrl_->OnSuspend(); } TEST_F(ResumeCtrlTest, OnAwake) { @@ -764,15 +905,16 @@ TEST_F(ResumeCtrlTest, OnAwake) { EXPECT_CALL(mock_application_manager_settings_, app_resumption_save_persistent_data_timeout()) .WillOnce(ReturnRef(timeout)); - EXPECT_CALL(*mock_storage, OnAwake()); - res_ctrl->OnAwake(); + EXPECT_CALL(*mock_storage_, OnAwake()); + res_ctrl_->OnAwake(); } TEST_F(ResumeCtrlTest, RemoveApplicationFromSaved) { GetInfoFromApp(); - EXPECT_CALL(*mock_storage, RemoveApplicationFromSaved(_, _)) + EXPECT_CALL(*mock_storage_, + RemoveApplicationFromSaved(kTestPolicyAppId_, kMacAddress_)) .WillOnce(Return(true)); - EXPECT_TRUE(res_ctrl->RemoveApplicationFromSaved(app_mock)); + EXPECT_TRUE(res_ctrl_->RemoveApplicationFromSaved(app_mock_)); } TEST_F(ResumeCtrlTest, CheckApplicationkHash_) { @@ -780,18 +922,18 @@ TEST_F(ResumeCtrlTest, CheckApplicationkHash_) { saved_app[application_manager::strings::hash_id] = kHash_; GetInfoFromApp(); - EXPECT_CALL(*mock_storage, GetSavedApplication(kTestPolicyAppId_, _, _)) - .WillRepeatedly(DoAll(SetArgReferee<2>(saved_app), Return(true))); - EXPECT_TRUE(res_ctrl->CheckApplicationHash(app_mock, kHash_)); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true))); + EXPECT_TRUE(res_ctrl_->CheckApplicationHash(app_mock_, kHash_)); } TEST_F(ResumeCtrlTest, GetSavedAppHmiLevel_NoAskedApp_INVALID_ENUM) { - const std::string app_id = "test_app_id"; - const std::string device_id = "test_device_id"; - EXPECT_CALL(*mock_storage, GetSavedApplication(app_id, device_id, _)) - .WillOnce(Return(false)); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(Return(false)); EXPECT_EQ(mobile_apis::HMILevel::INVALID_ENUM, - res_ctrl->GetSavedAppHmiLevel(app_id, device_id)); + res_ctrl_->GetSavedAppHmiLevel(kTestPolicyAppId_, kMacAddress_)); } ACTION_P(SetHmiLevel, hmi_level) { @@ -799,14 +941,14 @@ ACTION_P(SetHmiLevel, hmi_level) { } TEST_F(ResumeCtrlTest, GetSavedAppHmiLevel_AskedAppFound_INVALID_ENUM) { - const std::string app_id = "test_app_id"; - const std::string device_id = "test_device_id"; const mobile_apis::HMILevel::eType hmi_level = mobile_apis::HMILevel::HMI_FULL; - EXPECT_CALL(*mock_storage, GetSavedApplication(app_id, device_id, _)) - .WillOnce(DoAll(SetHmiLevel(hmi_level), Return(true))); - EXPECT_EQ(hmi_level, res_ctrl->GetSavedAppHmiLevel(app_id, device_id)); + ON_CALL(*mock_storage_, + GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _)) + .WillByDefault(DoAll(SetHmiLevel(hmi_level), Return(true))); + EXPECT_EQ(hmi_level, + res_ctrl_->GetSavedAppHmiLevel(kTestPolicyAppId_, kMacAddress_)); } } // namespace resumption_test diff --git a/src/components/interfaces/HMI_API.xml b/src/components/interfaces/HMI_API.xml index 3cabb07d0f..2182496760 100644 --- a/src/components/interfaces/HMI_API.xml +++ b/src/components/interfaces/HMI_API.xml @@ -34,7 +34,7 @@ <interfaces name="SmartDeviceLink HMI API"> -<interface name="Common" version="1.5" date="2017-01-16"> +<interface name="Common" version="1.4" date="2016-05-11"> <enum name="Result"> <element name="SUCCESS" value="0"/> @@ -497,9 +497,6 @@ <element name="phoneNumber"> <description> Optional hone number of intended location / establishment (if applicable) for SendLocation.</description> </element> - <element name="audioPassThruIcon"> - <description>The optional image field for AudioPassThru</description> - </element> <element name="timeToDestination"/> <!-- TO DO to be removed --> <element name="turnText"/> @@ -542,9 +539,6 @@ <element name="locationImage"> <description>The optional image of a destination / location</description> </element> - <element name="audiPassThruIcon"> - <description>The optional image for AudioPassThru</description> - </element> </enum> <enum name="TextAlignment"> @@ -2742,7 +2736,7 @@ </function> </interface> -<interface name="UI" version="1.1" date="2017-01-16"> +<interface name="UI" version="1.0" date="2013-04-16"> <function name="Alert" messagetype="request"> <description>Request from SDL to show an alert message on the display.</description> <param name="alertStrings" type="Common.TextFieldStruct" mandatory="true" array="true" minsize="0" maxsize="3"> @@ -3193,12 +3187,6 @@ If omitted, the value is set to true. </description> </param> - <param name="audioPassThruIcon" type="Common.Image" mandatory="false"> - <description> - Image struct determinig wheter static or dynamic icon. - If omitted on supported displays, no (or the default if applicable) icon shall be displayed. - </description> - </param> </function> <function name="PerformAudioPassThru" messagetype="response"> </function> diff --git a/src/components/interfaces/MOBILE_API.xml b/src/components/interfaces/MOBILE_API.xml index 4912514fea..3bf347b605 100644 --- a/src/components/interfaces/MOBILE_API.xml +++ b/src/components/interfaces/MOBILE_API.xml @@ -747,10 +747,6 @@ <description>The optional image of a destination / location</description>
</element>
- <element name="audioPassThruIcon">
- <description>The optional image field for AudioPassThru</description>
- </element>
-
</enum>
<enum name="CharacterSet">
@@ -3398,10 +3394,6 @@ If omitted, the value is set to true.
</description>
</param>
- <param name="audioPassThruIcon" type="Image" mandatory="false">
- <description>Image struct determinig wheter static or dynamic icon.
- If omitted on supported displays, no (or the default if applicable) icon shall be displayed.</description>
- </param>
</function>
<function name="PerformAudioPassThru" functionID="PerformAudioPassThruID" messagetype="response">
|