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