summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Kutsan (GitHub) <akutsan@luxoft.com>2017-01-20 10:30:57 +0200
committerGitHub <noreply@github.com>2017-01-20 10:30:57 +0200
commitda7aa0163ca7cabf4738dc9c02518b1aa2c55685 (patch)
tree75312fceb34520d2e45e8b5159071aae8c5337b8
parent9ad368a244fa87e7a592e95e0d6a1368bfb2ba1c (diff)
parentf2e85eb39cedb9ca2ea1328eda8cd0e1b76d979d (diff)
downloadsdl_core-da7aa0163ca7cabf4738dc9c02518b1aa2c55685.tar.gz
Merge pull request #1189 from LuxoftAKutsan/feature/merge_external_policies_to_develop
WIP Feature/merge external policies to develop ( external ATF check)
-rw-r--r--.travis.yml4
-rw-r--r--CMakeLists.txt436
-rw-r--r--src/3rd_party-static/CMakeLists.txt7
-rw-r--r--src/3rd_party-static/MessageBroker/CMakeLists.txt39
-rw-r--r--src/3rd_party-static/encryption/CMakeLists.txt39
-rw-r--r--src/3rd_party-static/jsoncpp/CMakeLists.txt44
-rw-r--r--src/3rd_party-static/message_broker/CMakeLists.txt (renamed from cmake/Modules/sources.cmake)69
-rw-r--r--src/3rd_party-static/message_broker/include/CMessageBroker.hpp (renamed from src/3rd_party-static/MessageBroker/include/CMessageBroker.hpp)0
-rw-r--r--src/3rd_party-static/message_broker/include/CMessageBrokerRegistry.hpp (renamed from src/3rd_party-static/MessageBroker/include/CMessageBrokerRegistry.hpp)0
-rw-r--r--src/3rd_party-static/message_broker/include/CSender.hpp (renamed from src/3rd_party-static/MessageBroker/include/CSender.hpp)0
-rw-r--r--src/3rd_party-static/message_broker/include/MBDebugHelper.h (renamed from src/3rd_party-static/MessageBroker/include/MBDebugHelper.h)0
-rw-r--r--src/3rd_party-static/message_broker/include/mb_client.hpp (renamed from src/3rd_party-static/MessageBroker/include/mb_client.hpp)0
-rw-r--r--src/3rd_party-static/message_broker/include/mb_controller.hpp (renamed from src/3rd_party-static/MessageBroker/include/mb_controller.hpp)0
-rw-r--r--src/3rd_party-static/message_broker/include/mb_server.hpp (renamed from src/3rd_party-static/MessageBroker/include/mb_server.hpp)0
-rw-r--r--src/3rd_party-static/message_broker/include/mb_tcpclient.hpp (renamed from src/3rd_party-static/MessageBroker/include/mb_tcpclient.hpp)0
-rw-r--r--src/3rd_party-static/message_broker/include/mb_tcpserver.hpp (renamed from src/3rd_party-static/MessageBroker/include/mb_tcpserver.hpp)0
-rw-r--r--src/3rd_party-static/message_broker/include/networking.h (renamed from src/3rd_party-static/MessageBroker/include/networking.h)0
-rw-r--r--src/3rd_party-static/message_broker/include/system.h (renamed from src/3rd_party-static/MessageBroker/include/system.h)0
-rw-r--r--src/3rd_party-static/message_broker/include/websocket_handler.hpp (renamed from src/3rd_party-static/MessageBroker/include/websocket_handler.hpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/client/mb_client.cpp (renamed from src/3rd_party-static/MessageBroker/src/client/mb_client.cpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/client/mb_controller.cpp (renamed from src/3rd_party-static/MessageBroker/src/client/mb_controller.cpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/client/mb_tcpclient.cpp (renamed from src/3rd_party-static/MessageBroker/src/client/mb_tcpclient.cpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/example/MessageBrokerControllerAVA.cpp (renamed from src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerAVA.cpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/example/MessageBrokerControllerAVA.hpp (renamed from src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerAVA.hpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/example/MessageBrokerControllerBackend.cpp (renamed from src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerBackend.cpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/example/MessageBrokerControllerBackend.hpp (renamed from src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerBackend.hpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/example/MessageBrokerControllerPhone.cpp (renamed from src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerPhone.cpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/example/MessageBrokerControllerPhone.hpp (renamed from src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerPhone.hpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/example/MessageBrokerServer.cpp (renamed from src/3rd_party-static/MessageBroker/src/example/MessageBrokerServer.cpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/example/MessageBrokerServer.hpp (renamed from src/3rd_party-static/MessageBroker/src/example/MessageBrokerServer.hpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/lib_messagebroker/CMessageBroker.cpp (renamed from src/3rd_party-static/MessageBroker/src/lib_messagebroker/CMessageBroker.cpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/lib_messagebroker/CMessageBrokerRegistry.cpp (renamed from src/3rd_party-static/MessageBroker/src/lib_messagebroker/CMessageBrokerRegistry.cpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/lib_messagebroker/libMBDebugHelper.h (renamed from src/3rd_party-static/MessageBroker/src/lib_messagebroker/libMBDebugHelper.h)0
-rw-r--r--src/3rd_party-static/message_broker/src/lib_messagebroker/md5.cpp (renamed from src/3rd_party-static/MessageBroker/src/lib_messagebroker/md5.cpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/lib_messagebroker/md5.h (renamed from src/3rd_party-static/MessageBroker/src/lib_messagebroker/md5.h)0
-rw-r--r--src/3rd_party-static/message_broker/src/lib_messagebroker/system.cpp (renamed from src/3rd_party-static/MessageBroker/src/lib_messagebroker/system.cpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/lib_messagebroker/websocket_handler.cpp (renamed from src/3rd_party-static/MessageBroker/src/lib_messagebroker/websocket_handler.cpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/server/mb_server.cpp (renamed from src/3rd_party-static/MessageBroker/src/server/mb_server.cpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/server/mb_tcpserver.cpp (renamed from src/3rd_party-static/MessageBroker/src/server/mb_tcpserver.cpp)0
-rw-r--r--src/3rd_party-static/message_broker/src/server/networking.cpp (renamed from src/3rd_party-static/MessageBroker/src/server/networking.cpp)0
-rw-r--r--src/3rd_party-static/test/CMakeLists.txt15
-rw-r--r--src/3rd_party/CMakeLists.txt231
-rw-r--r--src/3rd_party/apache-log4cxx-cmake/CMakeLists.txt2
-rw-r--r--src/appMain/CMakeLists.txt113
-rw-r--r--src/appMain/life_cycle.cc17
-rw-r--r--src/appMain/life_cycle.h3
-rw-r--r--src/components/CMakeLists.txt47
-rw-r--r--src/components/HMI/IVSU/PROPRIETARY_REQUEST~0
-rw-r--r--src/components/application_manager/CMakeLists.txt121
-rw-r--r--src/components/application_manager/include/application_manager/commands/hmi/request_from_hmi.h20
-rw-r--r--src/components/application_manager/include/application_manager/commands/mobile/reset_global_properties_request.h12
-rw-r--r--src/components/application_manager/src/app_launch/app_launch_data_json.cc9
-rw-r--r--src/components/application_manager/src/commands/command_request_impl.cc20
-rw-r--r--src/components/application_manager/src/commands/hmi/navi_audio_start_stream_request.cc2
-rw-r--r--src/components/application_manager/src/commands/hmi/navi_start_stream_request.cc4
-rw-r--r--src/components/application_manager/src/commands/hmi/request_from_hmi.cc35
-rw-r--r--src/components/application_manager/src/commands/hmi/sdl_activate_app_request.cc22
-rw-r--r--src/components/application_manager/src/commands/mobile/create_interaction_choice_set_request.cc19
-rw-r--r--src/components/application_manager/src/commands/mobile/on_button_event_notification.cc8
-rw-r--r--src/components/application_manager/src/commands/mobile/on_button_press_notification.cc9
-rw-r--r--src/components/application_manager/src/commands/mobile/on_keyboard_input_notification.cc4
-rw-r--r--src/components/application_manager/src/commands/mobile/perform_interaction_request.cc1
-rw-r--r--src/components/application_manager/src/commands/mobile/reset_global_properties_request.cc93
-rw-r--r--src/components/application_manager/src/commands/mobile/system_request.cc4
-rw-r--r--src/components/application_manager/src/commands/mobile/unsubscribe_vehicle_data_request.cc20
-rw-r--r--src/components/application_manager/src/hmi_interfaces_impl.cc6
-rw-r--r--src/components/application_manager/src/hmi_language_handler.cc12
-rw-r--r--src/components/application_manager/src/hmi_state.cc2
-rw-r--r--src/components/application_manager/src/resumption/resumption_data_json.cc9
-rw-r--r--src/components/application_manager/test/CMakeLists.txt193
-rw-r--r--src/components/application_manager/test/app_launch/app_launch_data_json_test.cc6
-rw-r--r--src/components/application_manager/test/commands/CMakeLists.txt2
-rw-r--r--src/components/application_manager/test/commands/mobile/add_command_request_test.cc1146
-rw-r--r--src/components/application_manager/test/commands/mobile/alert_request_test.cc2
-rw-r--r--src/components/application_manager/test/commands/mobile/on_button_notification_commands_test.cc3
-rw-r--r--src/components/application_manager/test/commands/mobile/on_keyboard_input_notification_test.cc2
-rw-r--r--src/components/application_manager/test/commands/mobile/read_did_request_test.cc2
-rw-r--r--src/components/application_manager/test/commands/mobile/send_location_request_test.cc399
-rw-r--r--src/components/application_manager/test/hmi_capabilities_test.cc6
-rwxr-xr-xsrc/components/application_manager/test/message_helper/CMakeLists.txt.user189
-rw-r--r--src/components/application_manager/test/resumption/resumption_data_json_test.cc12
-rw-r--r--src/components/config_profile/CMakeLists.txt14
-rw-r--r--src/components/config_profile/src/ini_file.cc3
-rw-r--r--src/components/config_profile/test/CMakeLists.txt16
-rw-r--r--src/components/connection_handler/CMakeLists.txt19
-rw-r--r--src/components/connection_handler/test/CMakeLists.txt20
-rw-r--r--src/components/dbus/CMakeLists.txt19
-rw-r--r--src/components/dbus/test/CMakeLists.txt19
-rw-r--r--src/components/formatters/CMakeLists.txt24
-rw-r--r--src/components/formatters/test/CMakeLists.txt24
-rw-r--r--src/components/hmi_message_handler/CMakeLists.txt38
-rw-r--r--src/components/hmi_message_handler/include/hmi_message_handler/hmi_message_handler_impl.h8
-rw-r--r--src/components/hmi_message_handler/src/dbus_message_adapter.cc2
-rw-r--r--src/components/hmi_message_handler/src/mqueue_adapter.cc143
-rw-r--r--src/components/hmi_message_handler/test/CMakeLists.txt35
-rw-r--r--src/components/hmi_message_handler/test/hmi_message_handler_impl_test.cc63
-rw-r--r--src/components/hmi_message_handler/test/mqueue_adapter_test.cc94
-rw-r--r--src/components/include/test/resumption/mock_last_state.h (renamed from src/components/include/test/hmi_message_handler/mock_hmi_message_handler.h)27
-rw-r--r--src/components/include/utils/threads/CMakeLists.txt5
-rw-r--r--src/components/interfaces/CMakeLists.txt66
-rw-r--r--src/components/interfaces/HMI_API.xml31
-rw-r--r--src/components/media_manager/CMakeLists.txt119
-rw-r--r--src/components/media_manager/test/CMakeLists.txt10
-rw-r--r--src/components/policy/policy_regular/CMakeLists.txt95
-rw-r--r--src/components/policy/policy_regular/test/CMakeLists.txt20
-rw-r--r--src/components/protocol/CMakeLists.txt18
-rw-r--r--src/components/protocol_handler/CMakeLists.txt13
-rw-r--r--src/components/protocol_handler/test/CMakeLists.txt20
-rw-r--r--src/components/qt_hmi/test/CMakeLists.txt3
-rw-r--r--src/components/resumption/CMakeLists.txt9
-rw-r--r--src/components/resumption/include/resumption/last_state.h28
-rw-r--r--src/components/resumption/include/resumption/last_state_impl.h (renamed from src/components/hmi_message_handler/include/hmi_message_handler/mqueue_adapter.h)63
-rw-r--r--src/components/resumption/src/last_state_impl.cc (renamed from src/components/resumption/src/last_state.cc)30
-rw-r--r--src/components/resumption/test/CMakeLists.txt18
-rw-r--r--src/components/resumption/test/last_state_test.cc20
-rw-r--r--src/components/rpc_base/CMakeLists.txt28
-rw-r--r--src/components/rpc_base/test/CMakeLists.txt31
-rw-r--r--src/components/security_manager/CMakeLists.txt25
-rw-r--r--src/components/security_manager/test/CMakeLists.txt24
-rw-r--r--src/components/smart_objects/CMakeLists.txt30
-rw-r--r--src/components/smart_objects/test/CMakeLists.txt27
-rw-r--r--src/components/telemetry_monitor/CMakeLists.txt21
-rw-r--r--src/components/telemetry_monitor/test/CMakeLists.txt24
-rw-r--r--src/components/transport_manager/CMakeLists.txt104
-rw-r--r--src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_socket_connection.h11
-rw-r--r--src/components/transport_manager/include/transport_manager/tcp/tcp_connection_factory.h5
-rw-r--r--src/components/transport_manager/include/transport_manager/tcp/tcp_server_originated_socket_connection.h84
-rw-r--r--src/components/transport_manager/include/transport_manager/tcp/tcp_socket_connection.h42
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h42
-rw-r--r--src/components/transport_manager/src/bluetooth/bluetooth_connection_factory.cc21
-rw-r--r--src/components/transport_manager/src/bluetooth/bluetooth_socket_connection.cc6
-rw-r--r--src/components/transport_manager/src/bluetooth/bluetooth_transport_adapter.cc7
-rw-r--r--src/components/transport_manager/src/tcp/tcp_client_listener.cc15
-rw-r--r--src/components/transport_manager/src/tcp/tcp_connection_factory.cc25
-rw-r--r--src/components/transport_manager/src/tcp/tcp_server_originated_socket_connection.cc111
-rw-r--r--src/components/transport_manager/src/tcp/tcp_socket_connection.cc71
-rw-r--r--src/components/transport_manager/src/tcp/tcp_transport_adapter.cc6
-rw-r--r--src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc36
-rw-r--r--src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc6
-rw-r--r--src/components/transport_manager/src/transport_manager_impl.cc40
-rw-r--r--src/components/transport_manager/src/usb/usb_connection_factory.cc20
-rw-r--r--src/components/transport_manager/test/CMakeLists.txt28
-rw-r--r--src/components/transport_manager/test/app_info_storage299
-rw-r--r--src/components/transport_manager/test/raw_message_matcher.cc3
-rw-r--r--src/components/transport_manager/test/tcp_transport_adapter_test.cc19
-rw-r--r--src/components/transport_manager/test/transport_adapter_test.cc6
-rw-r--r--src/components/transport_manager/test/transport_manager_default_test.cc56
-rw-r--r--src/components/transport_manager/test/transport_manager_impl_test.cc7
-rw-r--r--src/components/utils/CMakeLists.txt107
-rw-r--r--src/components/utils/src/signals_posix.cc (renamed from src/components/utils/src/signals_linux.cc)0
-rw-r--r--src/components/utils/src/threads/thread_posix.cc (renamed from src/components/utils/src/threads/posix_thread.cc)0
-rw-r--r--src/components/utils/test/CMakeLists.txt90
-rw-r--r--src/components/utils/test/test_generator/CMakeLists.txt35
-rw-r--r--src/plugins/CMakeLists.txt2
-rw-r--r--src/plugins/appenders/CMakeLists.txt20
-rw-r--r--tools/cmake/helpers/cotire.cmake (renamed from cmake/Modules/cotire.cmake)0
-rw-r--r--tools/cmake/helpers/generators.cmake62
-rw-r--r--tools/cmake/helpers/platform.cmake96
-rw-r--r--tools/cmake/helpers/sources.cmake166
-rw-r--r--tools/cmake/modules/FindGlib-2.0.cmake (renamed from cmake/Modules/FindGlib-2.0.cmake)0
-rw-r--r--tools/cmake/modules/FindGstreamer-1.0.cmake (renamed from cmake/Modules/FindGstreamer-1.0.cmake)0
-rw-r--r--tools/cmake/modules/FindLibXML2.cmake (renamed from cmake/Modules/FindLibXML2.cmake)0
-rw-r--r--tools/cmake/modules/FindQt5Core.cmake (renamed from cmake/Modules/FindQt5Core.cmake)0
-rw-r--r--tools/cmake/modules/FindQt5DBus.cmake (renamed from cmake/Modules/FindQt5DBus.cmake)0
-rw-r--r--tools/cmake/modules/FindQt5Qml.cmake (renamed from cmake/Modules/FindQt5Qml.cmake)0
-rw-r--r--tools/cmake/modules/FindQt5Quick.cmake (renamed from cmake/Modules/FindQt5Quick.cmake)0
-rw-r--r--tools/cmake/modules/FindSDLGstreamer.cmake42
-rw-r--r--tools/cmake/modules/FindSDLLibUSB.cmake19
-rw-r--r--tools/cmake/modules/FindSDLOpenSSL.cmake18
-rw-r--r--tools/cmake/modules/FindSqlite3.cmake (renamed from cmake/Modules/FindSqlite3.cmake)2
-rw-r--r--tools/cmake/modules/FindUDev.cmake (renamed from cmake/Modules/FindUDev.cmake)0
-rw-r--r--tools/infrastructure/api_compare.py468
-rwxr-xr-xtools/infrastructure/check_style.sh20
-rwxr-xr-xtools/infrastructure/show_disabled.sh27
-rw-r--r--tools/intergen/test/CMakeLists.txt4
175 files changed, 4299 insertions, 2555 deletions
diff --git a/.travis.yml b/.travis.yml
index b8b82df3fc..6263b30767 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -20,6 +20,7 @@ addons:
- libbluetooth3
- libbluetooth-dev
- libudev-dev
+ - libusb-1.0
- cmake
- html2text
- clang-format-3.6
@@ -34,7 +35,8 @@ script:
- bash -e tools/infrastructure/check_style.sh
- mkdir build && cd build && cmake ../ -DBUILD_TESTS=ON -DENABLE_GCOV=ON && make install
- sudo ldconfig
- - make test
+ - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/bin/lib ; make test
+ - bash ../tools/infrastructure/show_disabled.sh
- bash -ex ../tools/infrastructure/collect_coverage.sh ./
env:
global:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8740c77330..07dd4e8bea 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -28,9 +28,13 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-cmake_minimum_required(VERSION 2.8.0)
+cmake_minimum_required(VERSION 2.8.11)
set (PROJECT smartDeviceLinkCore)
+project (${PROJECT})
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/tools/cmake/modules/")
+
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/platform.cmake)
#Jenkins integration section
#dont modify this section if you dont know details about integration with Jenkins!!!
@@ -48,6 +52,7 @@ option(ENABLE_GCOV "gcov code coverage feature" OFF)
option(ENABLE_SANITIZE "Sanitize tool" OFF)
option(ENABLE_SECURITY "Security Ford protocol protection" ON)
option(ENABLE_HMI_PTU_DECRYPTION "Policy table update parsed by hmi" ON)
+option(ENABLE_EXTENDED_POLICY "Turns extended flow which requires embedded system interaction" ON)
option(USE_COTIRE "Use Cotire to speed up build (currently only for commands tests)" ON)
option(USE_GOLD_LD "Use gold linker intead of GNU linker" ON)
option(USE_CCACHE "Turn on ccache usage" ON)
@@ -72,9 +77,9 @@ set(POLICY_OPTION "$ENV{POLICY_TYPE}")
set(SECURITY_OPTION "$ENV{SECURITY_MODE}")
set(COMPONENTS_DIR ${CMAKE_SOURCE_DIR}/src/components)
set(SNAPSHOT_TAG "$ENV{SNAPSHOT_TAG}")
-
set(CMAKE_CXX_COMPILER $ENV{CMAKE_CXX_COMPILER})
set(CMAKE_C_COMPILER $ENV{CMAKE_C_COMPILER})
+set(BUILDDIR "$ENV{BUILDDIR}")
if (ARCH_TYPE_OPTION)
if (NOT (${ARCH_TYPE_OPTION} STREQUAL "x86") AND NOT (${ARCH_TYPE_OPTION} STREQUAL "armv7"))
@@ -119,9 +124,6 @@ if (HMI_ADAPTER_OPTION)
elseif (${HMI_ADAPTER_OPTION} STREQUAL "DBUS")
message(STATUS "Jenkins integration: selected HMI adapter DBUS")
set (HMIADAPTER "dbus")
- elseif (${HMI_ADAPTER_OPTION} STREQUAL "MQUEUE")
- message(STATUS "Jenkins integration: selected HMI adapter MQUEUE")
- set (HMIADAPTER "mqueue")
endif()
endif()
@@ -239,11 +241,15 @@ endif(USE_DISTCC)
if(ENABLE_SANITIZE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
+ message(STATUS "Sanitizing enabled")
endif()
+
if(ENABLE_GCOV)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
add_definitions(-DGCOV_ENABLED)
+ message(STATUS "GCOV enabled")
endif()
+
set(CMAKE_CXX_FLAGS_RELEASE " -DNDEBUG -s -O2")
set(CMAKE_CXX_FLAGS_DEBUG " -DDEBUG -g3 -ggdb3")
@@ -260,26 +266,29 @@ endif()
if (BUILD_USB_SUPPORT)
add_definitions(-DUSB_SUPPORT)
find_package(UDev REQUIRED)
- message(STATUS "USB support is enabled")
+ message(STATUS "USB support enabled")
endif()
if (BUILD_BT_SUPPORT)
add_definitions(-DBLUETOOTH_SUPPORT)
- message(STATUS "Bluetooth support is enabled")
+ message(STATUS "Bluetooth support enabled")
endif()
if (BUILD_BACKTRACE_SUPPORT)
add_definitions(-DBACKTRACE_SUPPORT)
+ message(STATUS "Backtrace support enabled")
endif()
if(ENABLE_LOG)
add_definitions(-DENABLE_LOG)
set(install-3rd_party_logger "install-3rd_party_logger")
+ message(STATUS "Logger enabled")
endif()
if (TELEMETRY_MONITOR)
- add_definitions(-DTELEMETRY_MONITOR)
+ add_definitions(-DTELEMETRY_MONITOR)
+ message(STATUS "Telemetry monitor enabled")
endif()
if (${EXTENDED_POLICY} STREQUAL "EXTERNAL_PROPRIETARY")
@@ -287,13 +296,13 @@ if (${EXTENDED_POLICY} STREQUAL "EXTERNAL_PROPRIETARY")
set(POLICY_PATH ${COMPONENTS_DIR}/policy/policy_external/)
set(POLICY_GLOBAL_INCLUDE_PATH ${COMPONENTS_DIR}/include/policy/policy_external/)
set(POLICY_MOCK_INCLUDE_PATH ${COMPONENTS_DIR}/include/test/policy/policy_external/)
- message(STATUS "DEFINED EXTERNAL_PROPRIETARY POLICY")
+ message(STATUS "EXTERNAL_PROPRIETARY policy enabled")
else()
if (${EXTENDED_POLICY} STREQUAL "PROPRIETARY")
add_definitions(-DPROPRIETARY_MODE)
- message(STATUS "DEFINED PROPRIETARY POLICY")
+ message(STATUS "PROPRIETARY policy enabled")
else()
- message(STATUS "DEFINED HTTP POLICY")
+ message(STATUS "HTTP policy enabled")
endif()
set(POLICY_PATH ${COMPONENTS_DIR}/policy/policy_regular/)
set(POLICY_GLOBAL_INCLUDE_PATH ${COMPONENTS_DIR}/include/policy/policy_regular/)
@@ -304,103 +313,38 @@ endif()
add_definitions(-DOS_POSIX)
if (EXTENDED_MEDIA_MODE)
-add_definitions(-DEXTENDED_MEDIA_MODE)
-# required to find 'glibconfig.h'
-find_package(PkgConfig)
-pkg_check_modules(GLIB2 REQUIRED glib-2.0)
-add_definitions(${GLIB2_CFLAGS})
-endif()
-
-
-# --- Interface generator
-
-find_package(PythonInterp)
-if(NOT PYTHONINTERP_FOUND)
- message(STATUS "Python interpreter is not found")
- message(STATUS "To install it type in the command line:")
- message(STATUS "sudo apt-get install python")
- message(FATAL_ERROR "Exiting!")
-endif(NOT PYTHONINTERP_FOUND)
-
-if (HMI STREQUAL "qt")
- cmake_minimum_required(VERSION 2.8.11)
- if (CMAKE_SYSTEM_NAME STREQUAL "QNX")
- set(qt_version "4.8.5")
- else ()
- set(qt_version "5.1.0")
- endif ()
-
- execute_process(
- COMMAND ${CMAKE_SOURCE_DIR}/FindQt.sh -v ${qt_version}
- OUTPUT_VARIABLE qt_bin_dir
- )
- message(STATUS "Binary directory Qt ${qt_version} is ${qt_bin_dir}")
- set(ENV{PATH} ${qt_bin_dir}:$ENV{PATH})
-
- if (CMAKE_SYSTEM_NAME STREQUAL "QNX")
- find_package(Qt4 ${qt_version} REQUIRED QtCore QtGui QtDBus QtDeclarative)
- else ()
- find_package(Qt5Core REQUIRED)
- find_package(Qt5DBus REQUIRED)
- find_package(Qt5Qml REQUIRED)
- find_package(Qt5Quick REQUIRED)
- set(qmlplugindump_binary ${qt_bin_dir}/qmlplugindump)
- endif ()
+ add_definitions(-DEXTENDED_MEDIA_MODE)
+ message(STATUS "Extended media mode enabled")
+ # required to find 'glibconfig.h'
+ find_package(PkgConfig)
+ pkg_check_modules(GLIB2 REQUIRED glib-2.0)
+ add_definitions(${GLIB2_CFLAGS})
endif()
-set(INTEFRACE_GENERATOR "${PROJECT_SOURCE_DIR}/tools/InterfaceGenerator/Generator.py")
-set(INTEFRACE_GENERATOR_CMD ${PYTHON_EXECUTABLE} -B ${INTEFRACE_GENERATOR})
-file(GLOB_RECURSE INTERFACE_GENERATOR_DEPENDENCIES "${PROJECT_SOURCE_DIR}/tools/InterfaceGenerator/*.*")
-
-macro (GenerateInterface arg_xml_name arg_namespace parser_type)
- string(REGEX MATCH "^[a-zA-Z_0-9]*[^.]" file_name ${arg_xml_name}) # TODO: make expression more robust
-
- set(hpp_file
- "${CMAKE_CURRENT_BINARY_DIR}/${file_name}.h"
- "${CMAKE_CURRENT_BINARY_DIR}/${file_name}_schema.h"
- )
-
- set(cpp_file "${CMAKE_CURRENT_BINARY_DIR}/${file_name}_schema.cc")
- set(full_xml_name "${CMAKE_CURRENT_SOURCE_DIR}/${arg_xml_name}")
-
- add_custom_command( OUTPUT ${hpp_file} ${cpp_file}
- COMMAND ${INTEFRACE_GENERATOR_CMD} ${full_xml_name} ${arg_namespace} ${CMAKE_CURRENT_BINARY_DIR} "--parser-type" "${parser_type}"
- DEPENDS ${INTERFACE_GENERATOR_DEPENDENCIES} ${full_xml_name}
- COMMENT "Generating files:\n ${hpp_file}\n ${cpp_file}\nfrom:\n ${arg_xml_name} ..."
- VERBATIM
- )
-
- include_directories (
- ${COMPONENTS_DIR}/smart_objects/include
- ${COMPONENTS_DIR}/formatters/include/
- ${CMAKE_BINARY_DIR}
- )
-
- add_library("${file_name}" ${cpp_file})
-endmacro(GenerateInterface)
-
-# --- Useful macro
-macro(create_test NAME SOURCES LIBS)
- add_executable("${NAME}" ${CMAKE_SOURCE_DIR}/src/components/test_main.cc ${SOURCES})
- target_link_libraries("${NAME}" ${LIBS})
- target_link_libraries("${NAME}" Utils)
+if(HMI STREQUAL "qt")
if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
- add_test(${NAME} ${CMAKE_SOURCE_DIR}/qnx/remote_run_test.sh ${NAME})
- elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
- add_test(NAME ${NAME}
- COMMAND ${NAME} --gtest_output=xml:${CMAKE_BINARY_DIR}/test_results/)
+ set(qt_version "4.8.5")
else()
- add_test(${NAME} ${NAME})
+ set(qt_version "5.1.0")
endif()
-endmacro(create_test)
-# --replace in list macro
-macro(LIST_REPLACE LIST INDEX NEWVALUE)
- list(INSERT ${LIST} ${INDEX} ${NEWVALUE})
- MATH(EXPR __INDEX "${INDEX} + 1")
- list (REMOVE_AT ${LIST} ${__INDEX})
-endmacro(LIST_REPLACE)
+ execute_process(
+ COMMAND ${CMAKE_SOURCE_DIR}/FindQt.sh -v ${qt_version}
+ OUTPUT_VARIABLE qt_bin_dir
+ )
+ message(STATUS "Binary directory Qt ${qt_version} is ${qt_bin_dir}")
+ set(ENV{PATH} ${qt_bin_dir}:$ENV{PATH})
+ if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
+ find_package(Qt4 ${qt_version} REQUIRED QtCore QtGui QtDBus QtDeclarative)
+ else ()
+ find_package(Qt5Core REQUIRED)
+ find_package(Qt5DBus REQUIRED)
+ find_package(Qt5Qml REQUIRED)
+ find_package(Qt5Quick REQUIRED)
+ set(qmlplugindump_binary ${qt_bin_dir}/qmlplugindump)
+ endif()
+endif()
# Building application
@@ -422,9 +366,6 @@ endif()
if (HMI STREQUAL "web" AND NOT DEFINED HMIADAPTER)
set(HMIADAPTER "messagebroker")
endif()
-if (HMI STREQUAL "no" AND NOT DEFINED HMIADAPTER)
- set(HMIADAPTER "mqueue")
-endif()
if (HMIADAPTER STREQUAL "dbus")
set(HMI_DBUS_API ON)
@@ -437,11 +378,6 @@ if (HMIADAPTER STREQUAL "messagebroker")
add_definitions(-DMESSAGEBROKER_HMIADAPTER)
add_definitions(-DHMI_JSON_API)
endif()
-if (HMIADAPTER STREQUAL "mqueue")
- set(HMI_JSON_API ON)
- add_definitions(-DMQUEUE_HMIADAPTER)
- add_definitions(-DHMI_JSON_API)
-endif()
# --- Directory with SDL interfaces, global types and ProtocolLib component
include_directories(
@@ -449,243 +385,8 @@ include_directories(
${COMPONENTS_DIR}/protocol/include
)
-if (BUILD_TESTS)
- include_directories(
- ${COMPONENTS_DIR}/include/test
- )
-endif ()
-
# --- 3rd party libs
-INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/src/3rd_party/set_3rd_party_paths.cmake)
-
-set(3RD_PARTY_SOURCE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/3rd_party)
-set(3RD_PARTY_BINARY_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src/3rd_party)
-
-set (install-3rd_party_logger_var "")
-set (install-3rd_party_dbus_var "")
-
-if(NO_REBUILD_3RD_PARTY)
- set(NO_REBUILD_3RD_PARTY_LOGGER ON)
- set(NO_REBUILD_3RD_PARTY_DBUS ON)
-endif()
-
-if(FORCE_3RD_PARTY)
- if(NO_REBUILD_3RD_PARTY)
- message(FATAL_ERROR "Please don't turn on both FORCE_3RD_PARTY and NO_REBUILD_3RD_PARTY at the same time.")
- else()
- set(FORCE_3RD_PARTY_LOGGER ON)
- set(FORCE_3RD_PARTY_DBUS ON)
- endif()
-endif()
-
-if(ENABLE_LOG)
- if(NO_REBUILD_3RD_PARTY_LOGGER)
- message(STATUS "Not rebuilding logger.")
- else()
- if(FORCE_3RD_PARTY_LOGGER)
- message(STATUS "Force to rebuild logger.")
-
- #build logger
- add_custom_target(3rd_party_logger
- make
- WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
- )
-
- #install logger
- #install either to default place with sudo or non-default plase without sudo.
- #to install with sudo to non-default place use manual installation
- add_custom_target(install-3rd_party_logger
- COMMAND /bin/bash -c \"USE_DEFAULT_3RD_PARTY_PATH=${USE_DEFAULT_3RD_PARTY_PATH}\;
- if [ \\$$USE_DEFAULT_3RD_PARTY_PATH == "true" ]\; then
- sudo -k \;
- sudo make install\;
- else
- make install\;
- fi\"
- DEPENDS 3rd_party_logger
- WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
- )
- else()
- #build logger
- add_custom_target(3rd_party_logger
- COMMAND /bin/bash -c \"cd ${CMAKE_CURRENT_SOURCE_DIR} &&
- grep .commit_hash ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib/liblog4cxx.so 1>/dev/null 2>&1\;
- if [ \\$$? == 0 ]\; then
- VAR1=\\$$\( readelf -p .commit_hash ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib/liblog4cxx.so 2>/dev/null\)\;
- VAR1=\\$$\(echo \\$$VAR1 | awk '{print \\$$NF}'\)\;
- VAR2=-1\;
- cd ${CMAKE_CURRENT_SOURCE_DIR}\;
- git log . 1>/dev/null 2>&1\;
- if [ \\$$? == 0 ]; then
- VAR2=\\$$\(git log --pretty=\"format:%H\" -1 ${3RD_PARTY_SOURCE_DIRECTORY}/apache-log4cxx-0.10.0\)\;
- fi\;
- if [ \\$$VAR1 != \\$$VAR2 ]\; then
- echo " Need to rebuild logger. " \;
- cd ${3RD_PARTY_BINARY_DIRECTORY}\;
- make\;
- else
- echo " Logger is actual. " \;
- fi\;
- else
- echo " Need to build logger. " \;
- cd ${3RD_PARTY_BINARY_DIRECTORY}\;
- make\;
- fi\"
- WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
- )
-
- #install logger
- #install either to default place with sudo or non-default plase without sudo.
- #to install with sudo to non-default place use manual installation
- add_custom_target(install-3rd_party_logger
- COMMAND /bin/bash -c \"cd ${CMAKE_CURRENT_SOURCE_DIR} &&
- grep .commit_hash ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib/liblog4cxx.so 1>/dev/null 2>&1\;
- if [ \\$$? == 0 ]\; then
- VAR1=\\$$\( readelf -p .commit_hash ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib/liblog4cxx.so 2>/dev/null\)\;
- VAR1=\\$$\(echo \\$$VAR1 | awk '{print \\$$NF}'\)\;
- VAR2=-1\;
- cd ${CMAKE_CURRENT_SOURCE_DIR}\;
- git log . 1>/dev/null 2>&1\;
- if [ \\$$? == 0 ]; then
- VAR2=\\$$\(git log --pretty=\"format:%H\" -1 ${3RD_PARTY_SOURCE_DIRECTORY}/apache-log4cxx-0.10.0\)\;
- fi\;
- if [ \\$$VAR1 != \\$$VAR2 ]\; then
- USE_DEFAULT_3RD_PARTY_PATH=${USE_DEFAULT_3RD_PARTY_PATH}\;
- if [ \\$$USE_DEFAULT_3RD_PARTY_PATH == "true" ]\; then
- cd ${3RD_PARTY_BINARY_DIRECTORY}\;
- sudo -k \;
- sudo make install\;
- else
- cd ${3RD_PARTY_BINARY_DIRECTORY}\;
- make install\;
- fi\;
- fi\;
- else
- USE_DEFAULT_3RD_PARTY_PATH=${USE_DEFAULT_3RD_PARTY_PATH}\;
- if [ \\$$USE_DEFAULT_3RD_PARTY_PATH == "true" ]\; then
- cd ${3RD_PARTY_BINARY_DIRECTORY}\;
- sudo -k \;
- sudo make install\;
- else
- cd ${3RD_PARTY_BINARY_DIRECTORY}\;
- make install\;
- fi\;
- fi\"
- DEPENDS 3rd_party_logger
- WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
- )
- endif()
-
- set (install-3rd_party_logger_var "install-3rd_party_logger")
- endif()
-endif()
-
-if (HMIADAPTER STREQUAL "dbus")
- if(NO_REBUILD_3RD_PARTY_DBUS)
- message(STATUS "Not rebuilding D-Bus.")
- else()
- if(FORCE_3RD_PARTY_DBUS)
- message(STATUS "Force to rebuild D-Bus.")
-
- #build d-bus
- add_custom_target(3rd_party_dbus
- make
- WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
- )
-
- #install d-bus
- #install either to default place with sudo or non-default plase without sudo.
- #to install with sudo to non-default place use manual installation
- add_custom_target(install-3rd_party_dbus
- COMMAND /bin/bash -c \"USE_DEFAULT_3RD_PARTY_PATH=${USE_DEFAULT_3RD_PARTY_PATH}\;
- if [ \\$$USE_DEFAULT_3RD_PARTY_PATH == "true" ]\; then
- sudo -k \;
- sudo make install\;
- else
- make install\;
- fi\"
- DEPENDS 3rd_party_dbus
- WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
- )
- else()
- #build d-bus
- add_custom_target(3rd_party_dbus
- COMMAND /bin/bash -c \"grep .commit_hash ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib/libdbus-1.so 1>/dev/null 2>&1\;
- if [ \\$$? == 0 ]\; then
- VAR1=\\$$\(readelf -p .commit_hash ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib/libdbus-1.so 2>/dev/null\)\;
- VAR1=\\$$\(echo \\$$VAR1 | awk '{print \\$$NF}'\)\;
- VAR2=-1\;
- cd ${CMAKE_CURRENT_SOURCE_DIR}\;
- git log . 1>/dev/null 2>&1\;
- if [ \\$$? == 0 ]; then
- VAR2=\\$$\(git log --pretty=\"format:%H\" -1 ${3RD_PARTY_SOURCE_DIRECTORY}/dbus-1.7.8\)\;
- fi\;
- if [ \\$$VAR1 != \\$$VAR2 ]\; then
- echo " Need to rebuild D-Bus. " \;
- cd ${3RD_PARTY_BINARY_DIRECTORY}\;
- make\;
- else
- echo " D-Bus is actual. " \;
- fi\;
- else
- echo " Need to build D-Bus. " \;
- cd ${3RD_PARTY_BINARY_DIRECTORY}\;
- make\;
- fi\"
- WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
- )
-
- #install d-bus
- #install either to default place with sudo or non-default plase without sudo.
- #to install with sudo to non-default place use manual installation
- add_custom_target(install-3rd_party_dbus
- COMMAND /bin/bash -c \"grep .commit_hash ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib/libdbus-1.so 1>/dev/null 2>&1\;
- if [ \\$$? == 0 ]\; then
- VAR1=\\$$\(readelf -p .commit_hash ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib/libdbus-1.so 2>/dev/null\)\;
- VAR1=\\$$\(echo \\$$VAR1 | awk '{print \\$$NF}'\)\;
- VAR2=-1\;
- cd ${CMAKE_CURRENT_SOURCE_DIR}\;
- git log . 1>/dev/null 2>&1\;
- if [ \\$$? == 0 ]; then
- VAR2=\\$$\(git log --pretty=\"format:%H\" -1 ${3RD_PARTY_SOURCE_DIRECTORY}/dbus-1.7.8\)\;
- fi\;
- if [ \\$$VAR1 != \\$$VAR2 ]\; then
- USE_DEFAULT_3RD_PARTY_PATH=${USE_DEFAULT_3RD_PARTY_PATH}\;
- if [ \\$$USE_DEFAULT_3RD_PARTY_PATH == "true" ]\; then
- cd ${3RD_PARTY_BINARY_DIRECTORY}\;
- sudo -k \;
- sudo make install\;
- else
- cd ${3RD_PARTY_BINARY_DIRECTORY}\;
- make install\;
- fi\;
- fi\;
- else
- USE_DEFAULT_3RD_PARTY_PATH=${USE_DEFAULT_3RD_PARTY_PATH}\;
- if [ \\$$USE_DEFAULT_3RD_PARTY_PATH == "true" ]\; then
- cd ${3RD_PARTY_BINARY_DIRECTORY}\;
- sudo -k \;
- sudo make install\;
- else
- cd ${3RD_PARTY_BINARY_DIRECTORY}\;
- make install\;
- fi\;
- fi\"
- DEPENDS 3rd_party_dbus
- WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
- )
- endif()
-
- set (install-3rd_party_dbus_var "install-3rd_party_dbus")
- endif()
-endif()
-
-add_subdirectory(${3RD_PARTY_SOURCE_DIRECTORY} ${3RD_PARTY_BINARY_DIRECTORY} EXCLUDE_FROM_ALL)
-add_custom_target(install-3rd_party
- DEPENDS ${install-3rd_party_logger_var}
- DEPENDS ${install-3rd_party_dbus_var}
- WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
-)
+add_subdirectory(./src/3rd_party EXCLUDE_FROM_ALL)
find_package(OpenSSL REQUIRED)
if(ENABLE_LOG)
@@ -697,25 +398,27 @@ if(ENABLE_SECURITY)
set(SecurityManagerLibrary SecurityManager)
set(SecurityManagerIncludeDir ${COMPONENTS_DIR}/security_manager/include)
#set(SecurityManagerTestIncludeDir ${CMAKE_SOURCE_DIR}/test/components/security_manager/include)
+ message(STATUS "Security enabled")
endif()
if(ENABLE_HMI_PTU_DECRYPTION)
- MESSAGE("USE DHMI_PTU_PARSER")
add_definitions(-DUSE_HMI_PTU_DECRYPTION)
+ message(STATUS "HMI PTU decription enabled")
endif()
set(RTLIB rt)
if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
-set(RTLIB )
+ set(RTLIB )
endif()
# Building tests
if(BUILD_TESTS)
enable_testing()
add_definitions(-DBUILD_TESTS)
- # Framework GoogleTest is also integrated together gmock
- # and must not be added separately
- add_subdirectory(./src/3rd_party-static/gmock-1.7.0)
+ include_directories(
+ ${COMPONENTS_DIR}/include/test
+ )
+ message(STATUS "Tests enabled")
endif()
# --- 3rd party libs (static)
@@ -724,7 +427,6 @@ add_subdirectory(./src/3rd_party-static)
# --- Tools
add_subdirectory(./tools)
-
# --- Components
add_subdirectory(./src/components)
@@ -734,35 +436,31 @@ add_subdirectory(./src/appMain)
# --- Plugins
add_subdirectory(./src/plugins)
-
-# Building tests
-if(BUILD_TESTS)
- # Directory test is deprecated. Use src/components/<name>/test
- include(Dart)
- #add_subdirectory(./test)
-endif()
+add_dependencies(${PROJECT} Policy)
+add_dependencies(${PROJECT} copy_policy_library)
# Building documentation
# At first creating directory for generated documentation. Unfortunately doxygen
# cannot generate it byself
-FIND_PACKAGE(Doxygen)
- IF(DOXYGEN_FOUND)
+find_package(Doxygen)
+ if(DOXYGEN_FOUND)
option(DOXYGEN_ENABLE_DIAGRAMS "Enable graphical diagram generation" ON)
+ message(STATUS "Doxygen found. Documentation will be generated")
if(DOXYGEN_ENABLE_DIAGRAMS)
set(DOXYGEN_ENABLE_DIAGRAMS_PARAM "YES")
- else(DOXYGEN_ENABLE_DIAGRAMS)
+ else()
set(DOXYGEN_ENABLE_DIAGRAMS_PARAM "NO")
endif()
configure_file("${PROJECT_SOURCE_DIR}/Doxyfile" "${PROJECT_BINARY_DIR}/Doxyfile")
file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/doc/doxygen")
- ADD_CUSTOM_TARGET(doxygen COMMAND ${DOXYGEN_EXECUTABLE} "${PROJECT_BINARY_DIR}/Doxyfile")
- ELSE(DOXYGEN_FOUND)
- MESSAGE(STATUS "Doxygen not found. Documentation will not be generated")
- MESSAGE(STATUS "To enable documentation generation please install doxygen and graphviz packages")
- MESSAGE(STATUS "sudo apt-get install doxygen graphviz")
- MESSAGE(STATUS "To enable processing of MscGen comments please install mscgen")
- MESSAGE(STATUS "sudo apt-get install mscgen")
-ENDIF(DOXYGEN_FOUND)
+ add_custom_target(doxygen COMMAND ${DOXYGEN_EXECUTABLE} "${PROJECT_BINARY_DIR}/Doxyfile")
+ else()
+ message(STATUS "Doxygen not found. Documentation will not be generated")
+ message(STATUS "To enable documentation generation please install doxygen and graphviz packages")
+ message(STATUS "sudo apt-get install doxygen graphviz")
+ message(STATUS "To enable processing of MscGen comments please install mscgen")
+ message(STATUS "sudo apt-get install mscgen")
+endif()
diff --git a/src/3rd_party-static/CMakeLists.txt b/src/3rd_party-static/CMakeLists.txt
index 8dfcf6595a..2acd7be27c 100644
--- a/src/3rd_party-static/CMakeLists.txt
+++ b/src/3rd_party-static/CMakeLists.txt
@@ -32,8 +32,8 @@
add_subdirectory(./jsoncpp)
set(JSONCPP_INCLUDE_DIRECTORY ${JSONCPP_INCLUDE_DIRECTORY} PARENT_SCOPE)
-# --- MessageBroker
-add_subdirectory(./MessageBroker)
+# --- Message Broker
+add_subdirectory(./message_broker)
set(MESSAGE_BROKER_INCLUDE_DIRECTORY ${MESSAGE_BROKER_INCLUDE_DIRECTORY} PARENT_SCOPE)
# --- encryption
@@ -48,6 +48,9 @@ if (BUILD_USB_SUPPORT)
endif()
endif()
+# --- gmock
if(BUILD_TESTS)
+ add_subdirectory(./gmock-1.7.0)
+ set(GMOCK_INCLUDE_DIRECTORY ${GMOCK_INCLUDE_DIRECTORY} PARENT_SCOPE)
add_subdirectory(test)
endif()
diff --git a/src/3rd_party-static/MessageBroker/CMakeLists.txt b/src/3rd_party-static/MessageBroker/CMakeLists.txt
deleted file mode 100644
index 87a0fe2a2a..0000000000
--- a/src/3rd_party-static/MessageBroker/CMakeLists.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-set(MESSAGE_BROKER_INCLUDE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include)
-set(MESSAGE_BROKER_INCLUDE_DIRECTORY ${MESSAGE_BROKER_INCLUDE_DIRECTORY} PARENT_SCOPE)
-
-include_directories (
- ./include/
- ../jsoncpp/include
- ../../components/utils/include
-
-)
-
-set (MESSAGE_BROKER_SOURCES
- ./src/lib_messagebroker/CMessageBroker.cpp
- ./src/lib_messagebroker/CMessageBrokerRegistry.cpp
- ./src/lib_messagebroker/md5.cpp
- ./src/lib_messagebroker/system.cpp
- ./src/lib_messagebroker/websocket_handler.cpp
-)
-
-set (MESSAGE_BROKER_CLIENT_SOURCES
- ./src/client/mb_client.cpp
- ./src/client/mb_tcpclient.cpp
- ./src/client/mb_controller.cpp
-)
-
-set (MESSAGE_BROKER_SERVER_SOURCES
- ./src/server/mb_server.cpp
- ./src/server/mb_tcpserver.cpp
- ./src/server/networking.cpp
-)
-
-add_library("MessageBroker" ${MESSAGE_BROKER_SOURCES})
-target_link_libraries(MessageBroker Utils)
-
-
-add_library("MessageBrokerClient" ${MESSAGE_BROKER_CLIENT_SOURCES})
-target_link_libraries("MessageBrokerClient" "MessageBroker")
-
-add_library("MessageBrokerServer" ${MESSAGE_BROKER_SERVER_SOURCES})
-target_link_libraries("MessageBrokerServer" "MessageBroker")
diff --git a/src/3rd_party-static/encryption/CMakeLists.txt b/src/3rd_party-static/encryption/CMakeLists.txt
index 3802c83cb5..5096f59c22 100644
--- a/src/3rd_party-static/encryption/CMakeLists.txt
+++ b/src/3rd_party-static/encryption/CMakeLists.txt
@@ -1,14 +1,43 @@
+# Copyright (c) 2015, 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.
+
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
+
set(ENCRYPTION_INCLUDE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include)
set(ENCRYPTION_INCLUDE_DIRECTORY ${ENCRYPTION_INCLUDE_DIRECTORY} PARENT_SCOPE)
include_directories (
- ./include
+ ${ENCRYPTION_INCLUDE_DIRECTORY}
)
-set (SOURCES
- ./src/Base64.cpp
- ./src/hashing.cc
-)
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}")
set (LIBRARIES crypto)
diff --git a/src/3rd_party-static/jsoncpp/CMakeLists.txt b/src/3rd_party-static/jsoncpp/CMakeLists.txt
index 04a4bd960c..ac273cfe7b 100644
--- a/src/3rd_party-static/jsoncpp/CMakeLists.txt
+++ b/src/3rd_party-static/jsoncpp/CMakeLists.txt
@@ -1,14 +1,42 @@
+# Copyright (c) 2016, 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.
+
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
+
set(JSONCPP_INCLUDE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include)
set(JSONCPP_INCLUDE_DIRECTORY ${JSONCPP_INCLUDE_DIRECTORY} PARENT_SCOPE)
-include_directories (
- ./include/
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
)
-set (SOURCES
- ./src/lib_json/json_value.cpp
- ./src/lib_json/json_writer.cpp
- ./src/lib_json/json_reader.cpp
-)
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/lib_json")
-add_library("jsoncpp" ${SOURCES})
+add_library(jsoncpp ${SOURCES})
diff --git a/cmake/Modules/sources.cmake b/src/3rd_party-static/message_broker/CMakeLists.txt
index 1414a33809..348d050887 100644
--- a/cmake/Modules/sources.cmake
+++ b/src/3rd_party-static/message_broker/CMakeLists.txt
@@ -28,24 +28,51 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-function(create_cotired_test NAME SOURCES LIBS)
- add_executable(
- ${NAME}
- EXCLUDE_FROM_ALL
- ${CMAKE_SOURCE_DIR}/src/components/test_main.cc
- ${SOURCES}
- )
- if(${USE_COTIRE})
- include(cotire)
- cotire(${NAME})
- set(NAME "${NAME}_unity")
- endif()
- target_link_libraries(${NAME} ${LIBS})
- set_target_properties(
- ${NAME}
- PROPERTIES
- EXCLUDE_FROM_ALL 0
- )
- add_test(NAME ${NAME}
- COMMAND ${NAME} --gtest_output=xml:${CMAKE_BINARY_DIR}/test_results/)
-endfunction()
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
+
+set(MESSAGE_BROKER_INCLUDE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include)
+set(MESSAGE_BROKER_INCLUDE_DIRECTORY ${MESSAGE_BROKER_INCLUDE_DIRECTORY} PARENT_SCOPE)
+
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${JSONCPP_INCLUDE_DIRECTORY}
+)
+
+set(CLIENT_PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/client
+)
+collect_sources(CLIENT_SOURCES "${CLIENT_PATHS}")
+
+set(SERVER_PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/server
+)
+collect_sources(SERVER_SOURCES "${SERVER_PATHS}")
+
+set(EXCLUDE_PATHS
+ ${CLIENT_PATHS}
+ ${SERVER_PATHS}
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/example
+)
+
+set(PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+)
+collect_sources(SOURCES "${PATHS}" "${EXCLUDE_PATHS}")
+
+set(LIBRARIES
+ Utils
+)
+
+add_library(message_broker ${SOURCES})
+target_link_libraries(message_broker ${LIBRARIES})
+
+list(APPEND LIBRARIES
+ message_broker
+)
+
+add_library(message_broker_client ${CLIENT_SOURCES})
+target_link_libraries(message_broker_client ${LIBRARIES})
+
+add_library(message_broker_server ${SERVER_SOURCES})
+target_link_libraries(message_broker_server ${LIBRARIES})
diff --git a/src/3rd_party-static/MessageBroker/include/CMessageBroker.hpp b/src/3rd_party-static/message_broker/include/CMessageBroker.hpp
index c542043796..c542043796 100644
--- a/src/3rd_party-static/MessageBroker/include/CMessageBroker.hpp
+++ b/src/3rd_party-static/message_broker/include/CMessageBroker.hpp
diff --git a/src/3rd_party-static/MessageBroker/include/CMessageBrokerRegistry.hpp b/src/3rd_party-static/message_broker/include/CMessageBrokerRegistry.hpp
index 001f978bbf..001f978bbf 100644
--- a/src/3rd_party-static/MessageBroker/include/CMessageBrokerRegistry.hpp
+++ b/src/3rd_party-static/message_broker/include/CMessageBrokerRegistry.hpp
diff --git a/src/3rd_party-static/MessageBroker/include/CSender.hpp b/src/3rd_party-static/message_broker/include/CSender.hpp
index 78faf7dad2..78faf7dad2 100644
--- a/src/3rd_party-static/MessageBroker/include/CSender.hpp
+++ b/src/3rd_party-static/message_broker/include/CSender.hpp
diff --git a/src/3rd_party-static/MessageBroker/include/MBDebugHelper.h b/src/3rd_party-static/message_broker/include/MBDebugHelper.h
index fa835da3f0..fa835da3f0 100644
--- a/src/3rd_party-static/MessageBroker/include/MBDebugHelper.h
+++ b/src/3rd_party-static/message_broker/include/MBDebugHelper.h
diff --git a/src/3rd_party-static/MessageBroker/include/mb_client.hpp b/src/3rd_party-static/message_broker/include/mb_client.hpp
index cd70a31cd8..cd70a31cd8 100644
--- a/src/3rd_party-static/MessageBroker/include/mb_client.hpp
+++ b/src/3rd_party-static/message_broker/include/mb_client.hpp
diff --git a/src/3rd_party-static/MessageBroker/include/mb_controller.hpp b/src/3rd_party-static/message_broker/include/mb_controller.hpp
index 2d196aced2..2d196aced2 100644
--- a/src/3rd_party-static/MessageBroker/include/mb_controller.hpp
+++ b/src/3rd_party-static/message_broker/include/mb_controller.hpp
diff --git a/src/3rd_party-static/MessageBroker/include/mb_server.hpp b/src/3rd_party-static/message_broker/include/mb_server.hpp
index 684a89055a..684a89055a 100644
--- a/src/3rd_party-static/MessageBroker/include/mb_server.hpp
+++ b/src/3rd_party-static/message_broker/include/mb_server.hpp
diff --git a/src/3rd_party-static/MessageBroker/include/mb_tcpclient.hpp b/src/3rd_party-static/message_broker/include/mb_tcpclient.hpp
index 07697dbde7..07697dbde7 100644
--- a/src/3rd_party-static/MessageBroker/include/mb_tcpclient.hpp
+++ b/src/3rd_party-static/message_broker/include/mb_tcpclient.hpp
diff --git a/src/3rd_party-static/MessageBroker/include/mb_tcpserver.hpp b/src/3rd_party-static/message_broker/include/mb_tcpserver.hpp
index 8ab2ce6a6d..8ab2ce6a6d 100644
--- a/src/3rd_party-static/MessageBroker/include/mb_tcpserver.hpp
+++ b/src/3rd_party-static/message_broker/include/mb_tcpserver.hpp
diff --git a/src/3rd_party-static/MessageBroker/include/networking.h b/src/3rd_party-static/message_broker/include/networking.h
index a08853bb31..a08853bb31 100644
--- a/src/3rd_party-static/MessageBroker/include/networking.h
+++ b/src/3rd_party-static/message_broker/include/networking.h
diff --git a/src/3rd_party-static/MessageBroker/include/system.h b/src/3rd_party-static/message_broker/include/system.h
index fac4f7926b..fac4f7926b 100644
--- a/src/3rd_party-static/MessageBroker/include/system.h
+++ b/src/3rd_party-static/message_broker/include/system.h
diff --git a/src/3rd_party-static/MessageBroker/include/websocket_handler.hpp b/src/3rd_party-static/message_broker/include/websocket_handler.hpp
index 8bed007436..8bed007436 100644
--- a/src/3rd_party-static/MessageBroker/include/websocket_handler.hpp
+++ b/src/3rd_party-static/message_broker/include/websocket_handler.hpp
diff --git a/src/3rd_party-static/MessageBroker/src/client/mb_client.cpp b/src/3rd_party-static/message_broker/src/client/mb_client.cpp
index 6342c776a8..6342c776a8 100644
--- a/src/3rd_party-static/MessageBroker/src/client/mb_client.cpp
+++ b/src/3rd_party-static/message_broker/src/client/mb_client.cpp
diff --git a/src/3rd_party-static/MessageBroker/src/client/mb_controller.cpp b/src/3rd_party-static/message_broker/src/client/mb_controller.cpp
index 8a4a77cf30..8a4a77cf30 100644
--- a/src/3rd_party-static/MessageBroker/src/client/mb_controller.cpp
+++ b/src/3rd_party-static/message_broker/src/client/mb_controller.cpp
diff --git a/src/3rd_party-static/MessageBroker/src/client/mb_tcpclient.cpp b/src/3rd_party-static/message_broker/src/client/mb_tcpclient.cpp
index 02db417c26..02db417c26 100644
--- a/src/3rd_party-static/MessageBroker/src/client/mb_tcpclient.cpp
+++ b/src/3rd_party-static/message_broker/src/client/mb_tcpclient.cpp
diff --git a/src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerAVA.cpp b/src/3rd_party-static/message_broker/src/example/MessageBrokerControllerAVA.cpp
index 77ab1ca2c1..77ab1ca2c1 100644
--- a/src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerAVA.cpp
+++ b/src/3rd_party-static/message_broker/src/example/MessageBrokerControllerAVA.cpp
diff --git a/src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerAVA.hpp b/src/3rd_party-static/message_broker/src/example/MessageBrokerControllerAVA.hpp
index 47e684a7e4..47e684a7e4 100644
--- a/src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerAVA.hpp
+++ b/src/3rd_party-static/message_broker/src/example/MessageBrokerControllerAVA.hpp
diff --git a/src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerBackend.cpp b/src/3rd_party-static/message_broker/src/example/MessageBrokerControllerBackend.cpp
index cbbe39492b..cbbe39492b 100644
--- a/src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerBackend.cpp
+++ b/src/3rd_party-static/message_broker/src/example/MessageBrokerControllerBackend.cpp
diff --git a/src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerBackend.hpp b/src/3rd_party-static/message_broker/src/example/MessageBrokerControllerBackend.hpp
index b79411dc98..b79411dc98 100644
--- a/src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerBackend.hpp
+++ b/src/3rd_party-static/message_broker/src/example/MessageBrokerControllerBackend.hpp
diff --git a/src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerPhone.cpp b/src/3rd_party-static/message_broker/src/example/MessageBrokerControllerPhone.cpp
index 6f308e71c2..6f308e71c2 100644
--- a/src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerPhone.cpp
+++ b/src/3rd_party-static/message_broker/src/example/MessageBrokerControllerPhone.cpp
diff --git a/src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerPhone.hpp b/src/3rd_party-static/message_broker/src/example/MessageBrokerControllerPhone.hpp
index e6f4898226..e6f4898226 100644
--- a/src/3rd_party-static/MessageBroker/src/example/MessageBrokerControllerPhone.hpp
+++ b/src/3rd_party-static/message_broker/src/example/MessageBrokerControllerPhone.hpp
diff --git a/src/3rd_party-static/MessageBroker/src/example/MessageBrokerServer.cpp b/src/3rd_party-static/message_broker/src/example/MessageBrokerServer.cpp
index 405b3fcbd5..405b3fcbd5 100644
--- a/src/3rd_party-static/MessageBroker/src/example/MessageBrokerServer.cpp
+++ b/src/3rd_party-static/message_broker/src/example/MessageBrokerServer.cpp
diff --git a/src/3rd_party-static/MessageBroker/src/example/MessageBrokerServer.hpp b/src/3rd_party-static/message_broker/src/example/MessageBrokerServer.hpp
index 884ed0309f..884ed0309f 100644
--- a/src/3rd_party-static/MessageBroker/src/example/MessageBrokerServer.hpp
+++ b/src/3rd_party-static/message_broker/src/example/MessageBrokerServer.hpp
diff --git a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/CMessageBroker.cpp b/src/3rd_party-static/message_broker/src/lib_messagebroker/CMessageBroker.cpp
index 3b14489a8c..3b14489a8c 100644
--- a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/CMessageBroker.cpp
+++ b/src/3rd_party-static/message_broker/src/lib_messagebroker/CMessageBroker.cpp
diff --git a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/CMessageBrokerRegistry.cpp b/src/3rd_party-static/message_broker/src/lib_messagebroker/CMessageBrokerRegistry.cpp
index fb24d08f1c..fb24d08f1c 100644
--- a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/CMessageBrokerRegistry.cpp
+++ b/src/3rd_party-static/message_broker/src/lib_messagebroker/CMessageBrokerRegistry.cpp
diff --git a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/libMBDebugHelper.h b/src/3rd_party-static/message_broker/src/lib_messagebroker/libMBDebugHelper.h
index 0d5260cdda..0d5260cdda 100644
--- a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/libMBDebugHelper.h
+++ b/src/3rd_party-static/message_broker/src/lib_messagebroker/libMBDebugHelper.h
diff --git a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/md5.cpp b/src/3rd_party-static/message_broker/src/lib_messagebroker/md5.cpp
index b3e347d9d7..b3e347d9d7 100644
--- a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/md5.cpp
+++ b/src/3rd_party-static/message_broker/src/lib_messagebroker/md5.cpp
diff --git a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/md5.h b/src/3rd_party-static/message_broker/src/lib_messagebroker/md5.h
index 2c54c03b1b..2c54c03b1b 100644
--- a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/md5.h
+++ b/src/3rd_party-static/message_broker/src/lib_messagebroker/md5.h
diff --git a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/system.cpp b/src/3rd_party-static/message_broker/src/lib_messagebroker/system.cpp
index 456362f9d8..456362f9d8 100644
--- a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/system.cpp
+++ b/src/3rd_party-static/message_broker/src/lib_messagebroker/system.cpp
diff --git a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/websocket_handler.cpp b/src/3rd_party-static/message_broker/src/lib_messagebroker/websocket_handler.cpp
index 7d3890b7a8..7d3890b7a8 100644
--- a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/websocket_handler.cpp
+++ b/src/3rd_party-static/message_broker/src/lib_messagebroker/websocket_handler.cpp
diff --git a/src/3rd_party-static/MessageBroker/src/server/mb_server.cpp b/src/3rd_party-static/message_broker/src/server/mb_server.cpp
index 25ec7fc9f3..25ec7fc9f3 100644
--- a/src/3rd_party-static/MessageBroker/src/server/mb_server.cpp
+++ b/src/3rd_party-static/message_broker/src/server/mb_server.cpp
diff --git a/src/3rd_party-static/MessageBroker/src/server/mb_tcpserver.cpp b/src/3rd_party-static/message_broker/src/server/mb_tcpserver.cpp
index bdd7b2bfdf..bdd7b2bfdf 100644
--- a/src/3rd_party-static/MessageBroker/src/server/mb_tcpserver.cpp
+++ b/src/3rd_party-static/message_broker/src/server/mb_tcpserver.cpp
diff --git a/src/3rd_party-static/MessageBroker/src/server/networking.cpp b/src/3rd_party-static/message_broker/src/server/networking.cpp
index f054431690..f054431690 100644
--- a/src/3rd_party-static/MessageBroker/src/server/networking.cpp
+++ b/src/3rd_party-static/message_broker/src/server/networking.cpp
diff --git a/src/3rd_party-static/test/CMakeLists.txt b/src/3rd_party-static/test/CMakeLists.txt
index 33bcd82694..a38a392a01 100644
--- a/src/3rd_party-static/test/CMakeLists.txt
+++ b/src/3rd_party-static/test/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2015, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,21 +28,16 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-if(BUILD_TESTS)
-include_directories (
+include_directories(
${GMOCK_INCLUDE_DIRECTORY}
${JSONCPP_INCLUDE_DIRECTORY}
)
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}")
+
set(LIBRARIES
gmock
jsoncpp
)
-set (SOURCES
- json_reader_test.cc
-)
-
-add_library("test_JSONCPPTest" ${SOURCES})
-create_test("test_JSONCPP" "${SOURCES}" "${LIBRARIES}")
-endif() \ No newline at end of file
+create_test(jsoncpp_test "${SOURCES}" "${LIBRARIES}")
diff --git a/src/3rd_party/CMakeLists.txt b/src/3rd_party/CMakeLists.txt
index c7965992f4..cddc2d16b6 100644
--- a/src/3rd_party/CMakeLists.txt
+++ b/src/3rd_party/CMakeLists.txt
@@ -28,7 +28,27 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-INCLUDE("./set_3rd_party_paths.cmake")
+include("./set_3rd_party_paths.cmake")
+
+set(3RD_PARTY_SOURCE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+set(3RD_PARTY_BINARY_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+
+set (install-3rd_party_logger_var "")
+set (install-3rd_party_dbus_var "")
+
+if(NO_REBUILD_3RD_PARTY)
+ set(NO_REBUILD_3RD_PARTY_LOGGER ON)
+ set(NO_REBUILD_3RD_PARTY_DBUS ON)
+endif()
+
+if(FORCE_3RD_PARTY)
+ if(NO_REBUILD_3RD_PARTY)
+ message(FATAL_ERROR "Please don't turn on both FORCE_3RD_PARTY and NO_REBUILD_3RD_PARTY at the same time.")
+ else()
+ set(FORCE_3RD_PARTY_LOGGER ON)
+ set(FORCE_3RD_PARTY_DBUS ON)
+ endif()
+endif()
if(ENABLE_LOG OR HMI_DBUS_API)
# --- libexpat
@@ -37,14 +57,112 @@ if(ENABLE_LOG OR HMI_DBUS_API)
endif()
if(ENABLE_LOG)
+ if(NO_REBUILD_3RD_PARTY_LOGGER)
+ message(STATUS "Not rebuilding logger.")
+ else()
+ if(FORCE_3RD_PARTY_LOGGER)
+ message(STATUS "Force to rebuild logger.")
+
+ #build logger
+ add_custom_target(3rd_party_logger
+ make
+ WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
+ )
+
+ #install logger
+ #install either to default place with sudo or non-default plase without sudo.
+ #to install with sudo to non-default place use manual installation
+ add_custom_target(install-3rd_party_logger
+ COMMAND /bin/bash -c \"USE_DEFAULT_3RD_PARTY_PATH=${USE_DEFAULT_3RD_PARTY_PATH}\;
+ if [ \\$$USE_DEFAULT_3RD_PARTY_PATH == "true" ]\; then
+ sudo -k \;
+ sudo make install\;
+ else
+ make install\;
+ fi\"
+ DEPENDS 3rd_party_logger
+ WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
+ )
+ else()
+ #build logger
+ add_custom_target(3rd_party_logger
+ COMMAND /bin/bash -c \"cd ${CMAKE_CURRENT_SOURCE_DIR} &&
+ grep .commit_hash ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib/liblog4cxx.so 1>/dev/null 2>&1\;
+ if [ \\$$? == 0 ]\; then
+ VAR1=\\$$\( readelf -p .commit_hash ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib/liblog4cxx.so 2>/dev/null\)\;
+ VAR1=\\$$\(echo \\$$VAR1 | awk '{print \\$$NF}'\)\;
+ VAR2=-1\;
+ cd ${CMAKE_CURRENT_SOURCE_DIR}\;
+ git log . 1>/dev/null 2>&1\;
+ if [ \\$$? == 0 ]; then
+ VAR2=\\$$\(git log --pretty=\"format:%H\" -1 ${3RD_PARTY_SOURCE_DIRECTORY}/apache-log4cxx-0.10.0\)\;
+ fi\;
+ if [ \\$$VAR1 != \\$$VAR2 ]\; then
+ echo " Need to rebuild logger. " \;
+ cd ${3RD_PARTY_BINARY_DIRECTORY}\;
+ make\;
+ else
+ echo " Logger is actual. " \;
+ fi\;
+ else
+ echo " Need to build logger. " \;
+ cd ${3RD_PARTY_BINARY_DIRECTORY}\;
+ make\;
+ fi\"
+ WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
+ )
+
+ #install logger
+ #install either to default place with sudo or non-default plase without sudo.
+ #to install with sudo to non-default place use manual installation
+ add_custom_target(install-3rd_party_logger
+ COMMAND /bin/bash -c \"cd ${CMAKE_CURRENT_SOURCE_DIR} &&
+ grep .commit_hash ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib/liblog4cxx.so 1>/dev/null 2>&1\;
+ if [ \\$$? == 0 ]\; then
+ VAR1=\\$$\( readelf -p .commit_hash ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib/liblog4cxx.so 2>/dev/null\)\;
+ VAR1=\\$$\(echo \\$$VAR1 | awk '{print \\$$NF}'\)\;
+ VAR2=-1\;
+ cd ${CMAKE_CURRENT_SOURCE_DIR}\;
+ git log . 1>/dev/null 2>&1\;
+ if [ \\$$? == 0 ]; then
+ VAR2=\\$$\(git log --pretty=\"format:%H\" -1 ${3RD_PARTY_SOURCE_DIRECTORY}/apache-log4cxx-0.10.0\)\;
+ fi\;
+ if [ \\$$VAR1 != \\$$VAR2 ]\; then
+ USE_DEFAULT_3RD_PARTY_PATH=${USE_DEFAULT_3RD_PARTY_PATH}\;
+ if [ \\$$USE_DEFAULT_3RD_PARTY_PATH == "true" ]\; then
+ cd ${3RD_PARTY_BINARY_DIRECTORY}\;
+ sudo -k \;
+ sudo make install\;
+ else
+ cd ${3RD_PARTY_BINARY_DIRECTORY}\;
+ make install\;
+ fi\;
+ fi\;
+ else
+ USE_DEFAULT_3RD_PARTY_PATH=${USE_DEFAULT_3RD_PARTY_PATH}\;
+ if [ \\$$USE_DEFAULT_3RD_PARTY_PATH == "true" ]\; then
+ cd ${3RD_PARTY_BINARY_DIRECTORY}\;
+ sudo -k \;
+ sudo make install\;
+ else
+ cd ${3RD_PARTY_BINARY_DIRECTORY}\;
+ make install\;
+ fi\;
+ fi\"
+ DEPENDS 3rd_party_logger
+ WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
+ )
+ endif()
+
+ set(install-3rd_party_logger_var "install-3rd_party_logger")
+ endif()
+
set(APR_LIBS_DIRECTORY ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib PARENT_SCOPE)
set(APR_INCLUDE_DIRECTORY ${3RD_PARTY_INSTALL_PREFIX}/include PARENT_SCOPE)
set(APR_UTIL_LIBS_DIRECTORY ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib PARENT_SCOPE)
set(LOG4CXX_INCLUDE_DIRECTORY ${3RD_PARTY_INSTALL_PREFIX}/include PARENT_SCOPE)
set(LOG4CXX_LIBS_DIRECTORY ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib PARENT_SCOPE)
-endif()
-if(ENABLE_LOG)
# --- libapr-1
add_subdirectory(apr-cmake)
@@ -57,14 +175,117 @@ endif()
# --- D-Bus
if(HMI_DBUS_API)
+ if(NO_REBUILD_3RD_PARTY_DBUS)
+ message(STATUS "Not rebuilding D-Bus.")
+ else()
+ if(FORCE_3RD_PARTY_DBUS)
+ message(STATUS "Force to rebuild D-Bus.")
+
+ #build d-bus
+ add_custom_target(3rd_party_dbus
+ make
+ WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
+ )
+
+ #install d-bus
+ #install either to default place with sudo or non-default plase without sudo.
+ #to install with sudo to non-default place use manual installation
+ add_custom_target(install-3rd_party_dbus
+ COMMAND /bin/bash -c \"USE_DEFAULT_3RD_PARTY_PATH=${USE_DEFAULT_3RD_PARTY_PATH}\;
+ if [ \\$$USE_DEFAULT_3RD_PARTY_PATH == "true" ]\; then
+ sudo -k \;
+ sudo make install\;
+ else
+ make install\;
+ fi\"
+ DEPENDS 3rd_party_dbus
+ WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
+ )
+ else()
+ #build d-bus
+ add_custom_target(3rd_party_dbus
+ COMMAND /bin/bash -c \"grep .commit_hash ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib/libdbus-1.so 1>/dev/null 2>&1\;
+ if [ \\$$? == 0 ]\; then
+ VAR1=\\$$\(readelf -p .commit_hash ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib/libdbus-1.so 2>/dev/null\)\;
+ VAR1=\\$$\(echo \\$$VAR1 | awk '{print \\$$NF}'\)\;
+ VAR2=-1\;
+ cd ${CMAKE_CURRENT_SOURCE_DIR}\;
+ git log . 1>/dev/null 2>&1\;
+ if [ \\$$? == 0 ]; then
+ VAR2=\\$$\(git log --pretty=\"format:%H\" -1 ${3RD_PARTY_SOURCE_DIRECTORY}/dbus-1.7.8\)\;
+ fi\;
+ if [ \\$$VAR1 != \\$$VAR2 ]\; then
+ echo " Need to rebuild D-Bus. " \;
+ cd ${3RD_PARTY_BINARY_DIRECTORY}\;
+ make\;
+ else
+ echo " D-Bus is actual. " \;
+ fi\;
+ else
+ echo " Need to build D-Bus. " \;
+ cd ${3RD_PARTY_BINARY_DIRECTORY}\;
+ make\;
+ fi\"
+ WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
+ )
+
+ #install d-bus
+ #install either to default place with sudo or non-default plase without sudo.
+ #to install with sudo to non-default place use manual installation
+ add_custom_target(install-3rd_party_dbus
+ COMMAND /bin/bash -c \"grep .commit_hash ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib/libdbus-1.so 1>/dev/null 2>&1\;
+ if [ \\$$? == 0 ]\; then
+ VAR1=\\$$\(readelf -p .commit_hash ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib/libdbus-1.so 2>/dev/null\)\;
+ VAR1=\\$$\(echo \\$$VAR1 | awk '{print \\$$NF}'\)\;
+ VAR2=-1\;
+ cd ${CMAKE_CURRENT_SOURCE_DIR}\;
+ git log . 1>/dev/null 2>&1\;
+ if [ \\$$? == 0 ]; then
+ VAR2=\\$$\(git log --pretty=\"format:%H\" -1 ${3RD_PARTY_SOURCE_DIRECTORY}/dbus-1.7.8\)\;
+ fi\;
+ if [ \\$$VAR1 != \\$$VAR2 ]\; then
+ USE_DEFAULT_3RD_PARTY_PATH=${USE_DEFAULT_3RD_PARTY_PATH}\;
+ if [ \\$$USE_DEFAULT_3RD_PARTY_PATH == "true" ]\; then
+ cd ${3RD_PARTY_BINARY_DIRECTORY}\;
+ sudo -k \;
+ sudo make install\;
+ else
+ cd ${3RD_PARTY_BINARY_DIRECTORY}\;
+ make install\;
+ fi\;
+ fi\;
+ else
+ USE_DEFAULT_3RD_PARTY_PATH=${USE_DEFAULT_3RD_PARTY_PATH}\;
+ if [ \\$$USE_DEFAULT_3RD_PARTY_PATH == "true" ]\; then
+ cd ${3RD_PARTY_BINARY_DIRECTORY}\;
+ sudo -k \;
+ sudo make install\;
+ else
+ cd ${3RD_PARTY_BINARY_DIRECTORY}\;
+ make install\;
+ fi\;
+ fi\"
+ DEPENDS 3rd_party_dbus
+ WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
+ )
+
+ set(install-3rd_party_dbus_var "install-3rd_party_dbus")
+ endif()
+ endif()
+
+ # --- D-Bus
set(DBUS_INCLUDE_DIR ${3RD_PARTY_INSTALL_PREFIX}/include)
set(DBUS_INCLUDE_DIR_ARCH ${3RD_PARTY_INSTALL_PREFIX_ARCH}/include)
set(DBUS_INCLUDE_DIRS ${DBUS_INCLUDE_DIR} ${DBUS_INCLUDE_DIR_ARCH})
set(DBUS_INCLUDE_DIRS ${DBUS_INCLUDE_DIRS} PARENT_SCOPE)
set(DBUS_LIBS_DIRECTORY ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib PARENT_SCOPE)
-endif()
-if(HMI_DBUS_API)
add_subdirectory(dbus-cmake)
endif()
+add_custom_target(install-3rd_party
+ DEPENDS ${install-3rd_party_logger_var}
+ DEPENDS ${install-3rd_party_dbus_var}
+ WORKING_DIRECTORY ${3RD_PARTY_BINARY_DIRECTORY}
+)
+
diff --git a/src/3rd_party/apache-log4cxx-cmake/CMakeLists.txt b/src/3rd_party/apache-log4cxx-cmake/CMakeLists.txt
index a3dd48d1f7..57291f88a4 100644
--- a/src/3rd_party/apache-log4cxx-cmake/CMakeLists.txt
+++ b/src/3rd_party/apache-log4cxx-cmake/CMakeLists.txt
@@ -74,7 +74,7 @@ add_custom_target(liblog4cxx ALL make
cd ${CMAKE_CURRENT_SOURCE_DIR} &&
git log --pretty=\\"format:%H\\" -1 ${LOG4CXX_SOURCE_DIRECTORY} > /tmp/commit_hash 2>/dev/null &&
echo \\"Adding .commit_hash section\\" &&
- ${objcopy} --add-section .commit_hash=/tmp/commit_hash ${LOG4CXX_LIBS_DIRECTORY}/liblog4cxx.so ${LOG4CXX_LIBS_DIRECTORY}/liblog4cxx.so 1>/dev/null 2>&1\;
+ objcopy --add-section .commit_hash=/tmp/commit_hash ${LOG4CXX_LIBS_DIRECTORY}/liblog4cxx.so ${LOG4CXX_LIBS_DIRECTORY}/liblog4cxx.so 1>/dev/null 2>&1\;
fi;
fi\"
DEPENDS ${LOG4CXX_BUILD_DIRECTORY}/Makefile
diff --git a/src/appMain/CMakeLists.txt b/src/appMain/CMakeLists.txt
index a6774ec6f3..1382a07d2f 100644
--- a/src/appMain/CMakeLists.txt
+++ b/src/appMain/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2014, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,12 +28,44 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-IF (HMIADAPTER STREQUAL "messagebroker")
-set (BROKER_LIBRARIES
- MessageBrokerClient
- MessageBrokerServer
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
+
+find_package(SDLOpenSSL REQUIRED)
+
+include_directories(
+ ${COMPONENTS_DIR}/protocol_handler/include
+ ${COMPONENTS_DIR}/application_manager/include
+ ${COMPONENTS_DIR}/formatters/include
+ ${COMPONENTS_DIR}/transport_manager/include
+ ${COMPONENTS_DIR}/security_manager/include
+ ${COMPONENTS_DIR}/security_manager/include
+ ${COMPONENTS_DIR}/config_profile/include
+ ${COMPONENTS_DIR}/utils/include
+ ${COMPONENTS_DIR}/connection_handler/include
+ ${COMPONENTS_DIR}/hmi_message_handler/include
+ ${COMPONENTS_DIR}/request_watchdog/include
+ ${COMPONENTS_DIR}/smart_objects/include
+ ${COMPONENTS_DIR}/media_manager/include
+ ${COMPONENTS_DIR}/telemetry_monitor/include
+ ${POLICY_PATH}/include/
+ ${POLICY_GLOBAL_INCLUDE_PATH}/
+ ${COMPONENTS_DIR}/resumption/include
+ ${COMPONENTS_DIR}/dbus/include
+ ${CMAKE_BINARY_DIR}/src/components
+ ${JSONCPP_INCLUDE_DIRECTORY}
+ ${LOG4CXX_INCLUDE_DIRECTORY}
+ ${OPENSSL_INCLUDE_DIRECTORY}
+ ${MESSAGE_BROKER_INCLUDE_DIRECTORY}
)
-ENDIF ()
+
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}")
+
+if (HMIADAPTER STREQUAL "messagebroker")
+ set (BROKER_LIBRARIES
+ message_broker_client
+ message_broker_server
+ )
+endif()
cmake_policy(PUSH)
# make link_directories() treat paths relative to the source dir
@@ -43,18 +75,18 @@ link_directories(${LIBUSB_LIBS_DIRECTORY})
cmake_policy(POP)
if (EXTENDED_MEDIA_MODE)
-set(default_media_inc
-${GSTREAMER_gst_INCLUDE_DIR}
-${GSTREAMER_gstconfig_INCLUDE_DIR}
-)
+ set(default_media_inc
+ ${GSTREAMER_gst_INCLUDE_DIR}
+ ${GSTREAMER_gstconfig_INCLUDE_DIR}
+ )
else(EXTENDED_MEDIA_MODE)
-set(default_media_inc
-)
+ set(default_media_inc)
endif()
if (TELEMETRY_MONITOR)
- set(TELEMETRY_MONITOR_LIB
- TelemetryMonitor)
+ set(TELEMETRY_MONITOR_LIB
+ TelemetryMonitor
+ )
endif()
set(LIBRARIES
@@ -73,7 +105,7 @@ set(LIBRARIES
TransportManager
${SecurityManagerLibrary}
HMIMessageHandler
- MessageBroker
+ message_broker
${BROKER_LIBRARIES}
Utils
jsoncpp
@@ -87,12 +119,15 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
endif()
if (BUILD_BT_SUPPORT)
- list(APPEND LIBRARIES bluetooth)
+ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ list(APPEND LIBRARIES bluetooth)
+ endif()
endif()
+
if (BUILD_USB_SUPPORT)
-if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
- list(APPEND LIBRARIES Libusb-1.0.16)
-endif()
+ if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ list(APPEND LIBRARIES Libusb-1.0.16)
+ endif()
endif()
if(ENABLE_LOG)
@@ -102,45 +137,6 @@ if(ENABLE_LOG)
list(APPEND LIBRARIES expat -L${EXPAT_LIBS_DIRECTORY})
endif()
-include_directories (
- ./
- ${COMPONENTS_DIR}/protocol_handler/include/
- ${JSONCPP_INCLUDE_DIRECTORY}
- ${COMPONENTS_DIR}/application_manager/include
- ${COMPONENTS_DIR}/formatters/include
- ${COMPONENTS_DIR}/transport_manager/include
- ${COMPONENTS_DIR}/security_manager/include
- ${SecurityManagerIncludeDir}
- ${COMPONENTS_DIR}/security_manager/include
- ${COMPONENTS_DIR}/config_profile/include
- ${COMPONENTS_DIR}/utils/include/
- ${COMPONENTS_DIR}/connection_handler/include/
- ${COMPONENTS_DIR}/hmi_message_handler/include
- ${COMPONENTS_DIR}/request_watchdog/include
- ${COMPONENTS_DIR}/smart_objects/include/
- ${COMPONENTS_DIR}/media_manager/include/
- ${COMPONENTS_DIR}/telemetry_monitor/include
- ${POLICY_PATH}/include/
- ${POLICY_GLOBAL_INCLUDE_PATH}/
- ${COMPONENTS_DIR}/resumption/include/
- ${MESSAGE_BROKER_INCLUDE_DIRECTORY}
- ${ENCRYPTION_INCLUDE_DIRECTORY}
- ${COMPONENTS_DIR}
- ${CMAKE_BINARY_DIR}/src/components/
- ${COMPONENTS_DIR}/dbus/include/
- ${CMAKE_SOURCE_DIR}
- ${default_media_inc}
- ${LOG4CXX_INCLUDE_DIRECTORY}
- ${CMAKE_SOURCE_DIR}/src/3rd_party/dbus-1.7.8
- ${CMAKE_SOURCE_DIR}/src/3rd_party/dbus-1.7.8/dbus/
-)
-
-set (SOURCES
- main.cc
- life_cycle.cc
- signal_handlers.cc
-)
-
if( NOT CMAKE_BUILD_TYPE )
set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build. Options are: None, Debug, Release, RelWithDebInfo, MinSizeRel." FORCE)
endif()
@@ -148,7 +144,6 @@ endif()
add_executable(${PROJECT} ${SOURCES})
target_link_libraries(${PROJECT} ${LIBRARIES})
-
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/log4cxx.properties DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/audio.8bit.wav DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test.txt DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
diff --git a/src/appMain/life_cycle.cc b/src/appMain/life_cycle.cc
index 3c3895d02f..9b4910585f 100644
--- a/src/appMain/life_cycle.cc
+++ b/src/appMain/life_cycle.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
@@ -34,7 +34,7 @@
#include "utils/signals.h"
#include "utils/make_shared.h"
#include "config_profile/profile.h"
-#include "resumption/last_state.h"
+#include "resumption/last_state_impl.h"
#ifdef ENABLE_SECURITY
#include "security_manager/security_manager_impl.h"
@@ -102,8 +102,8 @@ LifeCycle::LifeCycle(const profile::Profile& profile)
bool LifeCycle::StartComponents() {
LOG4CXX_AUTO_TRACE(logger_);
DCHECK(!last_state_);
- last_state_ = new resumption::LastState(profile_.app_storage_folder(),
- profile_.app_info_storage());
+ last_state_ = new resumption::LastStateImpl(profile_.app_storage_folder(),
+ profile_.app_info_storage());
DCHECK(!transport_manager_);
transport_manager_ = new transport_manager::TransportManagerDefault(profile_);
@@ -292,15 +292,6 @@ bool LifeCycle::InitMessageSystem() {
}
#endif // DBUS_HMIADAPTER
-#ifdef MQUEUE_HMIADAPTER
-bool LifeCycle::InitMessageSystem() {
- hmi_message_adapter_ = new hmi_message_handler::MqueueAdapter(hmi_handler_);
- hmi_handler.AddHMIMessageAdapter(hmi_message_adapter_);
- return true;
-}
-
-#endif // MQUEUE_HMIADAPTER
-
namespace {
void sig_handler(int sig) {
switch (sig) {
diff --git a/src/appMain/life_cycle.h b/src/appMain/life_cycle.h
index 2d6e0b938e..f1b3800254 100644
--- a/src/appMain/life_cycle.h
+++ b/src/appMain/life_cycle.h
@@ -43,9 +43,6 @@
#if (defined(MESSAGEBROKER_HMIADAPTER) || defined(PASA_HMI))
#include "hmi_message_handler/messagebroker_adapter.h"
#endif // #if ( defined (MESSAGEBROKER_HMIADAPTER) || defined(PASA_HMI) )
-#ifdef MQUEUE_HMIADAPTER
-#include "hmi_message_handler/mqueue_adapter.h"
-#endif // MQUEUE_HMIADAPTER
#include "application_manager/application_manager_impl.h"
#include "connection_handler/connection_handler_impl.h"
#include "protocol_handler/protocol_handler_impl.h"
diff --git a/src/components/CMakeLists.txt b/src/components/CMakeLists.txt
index b4063c7934..0304ce986f 100644
--- a/src/components/CMakeLists.txt
+++ b/src/components/CMakeLists.txt
@@ -28,38 +28,38 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-set(COMPONENTS_DIR ${CMAKE_SOURCE_DIR}/src/components)
+set(COMPONENTS_DIR ${COMPONENTS_DIR} PARENT_SCOPE)
-# --- HMI_API interfaces
+# --- HMI, MOBILE Interfaces
add_subdirectory(./interfaces)
-# --- ProtocolHandler
+# --- Protocol Handler
add_subdirectory(./protocol)
-# --- TransportManager
+# --- Transport Manager
add_subdirectory(./transport_manager)
-# --- Policies
+# --- Resumption
add_subdirectory(./resumption)
-# --- formatters
+# --- Formatters
add_subdirectory(./formatters)
-# --- ProtocolHandler
+# --- Protocol Handler
add_subdirectory(./protocol_handler)
-# --- ConnectionHandler
+# --- Connection Handler
add_subdirectory(./connection_handler)
# --- Utils
add_subdirectory(./utils)
-# --- Security manager
+# --- Security Manager
if(ENABLE_SECURITY)
add_subdirectory(./security_manager)
endif()
-
+# --- Policy
if (${EXTENDED_POLICY} STREQUAL "EXTERNAL_PROPRIETARY")
add_subdirectory(./policy/policy_external/)
message(STATUS "Use external policy")
@@ -68,35 +68,30 @@ else()
message(STATUS "Use regular policy")
endif()
-# --- Validated types
+# --- Validated Types
add_subdirectory(./rpc_base)
-# --- SmartObjects
+# --- Smart Objects
add_subdirectory(./smart_objects)
-# --- Application manager
+# --- Application Manager
add_subdirectory(./application_manager)
# --- HMI Message Handler
add_subdirectory(./hmi_message_handler)
-# --- Config
+# --- Config Profile
add_subdirectory(./config_profile)
-# --- AudioManager
+# --- Media Manager
add_subdirectory(./media_manager)
-if (TELEMETRY_MONITOR)
- add_subdirectory(./telemetry_monitor)
+# --- Telemetry Monitor
+if(TELEMETRY_MONITOR)
+ add_subdirectory(./telemetry_monitor)
endif()
-
-if (${HMI_DBUS_API})
# --- DBus
- add_subdirectory(./dbus)
-endif ()
-if (${QT_HMI})
-# --- Qt HMI
- add_subdirectory(./qt_hmi)
-endif ()
-
+if(HMI_DBUS_API)
+ add_subdirectory(./dbus)
+endif()
diff --git a/src/components/HMI/IVSU/PROPRIETARY_REQUEST~ b/src/components/HMI/IVSU/PROPRIETARY_REQUEST~
deleted file mode 100644
index e69de29bb2..0000000000
--- a/src/components/HMI/IVSU/PROPRIETARY_REQUEST~
+++ /dev/null
diff --git a/src/components/application_manager/CMakeLists.txt b/src/components/application_manager/CMakeLists.txt
index da68a64400..1a0e0f9880 100644
--- a/src/components/application_manager/CMakeLists.txt
+++ b/src/components/application_manager/CMakeLists.txt
@@ -28,6 +28,8 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/platform.cmake)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
set (AM_SOURCE_DIR ${COMPONENTS_DIR}/application_manager)
set (AM_TEST_DIR ${AM_SOURCE_DIR}/test)
@@ -41,23 +43,21 @@ include_directories (
${COMPONENTS_DIR}/protocol_handler/include/
${COMPONENTS_DIR}/smart_objects/include/
${COMPONENTS_DIR}/hmi_message_handler/include
- ${COMPONENTS_DIR}/media_manager/include/
- ${COMPONENTS_DIR}/connection_handler/include/
- ${COMPONENTS_DIR}/config_profile/include/
- ${COMPONENTS_DIR}/request_watchdog/include/
- ${COMPONENTS_DIR}/resumption/include/
- ${COMPONENTS_DIR}/app_launch/include/
- ${COMPONENTS_DIR}/rpc_base/include/
- ${COMPONENTS_DIR}/interfaces
+ ${COMPONENTS_DIR}/media_manager/include
+ ${COMPONENTS_DIR}/connection_handler/include
+ ${COMPONENTS_DIR}/config_profile/include
+ ${COMPONENTS_DIR}/request_watchdog/include
+ ${COMPONENTS_DIR}/resumption/include
+ ${COMPONENTS_DIR}/rpc_base/include
${POLICY_PATH}/include/
${POLICY_GLOBAL_INCLUDE_PATH}/
- ${CMAKE_BINARY_DIR}/src/components/
- ${POLICY_INCLUDE_PATH}/
+ ${CMAKE_BINARY_DIR}/src/components
${JSONCPP_INCLUDE_DIRECTORY}
${ENCRYPTION_INCLUDE_DIRECTORY}
${MESSAGE_BROKER_INCLUDE_DIRECTORY}
${LOG4CXX_INCLUDE_DIRECTORY}
)
+MESSAGE (ERROR "${POLICY_PATH}")
if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
include_directories(
@@ -71,48 +71,60 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "QNX")
)
endif()
-file (GLOB SOURCES
- ${AM_SOURCE_DIR}/src/*
+set (MESSAGE_HELPER_SOURCE_DIR
+ ${AM_SOURCE_DIR}/src/message_helper
)
-set (MESSAGE_HELPER_SOURCES
- ${AM_SOURCE_DIR}/src/message_helper/message_helper.cc
+set (MESSAGE_HELPER_PATHS
+ ${MESSAGE_HELPER_SOURCE_DIR}
)
+collect_sources(MESSAGE_HELPER_SOURCES "${MESSAGE_HELPER_PATHS}")
-set (POLICIES_MANAGER
-${AM_SOURCE_DIR}/src/policies/policy_handler.cc
-${AM_SOURCE_DIR}/src/usage_statistics.cc
-${AM_SOURCE_DIR}/src/policies/policy_event_observer.cc
-${AM_SOURCE_DIR}/src/policies/delegates/app_permission_delegate.cc
-${AM_SOURCE_DIR}/src/policies/delegates/statistics_delegate.cc
+
+set (POLICIES_SOURCE_DIR
+ ${AM_SOURCE_DIR}/src/policies
)
- include_directories(
- ${POLICY_PATH}/src/policy/policy_table/table_struct
- )
-file (GLOB EVENT_ENGINE
- ${AM_SOURCE_DIR}/src/event_engine/*
+set (POLICIES_MANAGER_SOURCES
+ ${POLICIES_SOURCE_DIR}/policy_handler.cc
+ ${POLICIES_SOURCE_DIR}/policy_event_observer.cc
+ ${POLICIES_SOURCE_DIR}/delegates/app_permission_delegate.cc
+ ${POLICIES_SOURCE_DIR}/delegates/statistics_delegate.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usage_statistics.cc
+)
+
+include_directories(
+ ${POLICY_PATH}/src/policy/policy_table/table_struct
)
-file (GLOB RESUMPTION
- ${AM_SOURCE_DIR}/src/resumption/*
+set (EVENT_ENGINE_SOURCE_DIR
+ ${AM_SOURCE_DIR}/src/event_engine
)
-file (GLOB APP_LAUNCH
- ${AM_SOURCE_DIR}/src/app_launch/*
+set (EVENT_ENGINE_PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/application_manager/event_engine
+ ${EVENT_ENGINE_SOURCE_DIR}
)
+collect_sources(EVENT_ENGINE_SOURCES "${EVENT_ENGINE_PATHS}")
set (COMMANDS_SOURCE_DIR
${AM_SOURCE_DIR}/src/commands
)
+collect_sources(POLICIES_SOURCES "${POLICIES_PATHS}")
-file (GLOB MOBILE_COMMANDS_SOURCES
- ${COMMANDS_SOURCE_DIR}/*
- ${COMMANDS_SOURCE_DIR}/mobile/*
+set(MOBILE_COMMANDS_EXCLUDE_PATHS
+ ${COMMANDS_SOURCE_DIR}/hmi
)
+set (MOBILE_COMMANDS_PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/application_manager/commands
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/application_manager/commands/mobile
+ ${COMMANDS_SOURCE_DIR}
+ ${COMMANDS_SOURCE_DIR}/mobile
+)
+collect_sources(MOBILE_COMMANDS_SOURCES "${MOBILE_COMMANDS_PATHS}" "${MOBILE_COMMANDS_EXCLUDE_PATHS}")
- set (HMI_COMMANDS_SOURCES
+set (HMI_COMMANDS_SOURCES
${COMMANDS_SOURCE_DIR}/hmi/request_to_hmi.cc
${COMMANDS_SOURCE_DIR}/hmi/response_from_hmi.cc
${COMMANDS_SOURCE_DIR}/hmi/request_from_hmi.cc
@@ -129,8 +141,6 @@ file (GLOB MOBILE_COMMANDS_SOURCES
${COMMANDS_SOURCE_DIR}/hmi/activate_app_response.cc
${COMMANDS_SOURCE_DIR}/hmi/get_system_info_request.cc
${COMMANDS_SOURCE_DIR}/hmi/get_system_info_response.cc
- ${COMMANDS_SOURCE_DIR}/hmi/decrypt_certificate_request.cc
- ${COMMANDS_SOURCE_DIR}/hmi/decrypt_certificate_response.cc
${COMMANDS_SOURCE_DIR}/hmi/sdl_get_list_of_permissions_request.cc
${COMMANDS_SOURCE_DIR}/hmi/sdl_get_list_of_permissions_response.cc
${COMMANDS_SOURCE_DIR}/hmi/sdl_get_user_friendly_message_request.cc
@@ -318,6 +328,8 @@ file (GLOB MOBILE_COMMANDS_SOURCES
${COMMANDS_SOURCE_DIR}/hmi/dial_number_request.cc
${COMMANDS_SOURCE_DIR}/hmi/dial_number_response.cc
${COMMANDS_SOURCE_DIR}/hmi/on_event_changed_notification.cc
+ ${COMMANDS_SOURCE_DIR}/hmi/decrypt_certificate_response.cc
+ ${COMMANDS_SOURCE_DIR}/hmi/decrypt_certificate_request.cc
)
set (HMI_COMMANDS_SOURCES_JSON
@@ -361,7 +373,20 @@ if (${HMI_DBUS_API})
set (HMI_COMMANDS_SOURCES ${HMI_COMMANDS_SOURCES} ${HMI_COMMANDS_SOURCES_DBUS})
endif (${HMI_DBUS_API})
-SET (LIBRARIES
+set(EXCLUDE_PATHS
+ ${COMMANDS_SOURCE_DIR}
+ ${EVENT_ENGINE_SOURCE_DIR}
+ ${MESSAGE_HELPER_SOURCE_DIR}
+ ${POLICIES_SOURCE_DIR}
+)
+
+set(PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+)
+collect_sources(SOURCES "${PATHS}" "${EXCLUDE_PATHS}")
+
+set(LIBRARIES
HMI_API
MOBILE_API
v4_protocol_v1_2_no_extra
@@ -377,15 +402,14 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
list(APPEND LIBRARIES sqlite3)
endif ()
-IF(${CMAKE_SYSTEM_NAME} MATCHES "QNX")
+if (${CMAKE_SYSTEM_NAME} MATCHES "QNX")
list(REMOVE_ITEM LIBRARIES dl)
endif()
-add_library("AMEventEngine" ${EVENT_ENGINE})
+add_library("AMEventEngine" ${EVENT_ENGINE_SOURCES})
target_link_libraries("AMEventEngine" ${LIBRARIES})
-
-add_library("AMPolicyLibrary" ${POLICIES_MANAGER} )
+add_library("AMPolicyLibrary" ${POLICIES_MANAGER_SOURCES} )
target_link_libraries("AMPolicyLibrary" ${LIBRARIES} AMEventEngine)
add_library("AMHMICommandsLibrary" ${HMI_COMMANDS_SOURCES})
@@ -396,18 +420,21 @@ add_library("MessageHelper" ${MESSAGE_HELPER_SOURCES})
add_library("AMMobileCommandsLibrary" ${MOBILE_COMMANDS_SOURCES} )
target_link_libraries("AMMobileCommandsLibrary" ${LIBRARIES} AMEventEngine)
-add_library("ApplicationManager" ${SOURCES} ${RESUMPTION} ${APP_LAUNCH})
+add_library("ApplicationManager" ${SOURCES})
-target_link_libraries("ApplicationManager" ${LIBRARIES} AMHMICommandsLibrary
- AMMobileCommandsLibrary
- AMEventEngine
- AMPolicyLibrary)
+list(APPEND LIBRARIES
+ AMEventEngine
+ AMPolicyLibrary
+ AMHMICommandsLibrary
+ AMMobileCommandsLibrary
+)
if(ENABLE_LOG)
- target_link_libraries("ApplicationManager" log4cxx -L${LOG4CXX_LIBS_DIRECTORY})
+ list(APPEND LIBRARIES log4cxx -L${LOG4CXX_LIBS_DIRECTORY})
endif()
+target_link_libraries("ApplicationManager" ${LIBRARIES})
+
if(BUILD_TESTS)
add_subdirectory(test)
- add_subdirectory(test/message_helper)
endif()
diff --git a/src/components/application_manager/include/application_manager/commands/hmi/request_from_hmi.h b/src/components/application_manager/include/application_manager/commands/hmi/request_from_hmi.h
index 47f4e687ce..628d3257d9 100644
--- a/src/components/application_manager/include/application_manager/commands/hmi/request_from_hmi.h
+++ b/src/components/application_manager/include/application_manager/commands/hmi/request_from_hmi.h
@@ -68,14 +68,24 @@ class RequestFromHMI : public CommandImpl, public event_engine::EventObserver {
* @param correlation_id the correlation id for the response.
* @param function_id the function id for which response will be sent
* @param result_code the result code.
+ * @param error_message info message for error.
*/
void SendErrorResponse(const uint32_t correlation_id,
- hmi_apis::FunctionID::eType function_id,
- hmi_apis::Common_Result::eType result_code);
+ const hmi_apis::FunctionID::eType function_id,
+ const hmi_apis::Common_Result::eType result_code,
+ const std::string error_message);
- void FillCommonParametersOfSO(smart_objects::SmartObject* message,
- uint32_t correlation_id,
- hmi_apis::FunctionID::eType function_id);
+ private:
+ /**
+ * @brief Fills common parameters for SO
+ * @param message Contains SO for filling
+ * @param correlation_id the correlation id for the response.
+ * @param function_id the function id for which response will be sent
+ */
+ void FillCommonParametersOfSO(
+ NsSmartDeviceLink::NsSmartObjects::SmartObject& message,
+ const uint32_t correlation_id,
+ const hmi_apis::FunctionID::eType function_id);
private:
DISALLOW_COPY_AND_ASSIGN(RequestFromHMI);
diff --git a/src/components/application_manager/include/application_manager/commands/mobile/reset_global_properties_request.h b/src/components/application_manager/include/application_manager/commands/mobile/reset_global_properties_request.h
index 0053c14f3c..49e5fe34ff 100644
--- a/src/components/application_manager/include/application_manager/commands/mobile/reset_global_properties_request.h
+++ b/src/components/application_manager/include/application_manager/commands/mobile/reset_global_properties_request.h
@@ -108,6 +108,16 @@ class ResetGlobalPropertiesRequest : public CommandRequestImpl {
application_manager::ApplicationSharedPtr const app);
/*
+ * @brief Prepare result for sending to mobile application
+ * @param out_result_code contains result code for sending to mobile
+ * application
+ * @param out_response_info contains info for sending to mobile applicaion
+ * @return result for sending to mobile application.
+ */
+ bool PrepareResponseParameters(mobile_apis::Result::eType& out_result_code,
+ std::string& out_response_info);
+
+ /*
* @brief Check if there some not delivered hmi responses exist
*
* @return true if all responses received
@@ -124,6 +134,8 @@ class ResetGlobalPropertiesRequest : public CommandRequestImpl {
hmi_apis::Common_Result::eType ui_result_;
hmi_apis::Common_Result::eType tts_result_;
+ std::string ui_response_info_;
+ std::string tts_response_info_;
};
} // namespace commands
diff --git a/src/components/application_manager/src/app_launch/app_launch_data_json.cc b/src/components/application_manager/src/app_launch/app_launch_data_json.cc
index 260dde7205..7599dcccb3 100644
--- a/src/components/application_manager/src/app_launch/app_launch_data_json.cc
+++ b/src/components/application_manager/src/app_launch/app_launch_data_json.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
@@ -70,10 +70,9 @@ Json::Value& AppLaunchDataJson::GetApplicationData() const {
using namespace application_manager;
LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock autolock(app_launch_json_lock_);
- Json::Value& dictionary = last_state().dictionary;
+ Json::Value& dictionary = last_state().get_dictionary();
if (!dictionary.isMember(strings::app_launch)) {
- last_state().dictionary[strings::app_launch] =
- Json::Value(Json::objectValue);
+ dictionary[strings::app_launch] = Json::Value(Json::objectValue);
LOG4CXX_WARN(logger_, "app_launch section is missed");
}
Json::Value& app_launch = dictionary[strings::app_launch];
@@ -276,7 +275,7 @@ bool AppLaunchDataJson::DeleteOldestAppData() {
bool AppLaunchDataJson::Persist() {
LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock autolock(app_launch_json_lock_);
- last_state().SaveToFileSystem();
+ last_state().SaveStateToFileSystem();
return true;
}
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 2c57773a8f..ab0a17f1fb 100644
--- a/src/components/application_manager/src/commands/command_request_impl.cc
+++ b/src/components/application_manager/src/commands/command_request_impl.cc
@@ -562,11 +562,11 @@ void CommandRequestImpl::RemoveDisallowedParameters() {
parameters_permissions_.disallowed_params.end();
for (; it_disallowed != it_disallowed_end; ++it_disallowed) {
if (params.keyExists(*it_disallowed)) {
- params.erase(*it_disallowed);
- removed_parameters_permissions_.disallowed_params.insert(*it_disallowed);
- LOG4CXX_INFO(
- logger_,
- "Following parameter is disallowed by user: " << *it_disallowed);
+ const std::string key = *it_disallowed;
+ params.erase(key);
+ removed_parameters_permissions_.disallowed_params.insert(key);
+ LOG4CXX_INFO(logger_,
+ "Following parameter is disallowed by user: " << key);
}
}
@@ -577,11 +577,11 @@ void CommandRequestImpl::RemoveDisallowedParameters() {
parameters_permissions_.undefined_params.end();
for (; it_undefined != it_undefined_end; ++it_undefined) {
if (params.keyExists(*it_undefined)) {
- params.erase(*it_undefined);
- removed_parameters_permissions_.undefined_params.insert(*it_undefined);
- LOG4CXX_INFO(
- logger_,
- "Following parameter is disallowed by policy: " << *it_undefined);
+ const std::string key = *it_undefined;
+ params.erase(key);
+ removed_parameters_permissions_.undefined_params.insert(key);
+ LOG4CXX_INFO(logger_,
+ "Following parameter is disallowed by policy: " << key);
}
}
diff --git a/src/components/application_manager/src/commands/hmi/navi_audio_start_stream_request.cc b/src/components/application_manager/src/commands/hmi/navi_audio_start_stream_request.cc
index 1e46eab52e..0bcb26df8a 100644
--- a/src/components/application_manager/src/commands/hmi/navi_audio_start_stream_request.cc
+++ b/src/components/application_manager/src/commands/hmi/navi_audio_start_stream_request.cc
@@ -156,7 +156,7 @@ void AudioStartStreamRequest::RetryStartSession() {
}
uint32_t curr_retry_number = app->audio_stream_retry_number();
- if (curr_retry_number < retry_number_ - 1) {
+ if (curr_retry_number < retry_number_) {
LOG4CXX_DEBUG(
logger_,
"Send AudioStartStream retry. retry_number = " << curr_retry_number);
diff --git a/src/components/application_manager/src/commands/hmi/navi_start_stream_request.cc b/src/components/application_manager/src/commands/hmi/navi_start_stream_request.cc
index 9f1c4b7902..b06c69e703 100644
--- a/src/components/application_manager/src/commands/hmi/navi_start_stream_request.cc
+++ b/src/components/application_manager/src/commands/hmi/navi_start_stream_request.cc
@@ -113,7 +113,7 @@ void NaviStartStreamRequest::on_event(const event_engine::Event& event) {
}
if (hmi_apis::Common_Result::REJECTED == code) {
LOG4CXX_INFO(logger_, "StartStream response REJECTED ");
- SendRequest();
+ RetryStartSession();
break;
}
}
@@ -156,7 +156,7 @@ void NaviStartStreamRequest::RetryStartSession() {
}
uint32_t curr_retry_number = app->video_stream_retry_number();
- if (curr_retry_number < retry_number_ - 1) {
+ if (curr_retry_number < retry_number_) {
LOG4CXX_DEBUG(
logger_,
"Send NaviStartStream retry. retry_number = " << curr_retry_number);
diff --git a/src/components/application_manager/src/commands/hmi/request_from_hmi.cc b/src/components/application_manager/src/commands/hmi/request_from_hmi.cc
index 72469d88ce..1119e7c4fd 100644
--- a/src/components/application_manager/src/commands/hmi/request_from_hmi.cc
+++ b/src/components/application_manager/src/commands/hmi/request_from_hmi.cc
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2013, Ford Motor Company
+ Copyright (c) 2016, Ford Motor Company
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -65,9 +65,10 @@ void RequestFromHMI::SendResponse(
const uint32_t correlation_id,
const hmi_apis::FunctionID::eType function_id,
const hmi_apis::Common_Result::eType result_code) {
- smart_objects::SmartObject* message =
- new smart_objects::SmartObject(smart_objects::SmartType_Map);
- FillCommonParametersOfSO(message, correlation_id, function_id);
+ smart_objects::SmartObjectSPtr message =
+ ::utils::MakeShared<smart_objects::SmartObject>(
+ smart_objects::SmartType_Map);
+ FillCommonParametersOfSO(*message, correlation_id, function_id);
(*message)[strings::params][strings::message_type] = MessageType::kResponse;
(*message)[strings::params][hmi_response::code] = 0;
(*message)[strings::msg_params][strings::success] = success;
@@ -79,26 +80,28 @@ void RequestFromHMI::SendResponse(
void RequestFromHMI::SendErrorResponse(
const uint32_t correlation_id,
const hmi_apis::FunctionID::eType function_id,
- const hmi_apis::Common_Result::eType result_code) {
- smart_objects::SmartObject* message =
- new smart_objects::SmartObject(smart_objects::SmartType_Map);
- FillCommonParametersOfSO(message, correlation_id, function_id);
+ const hmi_apis::Common_Result::eType result_code,
+ const std::string error_message) {
+ smart_objects::SmartObjectSPtr message =
+ ::utils::MakeShared<smart_objects::SmartObject>(
+ smart_objects::SmartType_Map);
+ FillCommonParametersOfSO(*message, correlation_id, function_id);
(*message)[strings::params][strings::message_type] =
MessageType::kErrorResponse;
(*message)[strings::params][hmi_response::code] = result_code;
- (*message)[strings::params][strings::error_msg] = "HMIDeactivate is active";
+ (*message)[strings::params][strings::error_msg] = error_message;
application_manager_.ManageHMICommand(message);
}
void RequestFromHMI::FillCommonParametersOfSO(
- smart_objects::SmartObject* message,
- uint32_t correlation_id,
- hmi_apis::FunctionID::eType function_id) {
- (*message)[strings::params][strings::function_id] = function_id;
- (*message)[strings::params][strings::protocol_type] = hmi_protocol_type_;
- (*message)[strings::params][strings::protocol_version] = protocol_version_;
- (*message)[strings::params][strings::correlation_id] = correlation_id;
+ smart_objects::SmartObject& message,
+ const uint32_t correlation_id,
+ const hmi_apis::FunctionID::eType function_id) {
+ (message)[strings::params][strings::function_id] = function_id;
+ (message)[strings::params][strings::protocol_type] = hmi_protocol_type_;
+ (message)[strings::params][strings::protocol_version] = protocol_version_;
+ (message)[strings::params][strings::correlation_id] = correlation_id;
}
} // namespace commands
diff --git a/src/components/application_manager/src/commands/hmi/sdl_activate_app_request.cc b/src/components/application_manager/src/commands/hmi/sdl_activate_app_request.cc
index 347a3c0984..3a5a8d25f9 100644
--- a/src/components/application_manager/src/commands/hmi/sdl_activate_app_request.cc
+++ b/src/components/application_manager/src/commands/hmi/sdl_activate_app_request.cc
@@ -110,7 +110,8 @@ void SDLActivateAppRequest::Run() {
"Sends response with result code REJECTED");
SendErrorResponse(correlation_id(),
static_cast<eType>(function_id()),
- hmi_apis::Common_Result::REJECTED);
+ hmi_apis::Common_Result::REJECTED,
+ "HMIDeactivate is active");
} else {
const uint32_t application_id = app_id();
application_manager_.GetPolicyHandler().OnActivateApp(application_id,
@@ -153,6 +154,18 @@ void SDLActivateAppRequest::Run() {
"Found application to activate. Application id is "
<< app_to_activate->app_id());
+ if (application_manager_.state_controller().IsStateActive(
+ HmiState::StateID::STATE_ID_DEACTIVATE_HMI)) {
+ LOG4CXX_WARN(logger_,
+ "DeactivateHmi state is active. "
+ "Sends response with result code REJECTED");
+ SendErrorResponse(correlation_id(),
+ static_cast<hmi_apis::FunctionID::eType>(function_id()),
+ hmi_apis::Common_Result::REJECTED,
+ "HMIDeactivate is active");
+ return;
+ }
+
if (app_to_activate->IsRegistered()) {
LOG4CXX_DEBUG(logger_, "Application is registered. Activating.");
application_manager_.GetPolicyHandler().OnActivateApp(application_id,
@@ -169,7 +182,8 @@ void SDLActivateAppRequest::Run() {
"Can't find regular foreground app with the same "
"connection id:"
<< device_handle);
- SendResponse(false, correlation_id(), SDL_ActivateApp, NO_APPS_REGISTERED);
+ SendErrorResponse(
+ correlation_id(), SDL_ActivateApp, NO_APPS_REGISTERED, "");
return;
}
@@ -201,8 +215,8 @@ void SDLActivateAppRequest::onTimeOut() {
using namespace hmi_apis::Common_Result;
using namespace application_manager;
unsubscribe_from_event(BasicCommunication_OnAppRegistered);
- SendResponse(
- false, correlation_id(), SDL_ActivateApp, APPLICATION_NOT_REGISTERED);
+ SendErrorResponse(
+ correlation_id(), SDL_ActivateApp, APPLICATION_NOT_REGISTERED, "");
}
void SDLActivateAppRequest::on_event(const event_engine::Event& event) {
diff --git a/src/components/application_manager/src/commands/mobile/create_interaction_choice_set_request.cc b/src/components/application_manager/src/commands/mobile/create_interaction_choice_set_request.cc
index fa0d15252e..8876ffa2e8 100644
--- a/src/components/application_manager/src/commands/mobile/create_interaction_choice_set_request.cc
+++ b/src/components/application_manager/src/commands/mobile/create_interaction_choice_set_request.cc
@@ -129,23 +129,32 @@ mobile_apis::Result::eType CreateInteractionChoiceSetRequest::CheckChoiceSet(
const SmartArray* choice_set =
(*message_)[strings::msg_params][strings::choice_set].asArray();
- SmartArray::const_iterator choice_set_it = choice_set->begin();
+ SmartArray::const_iterator current_choice_set_it = choice_set->begin();
+ SmartArray::const_iterator next_choice_set_it;
- for (; choice_set->end() != choice_set_it; ++choice_set_it) {
+ for (; choice_set->end() != current_choice_set_it; ++current_choice_set_it) {
std::pair<std::set<uint32_t>::iterator, bool> ins_res =
- choice_id_set.insert((*choice_set_it)[strings::choice_id].asInt());
+ choice_id_set.insert(
+ (*current_choice_set_it)[strings::choice_id].asInt());
if (!ins_res.second) {
LOG4CXX_ERROR(logger_,
"Choise with ID "
- << (*choice_set_it)[strings::choice_id].asInt()
+ << (*current_choice_set_it)[strings::choice_id].asInt()
<< " already exists");
return mobile_apis::Result::INVALID_ID;
}
- if (IsWhiteSpaceExist(*choice_set_it)) {
+ if (IsWhiteSpaceExist(*current_choice_set_it)) {
LOG4CXX_ERROR(logger_, "Incoming choice set has contains \t\n \\t \\n");
return mobile_apis::Result::INVALID_DATA;
}
+ for (next_choice_set_it = current_choice_set_it + 1;
+ choice_set->end() != next_choice_set_it;
+ ++next_choice_set_it) {
+ if (compareSynonyms(*current_choice_set_it, *next_choice_set_it)) {
+ return mobile_apis::Result::DUPLICATE_NAME;
+ }
+ }
}
return mobile_apis::Result::SUCCESS;
}
diff --git a/src/components/application_manager/src/commands/mobile/on_button_event_notification.cc b/src/components/application_manager/src/commands/mobile/on_button_event_notification.cc
index 82836717a3..7c631d6d4b 100644
--- a/src/components/application_manager/src/commands/mobile/on_button_event_notification.cc
+++ b/src/components/application_manager/src/commands/mobile/on_button_event_notification.cc
@@ -94,6 +94,14 @@ void OnButtonEventNotification::Run() {
return;
}
+ if ((mobile_api::HMILevel::HMI_FULL != app->hmi_level()) &&
+ (mobile_api::HMILevel::HMI_LIMITED != app->hmi_level())) {
+ LOG4CXX_WARN(logger_,
+ "CUSTOM_BUTTON OnButtonEvent notification is allowed only "
+ << "in FULL or LIMITED hmi level");
+ return;
+ }
+
SendButtonEvent(app);
return;
}
diff --git a/src/components/application_manager/src/commands/mobile/on_button_press_notification.cc b/src/components/application_manager/src/commands/mobile/on_button_press_notification.cc
index c77cd9fbba..ae6658b93a 100644
--- a/src/components/application_manager/src/commands/mobile/on_button_press_notification.cc
+++ b/src/components/application_manager/src/commands/mobile/on_button_press_notification.cc
@@ -94,6 +94,15 @@ void OnButtonPressNotification::Run() {
return;
}
+ // Send ButtonPress notification only in HMI_FULL or HMI_LIMITED mode
+ if ((mobile_api::HMILevel::HMI_FULL != app->hmi_level()) &&
+ (mobile_api::HMILevel::HMI_LIMITED != app->hmi_level())) {
+ LOG4CXX_WARN(logger_,
+ "CUSTOM_BUTTON OnButtonPress notification is allowed only "
+ << "in FULL or LIMITED hmi level");
+ return;
+ }
+
SendButtonPress(app);
return;
}
diff --git a/src/components/application_manager/src/commands/mobile/on_keyboard_input_notification.cc b/src/components/application_manager/src/commands/mobile/on_keyboard_input_notification.cc
index 851e9f3059..427f52c12b 100644
--- a/src/components/application_manager/src/commands/mobile/on_keyboard_input_notification.cc
+++ b/src/components/application_manager/src/commands/mobile/on_keyboard_input_notification.cc
@@ -58,7 +58,9 @@ void OnKeyBoardInputNotification::Run() {
for (; accessor.GetData().end() != it; ++it) {
// if there is app with active perform interaction use it for notification
ApplicationSharedPtr app = *it;
- if (app->is_perform_interaction_active()) {
+ if (app->is_perform_interaction_active() &&
+ (*it)->perform_interaction_layout() ==
+ mobile_apis::LayoutMode::KEYBOARD) {
LOG4CXX_INFO(logger_,
"There is application with active PerformInteraction");
app_to_notify = app;
diff --git a/src/components/application_manager/src/commands/mobile/perform_interaction_request.cc b/src/components/application_manager/src/commands/mobile/perform_interaction_request.cc
index d094c3d80e..007440e8e6 100644
--- a/src/components/application_manager/src/commands/mobile/perform_interaction_request.cc
+++ b/src/components/application_manager/src/commands/mobile/perform_interaction_request.cc
@@ -205,6 +205,7 @@ void PerformInteractionRequest::Run() {
app->set_perform_interaction_mode(static_cast<int32_t>(interaction_mode_));
app->set_perform_interaction_active(true);
+ app->set_perform_interaction_layout(interaction_layout);
// increment amount of active requests
++pi_requests_count_;
SendVRPerformInteractionRequest(app);
diff --git a/src/components/application_manager/src/commands/mobile/reset_global_properties_request.cc b/src/components/application_manager/src/commands/mobile/reset_global_properties_request.cc
index e47ed01f51..ebc0e43838 100644
--- a/src/components/application_manager/src/commands/mobile/reset_global_properties_request.cc
+++ b/src/components/application_manager/src/commands/mobile/reset_global_properties_request.cc
@@ -251,6 +251,7 @@ void ResetGlobalPropertiesRequest::on_event(const event_engine::Event& event) {
is_ui_received_ = true;
ui_result_ = static_cast<hmi_apis::Common_Result::eType>(
message[strings::params][hmi_response::code].asInt());
+ GetInfo(message, ui_response_info_);
break;
}
case hmi_apis::FunctionID::TTS_SetGlobalProperties: {
@@ -258,6 +259,7 @@ void ResetGlobalPropertiesRequest::on_event(const event_engine::Event& event) {
is_tts_received_ = true;
tts_result_ = static_cast<hmi_apis::Common_Result::eType>(
message[strings::params][hmi_response::code].asInt());
+ GetInfo(message, tts_response_info_);
break;
}
default: {
@@ -266,49 +268,64 @@ void ResetGlobalPropertiesRequest::on_event(const event_engine::Event& event) {
}
}
- if (!IsPendingResponseExist()) {
- bool result =
- ((hmi_apis::Common_Result::SUCCESS == ui_result_) &&
- (hmi_apis::Common_Result::SUCCESS == tts_result_ ||
- hmi_apis::Common_Result::UNSUPPORTED_RESOURCE == tts_result_)) ||
- ((hmi_apis::Common_Result::SUCCESS == ui_result_) &&
- (hmi_apis::Common_Result::INVALID_ENUM == tts_result_)) ||
- ((hmi_apis::Common_Result::INVALID_ENUM == ui_result_) &&
- (hmi_apis::Common_Result::SUCCESS == tts_result_));
-
- mobile_apis::Result::eType result_code;
- const char* return_info = NULL;
-
- if (result) {
- if (hmi_apis::Common_Result::UNSUPPORTED_RESOURCE == tts_result_) {
- result_code = mobile_apis::Result::WARNINGS;
- return_info =
- std::string("Unsupported phoneme type sent in a prompt").c_str();
- } else {
- result_code = static_cast<mobile_apis::Result::eType>(
- std::max(ui_result_, tts_result_));
- }
- } else {
- result_code = static_cast<mobile_apis::Result::eType>(
- std::max(ui_result_, tts_result_));
- }
+ if (IsPendingResponseExist()) {
+ LOG4CXX_DEBUG(logger_, "Waiting for remaining responses");
+ return;
+ }
- SendResponse(result,
- static_cast<mobile_apis::Result::eType>(result_code),
- return_info,
- &(message[strings::msg_params]));
+ mobile_apis::Result::eType result_code = mobile_apis::Result::INVALID_ENUM;
+ std::string response_info;
+ const bool result = PrepareResponseParameters(result_code, response_info);
- if (!application) {
- LOG4CXX_ERROR(logger_, "NULL pointer");
- return;
- }
+ SendResponse(result,
+ static_cast<mobile_apis::Result::eType>(result_code),
+ response_info.empty() ? NULL : response_info.c_str(),
+ &(message[strings::msg_params]));
- if (result) {
- application->UpdateHash();
- }
+ if (!application) {
+ LOG4CXX_ERROR(logger_, "NULL pointer");
+ return;
+ }
+
+ if (result) {
+ application->UpdateHash();
+ }
+}
+
+bool ResetGlobalPropertiesRequest::PrepareResponseParameters(
+ mobile_apis::Result::eType& out_result_code,
+ std::string& out_response_info) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ using namespace helpers;
+
+ bool result = false;
+ ResponseInfo ui_properties_info(ui_result_, HmiInterfaces::HMI_INTERFACE_UI);
+ ResponseInfo tts_properties_info(tts_result_,
+ HmiInterfaces::HMI_INTERFACE_TTS);
+
+ HmiInterfaces::InterfaceState tts_interface_state =
+ application_manager_.hmi_interfaces().GetInterfaceState(
+ HmiInterfaces::HMI_INTERFACE_TTS);
+
+ if (hmi_apis::Common_Result::SUCCESS == ui_result_ &&
+ hmi_apis::Common_Result::UNSUPPORTED_RESOURCE == tts_result_ &&
+ HmiInterfaces::STATE_AVAILABLE == tts_interface_state) {
+ result = true;
+ out_result_code = mobile_apis::Result::WARNINGS;
+ out_response_info =
+ std::string("Unsupported phoneme type sent in a prompt").c_str();
} else {
- LOG4CXX_WARN(logger_, "unable to find application: " << connection_key());
+ result =
+ PrepareResultForMobileResponse(ui_properties_info, tts_properties_info);
+ out_result_code =
+ PrepareResultCodeForResponse(ui_properties_info, tts_properties_info);
+ out_response_info = MergeInfos(tts_properties_info,
+ tts_response_info_,
+ ui_properties_info,
+ ui_response_info_);
}
+
+ return result;
}
bool ResetGlobalPropertiesRequest::IsPendingResponseExist() {
diff --git a/src/components/application_manager/src/commands/mobile/system_request.cc b/src/components/application_manager/src/commands/mobile/system_request.cc
index 0ed01e294d..74d25508e0 100644
--- a/src/components/application_manager/src/commands/mobile/system_request.cc
+++ b/src/components/application_manager/src/commands/mobile/system_request.cc
@@ -528,8 +528,8 @@ void SystemRequest::Run() {
}
if (!(mobile_apis::RequestType::HTTP == request_type &&
0 == origin_file_name.compare(kIVSU))) {
- LOG4CXX_DEBUG(logger_, "Binary data required. Reject");
- SendResponse(false, mobile_apis::Result::REJECTED);
+ LOG4CXX_DEBUG(logger_, "Binary data required. Invalid data");
+ SendResponse(false, mobile_apis::Result::INVALID_DATA);
return;
}
LOG4CXX_DEBUG(logger_, "IVSU does not require binary data. Continue");
diff --git a/src/components/application_manager/src/commands/mobile/unsubscribe_vehicle_data_request.cc b/src/components/application_manager/src/commands/mobile/unsubscribe_vehicle_data_request.cc
index 6902a9d659..9b0c0a673f 100644
--- a/src/components/application_manager/src/commands/mobile/unsubscribe_vehicle_data_request.cc
+++ b/src/components/application_manager/src/commands/mobile/unsubscribe_vehicle_data_request.cc
@@ -1,6 +1,6 @@
/*
- Copyright (c) 2013, Ford Motor Company
+ Copyright (c) 2017, Ford Motor Company
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -201,16 +201,14 @@ void UnsubscribeVehicleDataRequest::Run() {
}
if (is_everything_already_unsubscribed) {
- mobile_apis::Result::eType result_code =
- vi_already_unsubscribed_by_this_app_.size()
- ? mobile_apis::Result::IGNORED
- : mobile_apis::Result::SUCCESS;
-
- const char* info = vi_already_unsubscribed_by_this_app_.size()
- ? "Already subscribed on some provided VehicleData."
- : NULL;
-
- SendResponse(true, result_code, info, &response_params);
+ if (!vi_already_unsubscribed_by_this_app_.empty()) {
+ SendResponse(false,
+ mobile_apis::Result::IGNORED,
+ "Some provided VehicleData was not subscribed.",
+ &response_params);
+ } else {
+ SendResponse(true, mobile_apis::Result::SUCCESS, NULL, &response_params);
+ }
return;
}
diff --git a/src/components/application_manager/src/hmi_interfaces_impl.cc b/src/components/application_manager/src/hmi_interfaces_impl.cc
index 5665d0654a..8a9944bec4 100644
--- a/src/components/application_manager/src/hmi_interfaces_impl.cc
+++ b/src/components/application_manager/src/hmi_interfaces_impl.cc
@@ -48,10 +48,6 @@ generate_function_to_interface_convert_map() {
HmiInterfaces::HMI_INTERFACE_BasicCommunication;
convert_map[BasicCommunication_OnUpdateDeviceList] =
HmiInterfaces::HMI_INTERFACE_BasicCommunication;
- convert_map[BasicCommunication_OnPhoneCall] =
- HmiInterfaces::HMI_INTERFACE_BasicCommunication;
- convert_map[BasicCommunication_OnEmergencyEvent] =
- HmiInterfaces::HMI_INTERFACE_BasicCommunication;
convert_map[BasicCommunication_OnResumeAudioSource] =
HmiInterfaces::HMI_INTERFACE_BasicCommunication;
convert_map[BasicCommunication_OnSDLPersistenceComplete] =
@@ -104,8 +100,6 @@ generate_function_to_interface_convert_map() {
HmiInterfaces::HMI_INTERFACE_BasicCommunication;
convert_map[BasicCommunication_OnIgnitionCycleOver] =
HmiInterfaces::HMI_INTERFACE_BasicCommunication;
- convert_map[BasicCommunication_OnDeactivateHMI] =
- HmiInterfaces::HMI_INTERFACE_BasicCommunication;
convert_map[BasicCommunication_OnEventChanged] =
HmiInterfaces::HMI_INTERFACE_BasicCommunication;
convert_map[VR_IsReady] = HmiInterfaces::HMI_INTERFACE_VR;
diff --git a/src/components/application_manager/src/hmi_language_handler.cc b/src/components/application_manager/src/hmi_language_handler.cc
index 7cab18ab27..4e5390a1b4 100644
--- a/src/components/application_manager/src/hmi_language_handler.cc
+++ b/src/components/application_manager/src/hmi_language_handler.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
@@ -80,7 +80,8 @@ void HMILanguageHandler::set_language_for(
LOG4CXX_DEBUG(logger_,
"Setting language " << language << " for interface "
<< interface);
- last_state_->dictionary[LanguagesKey][key] = language;
+ Json::Value& dictionary = last_state_->get_dictionary();
+ dictionary[LanguagesKey][key] = language;
return;
}
@@ -105,10 +106,11 @@ hmi_apis::Common_Language::eType HMILanguageHandler::get_language_for(
return Common_Language::INVALID_ENUM;
}
- if (last_state_->dictionary.isMember(LanguagesKey)) {
- if (last_state_->dictionary[LanguagesKey].isMember(key)) {
+ const Json::Value& dictionary = last_state_->get_dictionary();
+ if (dictionary.isMember(LanguagesKey)) {
+ if (dictionary[LanguagesKey].isMember(key)) {
Common_Language::eType language = static_cast<Common_Language::eType>(
- last_state_->dictionary[LanguagesKey][key].asInt());
+ dictionary[LanguagesKey][key].asInt());
return language;
}
}
diff --git a/src/components/application_manager/src/hmi_state.cc b/src/components/application_manager/src/hmi_state.cc
index 80628f9f33..1f05232476 100644
--- a/src/components/application_manager/src/hmi_state.cc
+++ b/src/components/application_manager/src/hmi_state.cc
@@ -175,7 +175,7 @@ mobile_apis::HMILevel::eType AudioSource::hmi_level() const {
HMILevel::HMI_NONE)) {
return parent()->hmi_level();
}
- if (is_navi_app(app_id_)) {
+ if (is_navi_app(app_id_) || is_voice_communication_app(app_id_)) {
return HMILevel::HMI_LIMITED;
}
return HMILevel::HMI_BACKGROUND;
diff --git a/src/components/application_manager/src/resumption/resumption_data_json.cc b/src/components/application_manager/src/resumption/resumption_data_json.cc
index f60f934fef..7866fc4de1 100644
--- a/src/components/application_manager/src/resumption/resumption_data_json.cc
+++ b/src/components/application_manager/src/resumption/resumption_data_json.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
@@ -372,10 +372,9 @@ Json::Value& ResumptionDataJson::GetResumptionData() const {
using namespace app_mngr;
LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock autolock(resumption_lock_);
- Json::Value& dictionary = last_state().dictionary;
+ Json::Value& dictionary = last_state().get_dictionary();
if (!dictionary.isMember(strings::resumption)) {
- last_state().dictionary[strings::resumption] =
- Json::Value(Json::objectValue);
+ dictionary[strings::resumption] = Json::Value(Json::objectValue);
LOG4CXX_WARN(logger_, "resumption section is missed");
}
Json::Value& resumption = dictionary[strings::resumption];
@@ -481,7 +480,7 @@ bool ResumptionDataJson::DropAppDataResumption(const std::string& device_id,
}
void ResumptionDataJson::Persist() {
- last_state().SaveToFileSystem();
+ last_state().SaveStateToFileSystem();
}
} // resumption
diff --git a/src/components/application_manager/test/CMakeLists.txt b/src/components/application_manager/test/CMakeLists.txt
index a7f5d8b243..84354d3f5b 100644
--- a/src/components/application_manager/test/CMakeLists.txt
+++ b/src/components/application_manager/test/CMakeLists.txt
@@ -28,44 +28,46 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/platform.cmake)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
+
# TODO{ALeshin}: APPLINK-10792. Do not write tests which use
# application manager(AM) singleton while refactoring of AM is finished.
-if (BUILD_TESTS)
-
- include_directories(
- ${GMOCK_INCLUDE_DIRECTORY}
- ${CMAKE_BINARY_DIR}/src/components/
- ${COMPONENTS_DIR}/application_manager/include/
- ${COMPONENTS_DIR}/utils/include/
- ${COMPONENTS_DIR}/resumption/include/
- ${COMPONENTS_DIR}/utils/include/
- ${POLICY_PATH}/include/
- ${COMPONENTS_DIR}/media_manager/include/
- ${COMPONENTS_DIR}/security_manager/include/
- ${POLICY_PATH}/policy/test/include/
- ${POLICY_MOCK_INCLUDE_PATH}/
- ${COMPONENTS_DIR}/application_manager/test/include/
- )
-
- set(testSources
- ${AM_TEST_DIR}/mobile_message_handler_test.cc
- ${AM_TEST_DIR}/mobile_message_handler_v1_test.cc
- ${AM_TEST_DIR}/request_info_test.cc
- ${AM_TEST_DIR}/request_tracker_test.cc
- ${AM_TEST_DIR}/resumption_sql_queries_test.cc
- ${AM_TEST_DIR}/event_engine_test.cc
- ${AM_TEST_DIR}/policy_event_observer_test.cc
- ${AM_TEST_DIR}/application_impl_test.cc
- ${AM_TEST_DIR}/hmi_capabilities_test.cc
- ${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
- )
- set (request_controller_SOURCES
- ${AM_TEST_DIR}/request_controller/request_controller_test.cc
- )
+include_directories(
+ ${GMOCK_INCLUDE_DIRECTORY}
+ ${CMAKE_BINARY_DIR}/src/components/
+ ${COMPONENTS_DIR}/application_manager/include/
+ ${COMPONENTS_DIR}/utils/include/
+ ${COMPONENTS_DIR}/resumption/include/
+ ${COMPONENTS_DIR}/utils/include/
+ ${POLICY_PATH}/include/
+ ${POLICY_PATH}/policy/test/include/
+ ${POLICY_MOCK_INCLUDE_PATH}/
+ ${COMPONENTS_DIR}/media_manager/include/
+ ${COMPONENTS_DIR}/security_manager/include/
+ ${COMPONENTS_DIR}/policy/test/include/
+ ${COMPONENTS_DIR}/application_manager/test/include/
+)
+
+set(testSources
+ ${AM_TEST_DIR}/mobile_message_handler_test.cc
+ ${AM_TEST_DIR}/mobile_message_handler_v1_test.cc
+ ${AM_TEST_DIR}/request_info_test.cc
+ ${AM_TEST_DIR}/resumption_sql_queries_test.cc
+ ${AM_TEST_DIR}/event_engine_test.cc
+ ${AM_TEST_DIR}/policy_event_observer_test.cc
+ ${AM_TEST_DIR}/application_impl_test.cc
+ ${AM_TEST_DIR}/hmi_capabilities_test.cc
+ ${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
+)
+
+set(request_controller_SOURCES
+ ${AM_TEST_DIR}/request_controller/request_controller_test.cc
+)
set(testLibraries
ApplicationManager
@@ -106,72 +108,73 @@ set(test_exec_libraries
Resumption
)
-IF(${CMAKE_SYSTEM_NAME} MATCHES "QNX")
+if (${CMAKE_SYSTEM_NAME} MATCHES "QNX")
+ list(REMOVE_ITEM test_exec_libraries dl)
+endif()
+
+set(testLibraries
+ Utils
+ ApplicationManager
+ jsoncpp
+ Policy
+ connectionHandler
+ HMI_API
+ MOBILE_API
+ v4_protocol_v1_2_no_extra
+ SmartObjects
+ formatters
+ gmock_main
+ UsageStatistics
+ dl
+ ProtocolLibrary
+ ConfigProfile
+ MediaManager
+ Resumption
+ ProtocolHandler
+ SecurityManager
+)
+
+if (${CMAKE_SYSTEM_NAME} MATCHES "QNX")
list(REMOVE_ITEM test_exec_libraries dl)
endif()
- set(testLibraries
- Utils
- ApplicationManager
- jsoncpp
- Policy
- connectionHandler
- HMI_API
- MOBILE_API
- v4_protocol_v1_2_no_extra
- SmartObjects
- formatters
- gmock_main
- UsageStatistics
- dl
- ProtocolLibrary
- ConfigProfile
- MediaManager
- Resumption
- ProtocolHandler
- SecurityManager
- )
-
- if (${CMAKE_SYSTEM_NAME} MATCHES "QNX")
- list(REMOVE_ITEM test_exec_libraries dl)
- endif()
-
- if (ENABLE_LOG)
- list(APPEND LIBRARIES log4cxx -L${LOG4CXX_LIBS_DIRECTORY})
- list(APPEND LIBRARIES apr-1 -L${APR_LIBS_DIRECTORY})
- list(APPEND LIBRARIES aprutil-1 -L${APR_UTIL_LIBS_DIRECTORY})
- list(APPEND LIBRARIES expat -L${EXPAT_LIBS_DIRECTORY})
- endif()
-
- file(COPY smartDeviceLink_test2.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
- file(COPY sdl_preloaded_pt.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
- file(COPY sdl_pt_update.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+if (ENABLE_LOG)
+ list(APPEND LIBRARIES log4cxx -L${LOG4CXX_LIBS_DIRECTORY})
+ list(APPEND LIBRARIES apr-1 -L${APR_LIBS_DIRECTORY})
+ list(APPEND LIBRARIES aprutil-1 -L${APR_UTIL_LIBS_DIRECTORY})
+ list(APPEND LIBRARIES expat -L${EXPAT_LIBS_DIRECTORY})
+endif()
+
+file(COPY smartDeviceLink_test2.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+file(COPY sdl_preloaded_pt.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+file(COPY sdl_pt_update.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
add_custom_command(
-OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/libPolicy.so
- COMMAND ${CMAKE_COMMAND} -E
- copy ${POLICY_PATH}/libPolicy.so ${CMAKE_CURRENT_BINARY_DIR})
- set(CMAKE_EXE_LINKER_FLAGS
- "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath=${CMAKE_CURRENT_BINARY_DIR}")
- create_test("application_manager_test" "${testSources}" "${testLibraries}" )
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/libPolicy.so
+ COMMAND ${CMAKE_COMMAND} -E
+ copy ${POLICY_PATH}/libPolicy.so ${CMAKE_CURRENT_BINARY_DIR}
+)
+set(CMAKE_EXE_LINKER_FLAGS
+ "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath=${CMAKE_CURRENT_BINARY_DIR}"
+)
+create_test("application_manager_test" "${testSources}" "${testLibraries}")
+
# TODO [AKozoriz] : Fix not buildable tests
- set(ResumptionData_SOURCES
- ${AM_TEST_DIR}/resumption/resumption_data_test.cc
- ${AM_TEST_DIR}/resumption/resumption_data_db_test.cc
- ${AM_TEST_DIR}/resumption/resumption_data_json_test.cc
- ${AM_TEST_DIR}/resumption/resume_ctrl_test.cc
- ${AM_TEST_DIR}/mock_message_helper.cc
- )
-
- file(COPY hmi_capabilities.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
- file(COPY smartDeviceLink_test.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
-
- file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/resumption)
- file(COPY smartDeviceLink_test.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/resumption)
- create_test("resumption/data_resumption_test" "${ResumptionData_SOURCES}" "${testLibraries}")
-
- add_subdirectory(state_controller)
-endif()
+set(ResumptionData_SOURCES
+ ${AM_TEST_DIR}/resumption/resumption_data_test.cc
+ ${AM_TEST_DIR}/resumption/resumption_data_db_test.cc
+ ${AM_TEST_DIR}/resumption/resumption_data_json_test.cc
+ ${AM_TEST_DIR}/resumption/resume_ctrl_test.cc
+ ${AM_TEST_DIR}/mock_message_helper.cc
+)
+
+file(COPY hmi_capabilities.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+file(COPY smartDeviceLink_test.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+
+file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/resumption)
+file(COPY smartDeviceLink_test.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/resumption)
+create_test("resumption/data_resumption_test" "${ResumptionData_SOURCES}" "${testLibraries}")
+add_subdirectory(state_controller)
add_subdirectory(app_launch)
add_subdirectory(commands)
diff --git a/src/components/application_manager/test/app_launch/app_launch_data_json_test.cc b/src/components/application_manager/test/app_launch/app_launch_data_json_test.cc
index 6b00365dd3..cc7d3f5814 100644
--- a/src/components/application_manager/test/app_launch/app_launch_data_json_test.cc
+++ b/src/components/application_manager/test/app_launch/app_launch_data_json_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
@@ -39,7 +39,7 @@
#include "utils/make_shared.h"
#include "utils/file_system.h"
#include "utils/date_time.h"
-#include "resumption/last_state.h"
+#include "resumption/last_state_impl.h"
#include "smart_objects/smart_object.h"
#include "application_manager/smart_object_keys.h"
#include "application_manager/mock_app_launch_settings.h"
@@ -68,7 +68,7 @@ class AppLaunchDataJsonTest : public ::testing::Test {
virtual void SetUp() {
::file_system::DeleteFile(kAppStorageFile);
test_last_state_ = std::auto_ptr<resumption::LastState>(
- new resumption::LastState(kAppStorageFolder, kAppInfoStorage));
+ new resumption::LastStateImpl(kAppStorageFolder, kAppInfoStorage));
ASSERT_TRUE(::file_system::CreateFile(kAppStorageFile));
NiceMock<app_launch_test::MockAppLaunchSettings> mock_app_launch_settings_;
diff --git a/src/components/application_manager/test/commands/CMakeLists.txt b/src/components/application_manager/test/commands/CMakeLists.txt
index 068823fcfa..e5a083b5b2 100644
--- a/src/components/application_manager/test/commands/CMakeLists.txt
+++ b/src/components/application_manager/test/commands/CMakeLists.txt
@@ -28,7 +28,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-include(sources)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories(
${GMOCK_INCLUDE_DIRECTORY}
diff --git a/src/components/application_manager/test/commands/mobile/add_command_request_test.cc b/src/components/application_manager/test/commands/mobile/add_command_request_test.cc
index 78a6aa2f4d..567c3d32f9 100644
--- a/src/components/application_manager/test/commands/mobile/add_command_request_test.cc
+++ b/src/components/application_manager/test/commands/mobile/add_command_request_test.cc
@@ -57,285 +57,1055 @@ namespace mobile_commands_test {
namespace add_command_request {
namespace am = application_manager;
-
-using am::commands::AddCommandRequest;
using am::commands::CommandImpl;
using am::ApplicationManager;
using am::commands::MessageSharedPtr;
using am::ApplicationSharedPtr;
using am::MockMessageHelper;
using am::MockHmiInterfaces;
-
using ::testing::_;
-using ::testing::Mock;
-using ::testing::Return;
-using ::testing::ReturnRef;
using ::utils::SharedPtr;
+using ::testing::Return;
+using ::testing::Mock;
+using ::testing::InSequence;
+using am::commands::AddCommandRequest;
+using NsSmartDeviceLink::NsSmartObjects::SmartObjectSPtr;
using ::test::components::application_manager_test::MockApplication;
+using am::event_engine::EventObserver;
+using namespace smart_objects;
namespace custom_str = utils::custom_string;
namespace strings = ::application_manager::strings;
+namespace mobile_result = mobile_apis::Result;
namespace hmi_response = ::application_manager::hmi_response;
+namespace hmi_request = ::application_manager::hmi_request;
+using namespace strings;
namespace {
-const int32_t kCommandId = 1;
+const hmi_apis::FunctionID::eType kInvalidFunctionId =
+ hmi_apis::FunctionID::INVALID_ENUM;
const uint32_t kAppId = 1u;
const uint32_t kCmdId = 1u;
const uint32_t kConnectionKey = 2u;
+const std::string kMenuName = "LG";
+const uint32_t kFirstParentId = 10u;
+const uint32_t kSecondParentId = 1u;
+const std::string kErroredVRCommand = "l\namer";
+const std::string kFirstVrCommand = "lamer";
+const std::string kSecondVrCommand = "hacker";
+const uint32_t kFirstCommandId = 10u;
+const uint32_t kSecondCommandId = 11u;
+const int32_t kType = 34;
+const int32_t kGrammarId = 12;
+const int32_t kPosition = 10;
} // namespace
class AddCommandRequestTest
: public CommandRequestTest<CommandsTestMocks::kIsNice> {
public:
AddCommandRequestTest()
- : mock_message_helper_(*MockMessageHelper::message_helper_mock())
- , mock_app_(CreateMockApp()) {}
+ : msg_(CreateMessage())
+ , default_app_name_("test_default_app_name_")
+ , mock_message_helper_(*MockMessageHelper::message_helper_mock())
+ , mock_app_(CreateMockApp()) {
+ Mock::VerifyAndClearExpectations(&mock_message_helper_);
+ EXPECT_CALL(app_mngr_, application(kConnectionKey))
+ .WillRepeatedly(Return(mock_app_));
+ InitGetters();
+ InitBasicMessage();
+ }
+
+ ~AddCommandRequestTest() {
+ Mock::VerifyAndClearExpectations(&mock_message_helper_);
+ }
protected:
- MessageSharedPtr CreateFullParamsVRSO() {
- MessageSharedPtr msg = CreateMessage(smart_objects::SmartType_Map);
- (*msg)[strings::params][strings::connection_key] = kConnectionKey;
- smart_objects::SmartObject msg_params =
- smart_objects::SmartObject(smart_objects::SmartType_Map);
- msg_params[strings::cmd_id] = kCmdId;
- msg_params[strings::vr_commands] =
- smart_objects::SmartObject(smart_objects::SmartType_Array);
- msg_params[strings::vr_commands][0] = "lamer";
- msg_params[strings::type] = 34;
- msg_params[strings::grammar_id] = 12;
- msg_params[strings::app_id] = kAppId;
- (*msg)[strings::msg_params] = msg_params;
-
- return msg;
+ void InitBasicMessage() {
+ (*msg_)[params][connection_key] = kConnectionKey;
+ (*msg_)[msg_params][app_id] = kAppId;
+ (*msg_)[msg_params][app_name] = default_app_name_;
}
- MessageSharedPtr CreateFullParamsUISO() {
- MessageSharedPtr msg = CreateMessage(smart_objects::SmartType_Map);
- (*msg)[am::strings::params][am::strings::connection_key] = kConnectionKey;
- smart_objects::SmartObject menu_params =
- smart_objects::SmartObject(smart_objects::SmartType_Map);
- menu_params[am::strings::position] = 10;
- menu_params[am::strings::menu_name] = "LG";
-
- smart_objects::SmartObject msg_params =
- smart_objects::SmartObject(smart_objects::SmartType_Map);
- msg_params[am::strings::cmd_id] = kCmdId;
- msg_params[am::strings::menu_params] = menu_params;
- msg_params[am::strings::app_id] = kAppId;
- msg_params[am::strings::cmd_icon] = 1;
- msg_params[am::strings::cmd_icon][am::strings::value] = "10";
- (*msg)[am::strings::msg_params] = msg_params;
-
- return msg;
+ void InitGetters() {
+ ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId));
+ ON_CALL(*mock_app_, FindCommand(kCmdId))
+ .WillByDefault(Return(so_ptr_.get()));
}
- MessageSharedPtr CreateParamsUISOWithOutCmdIcon() {
- MessageSharedPtr msg = CreateMessage(smart_objects::SmartType_Map);
- (*msg)[am::strings::params][am::strings::connection_key] = kConnectionKey;
- smart_objects::SmartObject menu_params =
- smart_objects::SmartObject(smart_objects::SmartType_Map);
- menu_params[am::strings::position] = 10;
- menu_params[am::strings::menu_name] = "LG";
-
- smart_objects::SmartObject msg_params =
- smart_objects::SmartObject(smart_objects::SmartType_Map);
- msg_params[am::strings::cmd_id] = kCmdId;
- msg_params[am::strings::menu_params] = menu_params;
- msg_params[am::strings::app_id] = kAppId;
- (*msg)[am::strings::msg_params] = msg_params;
-
- return msg;
+ void CreateBasicParamsUIRequest() {
+ SmartObject menu_params = SmartObject(SmartType_Map);
+ menu_params[position] = kPosition;
+ menu_params[menu_name] = kMenuName;
+ SmartObject& msg_params = (*msg_)[strings::msg_params];
+ msg_params[cmd_id] = kCmdId;
+ msg_params[strings::menu_params] = menu_params;
+ msg_params[cmd_icon] = 1;
+ msg_params[cmd_icon][value] = "10";
+ msg_params[info] = "UI info";
}
- void SetUp() OVERRIDE {
- ON_CALL(app_mngr_, application(kConnectionKey))
- .WillByDefault(Return(mock_app_));
- ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kConnectionKey));
- ON_CALL(app_mngr_, hmi_interfaces())
- .WillByDefault(ReturnRef(hmi_interfaces_));
+ void CreateBasicParamsVRRequest() {
+ SmartObject& msg_params = (*msg_)[strings::msg_params];
+ msg_params[cmd_id] = kCmdId;
+ msg_params[vr_commands] = SmartObject(SmartType_Array);
+ msg_params[vr_commands][0] = kFirstVrCommand;
+ msg_params[type] = kPosition;
+ msg_params[grammar_id] = kGrammarId;
+ msg_params[info] = "VR info";
}
- void TearDown() OVERRIDE {
- Mock::VerifyAndClearExpectations(&mock_message_helper_);
+ const am::CommandsMap CreateCommandsMap(SmartObject& first_command,
+ SmartObject& second_command) {
+ second_command[menu_params] = SmartObject(SmartType_Map);
+ second_command[menu_params][hmi_request::parent_id] = kFirstParentId;
+ second_command[menu_params][menu_name] = kMenuName;
+ second_command[vr_commands] = SmartObject(SmartType_Array);
+ second_command[vr_commands][0] = kSecondVrCommand;
+ am::CommandsMap commands_map;
+ commands_map.insert(std::make_pair(kFirstCommandId, &first_command));
+ commands_map.insert(std::make_pair(kSecondCommandId, &second_command));
+ return commands_map;
}
- void ResultCommandExpectations(MessageSharedPtr msg,
- const std::string& info) {
- EXPECT_EQ((*msg)[am::strings::msg_params][am::strings::success].asBool(),
- true);
- EXPECT_EQ(
- (*msg)[am::strings::msg_params][am::strings::result_code].asInt(),
- static_cast<int32_t>(hmi_apis::Common_Result::UNSUPPORTED_RESOURCE));
- EXPECT_EQ((*msg)[am::strings::msg_params][am::strings::info].asString(),
- info);
+ void CheckOnTimeOutCommandDeletion(
+ const hmi_apis::FunctionID::eType incoming_cmd,
+ const hmi_apis::FunctionID::eType cmd_to_delete) {
+ CreateBasicParamsVRRequest();
+ CreateBasicParamsUIRequest();
+ SmartObject& msg_params = (*msg_)[strings::msg_params];
+ msg_params[menu_params][hmi_request::parent_id] = kSecondParentId;
+ SmartObject& image = msg_params[cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ EXPECT_CALL(*mock_app_, FindCommand(kCmdId))
+ .WillOnce(Return(so_ptr_.get()));
+ SmartObject first_command = SmartObject(SmartType_Map);
+ SmartObject second_command = SmartObject(SmartType_Map);
+ const am::CommandsMap commands_map =
+ CreateCommandsMap(first_command, second_command);
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(DataAccessor<application_manager::CommandsMap>(
+ commands_map, lock_)));
+ so_ptr_ = utils::MakeShared<SmartObject>(SmartType_Map);
+ EXPECT_CALL(*mock_app_, FindSubMenu(kSecondParentId))
+ .WillOnce(Return(so_ptr_.get()));
+ {
+ InSequence dummy;
+ EXPECT_CALL(app_mngr_,
+ ManageHMICommand(
+ HMIResultCodeIs(hmi_apis::FunctionID::UI_AddCommand)))
+ .WillOnce(Return(true));
+ EXPECT_CALL(app_mngr_,
+ ManageHMICommand(
+ HMIResultCodeIs(hmi_apis::FunctionID::VR_AddCommand)))
+ .WillOnce(Return(true));
+ }
+ EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0);
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+ Event event(incoming_cmd);
+ event.set_smart_object(*msg_);
+ request_ptr->on_event(event);
+ EXPECT_CALL(*mock_app_, RemoveCommand(kCmdId));
+ EXPECT_CALL(app_mngr_, ManageHMICommand(HMIResultCodeIs(cmd_to_delete)))
+ .WillOnce(Return(true));
+ SmartObjectSPtr response;
+ EXPECT_CALL(
+ mock_message_helper_,
+ CreateNegativeResponse(_, _, _, mobile_apis::Result::GENERIC_ERROR))
+ .WillOnce(Return(response));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageMobileCommand(response,
+ am::commands::Command::CommandOrigin::ORIGIN_SDL));
+ utils::SharedPtr<CommandRequestImpl> base_class_request =
+ static_cast<utils::SharedPtr<CommandRequestImpl> >(request_ptr);
+ base_class_request->onTimeOut();
}
+ MessageSharedPtr msg_;
+ SmartObjectSPtr so_ptr_;
+ const utils::custom_string::CustomString default_app_name_;
+ am::MockMessageHelper& mock_message_helper_;
sync_primitives::Lock lock_;
- NiceMock<MockHmiInterfaces> hmi_interfaces_;
- MockMessageHelper& mock_message_helper_;
MockAppPtr mock_app_;
};
-TEST_F(AddCommandRequestTest, OnTimeout_GENERIC_ERROR) {
- MessageSharedPtr msg = CreateMessage(smart_objects::SmartType_Map);
- (*msg)[strings::msg_params][strings::result_code] =
- am::mobile_api::Result::GENERIC_ERROR;
- (*msg)[strings::msg_params][strings::success] = false;
- (*msg)[strings::params][strings::connection_key] = kConnectionKey;
+TEST_F(AddCommandRequestTest, Run_AppNotExisted_EXPECT_AppNotRegistered) {
+ CreateBasicParamsUIRequest();
+ EXPECT_CALL(app_mngr_, application(kConnectionKey))
+ .WillOnce(Return(ApplicationSharedPtr()));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_result::APPLICATION_NOT_REGISTERED), _));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+}
+
+TEST_F(AddCommandRequestTest, Run_ImageVerificationFailed_EXPECT_INVALID_DATA) {
+ CreateBasicParamsUIRequest();
+ SmartObject& msg_params = (*msg_)[strings::msg_params];
+ SmartObject& image = msg_params[cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::INVALID_DATA));
+ EXPECT_CALL(app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::INVALID_DATA), _));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+}
+
+TEST_F(AddCommandRequestTest, Run_MenuNameHasSyntaxError_EXPECT_INVALID_DATA) {
+ CreateBasicParamsUIRequest();
+ SmartObject& msg_params = (*msg_)[strings::msg_params];
+ msg_params[menu_params][hmi_request::parent_id] = kFirstParentId;
+ const std::string errored_menu_name = "L\nG";
+ msg_params[menu_params][menu_name] = errored_menu_name;
+ SmartObject& image = msg_params[cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ EXPECT_CALL(*mock_app_, FindCommand(kCmdId)).WillOnce(Return(so_ptr_.get()));
+ am::CommandsMap commands_map;
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
+ SmartObject parent = SmartObject(SmartType_Map);
+ EXPECT_CALL(*mock_app_, FindSubMenu(kFirstParentId))
+ .WillOnce(Return(&parent));
+ EXPECT_CALL(app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::INVALID_DATA), _));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+}
+
+TEST_F(AddCommandRequestTest,
+ Run_VRCommandsHaveSyntaxError_EXPECT_INVALID_DATA) {
+ CreateBasicParamsVRRequest();
+ SmartObject& msg_params = (*msg_)[strings::msg_params];
+ msg_params[vr_commands][0] = kErroredVRCommand;
+ EXPECT_CALL(*mock_app_, FindCommand(kCmdId)).WillOnce(Return(so_ptr_.get()));
+ am::CommandsMap commands_map;
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
+ EXPECT_CALL(app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::INVALID_DATA), _));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+}
- utils::SharedPtr<AddCommandRequest> command =
+TEST_F(AddCommandRequestTest, Run_CMDIconHasError_EXPECT_INVALID_DATA) {
+ MessageSharedPtr msg = CreateMessage();
+ SmartObject& msg_params = (*msg)[strings::msg_params];
+ (*msg)[params][connection_key] = kConnectionKey;
+ msg_params[cmd_id] = kCmdId;
+ msg_params[cmd_icon] = 1;
+ const std::string errored_cmd_icon_value = "1\n0";
+ msg_params[cmd_icon][value] = errored_cmd_icon_value;
+ msg_params[vr_commands][0] = kFirstVrCommand;
+ SmartObject& image = msg_params[cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ EXPECT_CALL(*mock_app_, FindCommand(kCmdId)).WillOnce(Return(so_ptr_.get()));
+ am::CommandsMap commands_map;
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
+ EXPECT_CALL(app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::INVALID_DATA), _));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
CreateCommand<AddCommandRequest>(msg);
+ request_ptr->Run();
+}
- ON_CALL(*mock_app_, get_grammar_id()).WillByDefault(Return(kConnectionKey));
- ON_CALL(*mock_app_, RemoveCommand(_)).WillByDefault(Return());
+TEST_F(AddCommandRequestTest, Run_CommandIDAlreadyExists_EXPECT_INVALID_ID) {
+ CreateBasicParamsUIRequest();
+ SmartObject& msg_params = (*msg_)[strings::msg_params];
+ SmartObject& image = msg_params[cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ so_ptr_ = utils::MakeShared<SmartObject>(SmartType_Map);
+ EXPECT_CALL(*mock_app_, FindCommand(kCmdId)).WillOnce(Return(so_ptr_.get()));
+ EXPECT_CALL(app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::INVALID_ID), _));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+}
- EXPECT_CALL(
- mock_message_helper_,
- CreateNegativeResponse(_, _, _, am::mobile_api::Result::GENERIC_ERROR))
- .WillOnce(Return(msg));
+TEST_F(AddCommandRequestTest,
+ Run_CommandNameAlreadyExists_EXPECT_DUPLICATE_NAME) {
+ CreateBasicParamsUIRequest();
+ SmartObject& msg_params = (*msg_)[strings::msg_params];
+ msg_params[menu_params][hmi_request::parent_id] = kFirstParentId;
+ SmartObject& image = msg_params[cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ EXPECT_CALL(*mock_app_, FindCommand(kCmdId)).WillOnce(Return(so_ptr_.get()));
+ SmartObject first_command = SmartObject(SmartType_Map);
+ SmartObject second_command = SmartObject(SmartType_Map);
+ const am::CommandsMap commands_map =
+ CreateCommandsMap(first_command, second_command);
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
+ EXPECT_CALL(app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::DUPLICATE_NAME), _));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+}
+
+TEST_F(AddCommandRequestTest,
+ Run_CmdAndMsgParentIDsAreDifferentSubmenuNotExisted_EXPECT_INVALID_ID) {
+ CreateBasicParamsUIRequest();
+ SmartObject& msg_params = (*msg_)[strings::msg_params];
+ msg_params[menu_params][hmi_request::parent_id] = kSecondParentId;
+ SmartObject& image = msg_params[cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ EXPECT_CALL(*mock_app_, FindCommand(kCmdId)).WillOnce(Return(so_ptr_.get()));
+ SmartObject first_command = SmartObject(SmartType_Map);
+ SmartObject second_command = SmartObject(SmartType_Map);
+ const am::CommandsMap commands_map =
+ CreateCommandsMap(first_command, second_command);
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
+ EXPECT_CALL(*mock_app_, FindSubMenu(kSecondParentId))
+ .WillOnce(Return(so_ptr_.get()));
+ EXPECT_CALL(app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::INVALID_ID), _));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+}
+
+TEST_F(AddCommandRequestTest,
+ Run_CmdAndMsgVrSynonymsAreTheSame_EXPECT_DUPLICATE_NAME) {
+ CreateBasicParamsVRRequest();
+ SmartObject& msg_params = (*msg_)[strings::msg_params];
+ msg_params[menu_params][hmi_request::parent_id] = kSecondParentId;
+ msg_params[vr_commands][0] = kSecondVrCommand;
+ SmartObject& image = msg_params[cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ EXPECT_CALL(*mock_app_, FindCommand(kCmdId)).WillOnce(Return(so_ptr_.get()));
- MessageSharedPtr command_result;
+ SmartObject first_command = SmartObject(SmartType_Map);
+ SmartObject second_command = SmartObject(SmartType_Map);
+ const am::CommandsMap commands_map =
+ CreateCommandsMap(first_command, second_command);
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
+ so_ptr_ = utils::MakeShared<SmartObject>(SmartType_Map);
+ EXPECT_CALL(*mock_app_, FindSubMenu(kSecondParentId))
+ .WillOnce(Return(so_ptr_.get()));
+ EXPECT_CALL(app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::DUPLICATE_NAME), _));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+}
+
+TEST_F(AddCommandRequestTest, Run_MsgDataEmpty_EXPECT_INVALID_DATA) {
+ MessageSharedPtr msg = CreateMessage();
+ (*msg)[params][connection_key] = kConnectionKey;
+ SmartObject& msg_params = (*msg)[strings::msg_params];
+ msg_params[app_id] = kAppId;
+ msg_params[cmd_id] = kCmdId;
+ EXPECT_CALL(*mock_app_, FindCommand(kCmdId)).WillOnce(Return(so_ptr_.get()));
+ EXPECT_CALL(app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::INVALID_DATA), _));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg);
+ request_ptr->Run();
+}
+
+TEST_F(AddCommandRequestTest,
+ Run_CmdAndMsg_UI_and_Vr_AreCorrect_EXPECT_VR_AND_UI_SENT) {
+ CreateBasicParamsVRRequest();
+ CreateBasicParamsUIRequest();
+ SmartObject& msg_params = (*msg_)[strings::msg_params];
+ msg_params[menu_params][hmi_request::parent_id] = kSecondParentId;
+ SmartObject& image = msg_params[cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ EXPECT_CALL(*mock_app_, FindCommand(kCmdId)).WillOnce(Return(so_ptr_.get()));
+ SmartObject first_command = SmartObject(SmartType_Map);
+ SmartObject second_command = SmartObject(SmartType_Map);
+ const am::CommandsMap commands_map =
+ CreateCommandsMap(first_command, second_command);
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
+ so_ptr_ = utils::MakeShared<SmartObject>(SmartType_Map);
+ EXPECT_CALL(*mock_app_, FindSubMenu(kSecondParentId))
+ .WillOnce(Return(so_ptr_.get()));
+ {
+ InSequence dummy;
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::UI_AddCommand)))
+ .WillOnce(Return(true));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::VR_AddCommand)))
+ .WillOnce(Return(true));
+ }
+ EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0);
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+}
+
+TEST_F(AddCommandRequestTest, GetRunMethods_SUCCESS) {
+ CreateBasicParamsUIRequest();
+ SmartObject& image = (*msg_)[msg_params][cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ EXPECT_CALL(*mock_app_, FindCommand(kCmdId)).WillOnce(Return(so_ptr_.get()));
+ EXPECT_CALL(*mock_app_, AddCommand(kCmdId, (*msg_)[msg_params]));
+
+ am::CommandsMap commands_map;
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
EXPECT_CALL(
app_mngr_,
- ManageMobileCommand(_, am::commands::Command::CommandOrigin::ORIGIN_SDL))
- .WillOnce(DoAll(SaveArg<0>(&command_result), Return(true)));
-
- command->onTimeOut();
- EXPECT_EQ((*command_result)[strings::msg_params][strings::success].asBool(),
- false);
- EXPECT_EQ(
- (*command_result)[strings::msg_params][strings::result_code].asInt(),
- static_cast<int32_t>(am::mobile_api::Result::GENERIC_ERROR));
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::UI_AddCommand)))
+ .WillOnce(Return(true));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
}
-TEST_F(AddCommandRequestTest, OnEvent_VR_HmiSendSuccess_UNSUPPORTED_RESOURCE) {
- MessageSharedPtr msg_vr = CreateFullParamsVRSO();
- (*msg_vr)[strings::msg_params][strings::menu_params]
- [am::hmi_request::parent_id] = 10u;
- (*msg_vr)[strings::msg_params][strings::menu_params][strings::menu_name] =
- "menu_name";
+TEST_F(AddCommandRequestTest, OnEvent_UI_SUCCESS) {
+ CreateBasicParamsUIRequest();
+ (*msg_)[params][hmi_response::code] = hmi_apis::Common_Result::SUCCESS;
+ SmartObject& image = (*msg_)[msg_params][cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ EXPECT_CALL(*mock_app_, AddCommand(kCmdId, (*msg_)[msg_params]));
- utils::SharedPtr<AddCommandRequest> command =
- CreateCommand<AddCommandRequest>(msg_vr);
+ am::CommandsMap commands_map;
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(
+ Return(DataAccessor<am::CommandsMap>(commands_map, lock_)));
- ON_CALL(*mock_app_, FindSubMenu(_)).WillByDefault(Return(&(*msg_vr)));
- ON_CALL(hmi_interfaces_, GetInterfaceFromFunction(_))
- .WillByDefault(Return(am::HmiInterfaces::HMI_INTERFACE_VR));
- ON_CALL(hmi_interfaces_, GetInterfaceState(_))
- .WillByDefault(Return(am::HmiInterfaces::STATE_NOT_AVAILABLE));
+ Event event(hmi_apis::FunctionID::UI_AddCommand);
+ event.set_smart_object(*msg_);
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::UI_AddCommand)))
+ .WillOnce(Return(true));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+ EXPECT_CALL(mock_message_helper_,
+ HMIToMobileResult(hmi_apis::Common_Result::SUCCESS))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ EXPECT_CALL(*mock_app_, UpdateHash());
+ request_ptr->on_event(event);
+}
- MessageSharedPtr msg = CreateMessage(smart_objects::SmartType_Map);
- (*msg)[strings::params][hmi_response::code] =
- hmi_apis::Common_Result::UNSUPPORTED_RESOURCE;
- (*msg)[am::strings::msg_params][am::strings::info] =
- "VR is not supported by system";
- (*msg)[strings::msg_params][strings::cmd_id] = kCommandId;
+TEST_F(AddCommandRequestTest, OnEvent_VR_SUCCESS) {
+ CreateBasicParamsVRRequest();
+ MessageSharedPtr msg = CreateMessage(SmartType_Map);
+ (*msg)[params][hmi_response::code] = hmi_apis::Common_Result::SUCCESS;
+ (*msg)[msg_params][cmd_id] = kCmdId;
Event event(hmi_apis::FunctionID::VR_AddCommand);
event.set_smart_object(*msg);
-
- smart_objects::SmartObject* ptr = NULL;
- ON_CALL(*mock_app_, FindCommand(kCmdId)).WillByDefault(Return(ptr));
-
- ON_CALL(mock_message_helper_, HMIToMobileResult(_))
- .WillByDefault(Return(mobile_apis::Result::SUCCESS));
-
- EXPECT_CALL(*mock_app_, AddCommand(kCmdId, (*msg_vr)[strings::msg_params]));
+ EXPECT_CALL(mock_message_helper_,
+ HMIToMobileResult(hmi_apis::Common_Result::SUCCESS))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ EXPECT_CALL(*mock_app_, AddCommand(kCmdId, (*msg_)[msg_params]));
am::CommandsMap commands_map;
- ON_CALL(*mock_app_, commands_map())
- .WillByDefault(
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(
Return(DataAccessor<am::CommandsMap>(commands_map, lock_)));
-
EXPECT_CALL(*mock_app_, UpdateHash());
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::VR_AddCommand)))
+ .WillOnce(Return(true));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+ request_ptr->on_event(event);
+}
- MessageSharedPtr msg_ui(CreateMessage(smart_objects::SmartType_Map));
- (*msg_ui)[am::strings::params][am::hmi_response::code] =
- hmi_apis::Common_Result::SUCCESS;
+TEST_F(AddCommandRequestTest, OnTimeOut_EXPECT_VR_DeleteCommand) {
+ CheckOnTimeOutCommandDeletion(hmi_apis::FunctionID::VR_AddCommand,
+ hmi_apis::FunctionID::VR_DeleteCommand);
+}
+
+TEST_F(AddCommandRequestTest, OnTimeOut_EXPECT_UI_DeleteCommand) {
+ CheckOnTimeOutCommandDeletion(hmi_apis::FunctionID::UI_AddCommand,
+ hmi_apis::FunctionID::UI_DeleteCommand);
+}
+
+TEST_F(AddCommandRequestTest, OnEvent_BothSend_SUCCESS) {
+ MessageSharedPtr command_msg = CreateMessage(SmartType_Map);
+ (*command_msg)[params][connection_key] = kConnectionKey;
+ MessageSharedPtr event_msg = CreateMessage(SmartType_Map);
+ (*event_msg)[params][hmi_response::code] = hmi_apis::Common_Result::SUCCESS;
+ (*event_msg)[msg_params][cmd_id] = kCmdId;
Event event_ui(hmi_apis::FunctionID::UI_AddCommand);
- event_ui.set_smart_object(*msg_ui);
+ event_ui.set_smart_object(*event_msg);
+
+ Event event_vr(hmi_apis::FunctionID::VR_AddCommand);
+ event_vr.set_smart_object(*event_msg);
- command->Run();
- command->on_event(event_ui);
+ EXPECT_CALL(*mock_app_, RemoveCommand(kCmdId)).Times(0);
- MessageSharedPtr vr_command_result;
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(command_msg);
+ request_ptr->Run();
+ request_ptr->on_event(event_ui);
+ request_ptr->on_event(event_vr);
+}
+
+TEST_F(AddCommandRequestTest, OnEvent_UnknownEvent_UNSUCCESS) {
+ EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0);
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ Event event(hmi_apis::FunctionID::INVALID_ENUM);
+ request_ptr->on_event(event);
+}
+
+TEST_F(AddCommandRequestTest, OnEvent_AppNotExisted_UNSUCCESS) {
+ CreateBasicParamsUIRequest();
+ EXPECT_CALL(app_mngr_, application(kConnectionKey))
+ .WillOnce(Return(ApplicationSharedPtr()));
+ Event event(hmi_apis::FunctionID::UI_AddCommand);
+ EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0);
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->on_event(event);
+}
+
+TEST_F(AddCommandRequestTest,
+ OnEvent_HmiResponseCodeIsRejected_ExpectUICommandRemoved) {
+ CreateBasicParamsUIRequest();
+ SmartObject& params = (*msg_)[strings::params];
+ params[hmi_response::code] = hmi_apis::Common_Result::REJECTED;
+ SmartObject& image = (*msg_)[msg_params][cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ am::CommandsMap commands_map;
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
EXPECT_CALL(
app_mngr_,
- ManageMobileCommand(_, am::commands::Command::CommandOrigin::ORIGIN_SDL))
- .WillOnce(DoAll(SaveArg<0>(&vr_command_result), Return(true)));
-
- command->on_event(event);
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::UI_AddCommand)))
+ .WillOnce(Return(true));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+ EXPECT_CALL(mock_message_helper_,
+ HMIToMobileResult(hmi_apis::Common_Result::REJECTED))
+ .WillOnce(Return(mobile_apis::Result::REJECTED));
+ EXPECT_CALL(*mock_app_, RemoveCommand(kCmdId));
+ EXPECT_CALL(app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::REJECTED), _));
+ Event event(hmi_apis::FunctionID::UI_AddCommand);
+ event.set_smart_object(*msg_);
+ request_ptr->on_event(event);
+}
- ResultCommandExpectations(vr_command_result, "VR is not supported by system");
+TEST_F(AddCommandRequestTest,
+ OnEvent_HmiResponseCodeIsWarnings_ExpectCommandUpdated) {
+ CreateBasicParamsVRRequest();
+ CreateBasicParamsUIRequest();
+ SmartObject& params = (*msg_)[strings::params];
+ params[hmi_response::code] = hmi_apis::Common_Result::WARNINGS;
+ SmartObject& image = (*msg_)[msg_params][cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ am::CommandsMap commands_map;
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
+ {
+ InSequence dummy;
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::UI_AddCommand)))
+ .WillOnce(Return(true));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::VR_AddCommand)))
+ .WillOnce(Return(true));
+ }
+ EXPECT_CALL(app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::WARNINGS), _));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+ Event event_ui(hmi_apis::FunctionID::UI_AddCommand);
+ event_ui.set_smart_object(*msg_);
+ Event event_vr(hmi_apis::FunctionID::VR_AddCommand);
+ event_vr.set_smart_object(*msg_);
+ EXPECT_CALL(*mock_app_, UpdateHash());
+ request_ptr->on_event(event_ui);
+ request_ptr->on_event(event_vr);
}
-TEST_F(AddCommandRequestTest, OnEvent_UI_HmiSendSuccess_UNSUPPORTED_RESOURCE) {
- MessageSharedPtr msg_vr = CreateFullParamsUISO();
- (*msg_vr)[am::strings::msg_params][am::strings::vr_commands][0] =
- "vr_command";
+TEST_F(
+ AddCommandRequestTest,
+ OnEvent_UI_HmiResponseCodeIsGenericError_VR_HmiResponseCodeIsUnsupportedResourse_ExpectCommandRemoved) {
+ CreateBasicParamsVRRequest();
+ CreateBasicParamsUIRequest();
+ SmartObject& params = (*msg_)[strings::params];
+ params[hmi_response::code] = hmi_apis::Common_Result::GENERIC_ERROR;
+ SmartObject& image = (*msg_)[msg_params][cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ am::CommandsMap commands_map;
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
+ {
+ InSequence dummy;
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::UI_AddCommand)))
+ .WillOnce(Return(true));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::VR_AddCommand)))
+ .WillOnce(Return(true));
+ }
+
+ EXPECT_CALL(mock_message_helper_,
+ HMIToMobileResult(hmi_apis::Common_Result::GENERIC_ERROR))
+ .WillRepeatedly(Return(mobile_apis::Result::GENERIC_ERROR));
+ EXPECT_CALL(*mock_app_, RemoveCommand(kCmdId));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
- utils::SharedPtr<AddCommandRequest> command =
- CreateCommand<AddCommandRequest>(msg_vr);
+ Event event_ui(hmi_apis::FunctionID::UI_AddCommand);
+ event_ui.set_smart_object(*msg_);
+ request_ptr->on_event(event_ui);
+
+ Event event_vr(hmi_apis::FunctionID::VR_AddCommand);
+ MessageSharedPtr msg_vr = CreateMessage(SmartType_Map);
+ (*msg_vr)[strings::params][hmi_response::code] =
+ hmi_apis::Common_Result::UNSUPPORTED_RESOURCE;
+ (*msg_vr)[msg_params][cmd_id] = kCmdId;
+ event_vr.set_smart_object(*msg_vr);
+ request_ptr->on_event(event_vr);
+}
+
+TEST_F(
+ AddCommandRequestTest,
+ OnEvent_VR_HmiResponseCodeIsGenericError_UI_HmiResponseCodeIsUnsupportedResourse_ExpectCommandRemoved) {
+ CreateBasicParamsVRRequest();
+ CreateBasicParamsUIRequest();
+ SmartObject& params = (*msg_)[strings::params];
+ params[hmi_response::code] = hmi_apis::Common_Result::GENERIC_ERROR;
+ SmartObject& image = (*msg_)[msg_params][cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ am::CommandsMap commands_map;
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
+ {
+ InSequence dummy;
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::UI_AddCommand)))
+ .WillOnce(Return(true));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::VR_AddCommand)))
+ .WillOnce(Return(true));
+ }
- ON_CALL(*mock_app_, FindSubMenu(_)).WillByDefault(Return(&(*msg_vr)));
+ EXPECT_CALL(mock_message_helper_,
+ HMIToMobileResult(hmi_apis::Common_Result::GENERIC_ERROR))
+ .WillRepeatedly(Return(mobile_apis::Result::GENERIC_ERROR));
+ EXPECT_CALL(*mock_app_, RemoveCommand(kCmdId));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
- ON_CALL(hmi_interfaces_, GetInterfaceFromFunction(_))
- .WillByDefault(Return(am::HmiInterfaces::HMI_INTERFACE_UI));
- ON_CALL(hmi_interfaces_,
- GetInterfaceState(am::HmiInterfaces::HMI_INTERFACE_UI))
- .WillByDefault(Return(am::HmiInterfaces::STATE_NOT_AVAILABLE));
- ON_CALL(hmi_interfaces_,
- GetInterfaceState(am::HmiInterfaces::HMI_INTERFACE_VR))
- .WillByDefault(Return(am::HmiInterfaces::STATE_NOT_AVAILABLE));
+ Event event_vr(hmi_apis::FunctionID::VR_AddCommand);
+ event_vr.set_smart_object(*msg_);
+ request_ptr->on_event(event_vr);
- MessageSharedPtr msg = CreateMessage(smart_objects::SmartType_Map);
- (*msg)[am::strings::params][am::hmi_response::code] =
+ Event event_ui(hmi_apis::FunctionID::UI_AddCommand);
+ MessageSharedPtr msg_ui = CreateMessage(SmartType_Map);
+ (*msg_ui)[strings::params][hmi_response::code] =
hmi_apis::Common_Result::UNSUPPORTED_RESOURCE;
- (*msg)[am::strings::msg_params][am::strings::info] =
- "UI is not supported by system";
- (*msg)[am::strings::msg_params][am::strings::cmd_id] = kCommandId;
+ (*msg_ui)[msg_params][cmd_id] = kCmdId;
+ event_ui.set_smart_object(*msg_ui);
+ request_ptr->on_event(event_ui);
+}
- Event event(hmi_apis::FunctionID::UI_AddCommand);
- event.set_smart_object(*msg);
+TEST_F(
+ AddCommandRequestTest,
+ OnEvent_UI_VR_HmiResponseCodeIsUnsupportedResourse_UI_NotAvailableInterfaceState_ExpectCommandRemoved) {
+ CreateBasicParamsVRRequest();
+ CreateBasicParamsUIRequest();
+ SmartObject& params = (*msg_)[strings::params];
+ params[hmi_response::code] = hmi_apis::Common_Result::UNSUPPORTED_RESOURCE;
+ SmartObject& image = (*msg_)[msg_params][cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ am::CommandsMap commands_map;
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
+ {
+ InSequence dummy;
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::UI_AddCommand)))
+ .WillOnce(Return(true));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::VR_AddCommand)))
+ .WillOnce(Return(true));
+ }
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
- smart_objects::SmartObject* ptr = NULL;
- ON_CALL(*mock_app_, FindCommand(kCmdId)).WillByDefault(Return(ptr));
- EXPECT_EQ(NULL, ptr);
+ EXPECT_CALL(mock_hmi_interfaces_,
+ GetInterfaceState(am::HmiInterfaces::HMI_INTERFACE_UI))
+ .WillRepeatedly(
+ Return(am::HmiInterfaces::InterfaceState::STATE_NOT_AVAILABLE));
+ EXPECT_CALL(mock_hmi_interfaces_,
+ GetInterfaceState(am::HmiInterfaces::HMI_INTERFACE_VR))
+ .WillRepeatedly(Return(am::HmiInterfaces::STATE_AVAILABLE));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::UNSUPPORTED_RESOURCE), _));
+ EXPECT_CALL(*mock_app_, RemoveCommand(kCmdId));
+ Event event_ui(hmi_apis::FunctionID::UI_AddCommand);
+ event_ui.set_smart_object(*msg_);
+ Event event_vr(hmi_apis::FunctionID::VR_AddCommand);
+ event_vr.set_smart_object(*msg_);
+ request_ptr->on_event(event_ui);
+ request_ptr->on_event(event_vr);
+}
- ON_CALL(mock_message_helper_, HMIToMobileResult(_))
- .WillByDefault(Return(mobile_apis::Result::SUCCESS));
+TEST_F(
+ AddCommandRequestTest,
+ OnEvent_UI_VR_HmiResponseCodeIsUnsupportedResourse_VR_NotAvailableInterfaceState_ExpectCommandRemoved) {
+ CreateBasicParamsVRRequest();
+ CreateBasicParamsUIRequest();
+ SmartObject& params = (*msg_)[strings::params];
+ params[hmi_response::code] = hmi_apis::Common_Result::UNSUPPORTED_RESOURCE;
+ SmartObject& image = (*msg_)[msg_params][cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ am::CommandsMap commands_map;
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
+ {
+ InSequence dummy;
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::UI_AddCommand)))
+ .WillOnce(Return(true));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::VR_AddCommand)))
+ .WillOnce(Return(true));
+ }
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
- ON_CALL(mock_message_helper_, VerifyImage(_, _, _))
- .WillByDefault(Return(mobile_apis::Result::SUCCESS));
- EXPECT_CALL(*mock_app_,
- AddCommand(kCmdId, (*msg_vr)[am::strings::msg_params]));
+ EXPECT_CALL(mock_hmi_interfaces_,
+ GetInterfaceState(am::HmiInterfaces::HMI_INTERFACE_UI))
+ .WillRepeatedly(Return(am::HmiInterfaces::STATE_AVAILABLE));
+ EXPECT_CALL(mock_hmi_interfaces_,
+ GetInterfaceState(am::HmiInterfaces::HMI_INTERFACE_VR))
+ .WillRepeatedly(
+ Return(am::HmiInterfaces::InterfaceState::STATE_NOT_AVAILABLE));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::UNSUPPORTED_RESOURCE), _));
+ EXPECT_CALL(*mock_app_, RemoveCommand(kCmdId));
+ Event event_ui(hmi_apis::FunctionID::UI_AddCommand);
+ event_ui.set_smart_object(*msg_);
+ Event event_vr(hmi_apis::FunctionID::VR_AddCommand);
+ event_vr.set_smart_object(*msg_);
+ request_ptr->on_event(event_ui);
+ request_ptr->on_event(event_vr);
+}
+TEST_F(
+ AddCommandRequestTest,
+ OnEvent_UI_HmiResponseCodeIsUnsupportedResource_NotAvailableInterfaceState_ExpectCommandRemoved) {
+ CreateBasicParamsUIRequest();
+ SmartObject& params = (*msg_)[strings::params];
+ params[hmi_response::code] = hmi_apis::Common_Result::UNSUPPORTED_RESOURCE;
+ SmartObject& image = (*msg_)[msg_params][cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
am::CommandsMap commands_map;
- ON_CALL(*mock_app_, commands_map())
- .WillByDefault(
- Return(DataAccessor<am::CommandsMap>(commands_map, lock_)));
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::UI_AddCommand)))
+ .WillOnce(Return(true));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+ EXPECT_CALL(mock_hmi_interfaces_,
+ GetInterfaceState(am::HmiInterfaces::HMI_INTERFACE_UI))
+ .WillRepeatedly(
+ Return(am::HmiInterfaces::InterfaceState::STATE_NOT_AVAILABLE));
+ EXPECT_CALL(mock_hmi_interfaces_,
+ GetInterfaceState(am::HmiInterfaces::HMI_INTERFACE_VR))
+ .WillRepeatedly(
+ Return(am::HmiInterfaces::InterfaceState::STATE_NOT_AVAILABLE));
+ EXPECT_CALL(*mock_app_, RemoveCommand(kCmdId));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::UNSUPPORTED_RESOURCE), _));
+ Event event(hmi_apis::FunctionID::UI_AddCommand);
+ event.set_smart_object(*msg_);
+ request_ptr->on_event(event);
+}
- EXPECT_CALL(*mock_app_, UpdateHash());
+TEST_F(
+ AddCommandRequestTest,
+ OnEvent_VR_HmiResponseCodeIsUnsupportedResource_NotAvailableInterfaceState_ExpectCommandRemoved) {
+ CreateBasicParamsVRRequest();
+ SmartObject& params = (*msg_)[strings::params];
+ params[hmi_response::code] = hmi_apis::Common_Result::UNSUPPORTED_RESOURCE;
+ am::CommandsMap commands_map;
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::VR_AddCommand)))
+ .WillOnce(Return(true));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+ EXPECT_CALL(mock_hmi_interfaces_,
+ GetInterfaceState(am::HmiInterfaces::HMI_INTERFACE_UI))
+ .WillRepeatedly(
+ Return(am::HmiInterfaces::InterfaceState::STATE_NOT_AVAILABLE));
+ EXPECT_CALL(mock_hmi_interfaces_,
+ GetInterfaceState(am::HmiInterfaces::HMI_INTERFACE_VR))
+ .WillRepeatedly(
+ Return(am::HmiInterfaces::InterfaceState::STATE_NOT_AVAILABLE));
+ EXPECT_CALL(*mock_app_, RemoveCommand(kCmdId));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::UNSUPPORTED_RESOURCE), _));
+ Event event(hmi_apis::FunctionID::VR_AddCommand);
+ event.set_smart_object(*msg_);
+ request_ptr->on_event(event);
+}
- MessageSharedPtr msg_ui(CreateMessage(smart_objects::SmartType_Map));
- (*msg_ui)[am::strings::params][am::hmi_response::code] =
- hmi_apis::Common_Result::SUCCESS;
+TEST_F(AddCommandRequestTest,
+ OnEvent_UI_EventWithNotSuccesResponseCode_ExpectVRCommandDelete) {
+ CreateBasicParamsVRRequest();
+ CreateBasicParamsUIRequest();
+ SmartObject& params = (*msg_)[strings::params];
+ params[hmi_response::code] = hmi_apis::Common_Result::SUCCESS;
+ SmartObject& image = (*msg_)[msg_params][cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ am::CommandsMap commands_map;
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
+ {
+ InSequence dummy;
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::UI_AddCommand)))
+ .WillOnce(Return(true));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::VR_AddCommand)))
+ .WillOnce(Return(true));
+ }
+ EXPECT_CALL(app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::GENERIC_ERROR), _));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+ MessageSharedPtr msg_ui = CreateMessage(SmartType_Map);
+ (*msg_ui)[strings::params][hmi_response::code] =
+ hmi_apis::Common_Result::ABORTED;
+ (*msg_ui)[msg_params][cmd_id] = kCmdId;
+ Event event_ui(hmi_apis::FunctionID::UI_AddCommand);
+ event_ui.set_smart_object(*msg_ui);
Event event_vr(hmi_apis::FunctionID::VR_AddCommand);
- event_vr.set_smart_object(*msg_vr);
+ event_vr.set_smart_object(*msg_);
+ EXPECT_CALL(mock_message_helper_,
+ HMIToMobileResult(hmi_apis::Common_Result::ABORTED))
+ .WillOnce(Return(mobile_apis::Result::ABORTED));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::VR_DeleteCommand)))
+ .WillOnce(Return(true));
+ EXPECT_CALL(*mock_app_, RemoveCommand(kCmdId)).Times(2);
+ request_ptr->on_event(event_ui);
+ request_ptr->on_event(event_vr);
+}
- command->Run();
- command->on_event(event_vr);
- MessageSharedPtr ui_command_result;
+TEST_F(AddCommandRequestTest,
+ OnEvent_UI_VR_Events_VRErrorPresent_ExpectRemoveCommand) {
+ CreateBasicParamsVRRequest();
+ CreateBasicParamsUIRequest();
+ SmartObject& params = (*msg_)[strings::params];
+ params[hmi_response::code] = hmi_apis::Common_Result::SUCCESS;
+ SmartObject& image = (*msg_)[msg_params][cmd_icon];
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ am::CommandsMap commands_map;
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
+ {
+ InSequence dummy;
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::UI_AddCommand)))
+ .WillOnce(Return(true));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::VR_AddCommand)))
+ .WillOnce(Return(true));
+ }
+ EXPECT_CALL(app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::GENERIC_ERROR), _));
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+ EXPECT_CALL(mock_message_helper_,
+ HMIToMobileResult(hmi_apis::Common_Result::ABORTED))
+ .WillOnce(Return(mobile_apis::Result::ABORTED));
+
+ Event event_ui(hmi_apis::FunctionID::UI_AddCommand);
+ event_ui.set_smart_object(*msg_);
+ request_ptr->on_event(event_ui);
EXPECT_CALL(
app_mngr_,
- ManageMobileCommand(_, am::commands::Command::CommandOrigin::ORIGIN_SDL))
- .WillOnce(DoAll(SaveArg<0>(&ui_command_result), Return(true)));
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::UI_DeleteCommand)))
+ .WillOnce(Return(true));
+ EXPECT_CALL(*mock_app_, RemoveCommand(kCmdId)).Times(2);
+ Event event_vr(hmi_apis::FunctionID::VR_AddCommand);
+ MessageSharedPtr msg_vr = CreateMessage(SmartType_Map);
+ (*msg_vr)[strings::params][hmi_response::code] =
+ hmi_apis::Common_Result::ABORTED;
+ (*msg_vr)[msg_params][cmd_id] = kCmdId;
+ event_vr.set_smart_object(*msg_vr);
+ request_ptr->on_event(event_vr);
+}
- command->on_event(event);
+TEST_F(AddCommandRequestTest,
+ OnTimeOut_AppNotExisted_NoAppRemoveCommandCalled) {
+ CreateBasicParamsUIRequest();
+ EXPECT_CALL(app_mngr_, application(kConnectionKey))
+ .WillOnce(Return(ApplicationSharedPtr()));
+ EXPECT_CALL(*mock_app_, RemoveCommand(kCmdId)).Times(0);
+ SmartObjectSPtr response;
+ EXPECT_CALL(
+ mock_message_helper_,
+ CreateNegativeResponse(_, _, _, mobile_apis::Result::GENERIC_ERROR))
+ .WillOnce(Return(response));
+ EXPECT_CALL(app_mngr_,
+ ManageMobileCommand(
+ response, am::commands::Command::CommandOrigin::ORIGIN_SDL));
+ utils::SharedPtr<CommandRequestImpl> base_class_request =
+ static_cast<utils::SharedPtr<CommandRequestImpl> >(
+ CreateCommand<AddCommandRequest>(msg_));
+ base_class_request->onTimeOut();
+}
- ResultCommandExpectations(ui_command_result, "UI is not supported by system");
+TEST_F(AddCommandRequestTest, OnTimeOut_AppRemoveCommandCalled) {
+ CreateBasicParamsVRRequest();
+ CreateBasicParamsUIRequest();
+ SmartObject& msg_params = (*msg_)[strings::msg_params];
+ SmartObject& image = msg_params[cmd_icon];
+ msg_params[menu_params][hmi_request::parent_id] = kSecondParentId;
+ EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ EXPECT_CALL(*mock_app_, FindCommand(kCmdId)).WillOnce(Return(so_ptr_.get()));
+ SmartObject first_command = SmartObject(SmartType_Map);
+ SmartObject second_command = SmartObject(SmartType_Map);
+ const am::CommandsMap commands_map =
+ CreateCommandsMap(first_command, second_command);
+ EXPECT_CALL(*mock_app_, commands_map())
+ .WillRepeatedly(Return(
+ DataAccessor<application_manager::CommandsMap>(commands_map, lock_)));
+ so_ptr_ = utils::MakeShared<SmartObject>(SmartType_Map);
+ EXPECT_CALL(*mock_app_, FindSubMenu(kSecondParentId))
+ .WillOnce(Return(so_ptr_.get()));
+ {
+ InSequence dummy;
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::UI_AddCommand)))
+ .WillOnce(Return(true));
+ EXPECT_CALL(
+ app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(hmi_apis::FunctionID::VR_AddCommand)))
+ .WillOnce(Return(true));
+ }
+ EXPECT_CALL(app_mngr_, ManageMobileCommand(_, _)).Times(0);
+ utils::SharedPtr<AddCommandRequest> request_ptr =
+ CreateCommand<AddCommandRequest>(msg_);
+ request_ptr->Run();
+ EXPECT_CALL(*mock_app_, RemoveCommand(kCmdId));
+ SmartObjectSPtr response;
+ EXPECT_CALL(
+ mock_message_helper_,
+ CreateNegativeResponse(_, _, _, mobile_apis::Result::GENERIC_ERROR))
+ .WillOnce(Return(response));
+ EXPECT_CALL(app_mngr_,
+ ManageMobileCommand(
+ response, am::commands::Command::CommandOrigin::ORIGIN_SDL));
+ utils::SharedPtr<CommandRequestImpl> base_class_request =
+ static_cast<utils::SharedPtr<CommandRequestImpl> >(request_ptr);
+ base_class_request->onTimeOut();
}
} // namespace add_command_test
diff --git a/src/components/application_manager/test/commands/mobile/alert_request_test.cc b/src/components/application_manager/test/commands/mobile/alert_request_test.cc
index e8ebcd0f60..b384cd9f11 100644
--- a/src/components/application_manager/test/commands/mobile/alert_request_test.cc
+++ b/src/components/application_manager/test/commands/mobile/alert_request_test.cc
@@ -210,4 +210,4 @@ TEST_F(AlertRequestTest, OnEvent_UI_HmiSendSuccess_UNSUPPORTED_RESOURCE) {
} // namespace mobile_commands_test
} // namespace commands_test
} // namespace components
-} // namespace tests
+} // namespace test
diff --git a/src/components/application_manager/test/commands/mobile/on_button_notification_commands_test.cc b/src/components/application_manager/test/commands/mobile/on_button_notification_commands_test.cc
index 793f379286..48f4497033 100644
--- a/src/components/application_manager/test/commands/mobile/on_button_notification_commands_test.cc
+++ b/src/components/application_manager/test/commands/mobile/on_button_notification_commands_test.cc
@@ -227,8 +227,9 @@ TYPED_TEST(OnButtonNotificationCommandsTest, Run_CustomButton_SUCCESS) {
this->template CreateCommand<Notification>(notification_msg));
typename TestFixture::MockAppPtr mock_app = this->CreateMockApp();
+ ON_CALL(*mock_app, hmi_level())
+ .WillByDefault(Return(mobile_apis::HMILevel::HMI_FULL));
EXPECT_CALL(this->app_mngr_, application(kAppId)).WillOnce(Return(mock_app));
-
EXPECT_CALL(*mock_app, IsSubscribedToSoftButton(kCustomButtonId))
.WillOnce(Return(true));
diff --git a/src/components/application_manager/test/commands/mobile/on_keyboard_input_notification_test.cc b/src/components/application_manager/test/commands/mobile/on_keyboard_input_notification_test.cc
index d8240dfb62..d56cd98904 100644
--- a/src/components/application_manager/test/commands/mobile/on_keyboard_input_notification_test.cc
+++ b/src/components/application_manager/test/commands/mobile/on_keyboard_input_notification_test.cc
@@ -108,6 +108,8 @@ TEST_F(OnKeyBoardInputNotificationTest, Run_ActionActive_SUCCESS) {
MockAppPtr mock_app(InitAppSetDataAccessor(app_set_));
EXPECT_CALL(*mock_app, is_perform_interaction_active()).WillOnce(Return(1));
+ EXPECT_CALL(*mock_app, perform_interaction_layout())
+ .WillOnce(Return(mobile_apis::LayoutMode::KEYBOARD));
EXPECT_CALL(*mock_app, hmi_level()).Times(0);
EXPECT_CALL(*mock_app, app_id()).WillOnce(Return(kConnectionKey));
diff --git a/src/components/application_manager/test/commands/mobile/read_did_request_test.cc b/src/components/application_manager/test/commands/mobile/read_did_request_test.cc
index 111dbf4e27..334f559ae6 100644
--- a/src/components/application_manager/test/commands/mobile/read_did_request_test.cc
+++ b/src/components/application_manager/test/commands/mobile/read_did_request_test.cc
@@ -46,7 +46,7 @@
#include "interfaces/MOBILE_API.h"
#include "interfaces/HMI_API.h"
#include "application_manager/smart_object_keys.h"
-#include "event_engine/event.h"
+#include "application_manager/event_engine/event.h"
namespace test {
namespace components {
diff --git a/src/components/application_manager/test/commands/mobile/send_location_request_test.cc b/src/components/application_manager/test/commands/mobile/send_location_request_test.cc
new file mode 100644
index 0000000000..df412695fd
--- /dev/null
+++ b/src/components/application_manager/test/commands/mobile/send_location_request_test.cc
@@ -0,0 +1,399 @@
+/*
+ * Copyright (c) 2016, 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.
+ */
+#include <stdint.h>
+#include <string>
+
+#include "gtest/gtest.h"
+#include "application_manager/commands/mobile/send_location_request.h"
+#include "application_manager/mock_hmi_capabilities.h"
+#include "application_manager/mock_message_helper.h"
+#include "utils/shared_ptr.h"
+#include "commands/command_request_test.h"
+
+namespace test {
+namespace components {
+namespace commands_test {
+namespace mobile_commands_test {
+namespace send_location_request {
+
+using application_manager::commands::MessageSharedPtr;
+using application_manager::commands::SendLocationRequest;
+using application_manager::MockMessageHelper;
+using test::components::application_manager_test::MockHMICapabilities;
+using smart_objects::SmartObject;
+using utils::SharedPtr;
+using testing::_;
+using testing::Return;
+using testing::ReturnRef;
+using ::testing::Mock;
+
+namespace strings = application_manager::strings;
+namespace hmi_response = application_manager::hmi_response;
+namespace Common_TextFieldName = hmi_apis::Common_TextFieldName;
+
+namespace {
+const uint32_t kConnectionKey = 1u;
+const uint32_t kFunctionID = 2u;
+const uint32_t kAppID = 3u;
+const double kLongitudeDegrees = 13.4;
+const std::string kLocationDescription = "Location_Description";
+const std::string kNewLine = "\\n";
+const std::string kAddressLine = "Address_Line";
+const std::string kPhoneNumber = "Phone_number";
+const std::string kCorrectAddress = "Correct address";
+const std::string kEmptyAddress = "";
+const std::string kAddressWithWrongSyntax = "Wrong Syntax\\n";
+} // namespace
+
+class SendLocationRequestTest
+ : public CommandRequestTest<CommandsTestMocks::kIsNice> {
+ public:
+ class UnwrappedSendLocationRequest : public SendLocationRequest {
+ public:
+ UnwrappedSendLocationRequest(
+ const MessageSharedPtr& message,
+ application_manager::ApplicationManager& application_manager)
+ : SendLocationRequest(message, application_manager) {}
+
+ ::application_manager::CommandParametersPermissions&
+ get_parameters_permissions() {
+ return parameters_permissions_;
+ }
+ };
+
+ typedef SharedPtr<UnwrappedSendLocationRequest> CommandSPrt;
+
+ SendLocationRequestTest()
+ : mock_message_helper_(*MockMessageHelper::message_helper_mock()) {
+ mock_app_ = CreateMockApp();
+ disp_cap_ = utils::MakeShared<SmartObject>(smart_objects::SmartType_Map);
+ message_ = CreateMessage();
+ command_ = CreateCommand<UnwrappedSendLocationRequest>(message_);
+ }
+
+ void TearDown() OVERRIDE {
+ Mock::VerifyAndClearExpectations(&mock_message_helper_);
+ }
+
+ void InitialSetup(MessageSharedPtr message_) {
+ (*message_)[strings::params][strings::connection_key] = kConnectionKey;
+ (*message_)[strings::params][strings::function_id] = kFunctionID;
+ (*message_)[strings::msg_params] =
+ SmartObject(smart_objects::SmartType_Map);
+ (*message_)[strings::msg_params][strings::address] = kCorrectAddress;
+ EXPECT_CALL(app_mngr_, application(kConnectionKey))
+ .WillOnce(Return(mock_app_));
+
+ AllowMandatoryFields();
+ }
+
+ void HMICapabilitiesSetupHelper() {
+ EXPECT_CALL(app_mngr_, hmi_capabilities())
+ .WillOnce(ReturnRef(mock_hmi_capabilities_));
+ EXPECT_CALL(mock_hmi_capabilities_, is_ui_cooperating())
+ .WillOnce(Return(true));
+ }
+
+ void HMICapabilitiesSetupWithArguments(
+ Common_TextFieldName::eType field_name) {
+ HMICapabilitiesSetupHelper();
+ (*disp_cap_)[hmi_response::text_fields] =
+ SmartObject(smart_objects::SmartType_Array);
+ (*disp_cap_)[hmi_response::text_fields][0] =
+ SmartObject(smart_objects::SmartType_Map);
+ (*disp_cap_)[hmi_response::text_fields][0][strings::name] = field_name;
+ EXPECT_CALL(mock_hmi_capabilities_, display_capabilities())
+ .Times(2)
+ .WillRepeatedly(Return(disp_cap_.get()));
+ }
+
+ void FinishSetup() {
+ EXPECT_CALL(*mock_app_, hmi_app_id()).WillOnce(Return(kAppID));
+ EXPECT_CALL(app_mngr_,
+ ManageHMICommand(HMIResultCodeIs(
+ hmi_apis::FunctionID::Navigation_SendLocation)));
+ }
+
+ void FinishSetupCancelled(mobile_apis::Result::eType result) {
+ EXPECT_CALL(*mock_app_, hmi_app_id()).Times(0);
+ EXPECT_CALL(app_mngr_, ManageHMICommand(_)).Times(0);
+ EXPECT_CALL(app_mngr_, ManageMobileCommand(MobileResultCodeIs(result), _));
+ }
+
+ void AllowMandatoryFields() {
+ application_manager::CommandParametersPermissions& permissions =
+ command_->get_parameters_permissions();
+ permissions.allowed_params.insert(strings::longitude_degrees);
+ permissions.allowed_params.insert(strings::latitude_degrees);
+ }
+
+ MockAppPtr mock_app_;
+ MockHMICapabilities mock_hmi_capabilities_;
+ MockMessageHelper& mock_message_helper_;
+ SharedPtr<SmartObject> disp_cap_;
+ MessageSharedPtr message_;
+ CommandSPrt command_;
+};
+
+TEST_F(SendLocationRequestTest, Run_InvalidApp_Success) {
+ (*message_)[strings::params][strings::connection_key] = kConnectionKey;
+ EXPECT_CALL(app_mngr_, application(kConnectionKey))
+ .WillOnce(Return(MockAppPtr()));
+ FinishSetupCancelled(mobile_apis::Result::APPLICATION_NOT_REGISTERED);
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, Run_DeliveryMode_Success) {
+ InitialSetup(message_);
+ SmartObject msg_params = (*message_)[strings::msg_params];
+ msg_params[strings::delivery_mode] = SmartObject();
+ (*message_)[strings::msg_params] = msg_params;
+ msg_params.erase(strings::delivery_mode);
+ FinishSetup();
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, Run_LocationNameIsAllowed_Success) {
+ InitialSetup(message_);
+ (*message_)[strings::msg_params][strings::location_name] = "Location_Name";
+ HMICapabilitiesSetupWithArguments(Common_TextFieldName::locationName);
+ FinishSetup();
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, Run_LocationNameIsNotAllowed_Cancelled) {
+ InitialSetup(message_);
+ (*message_)[strings::msg_params][strings::location_name] = "Location_Name";
+ HMICapabilitiesSetupWithArguments(Common_TextFieldName::INVALID_ENUM);
+ FinishSetupCancelled(mobile_apis::Result::UNSUPPORTED_RESOURCE);
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, Run_LocationNameWrongSyntax_Cancelled) {
+ InitialSetup(message_);
+ (*message_)[strings::msg_params][strings::location_name] = "Location_Name\\n";
+ HMICapabilitiesSetupWithArguments(Common_TextFieldName::locationName);
+ FinishSetupCancelled(mobile_apis::Result::INVALID_DATA);
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, Run_LocationDescriptionIsAllowed_Success) {
+ InitialSetup(message_);
+ (*message_)[strings::msg_params][strings::location_description] =
+ kLocationDescription;
+ HMICapabilitiesSetupWithArguments(Common_TextFieldName::locationDescription);
+ FinishSetup();
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, Run_LocationDescriptionIsNotAllowed_Cancelled) {
+ InitialSetup(message_);
+ (*message_)[strings::msg_params][strings::location_description] =
+ kLocationDescription;
+ HMICapabilitiesSetupWithArguments(Common_TextFieldName::INVALID_ENUM);
+ FinishSetupCancelled(mobile_apis::Result::UNSUPPORTED_RESOURCE);
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, Run_LocationDescriptionWrongSyntax_Cancelled) {
+ InitialSetup(message_);
+ (*message_)[strings::msg_params][strings::location_description] =
+ kLocationDescription + kNewLine;
+ HMICapabilitiesSetupWithArguments(Common_TextFieldName::locationDescription);
+ FinishSetupCancelled(mobile_apis::Result::INVALID_DATA);
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, Run_AddressLinesAreAllowed_Success) {
+ InitialSetup(message_);
+ (*message_)[strings::msg_params][strings::address_lines] =
+ SmartObject(smart_objects::SmartType_Array);
+ (*message_)[strings::msg_params][strings::address_lines][0] = kAddressLine;
+ HMICapabilitiesSetupWithArguments(Common_TextFieldName::addressLines);
+ FinishSetup();
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, Run_AddressLinesAreNotAllowed_Cancelled) {
+ InitialSetup(message_);
+ (*message_)[strings::msg_params][strings::address_lines] =
+ SmartObject(smart_objects::SmartType_Array);
+ (*message_)[strings::msg_params][strings::address_lines][0] = kAddressLine;
+ HMICapabilitiesSetupWithArguments(Common_TextFieldName::INVALID_ENUM);
+ FinishSetupCancelled(mobile_apis::Result::UNSUPPORTED_RESOURCE);
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, Run_AddressLinesWrongSyntax_Cancelled) {
+ InitialSetup(message_);
+ (*message_)[strings::msg_params][strings::address_lines] =
+ SmartObject(smart_objects::SmartType_Array);
+ (*message_)[strings::msg_params][strings::address_lines][0] =
+ kAddressLine + kNewLine;
+ HMICapabilitiesSetupWithArguments(Common_TextFieldName::addressLines);
+ FinishSetupCancelled(mobile_apis::Result::INVALID_DATA);
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, Run_PhoneNumberIsAllowed_Success) {
+ InitialSetup(message_);
+ (*message_)[strings::msg_params][strings::phone_number] = kPhoneNumber;
+ HMICapabilitiesSetupWithArguments(Common_TextFieldName::phoneNumber);
+ FinishSetup();
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, Run_PhoneNumberIsNotAllowed_Cancelled) {
+ InitialSetup(message_);
+ (*message_)[strings::msg_params][strings::phone_number] = kPhoneNumber;
+ HMICapabilitiesSetupWithArguments(Common_TextFieldName::INVALID_ENUM);
+ FinishSetupCancelled(mobile_apis::Result::UNSUPPORTED_RESOURCE);
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, Run_PhoneNumberWrongSyntax_Cancelled) {
+ InitialSetup(message_);
+ (*message_)[strings::msg_params][strings::phone_number] =
+ kPhoneNumber + kNewLine;
+ HMICapabilitiesSetupWithArguments(Common_TextFieldName::phoneNumber);
+ FinishSetupCancelled(mobile_apis::Result::INVALID_DATA);
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, Run_AddressesContainWrongSyntax_Cancelled) {
+ InitialSetup(message_);
+ (*message_)[strings::msg_params][strings::address] =
+ SmartObject(smart_objects::SmartType_Array);
+ (*message_)[strings::msg_params][strings::address]["Address 1"] =
+ kCorrectAddress;
+ (*message_)[strings::msg_params][strings::address]["Address 2"] =
+ kAddressWithWrongSyntax;
+ FinishSetupCancelled(mobile_apis::Result::INVALID_DATA);
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, Run_LocationImageValid_Success) {
+ InitialSetup(message_);
+ (*message_)[strings::msg_params][strings::location_image] =
+ SmartObject(smart_objects::SmartType_Map);
+ (*message_)[strings::msg_params][strings::location_image][strings::value] =
+ "1";
+ EXPECT_CALL(
+ mock_message_helper_,
+ VerifyImage(
+ (*message_)[strings::msg_params][strings::location_image], _, _))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ FinishSetup();
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, Run_LocationImageInvalid_Cancelled) {
+ InitialSetup(message_);
+ (*message_)[strings::msg_params][strings::location_image] =
+ SmartObject(smart_objects::SmartType_Map);
+ (*message_)[strings::msg_params][strings::location_image][strings::value] =
+ "1";
+ EXPECT_CALL(
+ mock_message_helper_,
+ VerifyImage(
+ (*message_)[strings::msg_params][strings::location_image], _, _))
+ .WillOnce(Return(mobile_apis::Result::ABORTED));
+ FinishSetupCancelled(mobile_apis::Result::ABORTED);
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, Run_HMIUINotCoop_Cancelled) {
+ InitialSetup(message_);
+ (*message_)[strings::msg_params][strings::phone_number] = kPhoneNumber;
+ (*disp_cap_)[hmi_response::text_fields] =
+ SmartObject(smart_objects::SmartType_Array);
+ (*disp_cap_)[hmi_response::text_fields][0] =
+ SmartObject(smart_objects::SmartType_Map);
+ (*disp_cap_)[hmi_response::text_fields][0][strings::name] =
+ Common_TextFieldName::phoneNumber;
+ EXPECT_CALL(app_mngr_, hmi_capabilities())
+ .WillOnce(ReturnRef(mock_hmi_capabilities_));
+ EXPECT_CALL(mock_hmi_capabilities_, is_ui_cooperating())
+ .WillOnce(Return(false));
+ FinishSetupCancelled(mobile_apis::Result::UNSUPPORTED_RESOURCE);
+ command_->Run();
+}
+
+TEST_F(SendLocationRequestTest, OnEvent_Success) {
+ mobile_apis::Result::eType response_code = mobile_apis::Result::SUCCESS;
+ (*message_)[strings::params][hmi_response::code] = response_code;
+ Event event(hmi_apis::FunctionID::Navigation_SendLocation);
+ event.set_smart_object(*message_);
+ EXPECT_CALL(mock_message_helper_,
+ HMIToMobileResult(hmi_apis::Common_Result::SUCCESS))
+ .WillOnce(Return(mobile_apis::Result::SUCCESS));
+ command_->on_event(event);
+}
+
+TEST_F(SendLocationRequestTest, OnEvent_Cancelled) {
+ (*message_)[strings::params][hmi_response::code] =
+ mobile_apis::Result::SUCCESS;
+ Event event(hmi_apis::FunctionID::Navigation_OnWayPointChange);
+ event.set_smart_object(*message_);
+ EXPECT_CALL(
+ app_mngr_,
+ ManageMobileCommand(MobileResultCodeIs(mobile_apis::Result::SUCCESS), _))
+ .Times(0);
+ command_->on_event(event);
+}
+
+TEST_F(SendLocationRequestTest, Run_MandatoryParamsDisallowed_InvalidData) {
+ (*message_)[strings::params][strings::connection_key] = kConnectionKey;
+ (*message_)[strings::params][strings::function_id] = kFunctionID;
+ (*message_)[strings::msg_params] = SmartObject(smart_objects::SmartType_Map);
+ (*message_)[strings::msg_params][strings::address] = kCorrectAddress;
+ (*message_)[strings::msg_params][strings::longitude_degrees] =
+ kLongitudeDegrees;
+ EXPECT_CALL(app_mngr_, application(kConnectionKey))
+ .WillOnce(Return(mock_app_));
+ application_manager::CommandParametersPermissions& permissions =
+ command_->get_parameters_permissions();
+ // 1st one allowed
+ permissions.allowed_params.insert(strings::longitude_degrees);
+ // 2nd one disallowed
+ permissions.disallowed_params.insert(strings::latitude_degrees);
+ EXPECT_CALL(app_mngr_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::INVALID_DATA), _));
+ command_->Run();
+}
+
+} // namespace send_location_request
+} // namespace mobile_commands_test
+} // namespace commands_test
+} // namespace components
+} // namespace test
diff --git a/src/components/application_manager/test/hmi_capabilities_test.cc b/src/components/application_manager/test/hmi_capabilities_test.cc
index 164f0c20ce..0a5d6116db 100644
--- a/src/components/application_manager/test/hmi_capabilities_test.cc
+++ b/src/components/application_manager/test/hmi_capabilities_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
@@ -45,7 +45,7 @@
#include "application_manager/mock_application_manager_settings.h"
#include "application_manager/mock_event_dispatcher.h"
#include "application_manager/state_controller.h"
-#include "resumption/last_state.h"
+#include "resumption/last_state_impl.h"
#include "application_manager/resumption/resume_ctrl.h"
namespace test {
@@ -94,7 +94,7 @@ class HMICapabilitiesTest : public ::testing::Test {
void SetCooperating();
MockApplicationManager app_mngr_;
event_engine_test::MockEventDispatcher mock_event_dispatcher;
- resumption::LastState last_state_;
+ resumption::LastStateImpl last_state_;
MockApplicationManagerSettings mock_application_manager_settings_;
utils::SharedPtr<HMICapabilitiesForTesting> hmi_capabilities_test;
const std::string file_name_;
diff --git a/src/components/application_manager/test/message_helper/CMakeLists.txt.user b/src/components/application_manager/test/message_helper/CMakeLists.txt.user
deleted file mode 100755
index e7522c1793..0000000000
--- a/src/components/application_manager/test/message_helper/CMakeLists.txt.user
+++ /dev/null
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 3.5.1, 2015-11-19T12:59:06. -->
-<qtcreator>
- <data>
- <variable>EnvironmentId</variable>
- <value type="QByteArray">{6965f0e8-9b58-4b26-8426-81354d6c3400}</value>
- </data>
- <data>
- <variable>ProjectExplorer.Project.ActiveTarget</variable>
- <value type="int">0</value>
- </data>
- <data>
- <variable>ProjectExplorer.Project.EditorSettings</variable>
- <valuemap type="QVariantMap">
- <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
- <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
- <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
- <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
- <value type="QString" key="language">Cpp</value>
- <valuemap type="QVariantMap" key="value">
- <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
- </valuemap>
- </valuemap>
- <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
- <value type="QString" key="language">QmlJS</value>
- <valuemap type="QVariantMap" key="value">
- <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
- </valuemap>
- </valuemap>
- <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
- <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
- <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
- <value type="int" key="EditorConfiguration.IndentSize">4</value>
- <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
- <value type="int" key="EditorConfiguration.MarginColumn">80</value>
- <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
- <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
- <value type="int" key="EditorConfiguration.PaddingMode">1</value>
- <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
- <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
- <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
- <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
- <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
- <value type="int" key="EditorConfiguration.TabSize">8</value>
- <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
- <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
- <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
- <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
- <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
- <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
- </valuemap>
- </data>
- <data>
- <variable>ProjectExplorer.Project.PluginSettings</variable>
- <valuemap type="QVariantMap"/>
- </data>
- <data>
- <variable>ProjectExplorer.Project.Target.0</variable>
- <valuemap type="QVariantMap">
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.5.1 GCC 64bit</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.5.1 GCC 64bit</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.55.gcc_64_kit</value>
- <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
- <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
- <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
- <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
- <value type="bool" key="CMakeProjectManager.CMakeBuildConfiguration.UseNinja">false</value>
- <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/oherasym/sdl_panasonic/src/components/application_manager/test/message_helper-build</value>
- <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
- <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
- <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
- <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets"/>
- <value type="bool" key="CMakeProjectManager.MakeStep.Clean">false</value>
- <value type="QString" key="CMakeProjectManager.MakeStep.MakeCommand"></value>
- <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
- </valuemap>
- <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
- </valuemap>
- <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
- <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
- <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments">clean</value>
- <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets"/>
- <value type="bool" key="CMakeProjectManager.MakeStep.Clean">true</value>
- <value type="QString" key="CMakeProjectManager.MakeStep.MakeCommand"></value>
- <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
- </valuemap>
- <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
- </valuemap>
- <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
- <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
- <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">all</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
- </valuemap>
- <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
- <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
- <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
- <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
- </valuemap>
- <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy locally</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
- </valuemap>
- <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
- <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
- <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
- <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
- <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
- <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
- <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
- <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
- <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
- <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
- <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
- <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
- <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
- <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
- <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
- <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
- <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
- <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
- <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
- <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
- <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
- <value type="int">0</value>
- <value type="int">1</value>
- <value type="int">2</value>
- <value type="int">3</value>
- <value type="int">4</value>
- <value type="int">5</value>
- <value type="int">6</value>
- <value type="int">7</value>
- <value type="int">8</value>
- <value type="int">9</value>
- <value type="int">10</value>
- <value type="int">11</value>
- <value type="int">12</value>
- <value type="int">13</value>
- <value type="int">14</value>
- </valuelist>
- <value type="int" key="PE.EnvironmentAspect.Base">2</value>
- <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
- <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
- <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
- <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Custom Executable</value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
- <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
- <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
- <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
- <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
- <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
- <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
- <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
- </valuemap>
- <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
- </valuemap>
- </data>
- <data>
- <variable>ProjectExplorer.Project.TargetCount</variable>
- <value type="int">1</value>
- </data>
- <data>
- <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
- <value type="int">18</value>
- </data>
- <data>
- <variable>Version</variable>
- <value type="int">18</value>
- </data>
-</qtcreator>
diff --git a/src/components/application_manager/test/resumption/resumption_data_json_test.cc b/src/components/application_manager/test/resumption/resumption_data_json_test.cc
index 0f51d29e0e..834637fa62 100644
--- a/src/components/application_manager/test/resumption/resumption_data_json_test.cc
+++ b/src/components/application_manager/test/resumption/resumption_data_json_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
@@ -38,7 +38,7 @@
#include "application_manager/mock_application.h"
#include "application_manager/mock_resumption_data.h"
#include "interfaces/MOBILE_API.h"
-#include "resumption/last_state.h"
+#include "resumption/last_state_impl.h"
#include "application_manager/resumption_data_test.h"
#include "formatters/CFormatterJsonBase.h"
@@ -81,7 +81,7 @@ class ResumptionDataJsonTest : public ResumptionDataTest {
}
void CheckSavedJson() {
- Value& dictionary = last_state_.dictionary;
+ Value& dictionary = last_state_.get_dictionary();
ASSERT_TRUE(dictionary[am::strings::resumption].isObject());
ASSERT_TRUE(
dictionary[am::strings::resumption][am::strings::resume_app_list]
@@ -97,13 +97,13 @@ class ResumptionDataJsonTest : public ResumptionDataTest {
}
void SetZeroIgnOff() {
- Value& dictionary = last_state_.dictionary;
+ Value& dictionary = last_state_.get_dictionary();
Value& res = dictionary[am::strings::resumption];
res[am::strings::last_ign_off_time] = 0;
- last_state_.SaveToFileSystem();
+ last_state_.SaveStateToFileSystem();
}
- resumption::LastState last_state_;
+ resumption::LastStateImpl last_state_;
ResumptionDataJson res_json;
};
diff --git a/src/components/config_profile/CMakeLists.txt b/src/components/config_profile/CMakeLists.txt
index e441375336..9a8b37e58a 100644
--- a/src/components/config_profile/CMakeLists.txt
+++ b/src/components/config_profile/CMakeLists.txt
@@ -28,6 +28,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories (
include
@@ -36,13 +37,18 @@ include_directories (
${LOG4CXX_INCLUDE_DIRECTORY}
)
-set (SOURCES
- ${COMPONENTS_DIR}/config_profile/src/profile.cc
- ${COMPONENTS_DIR}/config_profile/src/ini_file.cc
+set(PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
)
+set(LIBRARIES
+ Utils
+)
+
+collect_sources(SOURCES "${PATHS}")
add_library("ConfigProfile" ${SOURCES})
-target_link_libraries("ConfigProfile" Utils)
+target_link_libraries("ConfigProfile" ${LIBRARIES})
if(BUILD_TESTS)
add_subdirectory(test)
diff --git a/src/components/config_profile/src/ini_file.cc b/src/components/config_profile/src/ini_file.cc
index d6d72060e8..1c30c8b201 100644
--- a/src/components/config_profile/src/ini_file.cc
+++ b/src/components/config_profile/src/ini_file.cc
@@ -188,15 +188,18 @@ char ini_write_value(const char* fname,
fd = mkstemp(temp_fname);
if (-1 == fd) {
+ fclose(rd_fp);
return FALSE;
}
wr_fp = fdopen(fd, "w");
if (NULL == wr_fp) {
unlink(temp_fname);
close(fd);
+ fclose(rd_fp);
return FALSE;
}
} else {
+ fclose(rd_fp);
return FALSE;
}
}
diff --git a/src/components/config_profile/test/CMakeLists.txt b/src/components/config_profile/test/CMakeLists.txt
index 1246bff066..597be8fe00 100644
--- a/src/components/config_profile/test/CMakeLists.txt
+++ b/src/components/config_profile/test/CMakeLists.txt
@@ -28,23 +28,20 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-if(BUILD_TESTS)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories (
${GMOCK_INCLUDE_DIRECTORY}
${COMPONENTS_DIR}/config_profile/include
)
-
-set(testSources
- profile_test.cc
- ini_file_test.cc
-)
-
-set(testLibraries
+set(LIBRARIES
gmock
ConfigProfile
)
+
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}")
+create_test(config_profile_test "${SOURCES}" "${LIBRARIES}")
file(COPY smartDeviceLink.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
file(COPY smartDeviceLink_test.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
@@ -52,6 +49,3 @@ file(COPY smartDeviceLink_invalid_pairs.ini DESTINATION ${CMAKE_CURRENT_BINARY_D
file(COPY smartDeviceLink_invalid_string.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
file(COPY smartDeviceLink_invalid_int.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
file(COPY smartDeviceLink_invalid_boolean.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
-create_test("config_profile_test" "${testSources}" "${testLibraries}")
-
-endif()
diff --git a/src/components/connection_handler/CMakeLists.txt b/src/components/connection_handler/CMakeLists.txt
index dc1b2d24d6..2cdfec91f2 100644
--- a/src/components/connection_handler/CMakeLists.txt
+++ b/src/components/connection_handler/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2014, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,8 +28,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-
-set(CH_SRC_DIR ${COMPONENTS_DIR}/connection_handler/src)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories (
include
@@ -39,20 +38,20 @@ include_directories (
${LOG4CXX_INCLUDE_DIRECTORY}
)
-set (SOURCES
- ${CH_SRC_DIR}/connection_handler_impl.cc
- ${CH_SRC_DIR}/connection.cc
- ${CH_SRC_DIR}/device.cc
- ${CH_SRC_DIR}/heartbeat_monitor.cc
+set(PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
)
set(LIBRARIES
ProtocolLibrary
+ encryption
)
+collect_sources(SOURCES "${PATHS}")
add_library(connectionHandler ${SOURCES})
-target_link_libraries(connectionHandler encryption)
+target_link_libraries(connectionHandler ${LIBRARIES})
if(BUILD_TESTS)
- add_subdirectory(test)
+ add_subdirectory(test)
endif()
diff --git a/src/components/connection_handler/test/CMakeLists.txt b/src/components/connection_handler/test/CMakeLists.txt
index 32da4bdcd8..033a45e97d 100644
--- a/src/components/connection_handler/test/CMakeLists.txt
+++ b/src/components/connection_handler/test/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2015, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,9 +28,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-if(BUILD_TESTS)
-
-set(appMain_DIR ${CMAKE_SOURCE_DIR}/src/appMain)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories(
${GMOCK_INCLUDE_DIRECTORY}
@@ -46,15 +44,7 @@ set(LIBRARIES
ProtocolHandler
)
-set(SOURCES
- connection_handler_impl_test.cc
- connection_test.cc
- device_test.cc
- heart_beat_monitor_test.cc
-)
-
-file(COPY ${appMain_DIR}/smartDeviceLink.ini DESTINATION "./")
-
-create_test("connection_handler_test" "${SOURCES}" "${LIBRARIES}")
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}")
+create_test(connection_handler_test "${SOURCES}" "${LIBRARIES}")
-endif()
+file(COPY ${CMAKE_SOURCE_DIR}/src/appMain/smartDeviceLink.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
diff --git a/src/components/dbus/CMakeLists.txt b/src/components/dbus/CMakeLists.txt
index 7e7f2af787..cb1ce30a6d 100644
--- a/src/components/dbus/CMakeLists.txt
+++ b/src/components/dbus/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2014, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,6 +28,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories (
${DBUS_INCLUDE_DIRS}
@@ -40,17 +41,17 @@ include_directories (
${CMAKE_BINARY_DIR}/src/components/
)
-set (SOURCES
+set(PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_BINARY_DIR}/introspection_xml.cc
${CMAKE_CURRENT_BINARY_DIR}/message_descriptions.cc
- ${CMAKE_CURRENT_SOURCE_DIR}/src/dbus_adapter.cc
- ${CMAKE_CURRENT_SOURCE_DIR}/src/dbus_message.cc
- ${CMAKE_CURRENT_SOURCE_DIR}/src/dbus_message_controller.cc
- ${CMAKE_CURRENT_SOURCE_DIR}/src/schema.cc
)
+collect_sources(SOURCES "${PATHS}")
-set (LIBRARIES dbus-1 -L${DBUS_LIBS_DIRECTORY})
-
+set(LIBRARIES
+ dbus-1 -L${DBUS_LIBS_DIRECTORY}
+)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/message_descriptions.cc
@@ -71,7 +72,7 @@ add_custom_command(
)
add_library("DBus" ${SOURCES})
-ADD_DEPENDENCIES("DBus" Utils install-3rd_party_dbus)
+add_dependecnies("DBus" Utils install-3rd_party_dbus)
target_link_libraries("DBus" "${LIBRARIES}")
diff --git a/src/components/dbus/test/CMakeLists.txt b/src/components/dbus/test/CMakeLists.txt
index d96f2388fb..1b3df2c0e7 100644
--- a/src/components/dbus/test/CMakeLists.txt
+++ b/src/components/dbus/test/CMakeLists.txt
@@ -28,13 +28,20 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-if(BUILD_TESTS)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories (
${GMOCK_INCLUDE_DIRECTORY}
${COMPONENTS_DIR}/dbus/include/
)
+#FIXME: exclude some tests
+set (EXCLUDE_PATHS
+ test_dbus_message_controller.cc
+)
+
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}" ${EXCLUDE_PATHS})
+
set (LIBRARIES
gmock
DBus
@@ -42,12 +49,4 @@ set (LIBRARIES
SmartObjects
)
-set(testSources
- ${COMPONENTS_DIR}/dbus/test/test_schema.cc
- ${COMPONENTS_DIR}/dbus/test/test_dbus_adapter.cc
-)
-
-create_test("test_DBus_test" "${testSources}" "${LIBRARIES}")
-
-endif()
-
+create_test(test_DBus_test "${SOURCES}" "${LIBRARIES}")
diff --git a/src/components/formatters/CMakeLists.txt b/src/components/formatters/CMakeLists.txt
index 1858342ff3..02a337e278 100644
--- a/src/components/formatters/CMakeLists.txt
+++ b/src/components/formatters/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2014, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,8 +28,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-
-set(FORMATTERS_SRC_DIR ${COMPONENTS_DIR}/formatters/src)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories (
include/
@@ -41,22 +40,13 @@ include_directories (
${COMPONENTS_DIR}/utils/include
)
-set (SOURCES
- ${FORMATTERS_SRC_DIR}/CSmartFactory.cc
-)
-
-set (FORMATTER_SOURCES
- ${FORMATTERS_SRC_DIR}/CFormatterJsonBase.cc
- ${FORMATTERS_SRC_DIR}/CFormatterJsonSDLRPCv1.cc
- ${FORMATTERS_SRC_DIR}/CFormatterJsonSDLRPCv2.cc
- ${FORMATTERS_SRC_DIR}/formatter_json_rpc.cc
- ${FORMATTERS_SRC_DIR}/meta_formatter.cc
- ${FORMATTERS_SRC_DIR}/generic_json_formatter.cc
+set(PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
)
-add_library("formatters" ${SOURCES}
- ${FORMATTER_SOURCES}
-)
+collect_sources(SOURCES "${PATHS}")
+add_library(formatters ${SOURCES})
if(BUILD_TESTS)
add_subdirectory(test)
diff --git a/src/components/formatters/test/CMakeLists.txt b/src/components/formatters/test/CMakeLists.txt
index d245626dae..c80c3d0e40 100644
--- a/src/components/formatters/test/CMakeLists.txt
+++ b/src/components/formatters/test/CMakeLists.txt
@@ -29,7 +29,7 @@
# POSSIBILITY OF SUCH DAMAGE.
-if(BUILD_TESTS)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories(
${GMOCK_INCLUDE_DIRECTORY}
@@ -49,19 +49,15 @@ set(LIBRARIES
jsoncpp
)
-set(SOURCES
- ${COMPONENTS_DIR}/formatters/test/src/SmartFactoryTestHelper.cc
- ${COMPONENTS_DIR}/formatters/test/CSmartFactory_test.cc
- ${COMPONENTS_DIR}/formatters/test/CFormatterJsonBase_test.cc
- ${COMPONENTS_DIR}/formatters/test/generic_json_formatter_test.cc
- ${COMPONENTS_DIR}/formatters/test/formatter_json_rpc_test.cc
- ${COMPONENTS_DIR}/formatters/test/src/create_smartSchema.cc
- ${COMPONENTS_DIR}/formatters/test/cFormatterJsonSDLRPCv1_test.cc
- ${COMPONENTS_DIR}/formatters/test/cFormatterJsonSDLRPCv2_test.cc
- ${COMPONENTS_DIR}/formatters/test/src/meta_formatter_test_helper.cc
- ${COMPONENTS_DIR}/formatters/test/meta_formatter_test.cc
+set (SOURCES
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ ${CMAKE_CURRENT_SOURCE_DIR}
)
-create_test("formatters_test" "${SOURCES}" "${LIBRARIES}")
+set (EXCLUDE_PATHS
+)
+
+collect_sources(SOURCES "")
+create_test(formatters_test "${SOURCES}" "${LIBRARIES}")
-endif()
diff --git a/src/components/hmi_message_handler/CMakeLists.txt b/src/components/hmi_message_handler/CMakeLists.txt
index aa10729458..c1dfca5e67 100644
--- a/src/components/hmi_message_handler/CMakeLists.txt
+++ b/src/components/hmi_message_handler/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2014, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,6 +28,8 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/platform.cmake)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories (
include/
@@ -46,30 +48,36 @@ include_directories (
${LOG4CXX_INCLUDE_DIRECTORY}
)
-IF (HMIADAPTER STREQUAL "dbus")
- set (DBUS_SOURCE ./src/dbus_message_adapter.cc)
- set (DBUS_ADAPTER DBus)
-ENDIF ()
+set(PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+)
+
+if (HMIADAPTER STREQUAL "dbus")
+ set(EXCLUDE_PATHS)
+ set(DBUS_ADAPTER DBus)
+else()
+ set(EXCLUDE_PATHS dbus_message_adapter.cc)
+ set(DBUS_ADAPTER)
+endif ()
-set (SOURCES
- ${COMPONENTS_DIR}/hmi_message_handler/src/hmi_message_handler_impl.cc
- ${COMPONENTS_DIR}/hmi_message_handler/src/messagebroker_adapter.cc
- ${COMPONENTS_DIR}/hmi_message_handler/src/hmi_message_adapter_impl.cc
- ${COMPONENTS_DIR}/hmi_message_handler/src/mqueue_adapter.cc
- ${DBUS_SOURCE}
+list(APPEND EXCLUDE_PATHS
+ mqueue_adapter.cc
)
+collect_sources(SOURCES "${PATHS}" "${EXCLUDE_PATHS}")
+
set(LIBRARIES
- Utils
- ${DBUS_ADAPTER}
- ${RTLIB}
+ Utils
+ ${DBUS_ADAPTER}
+ ${RTLIB}
)
add_library("HMIMessageHandler" ${SOURCES})
target_link_libraries("HMIMessageHandler" ${LIBRARIES})
if(ENABLE_LOG)
- target_link_libraries("HMIMessageHandler" log4cxx -L${LOG4CXX_LIBS_DIRECTORY})
+ target_link_libraries("HMIMessageHandler" log4cxx -L${LOG4CXX_LIBS_DIRECTORY})
endif()
# Tests temporary are inactivated. For details please check
diff --git a/src/components/hmi_message_handler/include/hmi_message_handler/hmi_message_handler_impl.h b/src/components/hmi_message_handler/include/hmi_message_handler/hmi_message_handler_impl.h
index 3b829b0f27..8b238b4aa8 100644
--- a/src/components/hmi_message_handler/include/hmi_message_handler/hmi_message_handler_impl.h
+++ b/src/components/hmi_message_handler/include/hmi_message_handler/hmi_message_handler_impl.h
@@ -106,6 +106,14 @@ class HMIMessageHandlerImpl : public HMIMessageHandler,
HMIMessageObserver* observer() const {
return observer_;
}
+
+ impl::ToHmiQueue* messages_to_hmi() {
+ return &messages_to_hmi_;
+ }
+
+ impl::FromHmiQueue* messages_from_hmi() {
+ return &messages_from_hmi_;
+ }
#endif // BUILD_TESTS
private:
diff --git a/src/components/hmi_message_handler/src/dbus_message_adapter.cc b/src/components/hmi_message_handler/src/dbus_message_adapter.cc
index daefd32de9..00f5ad6be8 100644
--- a/src/components/hmi_message_handler/src/dbus_message_adapter.cc
+++ b/src/components/hmi_message_handler/src/dbus_message_adapter.cc
@@ -126,8 +126,6 @@ void DBusMessageAdapter::SubscribeTo() {
DBusMessageController::SubscribeTo("BasicCommunication", "OnSystemRequest");
DBusMessageController::SubscribeTo("BasicCommunication",
"OnSystemInfoChanged");
- DBusMessageController::SubscribeTo("BasicCommunication", "OnPhoneCall");
- DBusMessageController::SubscribeTo("BasicCommunication", "OnEmergencyEvent");
DBusMessageController::SubscribeTo("TTS", "Started");
DBusMessageController::SubscribeTo("TTS", "Stopped");
DBusMessageController::SubscribeTo("TTS", "OnLanguageChange");
diff --git a/src/components/hmi_message_handler/src/mqueue_adapter.cc b/src/components/hmi_message_handler/src/mqueue_adapter.cc
deleted file mode 100644
index 4cfebbe9e8..0000000000
--- a/src/components/hmi_message_handler/src/mqueue_adapter.cc
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (c) 2014, 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.
- */
-
-#include "hmi_message_handler/mqueue_adapter.h"
-#include "hmi_message_handler/hmi_message_handler.h"
-#include "utils/logger.h"
-
-namespace hmi_message_handler {
-
-const uint32_t kMqueueSize = 100;
-const uint32_t kMqueueMessageSize = 65536;
-const char* kSdlToHmiQueue = "/sdl_to_hmi";
-const char* kHmiToSdlQueue = "/hmi_to_sdl";
-
-CREATE_LOGGERPTR_GLOBAL(logger_, "HMIMessageHandler")
-
-class ReceiverThreadDelegate : public threads::ThreadDelegate {
- public:
- ReceiverThreadDelegate(mqd_t mqueue_descriptor,
- HMIMessageHandler* hmi_message_handler)
- : mqueue_descriptor_(mqueue_descriptor)
- , hmi_message_handler_(hmi_message_handler) {}
-
- private:
- virtual void threadMain() {
- while (true) {
- static char buffer[kMqueueMessageSize];
- const ssize_t size =
- mq_receive(mqueue_descriptor_, buffer, kMqueueMessageSize, NULL);
- if (-1 == size) {
- LOG4CXX_ERROR(logger_, "Message queue receive failed, error " << errno);
- continue;
- }
- const std::string message_string(buffer, buffer + size);
- LOG4CXX_DEBUG(logger_, "Message: " << message_string);
- MessageSharedPointer message(new application_manager::Message(
- protocol_handler::MessagePriority::kDefault));
- message->set_json_message(message_string);
- message->set_protocol_version(application_manager::ProtocolVersion::kHMI);
- hmi_message_handler_->OnMessageReceived(message);
- }
- }
-
- const mqd_t mqueue_descriptor_;
- HMIMessageHandler* hmi_message_handler_;
-};
-
-MqueueAdapter::MqueueAdapter(HMIMessageHandler* hmi_message_handler)
- : HMIMessageAdapterImpl(hmi_message_handler)
- , sdl_to_hmi_mqueue_(-1)
- , hmi_to_sdl_mqueue_(-1)
- , receiver_thread_(NULL) {
- mq_attr mq_attributes;
- mq_attributes.mq_maxmsg = kMqueueSize;
- mq_attributes.mq_msgsize = kMqueueMessageSize;
- sdl_to_hmi_mqueue_ =
- mq_open(kSdlToHmiQueue, O_CREAT | O_RDWR, S_IRWXU, &mq_attributes);
- if (-1 == sdl_to_hmi_mqueue_) {
- LOG4CXX_ERROR(logger_,
- "Could not open message queue " << kSdlToHmiQueue
- << ", error " << errno);
- return;
- }
- hmi_to_sdl_mqueue_ =
- mq_open(kHmiToSdlQueue, O_CREAT | O_RDWR, S_IRWXU, &mq_attributes);
- if (-1 == hmi_to_sdl_mqueue_) {
- LOG4CXX_ERROR(logger_,
- "Could not open message queue " << kHmiToSdlQueue
- << ", error " << errno);
- return;
- }
- receiver_thread_delegate_ =
- new ReceiverThreadDelegate(hmi_to_sdl_mqueue_, hmi_message_handler);
- receiver_thread_ =
- threads::CreateThread("MqueueAdapter", receiver_thread_delegate_);
- receiver_thread_->start();
-}
-
-MqueueAdapter::~MqueueAdapter() {
- receiver_thread_->join();
- delete receiver_thread_delegate_;
- threads::DeleteThread(receiver_thread_);
- if (-1 != hmi_to_sdl_mqueue_)
- mq_close(hmi_to_sdl_mqueue_);
- if (-1 != sdl_to_hmi_mqueue_)
- mq_close(sdl_to_hmi_mqueue_);
- mq_unlink(kHmiToSdlQueue);
- mq_unlink(kSdlToHmiQueue);
-}
-
-void MqueueAdapter::SendMessageToHMI(const MessageSharedPointer message) {
- LOG4CXX_AUTO_TRACE(logger_);
-
- if (-1 == sdl_to_hmi_mqueue_) {
- LOG4CXX_ERROR(logger_, "Message queue is not opened");
- return;
- }
- const std::string& json = message->json_message();
- if (json.size() > kMqueueMessageSize) {
- LOG4CXX_ERROR(logger_, "Message size " << json.size() << " is too big");
- return;
- }
- const int rc = mq_send(sdl_to_hmi_mqueue_, json.c_str(), json.size(), 0);
- if (0 != rc) {
- LOG4CXX_ERROR(logger_, "Could not send message, error " << errno);
- return;
- }
-}
-
-void MqueueAdapter::SubscribeTo() {
- // empty implementation of pure virtual method, actually it's not called
-}
-
-} // namespace hmi_message_handler
diff --git a/src/components/hmi_message_handler/test/CMakeLists.txt b/src/components/hmi_message_handler/test/CMakeLists.txt
index 98e9fd5653..0d7ccd9ee1 100644
--- a/src/components/hmi_message_handler/test/CMakeLists.txt
+++ b/src/components/hmi_message_handler/test/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2014, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,8 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-if(BUILD_TESTS)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/platform.cmake)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories (
${GMOCK_INCLUDE_DIRECTORY}
@@ -36,27 +37,31 @@ include_directories (
${COMPONENTS_DIR}/hmi_message_handler/test/include
)
+if (HMIADAPTER STREQUAL "messagebroker")
+ set (BROKER_LIBRARIES
+ message_broker_client
+ message_broker_server
+ )
+endif()
+
+set(EXCLUDE_PATHS)
+
set(LIBRARIES
gmock
ApplicationManager
HMIMessageHandler
jsoncpp
- MessageBrokerClient
- MessageBrokerServer
+ ${BROKER_LIBRARIES}
ConfigProfile
)
-set(SOURCES
-${COMPONENTS_DIR}/hmi_message_handler/test/hmi_message_handler_impl_test.cc
-${COMPONENTS_DIR}/hmi_message_handler/test/hmi_message_adapter_test.cc
-)
-
-if(${QT_HMI})
- list (APPEND SOURCES
- ${COMPONENTS_DIR}/hmi_message_handler/test/mock_subscriber.cc
- ${COMPONENTS_DIR}/hmi_message_handler/test/dbus_message_adapter_test.cc
+if(NOT HMI_DBUS_API})
+ list (APPEND EXCLUDE_PATHS
+ mock_subscriber.cc
+ dbus_message_adapter_test.cc
)
endif()
-create_test("hmi_message_handler_test" "${SOURCES}" "${LIBRARIES}")
-endif()
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}" "${EXCLUDE_PATHS}")
+
+create_test(hmi_message_handler_test "${SOURCES}" "${LIBRARIES}")
diff --git a/src/components/hmi_message_handler/test/hmi_message_handler_impl_test.cc b/src/components/hmi_message_handler/test/hmi_message_handler_impl_test.cc
index 06cca74ba9..a551c8a1f2 100644
--- a/src/components/hmi_message_handler/test/hmi_message_handler_impl_test.cc
+++ b/src/components/hmi_message_handler/test/hmi_message_handler_impl_test.cc
@@ -36,13 +36,15 @@
#include "hmi_message_handler/messagebroker_adapter.h"
#include "hmi_message_handler/mock_hmi_message_observer.h"
#include "hmi_message_handler/mock_hmi_message_handler_settings.h"
-#include "utils/make_shared.h"
+#include "hmi_message_handler/mock_hmi_message_adapter_impl.h"
namespace test {
namespace components {
namespace hmi_message_handler_test {
using ::testing::ReturnRef;
+using ::testing::_;
+
class HMIMessageHandlerImplTest : public ::testing::Test {
public:
HMIMessageHandlerImplTest()
@@ -63,10 +65,13 @@ class HMIMessageHandlerImplTest : public ::testing::Test {
.WillByDefault(ReturnRef(stack_size));
hmi_handler_ = new hmi_message_handler::HMIMessageHandlerImpl(
mock_hmi_message_handler_settings);
+ ASSERT_TRUE(NULL != hmi_handler_);
mb_adapter_ = new hmi_message_handler::MessageBrokerAdapter(
hmi_handler_, "localhost", 22);
+ ASSERT_TRUE(NULL != mb_adapter_);
mock_hmi_message_observer_ =
new hmi_message_handler::MockHMIMessageObserver();
+ ASSERT_TRUE(NULL != mock_hmi_message_observer_);
hmi_handler_->set_message_observer(mock_hmi_message_observer_);
EXPECT_TRUE(NULL != hmi_handler_->observer());
}
@@ -77,6 +82,13 @@ class HMIMessageHandlerImplTest : public ::testing::Test {
delete hmi_handler_;
delete mb_adapter_;
}
+
+ hmi_message_handler::MessageSharedPointer CreateMessage() {
+ // The ServiceType doesn't really matter
+ return new application_manager::Message(
+ protocol_handler::MessagePriority::FromServiceType(
+ protocol_handler::ServiceType::kInvalidServiceType));
+ }
};
TEST_F(HMIMessageHandlerImplTest,
@@ -91,16 +103,23 @@ TEST_F(HMIMessageHandlerImplTest,
TEST_F(HMIMessageHandlerImplTest,
OnErrorSending_NotEmptyMessage_ExpectOnErrorSendingProceeded) {
// Arrange
- utils::SharedPtr<application_manager::Message> message(
- utils::MakeShared<application_manager::Message>(
- protocol_handler::MessagePriority::FromServiceType(
- protocol_handler::ServiceType::kControl)));
+ utils::SharedPtr<application_manager::Message> message = CreateMessage();
EXPECT_CALL(*mock_hmi_message_observer_, OnErrorSending(message));
// Act
hmi_handler_->OnErrorSending(message);
}
+TEST_F(HMIMessageHandlerImplTest, OnErrorSending_InvalidObserver_Cancelled) {
+ // Arrange
+ utils::SharedPtr<application_manager::Message> message = CreateMessage();
+
+ hmi_handler_->set_message_observer(NULL);
+ EXPECT_CALL(*mock_hmi_message_observer_, OnErrorSending(_)).Times(0);
+ // Act
+ hmi_handler_->OnErrorSending(message);
+}
+
TEST_F(HMIMessageHandlerImplTest,
AddHMIMessageAdapter_AddExistedAdapter_ExpectAdded) {
// Check before action
@@ -131,6 +150,40 @@ TEST_F(HMIMessageHandlerImplTest, RemoveHMIMessageAdapter_ExpectRemoved) {
EXPECT_TRUE(hmi_handler_->message_adapters().empty());
}
+// TODO(atimchenko) SDLOPEN-44 Wrong message to observer
+TEST_F(HMIMessageHandlerImplTest,
+ DISABLED_OnMessageReceived_ValidObserver_Success) {
+ hmi_message_handler::MessageSharedPointer message = CreateMessage();
+ EXPECT_CALL(*mock_hmi_message_observer_, OnMessageReceived(message));
+
+ hmi_handler_->OnMessageReceived(message);
+ // Wait for the message to be processed
+ hmi_handler_->messages_from_hmi()->WaitDumpQueue();
+}
+
+TEST_F(HMIMessageHandlerImplTest, OnMessageReceived_InvalidObserver_Cancelled) {
+ hmi_message_handler::MessageSharedPointer message = CreateMessage();
+ EXPECT_CALL(*mock_hmi_message_observer_, OnMessageReceived(_)).Times(0);
+ // Make the observer invalid
+ hmi_handler_->set_message_observer(NULL);
+ hmi_handler_->OnMessageReceived(message);
+ hmi_handler_->messages_from_hmi()->WaitDumpQueue();
+}
+
+TEST_F(HMIMessageHandlerImplTest, SendMessageToHMI_Success) {
+ hmi_message_handler::MessageSharedPointer message = CreateMessage();
+
+ MockHMIMessageAdapterImpl message_adapter(hmi_handler_);
+ EXPECT_CALL(message_adapter, SendMessageToHMI(message));
+
+ hmi_handler_->AddHMIMessageAdapter(&message_adapter);
+ hmi_handler_->SendMessageToHMI(message);
+
+ // Wait for the message to be processed
+ hmi_handler_->messages_to_hmi()->WaitDumpQueue();
+ testing::Mock::AsyncVerifyAndClearExpectations(100);
+}
+
} // namespace hmi_message_handler_test
} // namespace components
} // namespace test
diff --git a/src/components/hmi_message_handler/test/mqueue_adapter_test.cc b/src/components/hmi_message_handler/test/mqueue_adapter_test.cc
deleted file mode 100644
index e5c5d2a396..0000000000
--- a/src/components/hmi_message_handler/test/mqueue_adapter_test.cc
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2014, 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.
- */
-
-#include <gtest/gtest.h>
-#include <gmock/gmock.h>
-
-#include "hmi_message_handler/hmi_message_handler.h"
-#include "hmi_message_handler/mqueue_adapter.h"
-
-using hmi_message_handler::MessageSharedPointer;
-using hmi_message_handler::HMIMessageHandler;
-using hmi_message_handler::HMIMessageAdapter;
-using hmi_message_handler::MqueueAdapter;
-using application_manager::Message;
-
-class MockHandler : public HMIMessageHandler {
- public:
- MOCK_METHOD1(OnMessageReceived, void(MessageSharedPointer message));
- MOCK_METHOD1(AddHMIMessageAdapter, void(HMIMessageAdapter* adapter));
- MOCK_METHOD1(RemoveHMIMessageAdapter, void(HMIMessageAdapter* adapter));
- MOCK_METHOD1(OnErrorSending, void(MessageSharedPointer message));
- MOCK_METHOD1(SendMessageToHMI, void(MessageSharedPointer message));
-};
-
-// TODO{ALeshin}: APPLINK-10846
-// TEST(MqueueAdapter, Send) {
-// MockHandler handler;
-// HMIMessageAdapter* adapter = new MqueueAdapter(&handler);
-
-// MessageSharedPointer message(
-// new Message(protocol_handler::MessagePriority::kDefault));
-// message->set_json_message("{}");
-// adapter->SendMessageToHMI(message);
-
-// mqd_t mqd = mq_open("/sdl_to_hmi", O_RDONLY);
-// ASSERT_NE(-1, mqd);
-// static char buf[65536];
-// ssize_t sz = mq_receive(mqd, buf, 65536, NULL);
-// ASSERT_EQ(2, sz);
-// EXPECT_STREQ("{}", buf);
-
-// delete adapter;
-//}
-
-// TODO{ALeshin}: APPLINK-10846
-// TEST(MqueueAdapter, Receive) {
-// MockHandler handler;
-// HMIMessageAdapter* adapter = new MqueueAdapter(&handler);
-
-// using ::testing::Property;
-// using ::testing::Pointee;
-// EXPECT_CALL(
-// handler,
-// OnMessageReceived(Property(
-// &MessageSharedPointer::get,
-// Pointee(Property(&Message::json_message, std::string("()"))))));
-
-// mqd_t mqd = mq_open("/hmi_to_sdl", O_WRONLY);
-// ASSERT_NE(-1, mqd);
-// const char buf[] = "()";
-// int rc = mq_send(mqd, buf, sizeof(buf) - 1, 0);
-// ASSERT_EQ(0, rc);
-
-// delete adapter;
-//}
diff --git a/src/components/include/test/hmi_message_handler/mock_hmi_message_handler.h b/src/components/include/test/resumption/mock_last_state.h
index 19aa92f932..419deba3cf 100644
--- a/src/components/include/test/hmi_message_handler/mock_hmi_message_handler.h
+++ b/src/components/include/test/resumption/mock_last_state.h
@@ -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,25 +30,20 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef SRC_COMPONENTS_INCLUDE_TEST_HMI_MESSAGE_HANDLER_MOCK_HMI_MESSAGE_HANDLER_H_
-#define SRC_COMPONENTS_INCLUDE_TEST_HMI_MESSAGE_HANDLER_MOCK_HMI_MESSAGE_HANDLER_H_
+#ifndef SRC_COMPONENTS_INCLUDE_TEST_RESUMPTION_MOCK_LAST_STATE_H_
+#define SRC_COMPONENTS_INCLUDE_TEST_RESUMPTION_MOCK_LAST_STATE_H_
#include "gmock/gmock.h"
-#include "hmi_message_handler/hmi_message_handler.h"
+#include "resumption/last_state.h"
-namespace test {
-namespace components {
-namespace hmi_message_handler_test {
+namespace resumption {
-using hmi_message_handler::HMIMessageAdapter;
-
-class MockHMIMessageHandler : public ::hmi_message_handler::HMIMessageHandler {
+class MockLastState : public resumption::LastState {
public:
- MOCK_METHOD1(AddHMIMessageAdapter, void(HMIMessageAdapter* adapter));
- MOCK_METHOD1(RemoveHMIMessageAdapter, void(HMIMessageAdapter* adapter));
+ MOCK_METHOD0(SaveStateToFileSystem, void());
+ MOCK_METHOD0(get_dictionary, Json::Value&());
};
-} // namespace hmi_message_handler_test
-} // namespace components
-} // namespace test
-#endif // SRC_COMPONENTS_INCLUDE_TEST_HMI_MESSAGE_HANDLER_MOCK_HMI_MESSAGE_HANDLER_H_
+} // resumption
+
+#endif // SRC_COMPONENTS_INCLUDE_TEST_RESUMPTION_MOCK_LAST_STATE_H_
diff --git a/src/components/include/utils/threads/CMakeLists.txt b/src/components/include/utils/threads/CMakeLists.txt
deleted file mode 100644
index f97039c21b..0000000000
--- a/src/components/include/utils/threads/CMakeLists.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-set(UtilsIncludeDir ${COMPONENTS_DIR/utils/include)
-
-include_directories (
- ${UtilsIncludeDir}
-) \ No newline at end of file
diff --git a/src/components/interfaces/CMakeLists.txt b/src/components/interfaces/CMakeLists.txt
index bcb47976ea..2c84e48235 100644
--- a/src/components/interfaces/CMakeLists.txt
+++ b/src/components/interfaces/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2014, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,54 +28,46 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/generators.cmake)
include_directories (
- ${COMPONENTS_DIR}/utils/include/
+ ${COMPONENTS_DIR}/include
+ ${COMPONENTS_DIR}/utils/include
${COMPONENTS_DIR}/formatters/include
+ ${COMPONENTS_DIR}/smart_objects/include
+ ${CMAKE_BINARY_DIR}
)
-
-GenerateInterface("v4_protocol_v1_2_no_extra.xml" "NsSmartDeviceLinkRPC::V1" "sdlrpcv1")
-GenerateInterface("MOBILE_API.xml" "mobile_apis" "sdlrpcv2")
-
-IF (${HMI_JSON_API})
- GenerateInterface("HMI_API.xml" "hmi_apis" "jsonrpc")
-ENDIF (${HMI_JSON_API})
-IF (${HMI_DBUS_API})
- set(hpp_file
- "${CMAKE_CURRENT_BINARY_DIR}/QT_HMI_API.h"
- "${CMAKE_CURRENT_BINARY_DIR}/QT_HMI_API_schema.h"
- )
+generate_interface("v4_protocol_v1_2_no_extra.xml" "NsSmartDeviceLinkRPC::V1" "sdlrpcv1")
+add_library(v4_protocol_v1_2_no_extra ${CMAKE_CURRENT_BINARY_DIR}/v4_protocol_v1_2_no_extra_schema.cc)
- set(cpp_file "${CMAKE_CURRENT_BINARY_DIR}/QT_HMI_API_schema.cc")
- set(full_xml_name "${CMAKE_CURRENT_SOURCE_DIR}/QT_HMI_API.xml")
+generate_interface("MOBILE_API.xml" "mobile_apis" "sdlrpcv2")
+add_library(MOBILE_API ${CMAKE_CURRENT_BINARY_DIR}/MOBILE_API_schema.cc)
- add_custom_command( OUTPUT ${hpp_file} ${cpp_file}
- COMMAND ${INTEFRACE_GENERATOR_CMD} ${full_xml_name} hmi_apis ${CMAKE_CURRENT_BINARY_DIR} "--parser-type" "jsonrpc"
- DEPENDS ${INTERFACE_GENERATOR_DEPENDENCIES} ${full_xml_name}
- COMMENT "Generating files:\n ${hpp_file}\n ${cpp_file}\nfrom:\n QT_HMI_API.xml ..."
- VERBATIM
- )
+if(HMI_JSON_API)
+ generate_interface("HMI_API.xml" "hmi_apis" "jsonrpc")
+ add_library(HMI_API ${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.cc)
+endif()
- include_directories (
- ${COMPONENTS_DIR}/smart_objects/include
- ${COMPONENTS_DIR}/formatters/include/
- ${CMAKE_BINARY_DIR}
- )
+if(HMI_DBUS_API)
+ generate_interface("QT_HMI_API.xml" "hmi_apis" "jsonrpc")
- add_custom_command(
- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/HMI_API.h"
+ add_custom_command(
+ OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/HMI_API.h"
COMMAND sed "-e" "s/QT_HMI_API/HMI_API/g" "${CMAKE_CURRENT_BINARY_DIR}/QT_HMI_API.h" > "${CMAKE_CURRENT_BINARY_DIR}/HMI_API.h"
- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/QT_HMI_API.h")
- add_custom_command(
- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.h"
+ DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/QT_HMI_API.h"
+ )
+ add_custom_command(
+ OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.h"
COMMAND sed "-e" "s/QT_HMI_API/HMI_API/g" "${CMAKE_CURRENT_BINARY_DIR}/QT_HMI_API_schema.h" > "${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.h"
- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/QT_HMI_API_schema.h")
- add_custom_command(
- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.cc"
+ DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/QT_HMI_API_schema.h"
+ )
+ add_custom_command(
+ OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.cc"
COMMAND sed "-e" "s/QT_HMI_API/HMI_API/g" "${CMAKE_CURRENT_BINARY_DIR}/QT_HMI_API_schema.cc" > "${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.cc"
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/QT_HMI_API_schema.cc" "${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.h" "${CMAKE_CURRENT_BINARY_DIR}/HMI_API.h")
- add_library(HMI_API "${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.cc")
-ENDIF (${HMI_DBUS_API})
+
+ add_library(HMI_API ${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.cc)
+endif()
add_dependencies(HMI_API Utils)
diff --git a/src/components/interfaces/HMI_API.xml b/src/components/interfaces/HMI_API.xml
index a7b3923cb0..2182496760 100644
--- a/src/components/interfaces/HMI_API.xml
+++ b/src/components/interfaces/HMI_API.xml
@@ -2140,21 +2140,6 @@
<function name="OnUpdateDeviceList" messagetype="notification">
<description>Notification from HMI to SDL sent when HMI requires update of device list (i.e. when user clicks 'Change Device' button)</description>
</function>
- <function name="OnPhoneCall" messagetype="notification">
- <description>Sender: HMI->SDL. When: upon phone-call event started or ended</description>
- <param name="isActive" type="Boolean" mandatory="true">
- <description>Must be 'true' - when the phone call is started on HMI. Must be 'false' when the phone call is ended on HMI</description>
- </param>
- </function>
- <function name="OnEmergencyEvent" messagetype="notification">
- <description>
- "Sender: HMI->SDL. Conditions: when HMI enters the mode of "911 Assist", or other rear view camera,
- or something else in the future. Purpose: for SDL to change the audioStreamingState of the related apps to
- NOT_AUDIBLE when "enabled:true" and back to AUDIBLE when "enabled:false""
- </description>
- <param name="enabled" type="Boolean" mandatory="true">
- </param>
- </function>
<function name="OnResumeAudioSource" messagetype="notification">
<description>This method must be invoked by SDL to update audio state.</description>
<param name="appID" type="Integer" mandatory="true">
@@ -2465,16 +2450,6 @@
<description>SUCCESS - in case the certificate is decrypted and placed to the same file from request.</description>
</function>
<!-- End of Policies -->
- <function name="OnDeactivateHMI" messagetype="notification">
- <description>
- Sender: HMI->SDL. When: in case GAL/DIO is active or disabling
- </description>
- <param name="isDeactivated" type="Boolean" mandatory="true">
- <description>
- Must be 'true' - GAL/DIO is active. Must be 'false' when GAL/DIO is disabling
- </description>
- </param>
- </function>
<function name="OnEventChanged" messagetype="notification">
<description>Sender: HMI->SDL. When event is become active</description>
<param name="eventName" type="Common.EventTypes" mandatory="true">
@@ -3424,9 +3399,9 @@
<param name="wayPointType" type="Common.WayPointType" defvalue="ALL" mandatory="false">
<description>To request for either the destination only or for all waypoints including destination</description>
</param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of the application.</description>
- </param>
+ <param name="appID" type="Integer" mandatory="true">
+ <description>ID of the application.</description>
+ </param>
</function>
<function name="GetWayPoints" functionID="GetWayPointsID" messagetype="response">
<param name="appID" type="Integer" mandatory="true">
diff --git a/src/components/media_manager/CMakeLists.txt b/src/components/media_manager/CMakeLists.txt
index 46146855bb..a679239033 100644
--- a/src/components/media_manager/CMakeLists.txt
+++ b/src/components/media_manager/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2014, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,63 +28,10 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/platform.cmake)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
-if (EXTENDED_MEDIA_MODE)
-find_package(Gstreamer-1.0 REQUIRED)
-find_package(Glib-2.0 REQUIRED)
-find_package(PkgConfig)
-pkg_check_modules(GLIB2 REQUIRED glib-2.0)
-add_definitions(${GLIB2_CFLAGS})
-set(default_includes
- ${GSTREAMER_gst_INCLUDE_DIR}
- ${GSTREAMER_gstconfig_INCLUDE_DIR}
- ${GLIB_glib_2_INCLUDE_DIR}
-)
-set(default_sources
- ${COMPONENTS_DIR}/media_manager/src/audio/a2dp_source_player_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/audio/from_mic_recorder_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/audio/from_mic_to_file_recorder_thread.cc
- ${COMPONENTS_DIR}/media_manager/src/audio/socket_audio_streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/audio/pipe_audio_streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/audio/file_audio_streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/video/socket_video_streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/video/pipe_video_streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/video/file_video_streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/pipe_streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/socket_streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/file_streamer_adapter.cc
-)
-set(LIBRARIES
- ${GSTREAMER_gstreamer_LIBRARY}
- ApplicationManager
- pulse-simple
- pulse
- gobject-2.0
- glib-2.0
-)
-else(EXTENDED_MEDIA_MODE)
-set(default_includes
-)
-
-set(default_sources
- ${COMPONENTS_DIR}/media_manager/src/audio/socket_audio_streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/audio/pipe_audio_streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/audio/file_audio_streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/video/socket_video_streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/video/pipe_video_streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/video/file_video_streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/pipe_streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/socket_streamer_adapter.cc
- ${COMPONENTS_DIR}/media_manager/src/file_streamer_adapter.cc
-)
-set(LIBRARIES
- ProtocolLibrary
-)
-endif()
-
-include_directories (
+include_directories(
include
${COMPONENTS_DIR}/media_manager/include/audio/
${COMPONENTS_DIR}/media_manager/include/video/
@@ -100,22 +47,60 @@ include_directories (
${CMAKE_BINARY_DIR}/src/components/
${POLICY_PATH}/include/
${POLICY_GLOBAL_INCLUDE_PATH}/
- ${default_includes}
${LOG4CXX_INCLUDE_DIRECTORY}
)
-set (SOURCES
- ${COMPONENTS_DIR}/media_manager/src/media_adapter_impl.cc
- ${COMPONENTS_DIR}/media_manager/src/audio/from_mic_recorder_listener.cc
- ${COMPONENTS_DIR}/media_manager/src/audio/audio_stream_sender_thread.cc
- ${COMPONENTS_DIR}/media_manager/src/streamer_listener.cc
- ${COMPONENTS_DIR}/media_manager/src/media_manager_impl.cc
+set(PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
)
-add_library("MediaManager" ${SOURCES} ${default_sources})
+set(EXCLUDE_PATHS
+ video_stream_to_file_adapter.cc
+)
+
+set(LIBRARIES
+ ProtocolLibrary
+)
+
+if(EXTENDED_MEDIA_MODE)
+ find_package(Gstreamer-1.0 REQUIRED)
+ find_package(Glib-2.0 REQUIRED)
+ find_package(PkgConfig)
+ pkg_check_modules(GLIB2 REQUIRED glib-2.0)
+ add_definitions(${GLIB2_CFLAGS})
+
+ include_directories(
+ ${GSTREAMER_gst_INCLUDE_DIR}
+ ${GSTREAMER_gstconfig_INCLUDE_DIR}
+ ${GLIB_glib_2_INCLUDE_DIR}
+ )
+ list(APPEND EXCLUDE_PATHS
+
+ )
+ list(APPEND LIBRARIES
+ ${GSTREAMER_gstreamer_LIBRARY}
+ pulse-simple
+ pulse
+ gobject-2.0
+ glib-2.0
+ )
+else()
+ list(APPEND EXCLUDE_PATHS
+ a2dp_source_player_adapter.cc
+ from_mic_recorder_adapter.cc
+ from_mic_to_file_recorder_thread.cc
+ )
+endif()
+
+collect_sources(SOURCES "${PATHS}" "${EXCLUDE_PATHS}")
+add_library("MediaManager" ${SOURCES})
target_link_libraries("MediaManager" ${LIBRARIES})
-if(BUILD_TESTS)
- add_subdirectory(test)
+if(ENABLE_LOG)
+ target_link_libraries("MediaManager" log4cxx -L${LOG4CXX_LIBS_DIRECTORY})
endif()
+if(BUILD_TESTS)
+ add_subdirectory(test)
+endif()
diff --git a/src/components/media_manager/test/CMakeLists.txt b/src/components/media_manager/test/CMakeLists.txt
index ede6f27f95..f5d596f681 100644
--- a/src/components/media_manager/test/CMakeLists.txt
+++ b/src/components/media_manager/test/CMakeLists.txt
@@ -28,7 +28,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-if(BUILD_TESTS)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories(
${GMOCK_INCLUDE_DIRECTORY}
@@ -46,9 +46,7 @@ if(EXTENDED_MEDIA_MODE)
)
endif()
-set(SOURCES
- ${COMPONENTS_DIR}/media_manager/test/media_manager_impl_test.cc
-)
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}")
set(LIBRARIES
SmartObjects
@@ -74,7 +72,3 @@ create_test("media_manager_test" "${SOURCES}" "${LIBRARIES}")
if(ENABLE_LOG)
target_link_libraries("media_manager_test" log4cxx -L${LOG4CXX_LIBS_DIRECTORY})
endif()
-
-endif()
-
-# vim: set ts=2 sw=2 et:
diff --git a/src/components/policy/policy_regular/CMakeLists.txt b/src/components/policy/policy_regular/CMakeLists.txt
index 49d7b93152..6deb2cb2f4 100644
--- a/src/components/policy/policy_regular/CMakeLists.txt
+++ b/src/components/policy/policy_regular/CMakeLists.txt
@@ -28,12 +28,8 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-set(target Policy)
-set(install_destination bin)
-set(copy_destination ${CMAKE_BINARY_DIR}/src/appMain)
-set(library_name ${CMAKE_SHARED_LIBRARY_PREFIX}${target}${CMAKE_SHARED_LIBRARY_SUFFIX})
-
-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/platform.cmake)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories (
${POLICY_PATH}/include
@@ -45,40 +41,45 @@ include_directories (
${LOG4CXX_INCLUDE_DIRECTORY}
)
-set(SOURCES
- ${POLICY_PATH}/src/policy_manager_impl.cc
- ${POLICY_PATH}/src/policy_helper.cc
- ${POLICY_PATH}/src/policy_table.cc
- ${POLICY_PATH}/src/sql_pt_queries.cc
- ${POLICY_PATH}/src/sql_pt_representation.cc
- ${POLICY_PATH}/src/update_status_manager.cc
- ${POLICY_PATH}/src/status.cc
- ${POLICY_PATH}/src/cache_manager.cc
- ${COMPONENTS_DIR}/rpc_base/src/rpc_base/rpc_base.cc
+set(POLICY_TABLE_PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/policy/policy_table
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/policy_table
)
+collect_sources(POLICY_TABLE_SOURCES "${POLICY_TABLE_PATHS}")
+add_library(policy_struct ${POLICY_TABLE_SOURCES})
+target_link_libraries(policy_struct Utils)
-# --- Table struct section
-set(policy_struct_target policy_struct)
-set(POLICY_TABLE_SOURCES
- ${POLICY_PATH}/src/policy_table/enums.cc
- ${POLICY_PATH}/src/policy_table/types.cc
- ${POLICY_PATH}/src/policy_table/validation.cc
+set(USAGE_STATISTICS_PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/policy/usage_statistics
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usage_statistics
)
+collect_sources(USAGE_STATISTICS_SOURCES "${USAGE_STATISTICS_PATHS}")
+add_library(UsageStatistics ${USAGE_STATISTICS_SOURCES})
-add_library(${policy_struct_target} ${POLICY_TABLE_SOURCES})
-target_link_libraries(${policy_struct_target} Utils)
-# --- end of Table struct section
+set(EXCLUDE_PATHS
+ ${POLICY_TABLE_PATHS}
+ ${USAGE_STATISTICS_PATHS}
+ sql_pt_ext_queries.cc
+ sql_pt_ext_representation.cc
+)
-# --- Usage statistics section
-set(USAGE_STATISTICS_SOURCES
- ${POLICY_PATH}/src/usage_statistics/counter.cc
+set(PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/
+ ${COMPONENTS_DIR}/rpc_base/src/rpc_base/rpc_base.cc
+)
+collect_sources(SOURCES "${PATHS}" "${EXCLUDE_PATHS}")
+
+set(LIBRARIES
+ ConfigProfile
+ policy_struct
+ dbms
+ jsoncpp
+ Utils
)
-add_library(UsageStatistics ${USAGE_STATISTICS_SOURCES})
-# --- end of Usage statistics section
-set(LIBRARIES ConfigProfile policy_struct dbms jsoncpp Utils)
if (CMAKE_SYSTEM_NAME STREQUAL "QNX")
- # --- QDB Wrapper
+ # --- QDB Wrapper
include_directories (${COMPONENTS_DIR}/utils/include/utils)
else ()
# --- SQLite Wrapper
@@ -86,22 +87,28 @@ else ()
list(APPEND LIBRARIES sqlite3)
endif ()
-add_library(${target} SHARED ${SOURCES})
-target_link_libraries(${target} ${LIBRARIES} )
+add_library(Policy SHARED ${SOURCES})
+target_link_libraries(Policy ${LIBRARIES})
if(ENABLE_LOG)
- target_link_libraries(${target} log4cxx -L${LOG4CXX_LIBS_DIRECTORY})
+ target_link_libraries(Policy log4cxx -L${LOG4CXX_LIBS_DIRECTORY})
endif()
-add_custom_target(copy_library_${target} ALL
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- ${CMAKE_CURRENT_BINARY_DIR}/${library_name}
- ${copy_destination}
- DEPENDS ${target}
- COMMENT "Copying library ${library_name}")
+set(LIBRARY_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}Policy${CMAKE_SHARED_LIBRARY_SUFFIX})
+set(TARGET_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${LIBRARY_NAME})
+set(INSTALL_DESTINATION bin)
+set(COPY_DESTINATION ${CMAKE_BINARY_DIR}/src/appMain)
-install(TARGETS ${target}
- DESTINATION ${install_destination}
+add_custom_target(copy_policy_library ALL
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ ${TARGET_LOCATION}
+ ${COPY_DESTINATION}/${LIBRARY_NAME}
+ DEPENDS Policy
+ COMMENT "Copying library ${LIBRARY_NAME}"
+)
+
+install(TARGETS Policy
+ DESTINATION ${INSTALL_DESTINATION}
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE
@@ -109,4 +116,4 @@ install(TARGETS ${target}
if(BUILD_TESTS)
add_subdirectory(test)
-endif() # BUILD_TESTS
+endif()
diff --git a/src/components/policy/policy_regular/test/CMakeLists.txt b/src/components/policy/policy_regular/test/CMakeLists.txt
index dcd6522a21..997c3637e8 100644
--- a/src/components/policy/policy_regular/test/CMakeLists.txt
+++ b/src/components/policy/policy_regular/test/CMakeLists.txt
@@ -28,6 +28,8 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
+
include_directories(
include
${COMPONENTS_DIR}
@@ -41,26 +43,16 @@ include_directories(
${POLICY_MOCK_INCLUDE_PATH}/
)
-set(testLibraries
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}")
+
+set(LIBRARIES
gmock
Utils
Policy
UsageStatistics
)
-set(testSources
- counter_test.cc
- shared_library_test.cc
- generated_code_test.cc
- policy_manager_impl_test.cc
- update_status_manager_test.cc
-)
-
-list (APPEND testSources
- sql_pt_representation_test.cc
-)
-
-create_test("policy_test" "${testSources}" "${testLibraries}")
+create_test(policy_test "${SOURCES}" "${LIBRARIES}")
file(COPY valid_sdl_pt_update.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
file(COPY sdl_preloaded_pt.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
diff --git a/src/components/protocol/CMakeLists.txt b/src/components/protocol/CMakeLists.txt
index 8524ff4f44..7d8579bdbc 100644
--- a/src/components/protocol/CMakeLists.txt
+++ b/src/components/protocol/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2014, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,18 +28,18 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories(
- ./include
- ${APR_INCLUDE_DIRECTORY}
+ ${COMPONENTS_DIR}/include
+ ${COMPONENTS_DIR}/utils/include
)
-set(SOURCES
- ${COMPONENTS_DIR}/protocol/src/raw_message.cc
- ${COMPONENTS_DIR}/protocol/src/service_type.cc
- ${COMPONENTS_DIR}/protocol/src/message_priority.cc
- ${COMPONENTS_DIR}/protocol/src/rpc_type.cc
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}")
+
+set(LIBRARIES
+ Utils
)
add_library(ProtocolLibrary ${SOURCES})
-target_link_libraries(ProtocolLibrary Utils)
+target_link_libraries(ProtocolLibrary ${LIBRARIES})
diff --git a/src/components/protocol_handler/CMakeLists.txt b/src/components/protocol_handler/CMakeLists.txt
index a09a565844..559acf8956 100644
--- a/src/components/protocol_handler/CMakeLists.txt
+++ b/src/components/protocol_handler/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2014, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,6 +28,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories(
include
@@ -37,13 +38,11 @@ include_directories(
${LOG4CXX_INCLUDE_DIRECTORY}
)
-set(SOURCES
- ${COMPONENTS_DIR}/protocol_handler/src/incoming_data_handler.cc
- ${COMPONENTS_DIR}/protocol_handler/src/protocol_handler_impl.cc
- ${COMPONENTS_DIR}/protocol_handler/src/protocol_packet.cc
- ${COMPONENTS_DIR}/protocol_handler/src/protocol_payload.cc
- ${COMPONENTS_DIR}/protocol_handler/src/multiframe_builder.cc
+set(PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
)
+collect_sources(SOURCES "${PATHS}")
set(LIBRARIES
ProtocolLibrary
diff --git a/src/components/protocol_handler/test/CMakeLists.txt b/src/components/protocol_handler/test/CMakeLists.txt
index 87d91bfd54..ca079dcc7e 100644
--- a/src/components/protocol_handler/test/CMakeLists.txt
+++ b/src/components/protocol_handler/test/CMakeLists.txt
@@ -28,7 +28,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-if (BUILD_TESTS)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories (
include
@@ -38,9 +38,12 @@ include_directories (
${COMPONENTS_DIR}/protocol_handler/test/include
${COMPONENTS_DIR}/include/protocol
${JSONCPP_INCLUDE_DIRECTORY}
+ ${GMOCK_INCLUDE_DIRECTORY}
)
-set (LIBRARIES
+collect_sources(SOURCES ${CMAKE_CURRENT_SOURCE_DIR})
+
+set(LIBRARIES
gmock
ProtocolHandler
connectionHandler
@@ -49,15 +52,4 @@ set (LIBRARIES
ProtocolLibrary
)
-set (SOURCES
- incoming_data_handler_test.cc
- protocol_header_validator_test.cc
- protocol_handler_tm_test.cc
- protocol_packet_test.cc
- protocol_payload_test.cc
- multiframe_builder_test.cc
-)
-
-create_test ("protocol_handler_test" "${SOURCES}" "${LIBRARIES}")
-
-endif ()
+create_test(protocol_handler_test "${SOURCES}" "${LIBRARIES}")
diff --git a/src/components/qt_hmi/test/CMakeLists.txt b/src/components/qt_hmi/test/CMakeLists.txt
index b0c48a4348..91ec2cd20c 100644
--- a/src/components/qt_hmi/test/CMakeLists.txt
+++ b/src/components/qt_hmi/test/CMakeLists.txt
@@ -29,8 +29,6 @@
# POSSIBILITY OF SUCH DAMAGE.
-if(BUILD_TESTS)
-
cmake_minimum_required(VERSION 2.8.11)
set(QT_HMI_TESTS_LIST
@@ -67,4 +65,3 @@ foreach( file_i ${QT_HMI_TESTS_LIST})
file(COPY ${file_i} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
endforeach( file_i )
-endif() \ No newline at end of file
diff --git a/src/components/resumption/CMakeLists.txt b/src/components/resumption/CMakeLists.txt
index b8fa277cae..4fb0876c0d 100644
--- a/src/components/resumption/CMakeLists.txt
+++ b/src/components/resumption/CMakeLists.txt
@@ -1,4 +1,4 @@
-# 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
@@ -28,6 +28,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories (
include
@@ -37,9 +38,11 @@ include_directories (
${LOG4CXX_INCLUDE_DIRECTORY}
)
-set (SOURCES
- ${COMPONENTS_DIR}/resumption/src/last_state.cc
+set(PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
)
+collect_sources(SOURCES "${PATHS}")
add_library("Resumption" ${SOURCES})
diff --git a/src/components/resumption/include/resumption/last_state.h b/src/components/resumption/include/resumption/last_state.h
index a331d9291c..3481fc9327 100644
--- a/src/components/resumption/include/resumption/last_state.h
+++ b/src/components/resumption/include/resumption/last_state.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Ford Motor Company
+ * Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -35,7 +35,6 @@
#include <string>
-#include "utils/macro.h"
#include "json/json.h"
namespace resumption {
@@ -43,36 +42,19 @@ namespace resumption {
class LastState {
public:
/**
- * @brief Constructor
- */
- LastState(const std::string& app_storage_folder,
- const std::string& app_info_storage);
-
- /**
* @brief Destructor
*/
- ~LastState();
+ virtual ~LastState() {}
/**
* @brief Saving dictionary to filesystem
*/
- void SaveToFileSystem();
-
- /**
- * @brief public dictionary
- */
- Json::Value dictionary;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(LastState);
+ virtual void SaveStateToFileSystem() = 0;
/**
- * @brief Load dictionary from filesystem
+ * @brief Get reference to dictionary
*/
- void LoadFromFileSystem();
-
- std::string app_storage_folder_;
- std::string app_info_storage_;
+ virtual Json::Value& get_dictionary() = 0;
};
} // namespace resumption
diff --git a/src/components/hmi_message_handler/include/hmi_message_handler/mqueue_adapter.h b/src/components/resumption/include/resumption/last_state_impl.h
index 69634ea00e..2da3147930 100644
--- a/src/components/hmi_message_handler/include/hmi_message_handler/mqueue_adapter.h
+++ b/src/components/resumption/include/resumption/last_state_impl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Ford Motor Company
+ * Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -30,37 +30,54 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef SRC_COMPONENTS_HMI_MESSAGE_HANDLER_INCLUDE_HMI_MESSAGE_HANDLER_MQUEUE_ADAPTER_H_
-#define SRC_COMPONENTS_HMI_MESSAGE_HANDLER_INCLUDE_HMI_MESSAGE_HANDLER_MQUEUE_ADAPTER_H_
+#ifndef SRC_COMPONENTS_RESUMPTION_INCLUDE_RESUMPTION_LAST_STATE_IMPL_H_
+#define SRC_COMPONENTS_RESUMPTION_INCLUDE_RESUMPTION_LAST_STATE_IMPL_H_
-#include <memory>
-#include <mqueue.h>
-#include "utils/threads/thread.h"
-#include "hmi_message_handler/hmi_message_adapter_impl.h"
+#include "resumption/last_state.h"
+#include "utils/macro.h"
-namespace hmi_message_handler {
-
-class ReceiverThreadDelegate;
+namespace resumption {
/**
- * \brief HMI message adapter for mqueue
+ * @brief The LastStateImpl class handles interface of last state
*/
-class MqueueAdapter : public HMIMessageAdapterImpl {
+
+class LastStateImpl : public LastState {
public:
- MqueueAdapter(HMIMessageHandler* hmi_message_handler);
- virtual ~MqueueAdapter();
+ /**
+ * @brief Constructor
+ */
+ LastStateImpl(const std::string& app_storage_folder,
+ const std::string& app_info_storage);
+
+ /**
+ * @brief Destructor
+ */
+ ~LastStateImpl();
- protected:
- virtual void SendMessageToHMI(MessageSharedPointer message);
- virtual void SubscribeTo();
+ /**
+ * @brief Saving dictionary to filesystem
+ */
+ void SaveStateToFileSystem() OVERRIDE;
+
+ /**
+ * @brief Get reference to dictionary
+ */
+ Json::Value& get_dictionary() OVERRIDE;
private:
- mqd_t sdl_to_hmi_mqueue_;
- mqd_t hmi_to_sdl_mqueue_;
+ const std::string app_storage_folder_;
+ const std::string app_info_storage_;
+ Json::Value dictionary_;
+
+ /**
+ * @brief Load dictionary from filesystem
+ */
+ void LoadStateFromFileSystem();
- ReceiverThreadDelegate* receiver_thread_delegate_;
- threads::Thread* receiver_thread_;
+ DISALLOW_COPY_AND_ASSIGN(LastStateImpl);
};
-} // namespace hmi_message_handler
-#endif // SRC_COMPONENTS_HMI_MESSAGE_HANDLER_INCLUDE_HMI_MESSAGE_HANDLER_MQUEUE_ADAPTER_H_
+} // namespace resumption
+
+#endif // SRC_COMPONENTS_RESUMPTION_INCLUDE_RESUMPTION_LAST_STATE_IMPL_H_
diff --git a/src/components/resumption/src/last_state.cc b/src/components/resumption/src/last_state_impl.cc
index c1b8534bfc..4d3fd1526c 100644
--- a/src/components/resumption/src/last_state.cc
+++ b/src/components/resumption/src/last_state_impl.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Ford Motor Company
+ * Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -30,7 +30,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include "resumption/last_state.h"
+#include "resumption/last_state_impl.h"
#include "utils/file_system.h"
#include "utils/logger.h"
@@ -38,37 +38,41 @@ namespace resumption {
CREATE_LOGGERPTR_GLOBAL(logger_, "Resumption")
-LastState::LastState(const std::string& app_storage_folder,
- const std::string& app_info_storage)
+LastStateImpl::LastStateImpl(const std::string& app_storage_folder,
+ const std::string& app_info_storage)
: app_storage_folder_(app_storage_folder)
, app_info_storage_(app_info_storage) {
- LoadFromFileSystem();
+ LoadStateFromFileSystem();
LOG4CXX_AUTO_TRACE(logger_);
}
-LastState::~LastState() {
+LastStateImpl::~LastStateImpl() {
LOG4CXX_AUTO_TRACE(logger_);
- SaveToFileSystem();
+ SaveStateToFileSystem();
}
-void LastState::SaveToFileSystem() {
+void LastStateImpl::SaveStateToFileSystem() {
LOG4CXX_AUTO_TRACE(logger_);
- const std::string& str = dictionary.toStyledString();
+ const std::string& str = dictionary_.toStyledString();
const std::vector<uint8_t> char_vector_pdata(str.begin(), str.end());
DCHECK(file_system::CreateDirectoryRecursively(app_storage_folder_));
LOG4CXX_INFO(logger_,
- "LastState::SaveToFileSystem " << app_info_storage_ << str);
+ "LastState::SaveStateToFileSystem " << app_info_storage_ << str);
DCHECK(file_system::Write(app_info_storage_, char_vector_pdata));
}
-void LastState::LoadFromFileSystem() {
+Json::Value& LastStateImpl::get_dictionary() {
+ return dictionary_;
+}
+
+void LastStateImpl::LoadStateFromFileSystem() {
std::string buffer;
bool result = file_system::ReadFile(app_info_storage_, buffer);
Json::Reader m_reader;
- if (result && m_reader.parse(buffer, dictionary)) {
+ if (result && m_reader.parse(buffer, dictionary_)) {
LOG4CXX_INFO(logger_,
- "Valid last state was found." << dictionary.toStyledString());
+ "Valid last state was found." << dictionary_.toStyledString());
return;
}
LOG4CXX_WARN(logger_, "No valid last state was found.");
diff --git a/src/components/resumption/test/CMakeLists.txt b/src/components/resumption/test/CMakeLists.txt
index 6fa1c07381..5481d5f80f 100644
--- a/src/components/resumption/test/CMakeLists.txt
+++ b/src/components/resumption/test/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2015, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-if(BUILD_TESTS)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories(
${LOG4CXX_INCLUDE_DIRECTORY}
@@ -41,22 +41,14 @@ include_directories(
${CMAKE_BINARY_DIR}
)
+collect_sources(SOURCES ${CMAKE_CURRENT_SOURCE_DIR})
+
set(LIBRARIES
gmock
ConfigProfile
Utils
Resumption
jsoncpp
- ConfigProfile
)
-set(SOURCES
- ${COMPONENTS_DIR}/resumption/test/last_state_test.cc
-)
-
-#file(COPY smartDeviceLink_test.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
-#file(COPY app_info.dat DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
-
-create_test("resumption_test" "${SOURCES}" "${LIBRARIES}")
-
-endif()
+create_test(resumption_test "${SOURCES}" "${LIBRARIES}")
diff --git a/src/components/resumption/test/last_state_test.cc b/src/components/resumption/test/last_state_test.cc
index 78acc68c90..15180fa12c 100644
--- a/src/components/resumption/test/last_state_test.cc
+++ b/src/components/resumption/test/last_state_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
@@ -34,7 +34,7 @@
#include "gtest/gtest.h"
-#include "resumption/last_state.h"
+#include "resumption/last_state_impl.h"
#include "utils/file_system.h"
namespace test {
@@ -69,17 +69,17 @@ class LastStateTest : public ::testing::Test {
const std::string empty_dictionary_;
const std::string app_info_dat_file_;
- resumption::LastState last_state_;
+ resumption::LastStateImpl last_state_;
};
TEST_F(LastStateTest, Basic) {
- const Value& dictionary = last_state_.dictionary;
+ const Value& dictionary = last_state_.get_dictionary();
EXPECT_EQ(empty_dictionary_, dictionary.toStyledString());
}
TEST_F(LastStateTest, SetGetData) {
{
- const Value& dictionary = last_state_.dictionary;
+ Value& dictionary = last_state_.get_dictionary();
const Value& bluetooth_info =
dictionary["TransportManager"]["BluetoothAdapter"];
EXPECT_EQ(empty_dictionary_, bluetooth_info.toStyledString());
@@ -98,14 +98,14 @@ TEST_F(LastStateTest, SetGetData) {
Value test_value;
test_value["name"] = "test_device";
- last_state_.dictionary["TransportManager"]["TcpAdapter"]["devices"] =
- test_value;
- last_state_.dictionary["TransportManager"]["BluetoothAdapter"]["devices"] =
+ dictionary["TransportManager"]["TcpAdapter"]["devices"] = test_value;
+
+ dictionary["TransportManager"]["BluetoothAdapter"]["devices"] =
"bluetooth_device";
- last_state_.SaveToFileSystem();
+ last_state_.SaveStateToFileSystem();
}
- const Value& dictionary = last_state_.dictionary;
+ const Value& dictionary = last_state_.get_dictionary();
const Value& bluetooth_info =
dictionary["TransportManager"]["BluetoothAdapter"];
diff --git a/src/components/rpc_base/CMakeLists.txt b/src/components/rpc_base/CMakeLists.txt
index 94e67cc985..700cec72bb 100644
--- a/src/components/rpc_base/CMakeLists.txt
+++ b/src/components/rpc_base/CMakeLists.txt
@@ -28,31 +28,27 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-
-set(RPC_BASE_INCLUDE_DIR ${COMPONENTS_DIR}/rpc_base/include)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories(
- include
+ ${COMPONENTS_DIR}/rpc_base/include
+ ${COMPONENTS_DIR}/utils/include
${JSONCPP_INCLUDE_DIRECTORY}
)
-set (SOURCES
- ${COMPONENTS_DIR}/rpc_base/src/rpc_base/rpc_base.cc
+set(PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
)
+collect_sources(SOURCES "${PATHS}")
-set (HEADERS
- ${RPC_BASE_INCLUDE_DIR}/rpc_base/gtest_support.h
- ${RPC_BASE_INCLUDE_DIR}/rpc_base/rpc_base_dbus_inl.h
- ${RPC_BASE_INCLUDE_DIR}/rpc_base/rpc_base.h
- ${RPC_BASE_INCLUDE_DIR}/rpc_base/rpc_base_inl.h
- ${RPC_BASE_INCLUDE_DIR}/rpc_base/rpc_base_json_inl.h
- ${RPC_BASE_INCLUDE_DIR}/rpc_base/rpc_message.h
- ${RPC_BASE_INCLUDE_DIR}/rpc_base/validation_report.h
+set(LIBRARIES
+ jsoncpp
)
-add_library(rpc_base ${HEADERS} ${SOURCES})
-target_link_libraries(rpc_base jsoncpp)
+add_library(rpc_base ${SOURCES})
+target_link_libraries(rpc_base ${LIBRARIES})
if(BUILD_TESTS)
add_subdirectory(test)
-endif() \ No newline at end of file
+endif()
diff --git a/src/components/rpc_base/test/CMakeLists.txt b/src/components/rpc_base/test/CMakeLists.txt
index 76cf738f46..566f0ddcde 100644
--- a/src/components/rpc_base/test/CMakeLists.txt
+++ b/src/components/rpc_base/test/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2015, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,8 +28,9 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-if (BUILD_TESTS)
- include_directories (
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
+
+include_directories(
${COMPONENTS_DIR}/dbus/include
${COMPONENTS_DIR}/dbus/src
${COMPONENTS_DIR}/rpc_base/include
@@ -43,20 +44,16 @@ set(LIBRARIES
jsoncpp
)
-set(SOURCES
- rpc_base_json_test.cc
- rpc_base_test.cc
- validation_report_test.cc
-)
-
-if (${HMI_DBUS_API})
- # Build dbus tests
+if(${HMI_DBUS_API})
include_directories(${DBUS_INCLUDE_DIRS})
- set (LIBRARIES ${LIBRARIES} DBus)
- set (SOURCES ${SOURCES} rpc_base_dbus_test.cc)
-endif ()
-
-create_test("rpc_base_test" "${SOURCES}" "${LIBRARIES}")
-
+ list(APPEND LIBRARIES
+ DBus
+ )
+else()
+ set(EXCLUDE_PATHS
+ rpc_base_dbus_test.cc
+ )
endif()
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}" "${EXCLUDE_PATHS}")
+create_test(rpc_base_test "${SOURCES}" "${LIBRARIES}")
diff --git a/src/components/security_manager/CMakeLists.txt b/src/components/security_manager/CMakeLists.txt
index 3cc6178931..bb50ad50c9 100644
--- a/src/components/security_manager/CMakeLists.txt
+++ b/src/components/security_manager/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2014, Ford Motor Company
+# Copyright (c) 2015, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -27,7 +27,9 @@
# 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.
-
+
+
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories(
include/
@@ -41,15 +43,22 @@ include_directories(
${APR_INCLUDE_DIRECTORY}
)
-set (SOURCES
- ${COMPONENTS_DIR}/security_manager/src/security_manager_impl.cc
- ${COMPONENTS_DIR}/security_manager/src/security_query.cc
- ${COMPONENTS_DIR}/security_manager/src/crypto_manager_impl.cc
- ${COMPONENTS_DIR}/security_manager/src/ssl_context_impl.cc
+set(PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+)
+collect_sources(SOURCES "${PATHS}")
+
+set(LIBRARIES
+ crypto
+ ssl
+ ProtocolHandler
+ jsoncpp
+ ProtocolLibrary
)
add_library(SecurityManager ${SOURCES})
-target_link_libraries(SecurityManager crypto ssl ProtocolHandler jsoncpp ProtocolLibrary)
+target_link_libraries(SecurityManager ${LIBRARIES})
if(BUILD_TESTS)
add_subdirectory(test)
diff --git a/src/components/security_manager/test/CMakeLists.txt b/src/components/security_manager/test/CMakeLists.txt
index 6707e5ea5a..ba1fbcca8b 100644
--- a/src/components/security_manager/test/CMakeLists.txt
+++ b/src/components/security_manager/test/CMakeLists.txt
@@ -28,8 +28,8 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-if (BUILD_TESTS)
-
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
+
include_directories(
${GMOCK_INCLUDE_DIRECTORY}
${COMPONENTS_DIR}/protocol_handler/test/include
@@ -39,20 +39,15 @@ include_directories(
${JSONCPP_INCLUDE_DIRECTORY}
)
-set(SOURCES
- ${COMPONENTS_DIR}/security_manager/test/crypto_manager_impl_test.cc
- ${COMPONENTS_DIR}/security_manager/test/security_manager_test.cc
- ${COMPONENTS_DIR}/security_manager/test/security_query_test.cc
- ${COMPONENTS_DIR}/security_manager/test/security_query_matcher.cc
- ${COMPONENTS_DIR}/security_manager/test/ssl_context_test.cc
- ${COMPONENTS_DIR}/security_manager/test/ssl_certificate_handshake_test.cc
- )
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}")
set(LIBRARIES
gmock
${SecurityManagerLibrary}
)
+create_test (security_manager_test "${SOURCES}" "${LIBRARIES}")
+
set(CERT_LIST
${CMAKE_SOURCE_DIR}/mycert.pem
${CMAKE_SOURCE_DIR}/mykey.pem
@@ -64,11 +59,8 @@ add_custom_target(generate_certificates
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
-foreach( file_i ${CERT_LIST})
- file(COPY ${file_i} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
-endforeach( file_i )
+foreach(CERT_ENTRY ${CERT_LIST})
+ file(COPY ${CERT_ENTRY} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+endforeach()
-create_test (security_manager_test "${SOURCES}" "${LIBRARIES}")
add_dependencies(security_manager_test generate_certificates)
-
-endif ()
diff --git a/src/components/smart_objects/CMakeLists.txt b/src/components/smart_objects/CMakeLists.txt
index c1d599db67..339cf90ea4 100644
--- a/src/components/smart_objects/CMakeLists.txt
+++ b/src/components/smart_objects/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2014, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,28 +28,19 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
-set(SMART_OBJECTS_SRC_DIR ${COMPONENTS_DIR}/smart_objects/src)
-
-include_directories (
- include
- ${COMPONENTS_DIR}/utils/include/
+include_directories(
+ ${COMPONENTS_DIR}/include
+ ${COMPONENTS_DIR}/smart_objects/include
+ ${COMPONENTS_DIR}/utils/include
)
-set (SOURCES
- ${SMART_OBJECTS_SRC_DIR}/smart_object.cc
- ${SMART_OBJECTS_SRC_DIR}/smart_schema.cc
- ${SMART_OBJECTS_SRC_DIR}/schema_item.cc
- ${SMART_OBJECTS_SRC_DIR}/always_false_schema_item.cc
- ${SMART_OBJECTS_SRC_DIR}/always_true_schema_item.cc
- ${SMART_OBJECTS_SRC_DIR}/default_shema_item.cc
- ${SMART_OBJECTS_SRC_DIR}/bool_schema_item.cc
- ${SMART_OBJECTS_SRC_DIR}/number_schema_item.cc
- ${SMART_OBJECTS_SRC_DIR}/enum_schema_item.cc
- ${SMART_OBJECTS_SRC_DIR}/string_schema_item.cc
- ${SMART_OBJECTS_SRC_DIR}/object_schema_item.cc
- ${SMART_OBJECTS_SRC_DIR}/array_schema_item.cc
+set(PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
)
+collect_sources(SOURCES "${PATHS}")
add_library("SmartObjects" ${SOURCES})
@@ -60,4 +51,3 @@ endif()
if(BUILD_TESTS)
add_subdirectory(test)
endif()
-
diff --git a/src/components/smart_objects/test/CMakeLists.txt b/src/components/smart_objects/test/CMakeLists.txt
index e8bc20b6b8..e0cc37e104 100644
--- a/src/components/smart_objects/test/CMakeLists.txt
+++ b/src/components/smart_objects/test/CMakeLists.txt
@@ -28,8 +28,11 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
+
if(BUILD_TESTS)
-add_definitions(-DUNIT_TESTS)
+ add_definitions(-DUNIT_TESTS)
+endif()
include_directories (
${GMOCK_INCLUDE_DIRECTORY}
@@ -45,22 +48,10 @@ set(LIBRARIES
jsoncpp
)
-set(SOURCES
- ${COMPONENTS_DIR}/smart_objects/test/SmartObjectDraft_test.cc
- ${COMPONENTS_DIR}/smart_objects/test/SmartObjectInvalid_test.cc
- ${COMPONENTS_DIR}/smart_objects/test/SmartObjectStress_test.cc
- ${COMPONENTS_DIR}/smart_objects/test/SmartObjectUnit_test.cc
- ${COMPONENTS_DIR}/smart_objects/test/smart_object_performance_test.cc
- ${COMPONENTS_DIR}/smart_objects/test/map_performance_test.cc
- ${COMPONENTS_DIR}/smart_objects/test/BoolSchemaItem_test.cc
- ${COMPONENTS_DIR}/smart_objects/test/NumberSchemaItem_test.cc
- ${COMPONENTS_DIR}/smart_objects/test/StringSchemaItem_test.cc
- ${COMPONENTS_DIR}/smart_objects/test/ArraySchemaItem_test.cc
- ${COMPONENTS_DIR}/smart_objects/test/CObjectSchemaItem_test.cc
- ${COMPONENTS_DIR}/smart_objects/test/AlwaysTrueSchemaItem_test.cc
- ${COMPONENTS_DIR}/smart_objects/test/AlwaysFalseSchemaItem_test.cc
+set(EXCLUDE_PATHS
+ EnumSchemaItem_test.cc
+ SmartObjectConvertionTime_test.cc
)
-create_test("smart_object_test" "${SOURCES}" "${LIBRARIES}")
-
-endif()
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}" "${EXCLUDE_PATHS}")
+create_test(smart_object_test "${SOURCES}" "${LIBRARIES}")
diff --git a/src/components/telemetry_monitor/CMakeLists.txt b/src/components/telemetry_monitor/CMakeLists.txt
index 354badb41a..5ac90d1967 100644
--- a/src/components/telemetry_monitor/CMakeLists.txt
+++ b/src/components/telemetry_monitor/CMakeLists.txt
@@ -28,8 +28,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-
-set(TELEMETRY_MONITOR_SRC_DIR ${COMPONENTS_DIR}/telemetry_monitor/src)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories (
include
@@ -51,15 +50,15 @@ include_directories (
${LOG4CXX_INCLUDE_DIRECTORY}
)
-set(SOURCES
- ${TELEMETRY_MONITOR_SRC_DIR}/metric_wrapper.cc
- ${TELEMETRY_MONITOR_SRC_DIR}/telemetry_monitor.cc
- ${TELEMETRY_MONITOR_SRC_DIR}/application_manager_observer.cc
- ${TELEMETRY_MONITOR_SRC_DIR}/transport_manager_observer.cc
- ${TELEMETRY_MONITOR_SRC_DIR}/protocol_handler_observer.cc
- ${TELEMETRY_MONITOR_SRC_DIR}/application_manager_metric_wrapper.cc
- ${TELEMETRY_MONITOR_SRC_DIR}/transport_manager_metric_wrapper.cc
- ${TELEMETRY_MONITOR_SRC_DIR}/protocol_handler_metric_wrapper.cc
+set(PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+)
+collect_sources(SOURCES "${PATHS}")
+
+set(LIBRARIES
+ HMI_API
+ MOBILE_API
)
add_library("TelemetryMonitor" ${SOURCES})
diff --git a/src/components/telemetry_monitor/test/CMakeLists.txt b/src/components/telemetry_monitor/test/CMakeLists.txt
index 7d2de19854..ea2698dfb2 100644
--- a/src/components/telemetry_monitor/test/CMakeLists.txt
+++ b/src/components/telemetry_monitor/test/CMakeLists.txt
@@ -28,7 +28,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-if(BUILD_TESTS)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories(
include
@@ -40,20 +40,10 @@ include_directories(
${COMPONENTS_DIR}/resumption/include
${JSONCPP_INCLUDE_DIRECTORY}
)
-
-set(testSources
- metric_wrapper_test.cc
- telemetry_monitor_test.cc
- protocol_handler_metric_test.cc
- protocol_handler_observer_test.cc
- transport_manager_metric_test.cc
- transport_manager_observer_test.cc
- application_manager_metric_test.cc
- application_manager_observer_test.cc
-)
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}")
-set(testLibraries
+set(LIBRARIES
gmock
TelemetryMonitor
jsoncpp
@@ -68,7 +58,7 @@ set(testLibraries
MessageHelper
Resumption
jsoncpp
- transport_manager
+ TransportManager
MediaManager
ProtocolHandler
connectionHandler
@@ -82,8 +72,8 @@ if (BUILD_BT_SUPPORT)
list(APPEND testLibraries bluetooth)
endif()
-file(COPY log4cxx.properties DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+create_test("telemetry_monitor_test" "${SOURCES}" "${LIBRARIES}")
+
+file(COPY ${COMPONENTS_DIR}/telemetry_monitor/test/log4cxx.properties DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
-create_test("telemetry_monitor_test" "${testSources}" "${testLibraries}")
-endif()
diff --git a/src/components/transport_manager/CMakeLists.txt b/src/components/transport_manager/CMakeLists.txt
index 49a3702896..b764345618 100644
--- a/src/components/transport_manager/CMakeLists.txt
+++ b/src/components/transport_manager/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2014, Ford Motor Company
+# Copyright (c) 2017, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,8 +28,8 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-set(target TransportManager)
-set(TM_SRC_DIR ${COMPONENTS_DIR}/transport_manager/src)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/platform.cmake)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories (
include
@@ -43,83 +43,63 @@ include_directories (
${LIBUSB_INCLUDE_DIRECTORY}
${LOG4CXX_INCLUDE_DIRECTORY}
)
-if (BUILD_BT_SUPPORT)
- include_directories(
- )
-endif()
-set (SOURCES
- ${TM_SRC_DIR}/transport_manager_impl.cc
- ${TM_SRC_DIR}/transport_manager_default.cc
- ${TM_SRC_DIR}/transport_adapter/transport_adapter_listener_impl.cc
- ${TM_SRC_DIR}/transport_adapter/transport_adapter_impl.cc
- ${TM_SRC_DIR}/tcp/tcp_transport_adapter.cc
- ${TM_SRC_DIR}/transport_adapter/threaded_socket_connection.cc
- ${TM_SRC_DIR}/tcp/tcp_client_listener.cc
- ${TM_SRC_DIR}/tcp/tcp_device.cc
- ${TM_SRC_DIR}/tcp/tcp_socket_connection.cc
- ${TM_SRC_DIR}/tcp/tcp_connection_factory.cc
+set(PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+)
+
+set(EXCLUDE_PATHS)
+
+set(LIBRARIES
+ ProtocolLibrary
)
-if (BUILD_BT_SUPPORT)
- list (APPEND SOURCES
- ${TM_SRC_DIR}/bluetooth/bluetooth_device_scanner.cc
- ${TM_SRC_DIR}/bluetooth/bluetooth_transport_adapter.cc
- ${TM_SRC_DIR}/bluetooth/bluetooth_connection_factory.cc
- ${TM_SRC_DIR}/bluetooth/bluetooth_socket_connection.cc
- ${TM_SRC_DIR}/bluetooth/bluetooth_device.cc
+if(BUILD_BT_SUPPORT)
+ list(APPEND LIBRARIES
+ bluetooth
+ )
+else()
+ list(APPEND EXCLUDE_PATHS
+ ${COMPONENTS_DIR}/transport_manager/include/transport_manager/bluetooth
+ ${COMPONENTS_DIR}/transport_manager/src/bluetooth
)
endif()
-if (BUILD_USB_SUPPORT)
- list (APPEND SOURCES
- ${TM_SRC_DIR}/usb/usb_aoa_adapter.cc
- ${TM_SRC_DIR}/usb/usb_connection_factory.cc
- ${TM_SRC_DIR}/usb/usb_device_scanner.cc
- )
+if(BUILD_USB_SUPPORT)
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
- list (APPEND SOURCES
- ${TM_SRC_DIR}/usb/libusb/usb_handler.cc
- ${TM_SRC_DIR}/usb/libusb/usb_connection.cc
- ${TM_SRC_DIR}/usb/libusb/platform_usb_device.cc
+ set(EXCLUDE_PATHS
+ ${COMPONENTS_DIR}/transport_manager/include/transport_manager/usb/qnx
+ ${COMPONENTS_DIR}/transport_manager/src/usb/qnx
+ )
+ list(APPEND LIBRARIES
+ Libusb-1.0.16
)
elseif(CMAKE_SYSTEM_NAME STREQUAL "QNX")
- list(APPEND SOURCES
- ${TM_SRC_DIR}/usb/qnx/usb_handler.cc
- ${TM_SRC_DIR}/usb/qnx/usb_connection.cc
- ${TM_SRC_DIR}/usb/qnx/platform_usb_device.cc
+ set(EXCLUDE_PATHS
+ ${COMPONENTS_DIR}/transport_manager/include/transport_manager/usb/libusb
+ ${COMPONENTS_DIR}/transport_manager/src/usb/libusb
+ )
+ list(APPEND LIBRARIES
+ usbdi
)
endif()
-endif(BUILD_USB_SUPPORT)
-
-
-if (CMAKE_SYSTEM_NAME STREQUAL "QNX")
+else()
+ list(APPEND EXCLUDE_PATHS
+ ${COMPONENTS_DIR}/transport_manager/include/transport_manager/usb
+ ${COMPONENTS_DIR}/transport_manager/src/usb
+ )
endif()
-add_library(${target} ${SOURCES})
-target_link_libraries(${target} ProtocolLibrary)
+collect_sources(SOURCES "${PATHS}" "${EXCLUDE_PATHS}")
-if (BUILD_USB_SUPPORT)
- if (CMAKE_SYSTEM_NAME STREQUAL "QNX")
- target_link_libraries(${target} usbdi)
- endif()
-endif(BUILD_USB_SUPPORT)
+add_library("TransportManager" ${SOURCES})
+target_link_libraries("TransportManager" ${LIBRARIES})
if(ENABLE_LOG)
- target_link_libraries(${target} log4cxx -L${LOG4CXX_LIBS_DIRECTORY})
-endif()
-
-if (BUILD_BT_SUPPORT)
- target_link_libraries(${target} bluetooth)
+ target_link_libraries("TransportManager" log4cxx -L${LOG4CXX_LIBS_DIRECTORY})
endif()
-if (CMAKE_SYSTEM_NAME STREQUAL "QNX")
-endif()
-
-add_library("transport_manager" ${SOURCES}
- ${TRANSPORT_MANAGER_SOURCES}
-)
-
if(BUILD_TESTS)
add_subdirectory(test)
endif()
diff --git a/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_socket_connection.h b/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_socket_connection.h
index 3f524dac0f..bd8aaad571 100644
--- a/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_socket_connection.h
+++ b/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_socket_connection.h
@@ -2,7 +2,7 @@
* \file bluetooth_socket_connection.h
* \brief BluetoothSocketConnection class header file.
*
- * Copyright (c) 2013, Ford Motor Company
+ * Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -66,12 +66,13 @@ class BluetoothSocketConnection : public ThreadedSocketConnection {
protected:
/**
- * @brief Establish connection.
+ * @brief Check if we can start the connection attempt and establish
+ *connection status.
*
- * @param error Connection error.
+ * @param error contains information of any error that occurred during
+ *connection attempt.
*
- * @return True - connection established.
- * false - connection not established.
+ * @return result that states whether we successfully connected or not.
*/
virtual bool Establish(ConnectError** error);
};
diff --git a/src/components/transport_manager/include/transport_manager/tcp/tcp_connection_factory.h b/src/components/transport_manager/include/transport_manager/tcp/tcp_connection_factory.h
index 7f238e91ec..da24a4d65d 100644
--- a/src/components/transport_manager/include/transport_manager/tcp/tcp_connection_factory.h
+++ b/src/components/transport_manager/include/transport_manager/tcp/tcp_connection_factory.h
@@ -2,7 +2,7 @@
* \file tcp_connection_factory.h
* \brief TcpConnectionFactory class header file.
*
- * Copyright (c) 2013, Ford Motor Company
+ * Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -37,11 +37,12 @@
#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_CONNECTION_FACTORY_H_
#include "transport_manager/transport_adapter/server_connection_factory.h"
-#include "transport_manager/transport_adapter/transport_adapter_controller.h"
namespace transport_manager {
namespace transport_adapter {
+class TransportAdapterController;
+
/**
* @brief Create connections.
*/
diff --git a/src/components/transport_manager/include/transport_manager/tcp/tcp_server_originated_socket_connection.h b/src/components/transport_manager/include/transport_manager/tcp/tcp_server_originated_socket_connection.h
new file mode 100644
index 0000000000..bf38fae37e
--- /dev/null
+++ b/src/components/transport_manager/include/transport_manager/tcp/tcp_server_originated_socket_connection.h
@@ -0,0 +1,84 @@
+/*
+ * \file tcp_server_originated_socket_connection.h
+ * \brief TcpServerOriginatedSocketConnection class header file.
+ *
+ * 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_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_SERVER_ORIGINATED_SOCKET_CONNECTION_H_
+#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_SERVER_ORIGINATED_SOCKET_CONNECTION_H_
+
+#include "transport_manager/transport_adapter/threaded_socket_connection.h"
+
+namespace transport_manager {
+namespace transport_adapter {
+
+class TransportAdapterController;
+
+/**
+ * @brief Class responsible for communication over sockets that originated by
+ * server.
+ */
+class TcpServerOriginatedSocketConnection : public ThreadedSocketConnection {
+ public:
+ /**
+ * @brief Constructor.
+ *
+ * @param device_uid Device unique identifier.
+ * @param app_handle Handle of application.
+ * @param controller Pointer to the device adapter controller.
+ */
+ TcpServerOriginatedSocketConnection(const DeviceUID& device_uid,
+ const ApplicationHandle& app_handle,
+ TransportAdapterController* controller);
+
+ /**
+ * @brief Destructor.
+ */
+ virtual ~TcpServerOriginatedSocketConnection();
+
+ protected:
+ /**
+ * @brief Check if we can start the connection attempt and establish
+ *connection status.
+ *
+ * @param error contains information of any error that occurred during
+ *connection attempt.
+ *
+ * @return result that states whether we successfully connected or not.
+ */
+ virtual bool Establish(ConnectError** error);
+};
+
+} // namespace transport_adapter
+} // namespace transport_manager
+
+#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_SERVER_ORIGINATED_SOCKET_CONNECTION_H_
diff --git a/src/components/transport_manager/include/transport_manager/tcp/tcp_socket_connection.h b/src/components/transport_manager/include/transport_manager/tcp/tcp_socket_connection.h
index 4d7901f4f0..a3e081e238 100644
--- a/src/components/transport_manager/include/transport_manager/tcp/tcp_socket_connection.h
+++ b/src/components/transport_manager/include/transport_manager/tcp/tcp_socket_connection.h
@@ -2,7 +2,7 @@
* \file tcp_socket_connection.h
* \brief TcpSocketConnection class header file.
*
- * Copyright (c) 2013, Ford Motor Company
+ * Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -36,11 +36,6 @@
#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_SOCKET_CONNECTION_H_
#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_SOCKET_CONNECTION_H_
-#include <arpa/inet.h>
-#include <netinet/in.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-
#include "transport_manager/transport_adapter/threaded_socket_connection.h"
namespace transport_manager {
@@ -71,36 +66,13 @@ class TcpSocketConnection : public ThreadedSocketConnection {
protected:
/**
- * @brief
- */
- virtual bool Establish(ConnectError** error);
-};
-
-/**
- * @brief Class responsible for communication over sockets that originated by
- * server.
- */
-class TcpServerOiginatedSocketConnection : public ThreadedSocketConnection {
- public:
- /**
- * @brief Constructor.
+ * @brief Check if we can start the connection attempt and establish
+ *connection status.
*
- * @param device_uid Device unique identifier.
- * @param app_handle Handle of application.
- * @param controller Pointer to the device adapter controller.
- */
- TcpServerOiginatedSocketConnection(const DeviceUID& device_uid,
- const ApplicationHandle& app_handle,
- TransportAdapterController* controller);
-
- /**
- * @brief Destructor.
- */
- virtual ~TcpServerOiginatedSocketConnection();
-
- protected:
- /**
- * @brief
+ * @param error contains information of any error that occurred during
+ *connection attempt.
+ *
+ * @return result that states whether we successfully connected or not.
*/
virtual bool Establish(ConnectError** error);
};
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h b/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h
index ab0c5cbf85..3792b94d7c 100644
--- a/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h
+++ b/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h
@@ -1,7 +1,7 @@
/*
* \file threaded_socket_connection.h
* \brief Header for classes responsible for communication over sockets.
- * Copyright (c) 2013, Ford Motor Company
+ * Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -40,6 +40,7 @@
#include "transport_manager/transport_adapter/connection.h"
#include "protocol/common.h"
+#include "utils/atomic_object.h"
#include "utils/threads/thread_delegate.h"
#include "utils/lock.h"
@@ -88,6 +89,15 @@ class ThreadedSocketConnection : public Connection {
bool IsFramesToSendQueueEmpty() const;
/**
+ * @brief Check if connection has been terminated.
+ *
+ * @return Information which states that connection was marked as terminated.
+ */
+ bool IsConnectionTerminated() const {
+ return terminate_flag_;
+ }
+
+ /**
* @brief Set variable that hold socket No.
*/
void set_socket(int socket) {
@@ -111,6 +121,15 @@ class ThreadedSocketConnection : public Connection {
*/
virtual ~ThreadedSocketConnection();
+ /**
+ * @brief Check if we can start the connection attempt and establish
+ *connection status.
+ *
+ * @param error contains information of any error that occurred during
+ *connection attempt.
+ *
+ * @return result that states whether we successfully connected or not.
+ */
virtual bool Establish(ConnectError** error) = 0;
/**
@@ -134,6 +153,25 @@ class ThreadedSocketConnection : public Connection {
return app_handle_;
}
+ /**
+ * @brief Get variable that hold socket No.
+ */
+ int get_socket() const {
+ return socket_;
+ }
+
+ /**
+ * @brief Checks current socket value, sends shutdown and close commands for
+ * this socket and clear current socket value.
+ */
+ void ShutdownAndCloseSocket();
+
+ /**
+ * @brief This method will ensure that thread has finished running and then it
+ * will delete this thread.
+ */
+ void StopAndJoinThread();
+
private:
class SocketConnectionDelegate : public threads::ThreadDelegate {
public:
@@ -163,7 +201,7 @@ class ThreadedSocketConnection : public Connection {
FrameQueue frames_to_send_;
mutable sync_primitives::Lock frames_to_send_mutex_;
- int socket_;
+ sync_primitives::atomic_int socket_;
bool terminate_flag_;
bool unexpected_disconnect_;
const DeviceUID device_uid_;
diff --git a/src/components/transport_manager/src/bluetooth/bluetooth_connection_factory.cc b/src/components/transport_manager/src/bluetooth/bluetooth_connection_factory.cc
index bb27493701..0d8a77c88f 100644
--- a/src/components/transport_manager/src/bluetooth/bluetooth_connection_factory.cc
+++ b/src/components/transport_manager/src/bluetooth/bluetooth_connection_factory.cc
@@ -2,7 +2,7 @@
* \file bluetooth_connection_factory.cc
* \brief BluetoothConnectionFactory class source file.
*
- * Copyright (c) 2013, Ford Motor Company
+ * Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -33,11 +33,11 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include "transport_manager/bluetooth/bluetooth_connection_factory.h"
#include "transport_manager/transport_adapter/transport_adapter_controller.h"
+#include "transport_manager/bluetooth/bluetooth_connection_factory.h"
#include "transport_manager/bluetooth/bluetooth_socket_connection.h"
-
#include "utils/logger.h"
+#include "utils/make_shared.h"
namespace transport_manager {
namespace transport_adapter {
@@ -54,17 +54,16 @@ TransportAdapter::Error BluetoothConnectionFactory::Init() {
TransportAdapter::Error BluetoothConnectionFactory::CreateConnection(
const DeviceUID& device_uid, const ApplicationHandle& app_handle) {
- LOG4CXX_TRACE(logger_,
- "enter. device_uid: " << &device_uid
- << ", app_handle: " << &app_handle);
- BluetoothSocketConnection* connection(
- new BluetoothSocketConnection(device_uid, app_handle, controller_));
+ LOG4CXX_AUTO_TRACE(logger_);
+ utils::SharedPtr<BluetoothSocketConnection> connection =
+ utils::MakeShared<BluetoothSocketConnection>(
+ device_uid, app_handle, controller_);
+ controller_->ConnectionCreated(connection, device_uid, app_handle);
TransportAdapter::Error error = connection->Start();
if (TransportAdapter::OK != error) {
- LOG4CXX_ERROR(logger_, "connection::Start() failed");
- delete connection;
+ LOG4CXX_ERROR(logger_,
+ "Bluetooth connection::Start() failed with error: " << error);
}
- LOG4CXX_TRACE(logger_, "exit with error: " << error);
return error;
}
diff --git a/src/components/transport_manager/src/bluetooth/bluetooth_socket_connection.cc b/src/components/transport_manager/src/bluetooth/bluetooth_socket_connection.cc
index 5f1eed4c5e..16960aa1d4 100644
--- a/src/components/transport_manager/src/bluetooth/bluetooth_socket_connection.cc
+++ b/src/components/transport_manager/src/bluetooth/bluetooth_socket_connection.cc
@@ -1,6 +1,6 @@
/*
*
- * Copyright (c) 2013, Ford Motor Company
+ * Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -56,7 +56,9 @@ BluetoothSocketConnection::BluetoothSocketConnection(
TransportAdapterController* controller)
: ThreadedSocketConnection(device_uid, app_handle, controller) {}
-BluetoothSocketConnection::~BluetoothSocketConnection() {}
+BluetoothSocketConnection::~BluetoothSocketConnection() {
+ StopAndJoinThread();
+}
bool BluetoothSocketConnection::Establish(ConnectError** error) {
LOG4CXX_AUTO_TRACE(logger_);
diff --git a/src/components/transport_manager/src/bluetooth/bluetooth_transport_adapter.cc b/src/components/transport_manager/src/bluetooth/bluetooth_transport_adapter.cc
index a82c40ca15..0f83f32c60 100644
--- a/src/components/transport_manager/src/bluetooth/bluetooth_transport_adapter.cc
+++ b/src/components/transport_manager/src/bluetooth/bluetooth_transport_adapter.cc
@@ -2,7 +2,7 @@
* \file bluetooth_transport_adapter.cc
* \brief BluetoothTransportAdapter class source file.
*
- * Copyright (c) 2013, Ford Motor Company
+ * Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -111,7 +111,8 @@ void BluetoothTransportAdapter::Store() const {
}
}
bluetooth_adapter_dictionary["devices"] = devices_dictionary;
- last_state().dictionary["TransportManager"]["BluetoothAdapter"] =
+ Json::Value& dictionary = last_state().get_dictionary();
+ dictionary["TransportManager"]["BluetoothAdapter"] =
bluetooth_adapter_dictionary;
LOG4CXX_TRACE(logger_, "exit");
}
@@ -120,7 +121,7 @@ bool BluetoothTransportAdapter::Restore() {
LOG4CXX_TRACE(logger_, "enter");
bool errors_occured = false;
const Json::Value bluetooth_adapter_dictionary =
- last_state().dictionary["TransportManager"]["BluetoothAdapter"];
+ last_state().get_dictionary()["TransportManager"]["BluetoothAdapter"];
const Json::Value devices_dictionary =
bluetooth_adapter_dictionary["devices"];
for (Json::Value::const_iterator i = devices_dictionary.begin();
diff --git a/src/components/transport_manager/src/tcp/tcp_client_listener.cc b/src/components/transport_manager/src/tcp/tcp_client_listener.cc
index a075b1afb7..48f5dbd613 100644
--- a/src/components/transport_manager/src/tcp/tcp_client_listener.cc
+++ b/src/components/transport_manager/src/tcp/tcp_client_listener.cc
@@ -1,6 +1,6 @@
/*
*
- * Copyright (c) 2013, Ford Motor Company
+ * Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -53,6 +53,7 @@
#include <sstream>
#include "utils/logger.h"
+#include "utils/make_shared.h"
#include "utils/threads/thread.h"
#include "transport_manager/transport_adapter/transport_adapter_controller.h"
#include "transport_manager/tcp/tcp_device.h"
@@ -222,12 +223,16 @@ void TcpClientListener::Loop() {
const ApplicationHandle app_handle =
tcp_device->AddIncomingApplication(connection_fd);
- TcpSocketConnection* connection(new TcpSocketConnection(
- device->unique_device_id(), app_handle, controller_));
+ utils::SharedPtr<TcpSocketConnection> connection =
+ utils::MakeShared<TcpSocketConnection>(
+ device->unique_device_id(), app_handle, controller_);
+ controller_->ConnectionCreated(
+ connection, device->unique_device_id(), app_handle);
connection->set_socket(connection_fd);
const TransportAdapter::Error error = connection->Start();
- if (error != TransportAdapter::OK) {
- delete connection;
+ if (TransportAdapter::OK != error) {
+ LOG4CXX_ERROR(logger_,
+ "TCP connection::Start() failed with error: " << error);
}
}
}
diff --git a/src/components/transport_manager/src/tcp/tcp_connection_factory.cc b/src/components/transport_manager/src/tcp/tcp_connection_factory.cc
index 5b1e9af6cb..114425076a 100644
--- a/src/components/transport_manager/src/tcp/tcp_connection_factory.cc
+++ b/src/components/transport_manager/src/tcp/tcp_connection_factory.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,10 +30,12 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#include "transport_manager/transport_adapter/transport_adapter_controller.h"
#include "transport_manager/tcp/tcp_connection_factory.h"
-#include "transport_manager/tcp/tcp_socket_connection.h"
+#include "transport_manager/tcp/tcp_server_originated_socket_connection.h"
#include "utils/logger.h"
+#include "utils/make_shared.h"
namespace transport_manager {
namespace transport_adapter {
@@ -54,16 +56,17 @@ TransportAdapter::Error TcpConnectionFactory::CreateConnection(
LOG4CXX_DEBUG(logger_,
"DeviceUID: " << &device_uid
<< ", ApplicationHandle: " << &app_handle);
- TcpServerOiginatedSocketConnection* connection(
- new TcpServerOiginatedSocketConnection(
- device_uid, app_handle, controller_));
- if (connection->Start() == TransportAdapter::OK) {
- LOG4CXX_DEBUG(logger_, "TCP connection initialised");
- return TransportAdapter::OK;
- } else {
- LOG4CXX_ERROR(logger_, "Could not initialise TCP connection");
- return TransportAdapter::FAIL;
+ utils::SharedPtr<TcpServerOriginatedSocketConnection> connection =
+ utils::MakeShared<TcpServerOriginatedSocketConnection>(
+ device_uid, app_handle, controller_);
+ controller_->ConnectionCreated(connection, device_uid, app_handle);
+ const TransportAdapter::Error error = connection->Start();
+ if (TransportAdapter::OK != error) {
+ LOG4CXX_ERROR(logger_,
+ "TCP ServerOriginated connection::Start() failed with error: "
+ << error);
}
+ return error;
}
void TcpConnectionFactory::Terminate() {}
diff --git a/src/components/transport_manager/src/tcp/tcp_server_originated_socket_connection.cc b/src/components/transport_manager/src/tcp/tcp_server_originated_socket_connection.cc
new file mode 100644
index 0000000000..516f2d3ec4
--- /dev/null
+++ b/src/components/transport_manager/src/tcp/tcp_server_originated_socket_connection.cc
@@ -0,0 +1,111 @@
+/*
+ *
+ * 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.
+ */
+
+#include "transport_manager/tcp/tcp_server_originated_socket_connection.h"
+#include "transport_manager/tcp/tcp_device.h"
+#include "transport_manager/transport_adapter/transport_adapter_controller.h"
+#include "utils/logger.h"
+
+namespace transport_manager {
+namespace transport_adapter {
+
+CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
+
+TcpServerOriginatedSocketConnection::TcpServerOriginatedSocketConnection(
+ const DeviceUID& device_uid,
+ const ApplicationHandle& app_handle,
+ TransportAdapterController* controller)
+ : ThreadedSocketConnection(device_uid, app_handle, controller) {}
+
+TcpServerOriginatedSocketConnection::~TcpServerOriginatedSocketConnection() {
+ StopAndJoinThread();
+}
+
+bool TcpServerOriginatedSocketConnection::Establish(ConnectError** error) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ DCHECK(error);
+ LOG4CXX_DEBUG(logger_, "error " << error);
+ DeviceSptr device = controller()->FindDevice(device_handle());
+ if (!device.valid()) {
+ LOG4CXX_ERROR(logger_, "Device " << device_handle() << " not found");
+ *error = new ConnectError();
+ return false;
+ }
+ TcpDevice* tcp_device = static_cast<TcpDevice*>(device.get());
+
+ const int port = tcp_device->GetApplicationPort(application_handle());
+ if (-1 == port) {
+ LOG4CXX_ERROR(logger_,
+ "Application port for " << application_handle()
+ << " not found");
+ *error = new ConnectError();
+ return false;
+ }
+
+ if (IsConnectionTerminated()) {
+ LOG4CXX_ERROR(
+ logger_,
+ "Connection is already terminated. Socket will not be created");
+ *error = new ConnectError();
+ return false;
+ }
+
+ const int socket = ::socket(AF_INET, SOCK_STREAM, 0);
+ if (socket < 0) {
+ LOG4CXX_ERROR(logger_, "Failed to create socket");
+ *error = new ConnectError();
+ return false;
+ }
+
+ struct sockaddr_in addr = {0};
+ addr.sin_family = AF_INET;
+ addr.sin_addr.s_addr = tcp_device->in_addr();
+ addr.sin_port = htons(port);
+
+ LOG4CXX_DEBUG(logger_,
+ "Connecting " << inet_ntoa(addr.sin_addr) << ":" << port);
+ set_socket(socket);
+ if (::connect(get_socket(), (struct sockaddr*)&addr, sizeof(addr)) < 0) {
+ LOG4CXX_ERROR(logger_,
+ "Failed to connect for application " << application_handle()
+ << ", error " << errno);
+ *error = new ConnectError();
+ ShutdownAndCloseSocket();
+ return false;
+ }
+
+ return true;
+}
+
+} // namespace transport_adapter
+} // namespace transport_manager
diff --git a/src/components/transport_manager/src/tcp/tcp_socket_connection.cc b/src/components/transport_manager/src/tcp/tcp_socket_connection.cc
index acab9f555f..a2ef38f3cb 100644
--- a/src/components/transport_manager/src/tcp/tcp_socket_connection.cc
+++ b/src/components/transport_manager/src/tcp/tcp_socket_connection.cc
@@ -1,6 +1,6 @@
/*
*
- * Copyright (c) 2013, Ford Motor Company
+ * Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,16 +32,9 @@
*/
#include "transport_manager/tcp/tcp_socket_connection.h"
-
-#include <memory.h>
-#include <signal.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include "utils/logger.h"
-#include "utils/threads/thread.h"
#include "transport_manager/tcp/tcp_device.h"
#include "transport_manager/transport_adapter/transport_adapter_controller.h"
+#include "utils/logger.h"
namespace transport_manager {
namespace transport_adapter {
@@ -53,65 +46,11 @@ TcpSocketConnection::TcpSocketConnection(const DeviceUID& device_uid,
TransportAdapterController* controller)
: ThreadedSocketConnection(device_uid, app_handle, controller) {}
-TcpSocketConnection::~TcpSocketConnection() {}
-
-bool TcpSocketConnection::Establish(ConnectError** error) {
- return true;
+TcpSocketConnection::~TcpSocketConnection() {
+ StopAndJoinThread();
}
-TcpServerOiginatedSocketConnection::TcpServerOiginatedSocketConnection(
- const DeviceUID& device_uid,
- const ApplicationHandle& app_handle,
- TransportAdapterController* controller)
- : ThreadedSocketConnection(device_uid, app_handle, controller) {}
-
-TcpServerOiginatedSocketConnection::~TcpServerOiginatedSocketConnection() {}
-
-bool TcpServerOiginatedSocketConnection::Establish(ConnectError** error) {
- LOG4CXX_AUTO_TRACE(logger_);
- DCHECK(error);
- LOG4CXX_DEBUG(logger_, "error " << error);
- DeviceSptr device = controller()->FindDevice(device_handle());
- if (!device.valid()) {
- LOG4CXX_ERROR(logger_, "Device " << device_handle() << " not found");
- *error = new ConnectError();
- return false;
- }
- TcpDevice* tcp_device = static_cast<TcpDevice*>(device.get());
-
- const int port = tcp_device->GetApplicationPort(application_handle());
- if (-1 == port) {
- LOG4CXX_ERROR(logger_,
- "Application port for " << application_handle()
- << " not found");
- *error = new ConnectError();
- return false;
- }
-
- const int socket = ::socket(AF_INET, SOCK_STREAM, 0);
- if (socket < 0) {
- LOG4CXX_ERROR(logger_, "Failed to create socket");
- *error = new ConnectError();
- return false;
- }
-
- struct sockaddr_in addr = {0};
- addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = tcp_device->in_addr();
- addr.sin_port = htons(port);
-
- LOG4CXX_DEBUG(logger_,
- "Connecting " << inet_ntoa(addr.sin_addr) << ":" << port);
- if (::connect(socket, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
- LOG4CXX_ERROR(logger_,
- "Failed to connect for application " << application_handle()
- << ", error " << errno);
- *error = new ConnectError();
- ::close(socket);
- return false;
- }
-
- set_socket(socket);
+bool TcpSocketConnection::Establish(ConnectError** error) {
return true;
}
diff --git a/src/components/transport_manager/src/tcp/tcp_transport_adapter.cc b/src/components/transport_manager/src/tcp/tcp_transport_adapter.cc
index a389deb517..0e9e63263b 100644
--- a/src/components/transport_manager/src/tcp/tcp_transport_adapter.cc
+++ b/src/components/transport_manager/src/tcp/tcp_transport_adapter.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Ford Motor Company
+ * Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -110,7 +110,7 @@ void TcpTransportAdapter::Store() const {
}
}
tcp_adapter_dictionary["devices"] = devices_dictionary;
- Json::Value& dictionary = last_state().dictionary;
+ Json::Value& dictionary = last_state().get_dictionary();
dictionary["TransportManager"]["TcpAdapter"] = tcp_adapter_dictionary;
}
@@ -118,7 +118,7 @@ bool TcpTransportAdapter::Restore() {
LOG4CXX_AUTO_TRACE(logger_);
bool errors_occurred = false;
const Json::Value tcp_adapter_dictionary =
- last_state().dictionary["TransportManager"]["TcpAdapter"];
+ last_state().get_dictionary()["TransportManager"]["TcpAdapter"];
const Json::Value devices_dictionary = tcp_adapter_dictionary["devices"];
for (Json::Value::const_iterator i = devices_dictionary.begin();
i != devices_dictionary.end();
diff --git a/src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc b/src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc
index 5e9f3d941d..081caec50a 100644
--- a/src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc
+++ b/src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Ford Motor Company
+ * Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -70,10 +70,7 @@ ThreadedSocketConnection::ThreadedSocketConnection(
ThreadedSocketConnection::~ThreadedSocketConnection() {
LOG4CXX_AUTO_TRACE(logger_);
- Disconnect();
- thread_->join();
- delete thread_->delegate();
- threads::DeleteThread(thread_);
+ DCHECK(NULL == thread_);
if (-1 != read_fd_) {
close(read_fd_);
@@ -83,6 +80,14 @@ ThreadedSocketConnection::~ThreadedSocketConnection() {
}
}
+void ThreadedSocketConnection::StopAndJoinThread() {
+ Disconnect();
+ thread_->join();
+ delete thread_->delegate();
+ threads::DeleteThread(thread_);
+ thread_ = NULL;
+}
+
void ThreadedSocketConnection::Abort() {
LOG4CXX_AUTO_TRACE(logger_);
unexpected_disconnect_ = true;
@@ -126,7 +131,8 @@ void ThreadedSocketConnection::Finalize() {
LOG4CXX_DEBUG(logger_, "not unexpected_disconnect");
controller_->ConnectionFinished(device_handle(), application_handle());
}
- close(socket_);
+
+ ShutdownAndCloseSocket();
}
TransportAdapter::Error ThreadedSocketConnection::Notify() const {
@@ -157,12 +163,12 @@ TransportAdapter::Error ThreadedSocketConnection::SendData(
TransportAdapter::Error ThreadedSocketConnection::Disconnect() {
LOG4CXX_AUTO_TRACE(logger_);
terminate_flag_ = true;
+ ShutdownAndCloseSocket();
return Notify();
}
void ThreadedSocketConnection::threadMain() {
LOG4CXX_AUTO_TRACE(logger_);
- controller_->ConnectionCreated(this, device_handle(), application_handle());
ConnectError* connect_error = NULL;
if (!Establish(&connect_error)) {
LOG4CXX_ERROR(logger_, "Connection Establish failed");
@@ -191,6 +197,22 @@ bool ThreadedSocketConnection::IsFramesToSendQueueEmpty() const {
return frames_to_send_.empty();
}
+void ThreadedSocketConnection::ShutdownAndCloseSocket() {
+ LOG4CXX_AUTO_TRACE(logger_);
+ const int socket = socket_;
+ socket_ = -1;
+ if (socket != -1) {
+ if (shutdown(socket, SHUT_RDWR) != 0) {
+ LOG4CXX_WARN(logger_, "Socket was unable to be shutdowned");
+ }
+ if (close(socket) != 0) {
+ LOG4CXX_ERROR_WITH_ERRNO(logger_, "Failed to close socket");
+ }
+ } else {
+ LOG4CXX_WARN(logger_, "Socket has been already closed or not created yet");
+ }
+}
+
void ThreadedSocketConnection::Transmit() {
LOG4CXX_AUTO_TRACE(logger_);
diff --git a/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc b/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
index f0fddfb4f5..026e53670b 100644
--- a/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
+++ b/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Ford Motor Company
+ * Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -192,6 +192,10 @@ TransportAdapter::Error TransportAdapterImpl::Connect(
LOG4CXX_TRACE(logger_, "exit with BAD_STATE");
return BAD_STATE;
}
+ if (!initialised_) {
+ LOG4CXX_TRACE(logger_, "exit with BAD_STATE");
+ return BAD_STATE;
+ }
connections_lock_.AcquireForWriting();
const bool already_exists =
diff --git a/src/components/transport_manager/src/transport_manager_impl.cc b/src/components/transport_manager/src/transport_manager_impl.cc
index 58000f5ea4..433885a606 100644
--- a/src/components/transport_manager/src/transport_manager_impl.cc
+++ b/src/components/transport_manager/src/transport_manager_impl.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Ford Motor Company
+ * Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -413,14 +413,17 @@ int TransportManagerImpl::AddTransportAdapter(
"transport_adapter_listeners_.end()");
return E_ADAPTER_EXISTS;
}
- transport_adapter_listeners_[transport_adapter] =
- new TransportAdapterListenerImpl(this, transport_adapter);
- transport_adapter->AddListener(
- transport_adapter_listeners_[transport_adapter]);
if (transport_adapter->IsInitialised() ||
transport_adapter->Init() == TransportAdapter::OK) {
+ transport_adapter_listeners_[transport_adapter] =
+ new TransportAdapterListenerImpl(this, transport_adapter);
+ transport_adapter->AddListener(
+ transport_adapter_listeners_[transport_adapter]);
+
transport_adapters_.push_back(transport_adapter);
+ } else {
+ delete transport_adapter;
}
LOG4CXX_TRACE(logger_, "exit with E_SUCCESS");
return E_SUCCESS;
@@ -618,22 +621,29 @@ void TransportManagerImpl::AddConnection(const ConnectionInternal& c) {
connections_.push_back(c);
}
+namespace {
+struct ConnectionFinder {
+ const uint32_t id_;
+ ConnectionFinder(const uint32_t id) : id_(id) {}
+ bool operator()(const transport_manager::TransportManagerImpl::Connection&
+ connection) const {
+ return id_ == connection.id;
+ }
+};
+}
+
void TransportManagerImpl::RemoveConnection(
const uint32_t id, transport_adapter::TransportAdapter* transport_adapter) {
LOG4CXX_AUTO_TRACE(logger_);
LOG4CXX_DEBUG(logger_, "Id: " << id);
sync_primitives::AutoWriteLock lock(connections_lock_);
- for (std::vector<ConnectionInternal>::iterator it = connections_.begin();
- it != connections_.end();
- ++it) {
- if (it->id == id) {
- connections_.erase(it);
- if (transport_adapter) {
- transport_adapter->RemoveFinalizedConnection(it->device,
- it->application);
- }
- break;
+ const std::vector<ConnectionInternal>::iterator it = std::find_if(
+ connections_.begin(), connections_.end(), ConnectionFinder(id));
+ if (connections_.end() != it) {
+ if (transport_adapter) {
+ transport_adapter->RemoveFinalizedConnection(it->device, it->application);
}
+ connections_.erase(it);
}
}
diff --git a/src/components/transport_manager/src/usb/usb_connection_factory.cc b/src/components/transport_manager/src/usb/usb_connection_factory.cc
index 28992d8f40..1136dfad21 100644
--- a/src/components/transport_manager/src/usb/usb_connection_factory.cc
+++ b/src/components/transport_manager/src/usb/usb_connection_factory.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Ford Motor Company
+ * Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -34,6 +34,7 @@
#include "transport_manager/usb/usb_device.h"
#include "transport_manager/transport_adapter/transport_adapter_impl.h"
#include "utils/logger.h"
+#include "utils/make_shared.h"
#if defined(__QNXNTO__)
#include "transport_manager/usb/qnx/usb_connection.h"
@@ -73,15 +74,14 @@ TransportAdapter::Error UsbConnectionFactory::CreateConnection(
}
UsbDevice* usb_device = static_cast<UsbDevice*>(device.get());
- UsbConnection* usb_connection = new UsbConnection(device_uid,
- app_handle,
- controller_,
- usb_handler_,
- usb_device->usb_device());
-
- controller_->ConnectionCreated(usb_connection, device_uid, app_handle);
-
- if (usb_connection->Init()) {
+ utils::SharedPtr<UsbConnection> connection =
+ utils::MakeShared<UsbConnection>(device_uid,
+ app_handle,
+ controller_,
+ usb_handler_,
+ usb_device->usb_device());
+ controller_->ConnectionCreated(connection, device_uid, app_handle);
+ if (connection->Init()) {
LOG4CXX_INFO(logger_, "USB connection initialised");
LOG4CXX_TRACE(logger_,
"exit with TransportAdapter::OK. Condition: USB connection "
diff --git a/src/components/transport_manager/test/CMakeLists.txt b/src/components/transport_manager/test/CMakeLists.txt
index da20f1d43c..184d546f15 100644
--- a/src/components/transport_manager/test/CMakeLists.txt
+++ b/src/components/transport_manager/test/CMakeLists.txt
@@ -1,4 +1,4 @@
-# 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
@@ -28,8 +28,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-if(BUILD_TESTS)
-set(TM_TEST_DIR ${COMPONENTS_DIR}/transport_manager/test)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories(
include
@@ -42,10 +41,16 @@ include_directories(
${JSONCPP_INCLUDE_DIRECTORY}
)
+set(EXCLUDE_PATHS
+ raw_message_matcher.cc
+)
+
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}" "${EXCLUDE_PATHS}")
+
set(LIBRARIES
gmock
ConfigProfile
- transport_manager
+ TransportManager
Utils
ConfigProfile
ProtocolLibrary
@@ -58,20 +63,11 @@ if (BUILD_USB_SUPPORT)
endif()
if (BUILD_BT_SUPPORT)
+ if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
list(APPEND LIBRARIES bluetooth)
+ endif()
endif()
-set(SOURCES
- ${TM_TEST_DIR}/transport_manager_impl_test.cc
- ${TM_TEST_DIR}/transport_adapter_test.cc
- ${TM_TEST_DIR}/transport_adapter_listener_test.cc
- ${TM_TEST_DIR}/tcp_transport_adapter_test.cc
- ${TM_TEST_DIR}/tcp_device_test.cc
- ${TM_TEST_DIR}/tcp_client_listener_test.cc
- ${TM_TEST_DIR}/transport_manager_default_test.cc
-)
-
create_test("transport_manager_test" "${SOURCES}" "${LIBRARIES}")
+
file(COPY smartDeviceLink_test.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
-file(COPY app_info_storage2 DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
-endif()
diff --git a/src/components/transport_manager/test/app_info_storage2 b/src/components/transport_manager/test/app_info_storage2
deleted file mode 100644
index 794c8b90bc..0000000000
--- a/src/components/transport_manager/test/app_info_storage2
+++ /dev/null
@@ -1,99 +0,0 @@
-{
- "TransportManager" : {
- "BluetoothAdapter" : null,
- "TcpAdapter" : {
- "devices" : [
- {
- "address" : "57.48.0.1",
- "applications" : [
- {
- "port" : "12345"
- }
- ],
- "name" : "unique_device_name0"
- },
- {
- "address" : "57.48.0.2",
- "applications" : [
- {
- "port" : "12345"
- }
- ],
- "name" : "unique_device_name1"
- },
- {
- "address" : "57.48.0.3",
- "applications" : [
- {
- "port" : "12345"
- }
- ],
- "name" : "unique_device_name2"
- },
- {
- "address" : "57.48.0.4",
- "applications" : [
- {
- "port" : "12345"
- }
- ],
- "name" : "unique_device_name3"
- },
- {
- "address" : "57.48.0.5",
- "applications" : [
- {
- "port" : "12345"
- }
- ],
- "name" : "unique_device_name4"
- },
- {
- "address" : "57.48.0.6",
- "applications" : [
- {
- "port" : "12345"
- }
- ],
- "name" : "unique_device_name5"
- },
- {
- "address" : "57.48.0.7",
- "applications" : [
- {
- "port" : "12345"
- }
- ],
- "name" : "unique_device_name6"
- },
- {
- "address" : "57.48.0.8",
- "applications" : [
- {
- "port" : "12345"
- }
- ],
- "name" : "unique_device_name7"
- },
- {
- "address" : "57.48.0.9",
- "applications" : [
- {
- "port" : "12345"
- }
- ],
- "name" : "unique_device_name8"
- },
- {
- "address" : "57.48.0.10",
- "applications" : [
- {
- "port" : "12345"
- }
- ],
- "name" : "unique_device_name9"
- }
- ]
- }
- }
-}
diff --git a/src/components/transport_manager/test/raw_message_matcher.cc b/src/components/transport_manager/test/raw_message_matcher.cc
index 130ddc96c8..00489d7c03 100644
--- a/src/components/transport_manager/test/raw_message_matcher.cc
+++ b/src/components/transport_manager/test/raw_message_matcher.cc
@@ -30,8 +30,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include "include/raw_message_matcher.h"
-//#include "../../include/protocol/raw_message.h"
+#include "include/transport_manager/raw_message_matcher.h"
namespace test {
namespace components {
diff --git a/src/components/transport_manager/test/tcp_transport_adapter_test.cc b/src/components/transport_manager/test/tcp_transport_adapter_test.cc
index 60732f0328..b8ff762f41 100644
--- a/src/components/transport_manager/test/tcp_transport_adapter_test.cc
+++ b/src/components/transport_manager/test/tcp_transport_adapter_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
@@ -33,7 +33,7 @@
#include "gtest/gtest.h"
#include "transport_manager/tcp/tcp_transport_adapter.h"
#include "transport_manager/transport_adapter/connection.h"
-#include "resumption/last_state.h"
+#include "resumption/last_state_impl.h"
#include "protocol/raw_message.h"
#include "transport_manager/transport_adapter_listener_mock.h"
#include "transport_manager/device_mock.h"
@@ -58,7 +58,7 @@ class TcpAdapterTest : public ::testing::Test {
protected:
TcpAdapterTest() : last_state_("app_storage_folder", "app_info_storage") {}
MockTransportManagerSettings transport_manager_settings;
- resumption::LastState last_state_;
+ resumption::LastStateImpl last_state_;
const uint32_t port = 12345;
const std::string string_port = "12345";
};
@@ -90,7 +90,7 @@ TEST_F(TcpAdapterTest, StoreDataWithOneDeviceAndOneApplication) {
// Check that value is saved
Json::Value& tcp_dict =
- last_state_.dictionary["TransportManager"]["TcpAdapter"];
+ last_state_.get_dictionary()["TransportManager"]["TcpAdapter"];
ASSERT_TRUE(tcp_dict.isObject());
ASSERT_FALSE(tcp_dict["devices"].isNull());
@@ -142,7 +142,8 @@ TEST_F(TcpAdapterTest, StoreDataWithSeveralDevicesAndOneApplication) {
// Check that values are saved
Json::Value& tcp_dict =
- last_state_.dictionary["TransportManager"]["TcpAdapter"];
+ last_state_.get_dictionary()["TransportManager"]["TcpAdapter"];
+
ASSERT_TRUE(tcp_dict.isObject());
ASSERT_FALSE(tcp_dict["devices"].isNull());
for (uint32_t i = 0; i < count_dev; i++) {
@@ -199,7 +200,7 @@ TEST_F(TcpAdapterTest, StoreDataWithSeveralDevicesAndSeveralApplications) {
// Check that value is saved
Json::Value& tcp_dict =
- last_state_.dictionary["TransportManager"]["TcpAdapter"];
+ last_state_.get_dictionary()["TransportManager"]["TcpAdapter"];
ASSERT_TRUE(tcp_dict.isObject());
ASSERT_FALSE(tcp_dict["devices"].isNull());
@@ -236,13 +237,15 @@ TEST_F(TcpAdapterTest, StoreData_ConnectionNotExist_DataNotStored) {
// Check that value is not saved
Json::Value& tcp_dict =
- last_state_.dictionary["TransportManager"]["TcpAdapter"]["devices"];
+ last_state_.get_dictionary()["TransportManager"]["TcpAdapter"]["devices"];
+
ASSERT_TRUE(tcp_dict.isNull());
}
TEST_F(TcpAdapterTest, RestoreData_DataNotStored) {
Json::Value& tcp_adapter_dictionary =
- last_state_.dictionary["TransportManager"]["TcpAdapter"];
+ last_state_.get_dictionary()["TransportManager"]["TcpAdapter"];
+
tcp_adapter_dictionary = Json::Value();
MockTCPTransportAdapter transport_adapter(
port, last_state_, transport_manager_settings);
diff --git a/src/components/transport_manager/test/transport_adapter_test.cc b/src/components/transport_manager/test/transport_adapter_test.cc
index f3d7343b24..6e845753ec 100644
--- a/src/components/transport_manager/test/transport_adapter_test.cc
+++ b/src/components/transport_manager/test/transport_adapter_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
@@ -46,7 +46,7 @@
#include "transport_manager/transport_adapter/connection.h"
#include "protocol/raw_message.h"
#include "utils/make_shared.h"
-#include "resumption/last_state.h"
+#include "resumption/last_state_impl.h"
#include "config_profile/profile.h"
namespace test {
@@ -74,7 +74,7 @@ class TransportAdapterTest : public ::testing::Test {
}
NiceMock<MockTransportManagerSettings> transport_manager_settings;
- resumption::LastState last_state_;
+ resumption::LastStateImpl last_state_;
std::string dev_id;
std::string uniq_id;
int app_handle;
diff --git a/src/components/transport_manager/test/transport_manager_default_test.cc b/src/components/transport_manager/test/transport_manager_default_test.cc
index 6d0854d2ec..e3bd0e7240 100644
--- a/src/components/transport_manager/test/transport_manager_default_test.cc
+++ b/src/components/transport_manager/test/transport_manager_default_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
@@ -29,45 +29,83 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
+
#include "gtest/gtest.h"
#include "transport_manager/transport_manager.h"
#include "transport_manager/transport_manager_default.h"
-#include "resumption/last_state.h"
#include "transport_manager/mock_transport_manager_settings.h"
-#include "resumption/last_state.h"
+#include "resumption/mock_last_state.h"
namespace test {
namespace components {
namespace transport_manager_test {
+using ::resumption::MockLastState;
using ::testing::Return;
+using ::testing::ReturnRef;
+using ::testing::NiceMock;
+
+namespace {
+const std::string kDeviceName = "name";
+const std::string kDeviceAddress = "address";
+const std::string kDeviceApplications = "applications";
+const std::string kApplicationPort = "port";
+const std::string kApplicationPortValue = "12345";
+const std::string kTransportManager = "TransportManager";
+const std::string kTcpAdapter = "TcpAdapter";
+const std::string kBluetoothAdapter = "BluetoothAdapter";
+const std::string kDevices = "devices";
+} // namespace
TEST(TestTransportManagerDefault, Init_LastStateNotUsed) {
MockTransportManagerSettings transport_manager_settings;
transport_manager::TransportManagerDefault transport_manager(
transport_manager_settings);
- resumption::LastState last_state("app_storage_folder", "app_info_storage2");
+
+ NiceMock<resumption::MockLastState> mock_last_state;
+ Json::Value custom_dictionary = Json::Value();
+
+ ON_CALL(mock_last_state, get_dictionary())
+ .WillByDefault(ReturnRef(custom_dictionary));
EXPECT_CALL(transport_manager_settings, use_last_state())
.WillRepeatedly(Return(false));
EXPECT_CALL(transport_manager_settings, transport_manager_tcp_adapter_port())
.WillRepeatedly(Return(1u));
- transport_manager.Init(last_state);
+
+ transport_manager.Init(mock_last_state);
+ transport_manager.Stop();
}
-TEST(TestTransportManagerDefault, DISABLED_Init_LastStateUsed) {
- // TODO (dcherniev) : investigate and fix SegFault issue
+TEST(TestTransportManagerDefault, Init_LastStateUsed) {
MockTransportManagerSettings transport_manager_settings;
transport_manager::TransportManagerDefault transport_manager(
transport_manager_settings);
- resumption::LastState last_state("app_storage_folder", "app_info_storage2");
+
+ NiceMock<resumption::MockLastState> mock_last_state;
+ Json::Value custom_dictionary;
+ Json::Value tcp_device;
+ tcp_device[kDeviceName] = "unique_tcp_device_name";
+ tcp_device[kDeviceAddress] = "57.48.0.1";
+ tcp_device[kDeviceApplications][0][kApplicationPort] = kApplicationPortValue;
+ Json::Value bluetooth_device;
+ bluetooth_device[kDeviceName] = "unique_bluetooth_device_name";
+ bluetooth_device[kDeviceAddress] = "57.48.0.2";
+ bluetooth_device[kDeviceApplications][0][kApplicationPort] =
+ kApplicationPortValue;
+ custom_dictionary[kTransportManager][kTcpAdapter][kDevices][0] = tcp_device;
+ custom_dictionary[kTransportManager][kBluetoothAdapter][kDevices][0] =
+ bluetooth_device;
+
+ ON_CALL(mock_last_state, get_dictionary())
+ .WillByDefault(ReturnRef(custom_dictionary));
EXPECT_CALL(transport_manager_settings, use_last_state())
.WillRepeatedly(Return(true));
EXPECT_CALL(transport_manager_settings, transport_manager_tcp_adapter_port())
.WillRepeatedly(Return(1u));
- transport_manager.Init(last_state);
+ transport_manager.Init(mock_last_state);
transport_manager.Stop();
}
diff --git a/src/components/transport_manager/test/transport_manager_impl_test.cc b/src/components/transport_manager/test/transport_manager_impl_test.cc
index eb02717d79..5b4e0a7704 100644
--- a/src/components/transport_manager/test/transport_manager_impl_test.cc
+++ b/src/components/transport_manager/test/transport_manager_impl_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
@@ -46,7 +46,7 @@
#include "utils/make_shared.h"
#include "utils/shared_ptr.h"
-#include "resumption/last_state.h"
+#include "resumption/last_state_impl.h"
#include "utils/make_shared.h"
using ::testing::_;
@@ -76,7 +76,8 @@ class TransportManagerImplTest : public ::testing::Test {
, dev_info_(device_handle_, mac_address_, "TestDeviceName", "BTMAC") {}
void SetUp() OVERRIDE {
- resumption::LastState last_state_("app_storage_folder", "app_info_storage");
+ resumption::LastStateImpl last_state_("app_storage_folder",
+ "app_info_storage");
tm_.Init(last_state_);
mock_adapter_ = new MockTransportAdapter();
tm_listener_ = MakeShared<TransportManagerListenerMock>();
diff --git a/src/components/utils/CMakeLists.txt b/src/components/utils/CMakeLists.txt
index f72d43e546..51835c125a 100644
--- a/src/components/utils/CMakeLists.txt
+++ b/src/components/utils/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2015, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,62 +28,77 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/platform.cmake)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
-set(UTILS_INCLUDE_DIR ${COMPONENTS_DIR}/utils/include)
-set(UTILS_SRC_DIR ${COMPONENTS_DIR}/utils/src)
+find_package(Sqlite3 REQUIRED)
include_directories (
- ${UTILS_INCLUDE_DIR}
+ ${COMPONENTS_DIR}/utils/include
${COMPONENTS_DIR}/config_profile/include
${COMPONENTS_DIR}/media_manager/include
${COMPONENTS_DIR}/protocol_handler/include
${LOG4CXX_INCLUDE_DIRECTORY}
)
-set (SOURCES
- ${UTILS_SRC_DIR}/bitstream.cc
- ${UTILS_SRC_DIR}/conditional_variable_posix.cc
- ${UTILS_SRC_DIR}/file_system.cc
- ${UTILS_SRC_DIR}/threads/posix_thread.cc
- ${UTILS_SRC_DIR}/threads/thread_delegate.cc
- ${UTILS_SRC_DIR}/threads/thread_validator.cc
- ${UTILS_SRC_DIR}/threads/async_runner.cc
- ${UTILS_SRC_DIR}/lock_posix.cc
- ${UTILS_SRC_DIR}/rwlock_posix.cc
- ${UTILS_SRC_DIR}/date_time.cc
- ${UTILS_SRC_DIR}/signals_linux.cc
- ${UTILS_SRC_DIR}/system.cc
- ${UTILS_SRC_DIR}/resource_usage.cc
- ${UTILS_SRC_DIR}/appenders_loader.cc
- ${UTILS_SRC_DIR}/gen_hash.cc
- ${UTILS_SRC_DIR}/convert_utils.cc
- ${UTILS_SRC_DIR}/custom_string.cc
- ${UTILS_SRC_DIR}/timer.cc
+# dbms
+set(DBMS_PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/utils/sqlite_wrapper
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/sqlite_wrapper
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/utils/qdb_wrapper
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/qdb_wrapper
)
+set(EXCLUDE_PATHS
+ thread_manager.cc
+ pulse_thread_delegate.cc
+ ${DBMS_PATHS}
+)
+
+set(LIBRARIES)
+
+if(NOT BUILD_BACKTRACE_SUPPORT)
+ list(APPEND EXCLUDE_PATHS
+ back_trace.cc
+ )
+endif()
+
if(ENABLE_LOG)
- list(APPEND SOURCES
- ${UTILS_SRC_DIR}/push_log.cc
- ${UTILS_SRC_DIR}/log_message_loop_thread.cc
- ${UTILS_SRC_DIR}/logger_status.cc
- ${UTILS_SRC_DIR}/auto_trace.cc
- ${UTILS_SRC_DIR}/logger.cc
+ list(APPEND LIBRARIES
+ log4cxx -L${LOG4CXX_LIBS_DIRECTORY}
+ apr-1 -L${APR_LIBS_DIRECTORY}
+ aprutil-1 -L${APR_UTIL_LIBS_DIRECTORY}
+ ConfigProfile
+ )
+else()
+ list(APPEND EXCLUDE_PATHS
+ push_log.cc
+ log_message_loop_thread.cc
+ logger_status.cc
+ auto_trace.cc
+ logger.cc
)
endif()
-if (BUILD_BACKTRACE_SUPPORT)
- list(APPEND SOURCES
- ${UTILS_SRC_DIR}/back_trace.cc
- )
+if(NOT BUILD_BT_SUPPORT)
+ list(APPEND EXCLUDE_PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/utils/bluetooth
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/bluetooth
+ )
endif()
-if (CMAKE_SYSTEM_NAME STREQUAL "QNX")
- list(APPEND SOURCES
- ${UTILS_SRC_DIR}/threads/pulse_thread_delegate.cc
+if (NOT CMAKE_SYSTEM_NAME STREQUAL "QNX")
+ list(APPEND EXCLUDE_PATHS
+ pulse_thread_delegate.cc
)
endif()
-add_library("Utils" ${SOURCES})
+set(PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+)
+
+collect_sources(SOURCES "${PATHS}" "${EXCLUDE_PATHS}")
if (CMAKE_SYSTEM_NAME STREQUAL "QNX")
# --- QDB Wrapper
@@ -94,26 +109,16 @@ else ()
endif ()
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
- list(APPEND LIBRARIES dl)
+ list(APPEND LIBRARIES dl pthread ${RTLIB})
endif()
+add_library("Utils" ${SOURCES})
+target_link_libraries("Utils" ${LIBRARIES})
if(ENABLE_LOG)
- list(APPEND LIBRARIES log4cxx -L${LOG4CXX_LIBS_DIRECTORY})
- list(APPEND LIBRARIES apr-1 -L${APR_LIBS_DIRECTORY})
- list(APPEND LIBRARIES aprutil-1 -L${APR_UTIL_LIBS_DIRECTORY})
- list(APPEND LIBRARIES ConfigProfile)
-
- ADD_DEPENDENCIES(Utils install-3rd_party_logger)
+ add_dependencies("Utils" install-3rd_party_logger)
endif()
-if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
- target_link_libraries("Utils" pthread ${RTLIB})
-endif()
-
-target_link_libraries("Utils" ${LIBRARIES})
-
-
if(BUILD_TESTS)
add_subdirectory(test)
endif()
diff --git a/src/components/utils/src/signals_linux.cc b/src/components/utils/src/signals_posix.cc
index 274c254716..274c254716 100644
--- a/src/components/utils/src/signals_linux.cc
+++ b/src/components/utils/src/signals_posix.cc
diff --git a/src/components/utils/src/threads/posix_thread.cc b/src/components/utils/src/threads/thread_posix.cc
index 51e59fa108..51e59fa108 100644
--- a/src/components/utils/src/threads/posix_thread.cc
+++ b/src/components/utils/src/threads/thread_posix.cc
diff --git a/src/components/utils/test/CMakeLists.txt b/src/components/utils/test/CMakeLists.txt
index e457e5901e..f6bd24ff09 100644
--- a/src/components/utils/test/CMakeLists.txt
+++ b/src/components/utils/test/CMakeLists.txt
@@ -28,7 +28,8 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-if(BUILD_TESTS)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/platform.cmake)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories (
${JSONCPP_INCLUDE_DIRECTORY}
@@ -39,74 +40,61 @@ include_directories (
${POLICY_PATH}/include
)
-set(testSources
- messagemeter_test.cc
- file_system_test.cc
- date_time_test.cc
- system_test.cc
- thread_validator_test.cc
- conditional_variable_test.cc
- message_queue_test.cc
- resource_usage_test.cc
- bitstream_test.cc
- prioritized_queue_test.cc
- data_accessor_test.cc
- lock_posix_test.cc
- singleton_test.cc
- #posix_thread_test.cc
- stl_utils_test.cc
- rwlock_posix_test.cc
- async_runner_test.cc
- shared_ptr_test.cc
- scope_guard_test.cc
- atomic_object_test.cc
- message_loop_thread_test.cc
- custom_string_test.cc
- timer_test.cc
+set(EXCLUDE_PATHS
+ qdb_wrapper
+ test_generator
)
-set(testLibraries
- gmock
- Utils
- Policy
- ConfigProfile
-)
+if(NOT ENABLE_LOG)
+ list(APPEND EXCLUDE_PATHS
+ auto_trace_test.cc
+ log_message_loop_thread_test.cc
+ )
+endif()
+
+if(NOT BUILD_BACKTRACE_SUPPORT)
+ list(APPEND EXCLUDE_PATHS
+ back_trace_test.cc
+ )
+endif()
if (CMAKE_SYSTEM_NAME STREQUAL "QNX")
- # --- Tests for QDB Wrapper
- list (APPEND testSources
- ./qdb_wrapper/sql_database_test.cc
- ./qdb_wrapper/sql_query_test.cc
+ # exclude tests for SQLite wrapper
+ list (APPEND EXCLUDE_PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/sqlite_wrapper
)
file(COPY qdbserver.sh DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
file(COPY test-qdb.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
file(COPY policy.sql DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
else ()
- # --- Tests for SQLite Wrapper
find_package(Sqlite3 REQUIRED)
- list (APPEND testSources
- ./sqlite_wrapper/sql_database_test.cc
- ./sqlite_wrapper/sql_query_test.cc
- generated_code_with_sqlite_test.cc
+ # exclude tests for QDB wrapper
+ list (APPEND EXCLUDE_PATHS
+ ${CMAKE_CURRENT_SOURCE_DIR}/qdb_wrapper
)
list (APPEND testLibraries sqlite3)
endif()
-if (ENABLE_LOG)
- list(APPEND testSources auto_trace_test.cc)
- list(APPEND testSources log_message_loop_thread_test.cc)
-endif()
+# exclude some tests
+list(APPEND EXCLUDE_PATHS
+ generated_code_with_sqlite_test.cc
+ posix_thread_test.cc
+ resource_usage_test.cc
+)
-if (BUILD_BACKTRACE_SUPPORT)
- list(APPEND testSources back_trace_test.cc)
-endif()
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}" "${EXCLUDE_PATHS}")
+
+set(LIBRARIES
+ gmock
+ Utils
+ Policy
+ ConfigProfile
+)
+
+create_test(utils_test "${SOURCES}" "${LIBRARIES}")
file(COPY testscript.sh DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
file(COPY log4cxx.properties DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
file(COPY smartDeviceLink.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
-create_test("utils_test" "${testSources}" "${testLibraries}")
-
add_subdirectory(test_generator)
-
-endif()
diff --git a/src/components/utils/test/test_generator/CMakeLists.txt b/src/components/utils/test/test_generator/CMakeLists.txt
index d649f927a5..5a7f939659 100644
--- a/src/components/utils/test/test_generator/CMakeLists.txt
+++ b/src/components/utils/test/test_generator/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2015, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,38 +28,35 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-if(BUILD_TESTS)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/generators.cmake)
include_directories (
- ${JSONCPP_INCLUDE_DIRECTORY}
- ${CMAKE_SOURCE_DIR}/src/3rd_party-static/gmock-1.7.0/include
- ${CMAKE_SOURCE_DIR}/src/3rd_party-static/gmock-1.7.0/gtest/include
${CMAKE_SOURCE_DIR}/tools/interfaceGenerator
${CMAKE_CURRENT_BINARY_DIR}
${COMPONENTS_DIR}/utils/include/utils
${COMPONENTS_DIR}/include/utils
+ ${JSONCPP_INCLUDE_DIRECTORY}
+ ${GMOCK_INCLUDE_DIRECTORY}
)
-set(full_xml_name "${CMAKE_SOURCE_DIR}/src/components/interfaces/MOBILE_API.xml")
-
-add_custom_target( generate_version
- COMMAND ${INTEFRACE_GENERATOR_CMD} ${full_xml_name} "mobile_apis"
- ${CMAKE_CURRENT_BINARY_DIR} "--parser-type" "sdlrpcv2"
- DEPENDS ${INTERFACE_GENERATOR_DEPENDENCIES} ${full_xml_name}
- VERBATIM
- )
+set(XML_NAME ${CMAKE_SOURCE_DIR}/src/components/interfaces/MOBILE_API.xml)
+add_custom_target(generate_version
+ COMMAND ${INTEFRACE_GENERATOR_CMD} ${XML_NAME} "mobile_apis"
+ ${CMAKE_CURRENT_BINARY_DIR} "--parser-type" "sdlrpcv2"
+ DEPENDS ${INTERFACE_GENERATOR_DEPENDENCIES} ${XML_NAME}
+ VERBATIM
+)
-set(testLibraries
+set(LIBRARIES
gmock
Utils
)
-set(testSources
+set(SOURCES
generated_msg_version_test.cc
)
-file(COPY ${full_xml_name} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
-create_test("generator_test" "${testSources}" "${testLibraries}")
-add_dependencies("generator_test" generate_version)
+create_test(generator_test "${SOURCES}" "${LIBRARIES}")
+file(COPY ${XML_NAME} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
-endif()
+add_dependencies("generator_test" generate_version)
diff --git a/src/plugins/CMakeLists.txt b/src/plugins/CMakeLists.txt
index 1a4eff13b5..4b6f6d8dfa 100644
--- a/src/plugins/CMakeLists.txt
+++ b/src/plugins/CMakeLists.txt
@@ -29,5 +29,5 @@
# POSSIBILITY OF SUCH DAMAGE.
if(ENABLE_LOG)
-add_subdirectory(appenders)
+ add_subdirectory(appenders)
endif()
diff --git a/src/plugins/appenders/CMakeLists.txt b/src/plugins/appenders/CMakeLists.txt
index 9d01599ca3..59628a021b 100644
--- a/src/plugins/appenders/CMakeLists.txt
+++ b/src/plugins/appenders/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2014, Ford Motor Company
+# Copyright (c) 2016, Ford Motor Company
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,22 +28,22 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-SET(target "appenders")
-
-SET(SOURCES
- safe_file_appender.cc
- safe_rolling_file_appender.cc
-)
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories(
${LOG4CXX_INCLUDE_DIRECTORY}
)
-add_library(${target} MODULE ${SOURCES})
+collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}")
+
+set(LIBRARIES
+ log4cxx -L${LOG4CXX_LIBS_DIRECTORY}
+)
-target_link_libraries(${target} log4cxx -L${LOG4CXX_LIBS_DIRECTORY})
+add_library(appenders ${SOURCES})
+target_link_libraries(appenders ${LIBRARIES})
-install(TARGETS ${target}
+install(TARGETS appenders
DESTINATION bin
PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE
diff --git a/cmake/Modules/cotire.cmake b/tools/cmake/helpers/cotire.cmake
index 741d6901f1..741d6901f1 100644
--- a/cmake/Modules/cotire.cmake
+++ b/tools/cmake/helpers/cotire.cmake
diff --git a/tools/cmake/helpers/generators.cmake b/tools/cmake/helpers/generators.cmake
new file mode 100644
index 0000000000..64f7c1f670
--- /dev/null
+++ b/tools/cmake/helpers/generators.cmake
@@ -0,0 +1,62 @@
+# Copyright (c) 2016, 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.
+
+find_package(PythonInterp REQUIRED)
+
+if(NOT PYTHONINTERP_FOUND)
+ message(STATUS "Python interpreter is not found")
+ message(STATUS "To install it type in the command line:")
+ message(STATUS "sudo apt-get install python")
+ message(FATAL_ERROR "Exiting!")
+endif(NOT PYTHONINTERP_FOUND)
+
+set(INTEFRACE_GENERATOR "${CMAKE_SOURCE_DIR}/tools/InterfaceGenerator/Generator.py")
+set(INTEFRACE_GENERATOR_CMD ${PYTHON_EXECUTABLE} -B ${INTEFRACE_GENERATOR})
+file(GLOB_RECURSE INTERFACE_GENERATOR_DEPENDENCIES "${CMAKE_SOURCE_DIR}/tools/InterfaceGenerator/*.*")
+
+macro(generate_interface ARG_XML_NAME ARG_NAMESPACE PARSER_TYPE)
+ string(REGEX MATCH "^[a-zA-Z_0-9]*[^.]" FILE_NAME ${ARG_XML_NAME}) # TODO: make expression more robust
+
+ set(HPP_FILE
+ "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.h"
+ "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_schema.h"
+ )
+
+ set(CPP_FILE "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_schema.cc")
+ set(FULL_XML_NAME "${CMAKE_CURRENT_SOURCE_DIR}/${ARG_XML_NAME}")
+
+ add_custom_command(
+ OUTPUT ${HPP_FILE} ${CPP_FILE}
+ COMMAND ${INTEFRACE_GENERATOR_CMD} ${FULL_XML_NAME} ${ARG_NAMESPACE} ${CMAKE_CURRENT_BINARY_DIR} "--parser-type" "${PARSER_TYPE}"
+ DEPENDS ${INTERFACE_GENERATOR_DEPENDENCIES} ${FULL_XML_NAME}
+ COMMENT "Generating files:\n ${HPP_FILE}\n ${CPP_FILE}\nfrom:\n ${FULL_XML_NAME} ..."
+ VERBATIM
+ )
+endmacro()
diff --git a/tools/cmake/helpers/platform.cmake b/tools/cmake/helpers/platform.cmake
new file mode 100644
index 0000000000..a377dfd042
--- /dev/null
+++ b/tools/cmake/helpers/platform.cmake
@@ -0,0 +1,96 @@
+# Copyright (c) 2016, 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.
+
+# SDL build platform includes three necessary components:
+# OS, Architecture and SDK. Build parameters and sources code base
+# could be varied depends on these three components combination.
+#
+# Platform helpers provide functionality to get supported by SDL
+# OS, Architecture or SDK lists and specified for actual build these
+# variables values. Values could be passed to cmake as parameters
+# (f.e. "-DOS_WINDOWS=1 -DSDK_QT=1"), otherwise they will be detected
+# related to current build environment.
+#
+# Full list of supported cmake flags:
+# OS_POSIX
+# OS_WINDOWS
+# ARCH_X86
+# ARCH_X64
+# SDK_QT
+
+function(get_supported_os OS_LIST)
+ set(${OS_LIST} "posix" "win" PARENT_SCOPE)
+endfunction()
+
+function(get_supported_arch ARCH_LIST)
+ set(${ARCH_LIST} "x86" "x64" PARENT_SCOPE)
+endfunction()
+
+function(get_supported_sdk SDK_LIST)
+ set(${SDK_LIST} "qt" PARENT_SCOPE)
+endfunction()
+
+function(get_os OS)
+ if(OS_POSIX)
+ set(${OS} "posix" PARENT_SCOPE)
+ elseif(OS_WINDOWS)
+ set(${OS} "win" PARENT_SCOPE)
+ else()
+ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
+ set(${OS} "posix" PARENT_SCOPE)
+ elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+ set(${OS} "win" PARENT_SCOPE)
+ else()
+ message(FATAL_ERROR "Unsupported operation system")
+ endif()
+ endif()
+endfunction()
+
+function(get_arch ARCH)
+ if(ARCH_X86)
+ set(${ARCH} "x86" PARENT_SCOPE)
+ elseif(ARCH_X64)
+ set(${ARCH} "x64" PARENT_SCOPE)
+ else()
+ if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "i386")
+ set(${ARCH} "x86" PARENT_SCOPE)
+ elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64")
+ set(${ARCH} "x64" PARENT_SCOPE)
+ else()
+ message(FATAL_ERROR "Unsupported architecture")
+ endif()
+ endif()
+endfunction()
+
+function(get_sdk SDK)
+ if(SDK_QT)
+ set(${SDK} "qt" PARENT_SCOPE)
+ endif()
+endfunction()
diff --git a/tools/cmake/helpers/sources.cmake b/tools/cmake/helpers/sources.cmake
new file mode 100644
index 0000000000..0315b905d9
--- /dev/null
+++ b/tools/cmake/helpers/sources.cmake
@@ -0,0 +1,166 @@
+# Copyright (c) 2016, 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.
+
+# Sources helpers provide functionality to collect headers, source files
+# or any other files depends on current build settings (OS, Architecture, SDK).
+#
+# Files could be included or excluded to/from build for some platform by
+# platform-specific suffix adding to filename. For example file
+# sdl_source_file_posix_x86_qt.cc will be added only to build with parameters:
+# OS=posix ARCH=x86 SDK=qt but file sdl_source_file_win.cc to all builds
+# with OS=win option enabled. Suffixes could be mixed within filename randomly.
+#
+# Full list of supported suffixes:
+# posix
+# win
+# x86
+# x64
+# qt
+
+include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/platform.cmake)
+
+function(filter_files_by_name FILES IGNORE_NAMES)
+ set(FILES_LOCAL ${${FILES}})
+ foreach(FILE_ENTRY ${${FILES}})
+ foreach(IGNORE_ENTRY ${IGNORE_NAMES})
+ if(${FILE_ENTRY} MATCHES ${IGNORE_ENTRY})
+ list(REMOVE_ITEM FILES_LOCAL ${FILE_ENTRY})
+ endif()
+ endforeach()
+ endforeach()
+ set(${FILES} ${FILES_LOCAL} PARENT_SCOPE)
+endfunction()
+
+function(filter_files_by_suffix FILES IGNORE_SUFFIXES)
+ set(FILES_LOCAL ${${FILES}})
+ foreach(FILE_ENTRY ${${FILES}})
+ foreach(IGNORE_ENTRY ${IGNORE_SUFFIXES})
+ if((${FILE_ENTRY} MATCHES "_${IGNORE_ENTRY}_") OR (${FILE_ENTRY} MATCHES "_${IGNORE_ENTRY}\\."))
+ list(REMOVE_ITEM FILES_LOCAL ${FILE_ENTRY})
+ endif()
+ endforeach()
+ endforeach()
+ set(${FILES} ${FILES_LOCAL} PARENT_SCOPE)
+endfunction()
+
+function(filter_files_by_os FILES)
+ set(FILES_LOCAL ${${FILES}})
+ get_supported_os(OS_LIST)
+ get_os(OS)
+ list(REMOVE_ITEM OS_LIST ${OS})
+ filter_files_by_suffix(FILES_LOCAL "${OS_LIST}")
+ set(${FILES} ${FILES_LOCAL} PARENT_SCOPE)
+endfunction()
+
+function(filter_files_by_arch FILES)
+ set(FILES_LOCAL ${${FILES}})
+ get_supported_arch(ARCH_LIST)
+ get_arch(ARCH)
+ list(REMOVE_ITEM ARCH_LIST ${ARCH})
+ filter_files_by_suffix(FILES_LOCAL "${ARCH_LIST}")
+ set(${FILES} ${FILES_LOCAL} PARENT_SCOPE)
+endfunction()
+
+function(filter_files_by_sdk FILES)
+ set(FILES_LOCAL ${${FILES}})
+ get_supported_sdk(SDK_LIST)
+ get_sdk(SDK)
+ if(SDK)
+ list(REMOVE_ITEM SDK_LIST ${SDK})
+ endif()
+ filter_files_by_suffix(FILES_LOCAL "${SDK_LIST}")
+ set(${FILES} ${FILES_LOCAL} PARENT_SCOPE)
+endfunction()
+
+function(filter_files FILES IGNORE_NAMES)
+ set(FILES_LOCAL ${${FILES}})
+ filter_files_by_name(FILES_LOCAL "${IGNORE_NAMES}")
+ filter_files_by_os(FILES_LOCAL)
+ filter_files_by_arch(FILES_LOCAL)
+ filter_files_by_sdk(FILES_LOCAL)
+ set(${FILES} ${FILES_LOCAL} PARENT_SCOPE)
+endfunction()
+
+function(collect_sources SOURCES PATHS)
+ set(OPTIONAL_ARG ${ARGN})
+ set(HEADERS_LOCAL)
+ set(SOURCES_LOCAL)
+ get_os(OS)
+
+ foreach(PATH_ENTRY ${PATHS})
+ file(GLOB_RECURSE SOURCES_TO_FILTER "${PATH_ENTRY}/*.c" "${PATH_ENTRY}/*.cc" "${PATH_ENTRY}/*.cpp")
+ filter_files(SOURCES_TO_FILTER "${OPTIONAL_ARG}")
+ list(APPEND SOURCES_LOCAL ${SOURCES_TO_FILTER})
+ set(SOURCES_TO_FILTER)
+ if(${OS} STREQUAL "win")
+ file(GLOB_RECURSE HEADERS_TO_FILTER "${PATH_ENTRY}/*.h" "${PATH_ENTRY}/*.hpp")
+ filter_files(HEADERS_TO_FILTER "${OPTIONAL_ARG}")
+ list(APPEND HEADERS_LOCAL ${HEADERS_TO_FILTER})
+ set(HEADERS_TO_FILTER)
+ endif()
+ endforeach()
+
+ if(${OS} STREQUAL "win")
+ source_group("Header Files" FILES ${HEADERS_LOCAL})
+ source_group("Source Files" FILES ${SOURCES_LOCAL})
+ endif()
+ set(${SOURCES} ${SOURCES_LOCAL} PARENT_SCOPE)
+endfunction()
+
+function(create_test NAME SOURCES LIBS)
+ add_executable("${NAME}" ${CMAKE_SOURCE_DIR}/src/components/test_main.cc ${SOURCES})
+ target_link_libraries("${NAME}" ${LIBS})
+ target_link_libraries("${NAME}" Utils)
+ add_test(NAME ${NAME}
+ COMMAND ${NAME} --gtest_output=xml:${CMAKE_BINARY_DIR}/test_results/)
+endfunction()
+
+function(create_cotired_test NAME SOURCES LIBS)
+ add_executable(
+ ${NAME}
+ EXCLUDE_FROM_ALL
+ ${CMAKE_SOURCE_DIR}/src/components/test_main.cc
+ ${SOURCES}
+ )
+ # TODO: Fix problems with Cotire on Windows and Qt APPLINK-28060
+ if(${USE_COTIRE} AND (${CMAKE_SYSTEM_NAME} MATCHES "Linux"))
+ include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/cotire.cmake)
+ cotire(${NAME})
+ set(NAME "${NAME}_unity")
+ endif()
+ target_link_libraries(${NAME} ${LIBS})
+ set_target_properties(
+ ${NAME}
+ PROPERTIES
+ EXCLUDE_FROM_ALL 0
+ )
+ add_test(NAME ${NAME}
+ COMMAND ${NAME} --gtest_output=xml:${CMAKE_BINARY_DIR}/test_results/)
+endfunction()
diff --git a/cmake/Modules/FindGlib-2.0.cmake b/tools/cmake/modules/FindGlib-2.0.cmake
index b39da141c9..b39da141c9 100644
--- a/cmake/Modules/FindGlib-2.0.cmake
+++ b/tools/cmake/modules/FindGlib-2.0.cmake
diff --git a/cmake/Modules/FindGstreamer-1.0.cmake b/tools/cmake/modules/FindGstreamer-1.0.cmake
index 8f1d69d01b..8f1d69d01b 100644
--- a/cmake/Modules/FindGstreamer-1.0.cmake
+++ b/tools/cmake/modules/FindGstreamer-1.0.cmake
diff --git a/cmake/Modules/FindLibXML2.cmake b/tools/cmake/modules/FindLibXML2.cmake
index 1daaeb07b7..1daaeb07b7 100644
--- a/cmake/Modules/FindLibXML2.cmake
+++ b/tools/cmake/modules/FindLibXML2.cmake
diff --git a/cmake/Modules/FindQt5Core.cmake b/tools/cmake/modules/FindQt5Core.cmake
index 1a2ad84842..1a2ad84842 100644
--- a/cmake/Modules/FindQt5Core.cmake
+++ b/tools/cmake/modules/FindQt5Core.cmake
diff --git a/cmake/Modules/FindQt5DBus.cmake b/tools/cmake/modules/FindQt5DBus.cmake
index d850010e97..d850010e97 100644
--- a/cmake/Modules/FindQt5DBus.cmake
+++ b/tools/cmake/modules/FindQt5DBus.cmake
diff --git a/cmake/Modules/FindQt5Qml.cmake b/tools/cmake/modules/FindQt5Qml.cmake
index f4bdaa8f71..f4bdaa8f71 100644
--- a/cmake/Modules/FindQt5Qml.cmake
+++ b/tools/cmake/modules/FindQt5Qml.cmake
diff --git a/cmake/Modules/FindQt5Quick.cmake b/tools/cmake/modules/FindQt5Quick.cmake
index 1e16340c2e..1e16340c2e 100644
--- a/cmake/Modules/FindQt5Quick.cmake
+++ b/tools/cmake/modules/FindQt5Quick.cmake
diff --git a/tools/cmake/modules/FindSDLGstreamer.cmake b/tools/cmake/modules/FindSDLGstreamer.cmake
new file mode 100644
index 0000000000..515404d39b
--- /dev/null
+++ b/tools/cmake/modules/FindSDLGstreamer.cmake
@@ -0,0 +1,42 @@
+# - Try to find Gstreamer
+#
+# GSTREAMER_INCLUDE_DIRECTORY - the Gstreamer include directory
+# GSTREAMER_LIBRARIES - the Gstreamer libraries
+
+get_os(OS)
+if(${OS} STREQUAL "posix")
+ find_package(Gstreamer-1.0 REQUIRED)
+ find_package(Glib-2.0 REQUIRED)
+ find_package(PkgConfig)
+ pkg_check_modules(GLIB2 REQUIRED glib-2.0)
+ add_definitions(${GLIB2_CFLAGS})
+ set(GSTREAMER_INCLUDE_DIRECTORY
+ ${GSTREAMER_gst_INCLUDE_DIR}
+ ${GLIB_glib_2_INCLUDE_DIR}
+ )
+ set(GSTREAMER_LIBRARIES
+ ${GSTREAMER_gstreamer_LIBRARY}
+ gobject-2.0
+ glib-2.0
+ )
+elseif(${OS} STREQUAL "win")
+ get_sdk(SDK)
+ if(NOT SDK)
+ if(EXISTS $ENV{SDL_GSTREAMER_DIR})
+ set(GSTREAMER_DIR $ENV{SDL_GSTREAMER_DIR})
+ else()
+ message(FATAL_ERROR "Could not find GSTREAMER (Check SDL_GSTREAMER_DIR environment variable)")
+ endif()
+ set(GSTREAMER_INCLUDE_DIRECTORY
+ ${GSTREAMER_DIR}/include/gstreamer-0.10
+ ${GSTREAMER_DIR}/include/libxml2
+ ${GSTREAMER_DIR}/include/glib-2.0
+ ${GSTREAMER_DIR}/lib/glib-2.0/include
+ )
+ set(GSTREAMER_LIBRARIES
+ ${GSTREAMER_DIR}/lib/gstreamer-0.10.lib
+ ${GSTREAMER_DIR}/lib/glib-2.0.lib
+ ${GSTREAMER_DIR}/lib/gobject-2.0.lib
+ )
+ endif()
+endif()
diff --git a/tools/cmake/modules/FindSDLLibUSB.cmake b/tools/cmake/modules/FindSDLLibUSB.cmake
new file mode 100644
index 0000000000..0082d62315
--- /dev/null
+++ b/tools/cmake/modules/FindSDLLibUSB.cmake
@@ -0,0 +1,19 @@
+# - Try to find libusb
+#
+# LIBUSB_INCLUDE_DIRECTORY - the libusb include directory
+# LIBUSB_LIBRARIES - libusb libraries to link
+
+get_os(OS)
+if(${OS} STREQUAL "posix")
+ set(LIBUSB_INCLUDE_DIRECTORY /usr/include/libusb-1.0)
+ set(LIBUSB_LIBRARIES usb-1.0 udev)
+elseif(${OS} STREQUAL "win")
+ get_arch(ARCH)
+ if(${ARCH} STREQUAL "x86")
+ set(LIBUSB_DIR ${CMAKE_SOURCE_DIR}/build/libusbx_win_x86)
+ elseif(${ARCH} STREQUAL "x64")
+ set(LIBUSB_DIR ${CMAKE_SOURCE_DIR}/build/libusbx_win_x64)
+ endif()
+ set(LIBUSB_INCLUDE_DIRECTORY ${LIBUSB_DIR}/libusb)
+ set(LIBUSB_LIBRARIES ${LIBUSB_DIR}/bin/libusb-1.0.lib)
+endif()
diff --git a/tools/cmake/modules/FindSDLOpenSSL.cmake b/tools/cmake/modules/FindSDLOpenSSL.cmake
new file mode 100644
index 0000000000..c16236a1cb
--- /dev/null
+++ b/tools/cmake/modules/FindSDLOpenSSL.cmake
@@ -0,0 +1,18 @@
+# - Try to find OpenSSL
+#
+# OPENSSL_INCLUDE_DIRECTORY - the OpenSSL include directory
+# OPENSSL_LIBRARIES - the OpenSSL libraries
+
+get_os(OS)
+if(${OS} STREQUAL "posix")
+ find_package(OpenSSL REQUIRED)
+elseif(${OS} STREQUAL "win")
+ get_arch(ARCH)
+ if(${ARCH} STREQUAL "x86")
+ set(OPENSSL_DIR ${CMAKE_SOURCE_DIR}/build/openssl_win_x86)
+ elseif(${ARCH} STREQUAL "x64")
+ set(OPENSSL_DIR ${CMAKE_SOURCE_DIR}/build/openssl_win_x64)
+ endif()
+ set(OPENSSL_INCLUDE_DIRECTORY ${OPENSSL_DIR}/include)
+ set(OPENSSL_LIBRARIES ${OPENSSL_DIR}/lib/libeay32.lib ${OPENSSL_DIR}/lib/ssleay32.lib)
+endif()
diff --git a/cmake/Modules/FindSqlite3.cmake b/tools/cmake/modules/FindSqlite3.cmake
index 514ff0b7f9..f6bdcad69c 100644
--- a/cmake/Modules/FindSqlite3.cmake
+++ b/tools/cmake/modules/FindSqlite3.cmake
@@ -23,7 +23,7 @@ else (SQLITE3_LIBRARIES AND SQLITE3_INCLUDE_DIRS)
else (PKG_CONFIG_FOUND)
message(WARNING "PkgConfig isn't installed. You need to sure sqlite3>=3.7.11")
endif (PKG_CONFIG_FOUND)
-
+
find_path(SQLITE3_INCLUDE_DIR
NAMES
sqlite3.h
diff --git a/cmake/Modules/FindUDev.cmake b/tools/cmake/modules/FindUDev.cmake
index cdc8743777..cdc8743777 100644
--- a/cmake/Modules/FindUDev.cmake
+++ b/tools/cmake/modules/FindUDev.cmake
diff --git a/tools/infrastructure/api_compare.py b/tools/infrastructure/api_compare.py
new file mode 100644
index 0000000000..0129119673
--- /dev/null
+++ b/tools/infrastructure/api_compare.py
@@ -0,0 +1,468 @@
+#!/usr/bin/env python
+
+import json
+import sys
+import errno
+import argparse
+import xml.etree.ElementTree as ElementTree
+from collections import namedtuple
+
+reload(sys)
+# Enable Utf-8 support. Needed if script will be run under Windows
+sys.setdefaultencoding('utf-8')
+
+
+class colors:
+ """Class defining colorful output.
+ Works under UNIX ONLY as Windows does not support ANSI escape sequences
+ """
+ HEADER = '\033[95m'
+ BLUE = '\033[94m'
+ GREEN = '\033[92m'
+ WARN = '\033[93m'
+ FAIL = '\033[91m'
+ ENDC = '\033[0m'
+ BOLD = '\033[1m'
+ UNDERLINE = '\033[4m'
+
+
+def simple_values_comparison(mobile_attribute_value, hmi_attribute_value):
+ """Simple attribute value comparison"""
+ return mobile_attribute_value == hmi_attribute_value
+
+
+def parse_command_line_args():
+ """Function adds and parses command line arguments"""
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ "--mobile_api_file",
+ type=str, default="MOBILE_API.xml",
+ help='Enter mobile api file name! ("MOBILE_API.xml" by default)'
+ )
+ parser.add_argument(
+ "--hmi_api_file",
+ type=str, default="HMI_API.xml",
+ help='Enter hmi api file name! ("HMI_API.xml" by default)'
+ )
+ parser.add_argument(
+ "-o", "--output",
+ type=str, default="console",
+ choices=['xml', 'json', 'console'],
+ help='Choose report type! ("console" by default)'
+ )
+ parser.add_argument(
+ "--full_info",
+ action="store_true",
+ help='Enter this parameter to get full detailed info!'
+ )
+ args = parser.parse_args()
+ return args
+
+
+def json_to_xml(json_obj, line_padding=" "):
+ """Function which converts json to xml format"""
+ result_list = list()
+ json_obj_type = type(json_obj)
+ if json_obj_type is list:
+ for sub_elem in json_obj:
+ result_list.append(json_to_xml(sub_elem, line_padding))
+ return "\n".join(result_list)
+ if json_obj_type is dict:
+ for tag_name in json_obj:
+ sub_obj = json_obj[tag_name]
+ result_list.append("%s<%s>" % (line_padding, tag_name))
+ result_list.append(json_to_xml(sub_obj, "\t" + line_padding))
+ result_list.append("%s</%s>" % (line_padding, tag_name))
+ return "\n".join(result_list)
+ return "%s%s" % (line_padding, json_obj)
+
+
+def dict_to_json(summary_result):
+ """Function converts python dictionary to json format"""
+ return json.dumps(
+ summary_result, sort_keys=True, indent=4, separators=(',', ': '))
+
+
+def set_build_status(comparison_result):
+ """Function sets up build status depend on comparison result"""
+ if len(comparison_result) > 0:
+ sys.exit(errno.EPERM)
+ else:
+ return
+
+
+def get_rpc_params(function):
+ """Function which gets all params from specified RPC"""
+ params = {}
+ for function_tag in function: # loop over function tags
+ if function_tag.tag == 'param':
+ name = function_tag.attrib['name']
+ params[name] = function_tag.attrib
+ return params
+
+
+Rpc = namedtuple("rpc", ["rpc_name", "rpc_type"])
+
+
+def extract_functions(interface, functions):
+ """Function extracting rpcs from passed interface"""
+ for child in interface:
+ if child.tag == 'function':
+ rpc_name = child.attrib['name']
+ rpc_type = child.attrib['messagetype']
+ key = Rpc(rpc_name=rpc_name, rpc_type=rpc_type)
+ params = get_rpc_params(child)
+ if key in functions:
+ functions[key].update(params)
+ else:
+ functions[key] = params
+
+
+def filter_params(rpc, params_to_filter, filter):
+ "Function filters rpc parameters according passed filter"
+ filtered = []
+ for param in params_to_filter:
+ # Filter only keys which present in filter
+ if param not in filter:
+ filtered.append(param)
+ else:
+ filter_func = filter[param]
+ if filter_func(rpc):
+ filtered.append(param)
+ return filtered
+
+
+def create_result_section(param, result):
+ """Function creating appropriate section in result dictionary"""
+ if param not in result:
+ result[param] = {}
+ if "HMI_API" not in result[param]:
+ result[param]["HMI_API"] = {}
+ if "Mobile_API" not in result[param]:
+ result[param]["Mobile_API"] = {}
+ mob_api_result_section = result[param]["Mobile_API"]
+ hmi_api_result_section = result[param]["HMI_API"]
+ return mob_api_result_section, hmi_api_result_section
+
+
+def compare_params(param, mob_param_attrs, hmi_param_attrs):
+ """Function comparing mobile and hmi parameter attributes"""
+ result = {}
+ mob_param_attrs = dict(mob_param_attrs)
+ hmi_param_attrs = dict(hmi_param_attrs)
+ for compare_rule in global_compare_rules:
+ condition = compare_rule[0]
+ rule = compare_rule[1]
+ if (condition(mob_param_attrs, hmi_param_attrs)):
+ mobile_res, hmi_res = rule(
+ mob_param_attrs, hmi_param_attrs)
+ if len(mobile_res) > 0 or len(hmi_res) > 0:
+ m_res, h_res = create_result_section(param, result)
+ m_res.update(mobile_res)
+ h_res.update(hmi_res)
+ return result
+
+
+def fill_summary_result(rpc_name, area, value, summary_result):
+ """Function filling summary comparison result"""
+ if rpc_name not in summary_result:
+ summary_result[rpc_name] = {}
+ rpc = summary_result[rpc_name]
+ if type(value) is not dict:
+ rpc[area] = value
+ elif type(value) is dict:
+ if area not in rpc:
+ rpc[area] = {}
+ rpc[area].update(value)
+
+
+def get_common_params(rpc_name, mob_api_functions, hmi_api_functions):
+ """Function calculates common parameters from mobile and hmi apis
+ for specified rpc
+ """
+ hmi_params = hmi_api_functions[rpc_name]
+ mob_params = mob_api_functions[rpc_name]
+ mob_keys = mob_params.keys()
+ hmi_keys = hmi_params.keys()
+ return list(set(mob_keys).intersection(set(hmi_keys)))
+
+
+def get_diff(common_params, rpc_name, hmi_params, mob_params, summary_result):
+ """Function which gets difference between parameters
+ and writes to summary result
+ """
+ for param in common_params:
+ mob_items = sorted(mob_params[param].items())
+ hmi_items = sorted(hmi_params[param].items())
+ diff_res = compare_params(param, mob_items, hmi_items)
+ area = "Attributes difference:"
+ if len(diff_res) > 0:
+ fill_summary_result(rpc_name, area,
+ diff_res, summary_result
+ )
+
+
+def print_parameters(common_params, hmi_params, mob_params):
+ """Function which prints parameters in mobile, hmi api
+ and common parameters
+ """
+ print "Parameters to check: ", common_params, "\n"
+ for param in common_params:
+ mob_items = sorted(mob_params[param].items())
+ hmi_items = sorted(hmi_params[param].items())
+ print colors.UNDERLINE + colors.BOLD + param + colors.ENDC, ":"
+ print "In Mobile API :\t", dict(mob_items)
+ print "In HMI API :\t", dict(hmi_items)
+
+
+def print_full_info(hmi_absent_params, hmi_params,
+ mob_absent_params, mob_params, rpc_name):
+ """Function prints full detailed info about every rpc"""
+ print "\n" + "---" * 60 + "\n"
+ rpc_color = colors.BOLD + colors.HEADER
+ print rpc_color + rpc_name + colors.ENDC
+ print colors.BOLD + "\nMobile API: " + colors.ENDC
+ print "Parameters quantity: ", len(mob_params)
+ print "Parameters list: ", sorted(mob_params.keys())
+ print colors.BOLD + "HMI API: " + colors.ENDC
+ print "Parameters quantity: ", len(hmi_params)
+ print "Parameters list: ", sorted(hmi_params.keys())
+ print "\n"
+ print("{}Parameters absent in Mobile APIs: {}{}".
+ format(colors.WARN, mob_absent_params, colors.ENDC))
+ print("{}Parameters absent in HMI APIs: {}{}".
+ format(colors.WARN, hmi_absent_params, colors.ENDC))
+ print "\n"
+
+
+def console_print(summary_result):
+ """Function which prints summary result to console"""
+ for rpc_name in sorted(summary_result.keys()):
+ print "\n" + "---" * 60
+ print colors.HEADER + rpc_name + colors.ENDC
+ for problematic_item in summary_result[rpc_name]:
+ item = summary_result[rpc_name][problematic_item]
+ if len(item) > 0:
+ print colors.UNDERLINE + problematic_item + colors.ENDC
+ if type(item) is not dict:
+ print("{}{}{}".format(colors.WARN, item, colors.ENDC))
+ elif type(item) is dict:
+ for param in item.keys():
+ item_print = colors.UNDERLINE + param + colors.ENDC
+ print "{} {}".format("Parameter name: ", item_print)
+ res_val = item[param]
+ for key in res_val:
+ print key, ":", colors.FAIL, res_val[key], colors.ENDC
+
+
+def print_summary_info(summary_result, args):
+ """Function which prints summary comparison info(if any).
+ Output type depends on command line args
+ """
+ summary_color = colors.UNDERLINE + colors.BOLD + colors.BLUE
+ print "\n"
+ print summary_color, "SUMMARY COMPARISON RESULT:\n", colors.ENDC
+ if len(summary_result) == 0:
+ print colors.BOLD + " === NO PROBLEMS FOUND ===" + colors.ENDC
+ return
+ if args.output == "console":
+ console_print(summary_result)
+ if args.output == "json":
+ json_summary_result = dict_to_json(summary_result)
+ print json_summary_result
+ if args.output == "xml":
+ json_summary_result = dict_to_json(summary_result)
+ temp = json.loads(json_summary_result)
+ xml_summary_result = json_to_xml(temp)
+ print xml_summary_result
+
+
+def handle_absent_params(area, absent_params, rpc_name, summary_result):
+ """Function which writes absent parameters(if any)
+ to summary result
+ """
+ if len(absent_params) > 0:
+ fill_summary_result(
+ rpc_name, area,
+ absent_params,
+ summary_result
+ )
+
+
+def get_absent_hmi_params(hmi_params, mob_params, rpc):
+ """Function caculates absent parameters in hmi api"""
+ hmi_absent_params = set(mob_params.keys()) - set(hmi_params.keys())
+ hmi_absent_params = filter_params(
+ rpc, hmi_absent_params, exclude_redundant_from_hmi_rpc_filter)
+ return hmi_absent_params
+
+
+def get_absent_mob_params(hmi_params, mob_params, rpc):
+ """Function caculates absent parameters in mobile api"""
+ mob_absent_params = set(hmi_params.keys()) - set(mob_params.keys())
+ mob_absent_params = filter_params(
+ rpc, mob_absent_params, exclude_params_from_mob_rpc)
+ return mob_absent_params
+
+
+def get_rpc_for_handle(rpc_name, hmi_params, mob_params):
+ """Function creates rpc with all parameters to check"""
+ rpc = type('', (), {})() # empty object
+ rpc.mobile_params = mob_params
+ rpc.hmi_params = hmi_params
+ rpc.rpc_name = rpc_name.rpc_name
+ rpc.rpc_type = rpc_name.rpc_type
+ return rpc
+
+
+def check_array_mandatory_param(attributes):
+ """Function checks presence of "array" mandatory parameters"""
+ result = {}
+ minsize_exists = "minsize" in attributes
+ if not minsize_exists:
+ attributes["minsize"] = None
+ result["array"] = attributes["array"]
+ result["minsize"] = attributes["minsize"]
+ maxsize_exists = "maxsize" in attributes
+ if not maxsize_exists:
+ attributes["maxsize"] = None
+ result["array"] = attributes["array"]
+ result["maxsize"] = attributes["maxsize"]
+ return result
+
+
+def array_compare_rule(mob_param_attributes, hmi_param_attributes):
+ """Function checks presence of necessary parameters
+ if "array"="true" field presents
+ """
+ attr = "array"
+ mobile_result = {}
+ if attr in mob_param_attributes and mob_param_attributes[attr] == "true":
+ mobile_result = check_array_mandatory_param(mob_param_attributes)
+ hmi_result = {}
+ if attr in hmi_param_attributes and hmi_param_attributes[attr] == "true":
+ hmi_result = check_array_mandatory_param(hmi_param_attributes)
+ return mobile_result, hmi_result
+
+
+def string_compare_rule(mob_param_attributes, hmi_param_attributes):
+ """Function checks presence of "minlength"="1" in HMI_API if
+ "minlength" is omitted in MobileAPI.
+ Should be checked only for "type"="String"
+ """
+ attr = "minlength"
+ if attr not in mob_param_attributes:
+ if attr not in hmi_param_attributes:
+ return {attr: None}, {attr: None}
+ elif hmi_param_attributes[attr] != "1":
+ return {attr: None}, {attr: hmi_param_attributes[attr]}
+ else:
+ mob_param_attributes[attr] = "1"
+ return {}, {}
+
+
+def all_compare_rule(mob_param_attributes, hmi_param_attributes):
+ """Function used for all common arrtibutes comparison"""
+ mobile_result = {}
+ hmi_result = {}
+ attr_names = mob_param_attributes.keys() + hmi_param_attributes.keys()
+ attr_names = set(attr_names)
+ for attr_name in attr_names:
+ mobile_attribute_value = None
+ hmi_attribute_value = None
+ compare_func = simple_values_comparison
+ if attr_name in attributes_comparison_rules:
+ # Get appropriate comparison function from attributes comparison
+ # rules
+ compare_func = attributes_comparison_rules[attr_name]
+ if attr_name in mob_param_attributes:
+ mobile_attribute_value = mob_param_attributes[attr_name]
+ if attr_name in hmi_param_attributes:
+ hmi_attribute_value = hmi_param_attributes[attr_name]
+ values_equal = compare_func(
+ mobile_attribute_value, hmi_attribute_value)
+ if not values_equal:
+ hmi_result[attr_name] = hmi_attribute_value
+ mobile_result[attr_name] = mobile_attribute_value
+ return mobile_result, hmi_result
+
+
+global_compare_rules = [
+ # Comparison rule when attribute "type" = "String"
+ (lambda mob_param_attributes, hmi_param_attributes:
+ mob_param_attributes["type"] == "String", string_compare_rule),
+ # Comparison rule when attribute "array" = "true"
+ (lambda mob_param_attributes, hmi_param_attributes:
+ 'array' in mob_param_attributes.keys() +
+ hmi_param_attributes.keys(), array_compare_rule),
+ # Common comparison function for all attributes
+ (lambda mob_param_attributes, hmi_param_attributes:
+ True, all_compare_rule)
+]
+
+attributes_comparison_rules = {
+ # If "mandatory" field is omitted i MobileApi
+ # it must be present in HMI_API as "mandatory"="true" by default
+ 'mandatory': lambda mobile_attribute_value, hmi_attribute_value:
+ True if mobile_attribute_value is None and hmi_attribute_value == "true"
+ else mobile_attribute_value == hmi_attribute_value,
+ # type <Common.<Struct/Enum> at HMI_API (MOBILE_APi has no <Common.>)
+ 'type': lambda mobile_attribute_value, hmi_attribute_value:
+ True if ("Common." + mobile_attribute_value) == hmi_attribute_value
+ else mobile_attribute_value == hmi_attribute_value
+}
+
+# Parameters in HMI_API which should be excluded from comparison
+exclude_redundant_from_hmi_rpc_filter = {
+ 'resultCode': lambda rpc: rpc.rpc_type != "response",
+ 'info': lambda rpc: rpc.rpc_type != "response",
+ 'success': lambda rpc: rpc.rpc_type != "response"
+}
+
+# Parameters in MOBILE_API which should be excluded from comparison
+exclude_params_from_mob_rpc = {
+ 'type': (lambda rpc: rpc.rpc_name not in ["AddCommand", "DeleteCommand"]),
+ 'appID': (lambda rpc: False),
+ 'grammarID': (lambda rpc: False)}
+
+
+def main():
+ args = parse_command_line_args()
+ mobile_api_tree = ElementTree.parse(args.mobile_api_file)
+ mob_api_functions = {}
+ extract_functions(mobile_api_tree.getroot(), mob_api_functions)
+
+ hmi_api_tree = ElementTree.parse(args.hmi_api_file)
+ hmi_api_functions = {}
+ for interface in hmi_api_tree.getroot():
+ extract_functions(interface, hmi_api_functions)
+ summary_result = {}
+ for rpc_name in sorted(mob_api_functions.keys()):
+ if rpc_name in hmi_api_functions:
+ hmi_params = hmi_api_functions[rpc_name]
+ mob_params = mob_api_functions[rpc_name]
+ rpc = get_rpc_for_handle(rpc_name, hmi_params, mob_params)
+ mob_absent_params = get_absent_mob_params(
+ hmi_params, mob_params, rpc)
+ hmi_absent_params = get_absent_hmi_params(
+ hmi_params, mob_params, rpc)
+ common_params = get_common_params(
+ rpc_name, mob_api_functions, hmi_api_functions)
+
+ rpc_name = str(rpc_name.rpc_name + " " + rpc_name.rpc_type)
+ if args.full_info:
+ print_full_info(hmi_absent_params, hmi_params,
+ mob_absent_params, mob_params, rpc_name)
+ print_parameters(common_params, hmi_params, mob_params)
+ handle_absent_params("Missed in Mobile APIs:", mob_absent_params,
+ rpc_name, summary_result)
+ handle_absent_params("Missed in HMI APIs:", hmi_absent_params,
+ rpc_name, summary_result)
+ get_diff(common_params, rpc_name, hmi_params,
+ mob_params, summary_result)
+ print_summary_info(summary_result, args)
+ set_build_status(summary_result)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/tools/infrastructure/check_style.sh b/tools/infrastructure/check_style.sh
index f42a048b34..647427e793 100755
--- a/tools/infrastructure/check_style.sh
+++ b/tools/infrastructure/check_style.sh
@@ -27,15 +27,31 @@
# 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.
+FORMATER=clang-format-3.6
+INSTALL_CMD="sudo apt-get install -f $FORMATER"
+
+if [ "$1" = "--help" ]
+then
+ echo ""
+ echo "Script checks c++ code style in all .h .cc and .cpp files"
+ echo "Uses $FORMATER as base tool. Install it with : $INSTALL_CMD"
+ echo "Usage: `basename $0` [option]"
+ echo " --fix Fix files format indirectly"
+ echo " --help Display this information"
+ exit 0
+fi
+
+command -v $FORMATER >/dev/null 2>&1 || { echo >&2 "$FORMATER is not installed. Use following: $INSTALL_CMD"; exit 1; }
+
FILE_NAMES=$(find src -name \*.h -print -o -name \*.cpp -print -o -name \*.cc -print | grep -v 3rd_party)
check_style() {
- clang-format-3.6 -style=file $1 | diff $1 -
+ $FORMATER -style=file $1 | diff $1 -
}
fix_style() {
- clang-format-3.6 -style=file -i $1
+ $FORMATER -style=file -i $1
}
if [ "$1" = "--fix" ]
diff --git a/tools/infrastructure/show_disabled.sh b/tools/infrastructure/show_disabled.sh
new file mode 100755
index 0000000000..7444755017
--- /dev/null
+++ b/tools/infrastructure/show_disabled.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+# Variable to store total amount of disabled unit tests
+total_disabled=0
+
+echo ""
+echo "===== DISABLED Unit-tests amount ===== "
+echo ""
+
+# Getting the list of all UT executables
+for test_file in $(ctest -N | awk '{print $3}'); do
+ full_path=`find . -name $test_file -type f 2>/dev/null`
+ if [ $full_path ] ; then
+ # Count amount of disabled tests cases
+ count_of_disabled=$(${full_path} --gtest_list_tests | grep DISABLED | wc -l)
+ if [ 0 != $count_of_disabled ] ; then
+ let "total_disabled = $total_disabled + $count_of_disabled"
+ echo $count_of_disabled " : " $test_file;
+ fi
+ fi
+done
+echo ""
+echo "TOTAL AMOUNT OF DISABLED TESTS : " $total_disabled;
+
+exit 0
+
+
diff --git a/tools/intergen/test/CMakeLists.txt b/tools/intergen/test/CMakeLists.txt
index f8af75c3bf..27d506443e 100644
--- a/tools/intergen/test/CMakeLists.txt
+++ b/tools/intergen/test/CMakeLists.txt
@@ -76,10 +76,10 @@ if (${HMI_DBUS_API})
${CMAKE_SOURCE_DIR}/src/components/dbus/include
${DBUS_INCLUDE_DIRS}
)
- set (LIBRARIES ${LIBRARIES} DBus)
+ set (LIBRARIES ${LIBRARIES} dbus)
set (SOURCES ${SOURCES} generated_interface_dbus_tests.cc)
endif ()
create_test(test_generated_interface "${SOURCES}" "${LIBRARIES}")
-endif() \ No newline at end of file
+endif()