From 34f6c7aae9d4359661c76b933b3fbb26dbe69f37 Mon Sep 17 00:00:00 2001 From: Olivier Stasse <olivier.stasse@laas.fr> Date: Wed, 29 Nov 2023 02:16:24 +0100 Subject: [PATCH] Prepare test_sot_loader to run scripts in embedded python. Prepare reception of ROS-2 topic from the SoT. --- tests/CMakeLists.txt | 12 ++++++--- tests/test_sot_loader.cpp | 53 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 58 insertions(+), 7 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 2a7b4dd..c4e0d47 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -66,6 +66,9 @@ if(BUILD_TESTING) test_sot_loader PUBLIC include "${GMOCK_INCLUDE_DIRS}" PRIVATE ${PROJECT_SOURCE_DIR}/include) + target_compile_definitions( + test_sot_loader + PUBLIC TEST_CONFIG_PATH="${CMAKE_CURRENT_LIST_DIR}/python_scripts/") target_link_libraries(test_sot_loader sot_loader "${GMOCK_LIBRARIES}") add_launch_test(launch/launching_test_sot_loader.py) @@ -89,6 +92,11 @@ if(BUILD_TESTING) # Create the cmake target using ament and gtest. ament_add_gtest(test_${test_name} main.cpp test_${test_name}.cpp) + # add some preprocessor variable + target_compile_definitions( + test_${test_name} + PUBLIC TEST_CONFIG_PATH="${CMAKE_CURRENT_LIST_DIR}/python_scripts/") + # Include dependencies. target_include_directories( test_${test_name} @@ -107,10 +115,6 @@ if(BUILD_TESTING) ament_target_dependencies(${current_test_name} dynamic_graph_bridge_msgs rclcpp rcl_interfaces std_srvs) - # add some preprocessor variable - target_compile_definitions( - test_${test_name} - PUBLIC TEST_CONFIG_PATH="${CMAKE_CURRENT_LIST_DIR}/python_scripts/") endmacro(create_ros_bridge_unittest test_name) # C++ unit-tests. diff --git a/tests/test_sot_loader.cpp b/tests/test_sot_loader.cpp index 59ca291..dcaff40 100644 --- a/tests/test_sot_loader.cpp +++ b/tests/test_sot_loader.cpp @@ -1,15 +1,39 @@ - +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-copy" #include <gmock/gmock.h> +#pragma clang diagnostic pop #include "dynamic_graph_bridge/ros.hpp" #include "dynamic_graph_bridge/sot_loader.hh" +#include "dynamic_graph_bridge_msgs/msg/vector.hpp" +#include "test_common.hpp" + +namespace test_sot_loader { +int l_argc; +char** l_argv; +} + +namespace dg = dynamicgraph; class MockSotLoaderTest : public ::testing::Test { public: class MockSotLoader : public SotLoader { public: + rclcpp::Subscription<dynamic_graph_bridge_msgs::msg::Vector>::SharedPtr + subscription_; + ~MockSotLoader() {} + void topic_callback(const dynamic_graph_bridge_msgs::msg::Vector::SharedPtr msg) const { + auto lsize=msg->data.size(); + } + + void subscribe_to_a_topic() { + subscription_ = create_subscription<dynamic_graph_bridge_msgs::msg::Vector>( + "control_ros", 1, std::bind(&MockSotLoader::topic_callback, this, + std::placeholders::_1)); + } + void generateEvents() { usleep(20000); std::cerr << "Start Dynamic Graph " << std::endl; @@ -33,6 +57,7 @@ class MockSotLoaderTest : public ::testing::Test { std::string finalname("libimpl_test_library.so"); EXPECT_TRUE(finalname == dynamicLibraryName_); + readSotVectorStateParam(); // Performs initialization of libimpl_test_library.so loadController(); EXPECT_TRUE(sotRobotControllerLibrary_ != 0); @@ -54,6 +79,14 @@ class MockSotLoaderTest : public ::testing::Test { // Start the thread generating events. std::thread local_events(&MockSotLoader::generateEvents, this); + // Create and call the clients. + std::string file_name = + TEST_CONFIG_PATH + std::string("simple_ros_publish.py"); + std::string result = ""; + std::string standard_output = ""; + std::string standard_error = ""; + //start_run_python_script_ros_service(file_name, result); + // Wait for each threads. SotLoader::lthread_join(); // Wait 100 ms local_events.join(); @@ -63,6 +96,18 @@ class MockSotLoaderTest : public ::testing::Test { public: MockSotLoader *mockSotLoader_ptr_; + // For the set of tests coded in this file. + static void SetUpTestCase() { + + rclcpp::init(test_sot_loader::l_argc, + test_sot_loader::l_argv); + } + + // For each test specified in this file + static void TearDownTestCase() { + rclcpp::shutdown(); + } + void SetUp() { mockSotLoader_ptr_ = new MockSotLoader(); mockSotLoader_ptr_->initialize(); @@ -80,10 +125,12 @@ TEST_F(MockSotLoaderTest, TestLoadController) { int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); - rclcpp::init(argc, argv); + + test_sot_loader::l_argc = argc; + test_sot_loader::l_argv = argv; + int r = RUN_ALL_TESTS(); - rclcpp::shutdown(); return r; } -- GitLab