From ed1a245beff9d0256d28edc0d02f8a9cabde1402 Mon Sep 17 00:00:00 2001 From: Christophe Bedard Date: Wed, 27 Mar 2024 16:14:59 -0700 Subject: [PATCH] Run relevant test_tracetools tests with all instrumented rmw impls Signed-off-by: Christophe Bedard --- test_tracetools/CMakeLists.txt | 38 +++++++++++++++++++++---- test_tracetools/package.xml | 1 + tracetools_test/tracetools_test/case.py | 5 +++- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/test_tracetools/CMakeLists.txt b/test_tracetools/CMakeLists.txt index a71d7c0f..951e7a00 100644 --- a/test_tracetools/CMakeLists.txt +++ b/test_tracetools/CMakeLists.txt @@ -198,6 +198,8 @@ if(BUILD_TESTING) # Only run tracing tests if instrumentation and tracepoints are included if(NOT TRACETOOLS_TRACEPOINTS_EXCLUDED) find_package(ament_cmake_pytest REQUIRED) + + # Tests to run with the default rmw implementation, which should not matter set(_test_tracetools_pytest_tests test/test_buffer.py test/test_executor.py @@ -205,12 +207,7 @@ if(BUILD_TESTING) test/test_intra_pub_sub.py test/test_lifecycle_node.py test/test_node.py - test/test_pub_sub.py - test/test_generic_pub_sub.py - test/test_publisher.py test/test_service.py - test/test_subscription.py - test/test_generic_subscription.py test/test_timer.py ) foreach(_test_path ${_test_tracetools_pytest_tests}) @@ -221,6 +218,37 @@ if(BUILD_TESTING) WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) endforeach() + + # Tests to run with all instrumented/supported rmw implementations + set(_test_tracetools_pytest_tests_multi_rmw + test/test_generic_pub_sub.py + test/test_generic_subscription.py + test/test_pub_sub.py + test/test_publisher.py + test/test_subscription.py + ) + set(_test_tracetools_rmw_implementations + rmw_connextdds + rmw_cyclonedds_cpp + rmw_fastrtps_cpp + ) + get_available_rmw_implementations(rmw_implementations) + foreach(_test_path ${_test_tracetools_pytest_tests_multi_rmw}) + get_filename_component(_test_name ${_test_path} NAME_WE) + foreach(rmw_implementation ${_test_tracetools_rmw_implementations}) + if(rmw_implementation IN_LIST rmw_implementations) + ament_add_pytest_test(${_test_name}__${rmw_implementation} ${_test_path} + ENV RMW_IMPLEMENTATION=${rmw_implementation} + APPEND_ENV PYTHONPATH=${CMAKE_CURRENT_BINARY_DIR} + TIMEOUT 60 + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) + else() + message(WARNING + "rmw implementation '${rmw_implementation}' not available for test '${_test_name}'") + endif() + endforeach() + endforeach() endif() endif() diff --git a/test_tracetools/package.xml b/test_tracetools/package.xml index 6e081954..14f39dbb 100644 --- a/test_tracetools/package.xml +++ b/test_tracetools/package.xml @@ -40,6 +40,7 @@ rclcpp rclcpp_lifecycle rcpputils + rmw_implementation_cmake std_msgs std_srvs tracetools diff --git a/tracetools_test/tracetools_test/case.py b/tracetools_test/tracetools_test/case.py index 9c25e1a6..c6681fc4 100644 --- a/tracetools_test/tracetools_test/case.py +++ b/tracetools_test/tracetools_test/case.py @@ -75,7 +75,10 @@ def __init__( """Create a TraceTestCase.""" super().__init__(methodName=args[0]) self._base_path = base_path or tempfile.gettempdir() - self._session_name_prefix = session_name_prefix + # Append rmw implementation name to session name if one is explicitly set + rmw_implementation = os.environ.get('RMW_IMPLEMENTATION', None) + self._session_name_prefix = \ + session_name_prefix + ('__' + rmw_implementation if rmw_implementation else '') self._events_ros = events_ros + [TRACE_TEST_ID_TP_NAME] self._events_kernel = events_kernel self._package = package