Skip to content

Commit

Permalink
Test all RMW implementations for rosbag2_transport (ros2#349)
Browse files Browse the repository at this point in the history
* Test rosbag2_transport for all rmw implementations

Signed-off-by: Emerson Knapp <emerson.b.knapp@gmail.com>
  • Loading branch information
emersonknapp committed Apr 3, 2020
1 parent 14b8bea commit e656e76
Show file tree
Hide file tree
Showing 4 changed files with 129 additions and 79 deletions.
13 changes: 12 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,18 @@ jobs:
- uses: ros-tooling/setup-ros@0.0.13
- uses: ros-tooling/action-ros-ci@0.0.13
with:
package-name: ros2bag rosbag2_compression rosbag2_cpp rosbag2_storage rosbag2_storage_default_plugins rosbag2_test_common rosbag2_tests shared_queues_vendor sqlite3_vendor
package-name: |
ros2bag
rosbag2_compression
rosbag2_converter_default_plugins
rosbag2_cpp
rosbag2_storage
rosbag2_storage_default_plugins
rosbag2_transport
shared_queues_vendor
sqlite3_vendor
rosbag2_test_common
rosbag2_tests
- uses: actions/upload-artifact@master
with:
name: colcon-logs
Expand Down
128 changes: 51 additions & 77 deletions rosbag2_transport/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ find_package(rcutils REQUIRED)
find_package(rmw REQUIRED)
find_package(rosbag2_compression REQUIRED)
find_package(rosbag2_cpp REQUIRED)
find_package(rmw_implementation_cmake REQUIRED)
find_package(shared_queues_vendor REQUIRED)
find_package(yaml_cpp_vendor REQUIRED)

Expand Down Expand Up @@ -84,120 +85,93 @@ ament_export_interfaces(export_${PROJECT_NAME})
ament_export_libraries(${PROJECT_NAME})
ament_export_dependencies(rosbag2_cpp rosbag2_compression yaml_cpp_vendor)

if(BUILD_TESTING)
find_package(ament_cmake_gmock REQUIRED)
find_package(ament_index_cpp REQUIRED)
find_package(ament_lint_auto REQUIRED)
find_package(test_msgs REQUIRED)
find_package(rosbag2_test_common REQUIRED)
# explicitly disable cppcheck
set(ament_cmake_cppcheck_FOUND TRUE)
ament_lint_auto_find_test_dependencies()

ament_add_gmock(test_info
function(create_tests_for_rmw_implementation)
rosbag2_transport_add_gmock(test_info
test/rosbag2_transport/test_info.cpp
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
if(TARGET test_info)
target_link_libraries(test_info rosbag2_transport)
ament_target_dependencies(test_info rosbag2_test_common)
endif()
LINK_LIBS rosbag2_transport
AMENT_DEPS rosbag2_test_common)

ament_add_gmock(test_record_all
rosbag2_transport_add_gmock(test_record_all
test/rosbag2_transport/test_record_all.cpp
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
if(TARGET test_record_all)
target_link_libraries(test_record_all rosbag2_transport)
ament_target_dependencies(test_record_all test_msgs rosbag2_test_common)
endif()
LINK_LIBS rosbag2_transport
AMENT_DEPS test_msgs rosbag2_test_common)

ament_add_gmock(test_record_all_no_discovery
rosbag2_transport_add_gmock(test_record_all_no_discovery
test/rosbag2_transport/test_record_all_no_discovery.cpp
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
if(TARGET test_record_all_no_discovery)
target_link_libraries(test_record_all_no_discovery rosbag2_transport)
ament_target_dependencies(test_record_all_no_discovery test_msgs rosbag2_test_common)
endif()
LINK_LIBS rosbag2_transport
AMENT_DEPS test_msgs rosbag2_test_common)

ament_add_gmock(test_play_timing
rosbag2_transport_add_gmock(test_play_timing
test/rosbag2_transport/test_play_timing.cpp
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
if(TARGET test_play_timing)
target_link_libraries(test_play_timing rosbag2_transport)
ament_target_dependencies(test_play_timing test_msgs rosbag2_test_common)
endif()
LINK_LIBS rosbag2_transport
AMENT_DEPS test_msgs rosbag2_test_common)

ament_add_gmock(test_rosbag2_node
rosbag2_transport_add_gmock(test_rosbag2_node
src/rosbag2_transport/generic_publisher.cpp
src/rosbag2_transport/generic_subscription.cpp
src/rosbag2_transport/qos.cpp
src/rosbag2_transport/recorder.cpp
src/rosbag2_transport/rosbag2_node.cpp
test/rosbag2_transport/test_rosbag2_node.cpp
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
if(TARGET test_rosbag2_node)
target_include_directories(test_rosbag2_node
INCLUDE_DIRS
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/rosbag2_transport>
$<INSTALL_INTERFACE:include>)
ament_target_dependencies(test_rosbag2_node
$<INSTALL_INTERFACE:include>
AMENT_DEPS
ament_index_cpp
rclcpp
rosbag2_cpp
rosbag2_test_common
test_msgs
yaml_cpp_vendor)
endif()

ament_add_gmock(test_formatter
rosbag2_transport_add_gmock(test_formatter
test/rosbag2_transport/test_formatter.cpp
src/rosbag2_transport/formatter.cpp
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
if(TARGET test_formatter)
target_link_libraries(test_formatter rosbag2_transport)
endif()
LINK_LIBS rosbag2_transport)

rosbag2_transport_add_gmock(test_qos
src/rosbag2_transport/qos.cpp
test/rosbag2_transport/test_qos.cpp
INCLUDE_DIRS
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/rosbag2_transport>
AMENT_DEPS
rosbag2_test_common
yaml_cpp_vendor)

# disable the following tests for connext
# due to slower discovery of nodes
get_default_rmw_implementation(rmw_default)
set(SKIP_TEST "")
if(${rmw_default} MATCHES "(.*)connext(.*)")
if(${rmw_implementation} MATCHES "(.*)connext(.*)")
set(SKIP_TEST "SKIP_TEST")
endif()

ament_add_gmock(test_record
rosbag2_transport_add_gmock(test_record
test/rosbag2_transport/test_record.cpp
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
${SKIP_TEST})
if(TARGET test_record)
target_link_libraries(test_record rosbag2_transport)
ament_target_dependencies(test_record test_msgs rosbag2_test_common)
endif()
${SKIP_TEST}
LINK_LIBS rosbag2_transport
AMENT_DEPS test_msgs rosbag2_test_common)

ament_add_gmock(test_play
rosbag2_transport_add_gmock(test_play
test/rosbag2_transport/test_play.cpp
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
${SKIP_TEST})
if(TARGET test_play)
target_link_libraries(test_play rosbag2_transport)
ament_target_dependencies(test_play test_msgs rosbag2_test_common)
endif()

ament_add_gmock(test_qos
src/rosbag2_transport/qos.cpp
test/rosbag2_transport/test_qos.cpp
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
${SKIP_TEST})
if(TARGET test_qos)
target_include_directories(test_qos
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/rosbag2_transport>)
ament_target_dependencies(test_qos
rosbag2_test_common
yaml_cpp_vendor)
endif()
${SKIP_TEST}
LINK_LIBS rosbag2_transport
AMENT_DEPS test_msgs rosbag2_test_common)
endfunction()

if(BUILD_TESTING)
find_package(ament_cmake_gmock REQUIRED)
find_package(ament_index_cpp REQUIRED)
find_package(ament_lint_auto REQUIRED)
find_package(test_msgs REQUIRED)
find_package(rosbag2_test_common REQUIRED)
include(cmake/rosbag2_transport_add_gmock.cmake)
# explicitly disable cppcheck
set(ament_cmake_cppcheck_FOUND TRUE)
ament_lint_auto_find_test_dependencies()
call_for_each_rmw_implementation(create_tests_for_rmw_implementation)
endif()

ament_package()
64 changes: 64 additions & 0 deletions rosbag2_transport/cmake/rosbag2_transport_add_gmock.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#
# Create a rosbag2_transport specific gmock test for a given rmw implementation
#
# The following variables must be set before calling this function. Note that
# these are set by `call_for_each_rmw_implementation`, so if you call this
# within that context, the constraint is already met:
# * rmw_implementation: The package name of the RMW implementation
# * target_suffix: Either a string derived from the RMW implementation or empty
# if there is only one RMW implementation
#
# :param target_base: the base name of the test to create, it will be suffixed
# :type target_base: string
# :param SKIP_TEST: if set, do not actually run the test at test time
# :type GENERATE_DEFAULT: option
# :param LINK_LIBS: libraries to link to the test executable
# :type LINK_LIBS: list of strings
# :param AMENT_DEPS: ament dependencies to declare for the test executable
# :type AMENT_DEPS: list of strings
# :param INCLUDE_DIRS: extra include directories to use for building the test
# :type INCLUDE_DIRS: list of strings
#
function(rosbag2_transport_add_gmock target_base)
cmake_parse_arguments(ARG
"SKIP_TEST"
""
"LINK_LIBS;AMENT_DEPS;INCLUDE_DIRS"
${ARGN})
if(NOT ARG_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "rosbag2_transport_add_gmock() must be invoked with "
"at least one source file")
endif()
if(${ARG_SKIP_TEST})
set(SKIP_TEST "SKIP_TEST")
else()
set(SKIP_TEST "")
endif()

set(target_name ${target_base}${target_suffix})
set(rmw_implementation_env_var RMW_IMPLEMENTATION=${rmw_implementation})
ament_add_gmock(${target_name}
${ARG_UNPARSED_ARGUMENTS}
ENV ${rmw_implementation_env_var}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
${SKIP_TEST})
if(TARGET ${target_name})
target_link_libraries(${target_name} ${ARG_LINK_LIBS})
target_include_directories(${target_name} PUBLIC ${ARG_INCLUDE_DIRS})
ament_target_dependencies(${target_name} ${ARG_AMENT_DEPS})
endif()
endfunction()
3 changes: 2 additions & 1 deletion rosbag2_transport/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@
<test_depend>ament_index_cpp</test_depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<test_depend>test_msgs</test_depend>
<test_depend>rmw_implementation_cmake</test_depend>
<test_depend>rosbag2_test_common</test_depend>
<test_depend>test_msgs</test_depend>

<export>
<build_type>ament_cmake</build_type>
Expand Down

0 comments on commit e656e76

Please sign in to comment.