From 01a9261abfa0ed44ef2edb1c76eb0edbeefa9f5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20Fr=C3=B6hlich?= Date: Sun, 15 Dec 2024 13:19:26 +0100 Subject: [PATCH] Use class methods for rclpy.init/shutdown (#664) --- example_1/test/test_rrbot_launch.py | 23 +++++++++++------ .../test/test_rrbot_launch_cli_direct.py | 12 ++++++--- example_10/test/test_rrbot_launch.py | 12 ++++++--- example_11/test/test_carlikebot_launch.py | 12 ++++++--- example_12/test/test_rrbot_launch.py | 25 +++++++++++++------ example_13/test/test_three_robots_launch.py | 12 ++++++--- ...ck_sensors_for_position_feedback_launch.py | 12 ++++++--- .../test_multi_controller_manager_launch.py | 12 ++++++--- .../test/test_rrbot_namespace_launch.py | 12 ++++++--- example_2/test/test_diffbot_launch.py | 12 ++++++--- ...est_rrbot_system_multi_interface_launch.py | 12 ++++++--- .../test_rrbot_system_with_sensor_launch.py | 12 ++++++--- ...rbot_system_with_external_sensor_launch.py | 12 ++++++--- .../test_rrbot_modular_actuators_launch.py | 12 ++++++--- .../test/test_r6bot_controller_launch.py | 12 ++++++--- ...ansmissions_system_position_only_launch.py | 12 ++++++--- example_9/test/test_rrbot_launch.py | 12 ++++++--- 17 files changed, 153 insertions(+), 75 deletions(-) diff --git a/example_1/test/test_rrbot_launch.py b/example_1/test/test_rrbot_launch.py index ecc66ecf7..30fa7467e 100644 --- a/example_1/test/test_rrbot_launch.py +++ b/example_1/test/test_rrbot_launch.py @@ -41,7 +41,6 @@ # import launch_testing.markers import rclpy -from rclpy.node import Node from ros2_control_demo_testing.test_utils import ( check_controllers_running, check_if_js_published, @@ -68,14 +67,19 @@ def generate_test_description(): # This is our test fixture. Each method is a test case. # These run alongside the processes specified in generate_test_description() class TestFixture(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_node_start(self, proc_output): check_node_running(self.node, "robot_state_publisher") @@ -91,14 +95,19 @@ def test_check_if_msgs_published(self): class TestFixtureCLI(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_main(self, proc_output): diff --git a/example_1/test/test_rrbot_launch_cli_direct.py b/example_1/test/test_rrbot_launch_cli_direct.py index cab04cfa8..0aa14fabb 100644 --- a/example_1/test/test_rrbot_launch_cli_direct.py +++ b/example_1/test/test_rrbot_launch_cli_direct.py @@ -41,7 +41,6 @@ # import launch_testing.markers import rclpy -from rclpy.node import Node from ros2_control_demo_testing.test_utils import check_controllers_running @@ -62,14 +61,19 @@ def generate_test_description(): class TestFixtureCliDirect(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_main(self, proc_output): diff --git a/example_10/test/test_rrbot_launch.py b/example_10/test/test_rrbot_launch.py index 005ee36e8..e9df25da7 100644 --- a/example_10/test/test_rrbot_launch.py +++ b/example_10/test/test_rrbot_launch.py @@ -39,7 +39,6 @@ from launch_testing.actions import ReadyToTest import rclpy -from rclpy.node import Node from ros2_control_demo_testing.test_utils import ( check_controllers_running, check_if_js_published, @@ -68,14 +67,19 @@ def generate_test_description(): # This is our test fixture. Each method is a test case. # These run alongside the processes specified in generate_test_description() class TestFixture(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_node_start(self, proc_output): check_node_running(self.node, "robot_state_publisher") diff --git a/example_11/test/test_carlikebot_launch.py b/example_11/test/test_carlikebot_launch.py index 5636eda21..1afb4ff33 100644 --- a/example_11/test/test_carlikebot_launch.py +++ b/example_11/test/test_carlikebot_launch.py @@ -40,7 +40,6 @@ # import launch_testing.markers import rclpy -from rclpy.node import Node from ros2_control_demo_testing.test_utils import ( check_controllers_running, check_if_js_published, @@ -67,14 +66,19 @@ def generate_test_description(): # This is our test fixture. Each method is a test case. # These run alongside the processes specified in generate_test_description() class TestFixture(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_node_start(self, proc_output): check_node_running(self.node, "robot_state_publisher") diff --git a/example_12/test/test_rrbot_launch.py b/example_12/test/test_rrbot_launch.py index 5f716c906..5abbec91a 100644 --- a/example_12/test/test_rrbot_launch.py +++ b/example_12/test/test_rrbot_launch.py @@ -41,7 +41,6 @@ # import launch_testing.markers import rclpy -from rclpy.node import Node from ros2_control_demo_testing.test_utils import ( check_controllers_running, check_if_js_published, @@ -68,14 +67,19 @@ def generate_test_description(): # This is our test fixture. Each method is a test case. # These run alongside the processes specified in generate_test_description() class TestFixture(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_node_start(self, proc_output): check_node_running(self.node, "robot_state_publisher") @@ -97,10 +101,9 @@ def test_check_if_msgs_published(self): # This is our second test fixture. Each method is a test case. # These run alongside the processes specified in generate_test_description() class TestFixtureChained(unittest.TestCase): - - def setUp(self): + @classmethod + def setUpClass(cls): rclpy.init() - self.node = Node("test_node") # Command to run the launch file command = [ "ros2", @@ -111,9 +114,15 @@ def setUp(self): # Execute the command subprocess.run(command) + @classmethod + def tearDownClass(cls): + rclpy.shutdown() + + def setUp(self): + self.node = rclpy.create_node("test_node") + def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_node_start(self, proc_output): check_node_running(self.node, "robot_state_publisher") diff --git a/example_13/test/test_three_robots_launch.py b/example_13/test/test_three_robots_launch.py index 0937f3de6..9e0fed689 100644 --- a/example_13/test/test_three_robots_launch.py +++ b/example_13/test/test_three_robots_launch.py @@ -41,7 +41,6 @@ # import launch_testing.markers import rclpy -from rclpy.node import Node from ros2_control_demo_testing.test_utils import ( check_controllers_running, check_if_js_published, @@ -68,14 +67,19 @@ def generate_test_description(): # This is our first test fixture. Each method is a test case. # These run alongside the processes specified in generate_test_description() class TestFixture(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_node_start(self, proc_output): check_node_running(self.node, "robot_state_publisher") diff --git a/example_14/test/test_rrbot_modular_actuators_without_feedback_sensors_for_position_feedback_launch.py b/example_14/test/test_rrbot_modular_actuators_without_feedback_sensors_for_position_feedback_launch.py index 9f8158944..b26ee3a40 100644 --- a/example_14/test/test_rrbot_modular_actuators_without_feedback_sensors_for_position_feedback_launch.py +++ b/example_14/test/test_rrbot_modular_actuators_without_feedback_sensors_for_position_feedback_launch.py @@ -40,7 +40,6 @@ # import launch_testing.markers import rclpy -from rclpy.node import Node from ros2_control_demo_testing.test_utils import ( check_controllers_running, check_if_js_published, @@ -67,14 +66,19 @@ def generate_test_description(): # This is our test fixture. Each method is a test case. # These run alongside the processes specified in generate_test_description() class TestFixture(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_node_start(self, proc_output): check_node_running(self.node, "robot_state_publisher") diff --git a/example_15/test/test_multi_controller_manager_launch.py b/example_15/test/test_multi_controller_manager_launch.py index a927fdb6d..a78cfdc78 100644 --- a/example_15/test/test_multi_controller_manager_launch.py +++ b/example_15/test/test_multi_controller_manager_launch.py @@ -40,7 +40,6 @@ # import launch_testing.markers import rclpy -from rclpy.node import Node from ros2_control_demo_testing.test_utils import ( check_controllers_running, check_if_js_published, @@ -67,14 +66,19 @@ def generate_test_description(): # This is our test fixture. Each method is a test case. # These run alongside the processes specified in generate_test_description() class TestFixture(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_node_start(self, proc_output): check_node_running(self.node, "robot_state_publisher") diff --git a/example_15/test/test_rrbot_namespace_launch.py b/example_15/test/test_rrbot_namespace_launch.py index a4e5dfb97..702be9d52 100644 --- a/example_15/test/test_rrbot_namespace_launch.py +++ b/example_15/test/test_rrbot_namespace_launch.py @@ -40,7 +40,6 @@ # import launch_testing.markers import rclpy -from rclpy.node import Node from ros2_control_demo_testing.test_utils import ( check_controllers_running, check_if_js_published, @@ -67,14 +66,19 @@ def generate_test_description(): # This is our test fixture. Each method is a test case. # These run alongside the processes specified in generate_test_description() class TestFixture(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_node_start(self, proc_output): check_node_running(self.node, "robot_state_publisher") diff --git a/example_2/test/test_diffbot_launch.py b/example_2/test/test_diffbot_launch.py index 5f762872b..d84de296a 100644 --- a/example_2/test/test_diffbot_launch.py +++ b/example_2/test/test_diffbot_launch.py @@ -40,7 +40,6 @@ # import launch_testing.markers import rclpy -from rclpy.node import Node from ros2_control_demo_testing.test_utils import ( check_controllers_running, check_if_js_published, @@ -67,14 +66,19 @@ def generate_test_description(): # This is our test fixture. Each method is a test case. # These run alongside the processes specified in generate_test_description() class TestFixture(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_node_start(self, proc_output): check_node_running(self.node, "robot_state_publisher") diff --git a/example_3/test/test_rrbot_system_multi_interface_launch.py b/example_3/test/test_rrbot_system_multi_interface_launch.py index 8f6394df2..9b5529654 100644 --- a/example_3/test/test_rrbot_system_multi_interface_launch.py +++ b/example_3/test/test_rrbot_system_multi_interface_launch.py @@ -40,7 +40,6 @@ # import launch_testing.markers import rclpy -from rclpy.node import Node from ros2_control_demo_testing.test_utils import ( check_controllers_running, check_if_js_published, @@ -67,14 +66,19 @@ def generate_test_description(): # This is our test fixture. Each method is a test case. # These run alongside the processes specified in generate_test_description() class TestFixture(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_node_start(self, proc_output): check_node_running(self.node, "robot_state_publisher") diff --git a/example_4/test/test_rrbot_system_with_sensor_launch.py b/example_4/test/test_rrbot_system_with_sensor_launch.py index d9238acf2..9e5001654 100644 --- a/example_4/test/test_rrbot_system_with_sensor_launch.py +++ b/example_4/test/test_rrbot_system_with_sensor_launch.py @@ -40,7 +40,6 @@ # import launch_testing.markers import rclpy -from rclpy.node import Node from ros2_control_demo_testing.test_utils import ( check_controllers_running, check_if_js_published, @@ -67,14 +66,19 @@ def generate_test_description(): # This is our test fixture. Each method is a test case. # These run alongside the processes specified in generate_test_description() class TestFixture(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_node_start(self, proc_output): check_node_running(self.node, "robot_state_publisher") diff --git a/example_5/test/test_rrbot_system_with_external_sensor_launch.py b/example_5/test/test_rrbot_system_with_external_sensor_launch.py index cce21b560..e965d5ace 100644 --- a/example_5/test/test_rrbot_system_with_external_sensor_launch.py +++ b/example_5/test/test_rrbot_system_with_external_sensor_launch.py @@ -40,7 +40,6 @@ # import launch_testing.markers import rclpy -from rclpy.node import Node from ros2_control_demo_testing.test_utils import ( check_controllers_running, check_if_js_published, @@ -67,14 +66,19 @@ def generate_test_description(): # This is our test fixture. Each method is a test case. # These run alongside the processes specified in generate_test_description() class TestFixture(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_node_start(self, proc_output): check_node_running(self.node, "robot_state_publisher") diff --git a/example_6/test/test_rrbot_modular_actuators_launch.py b/example_6/test/test_rrbot_modular_actuators_launch.py index b48389713..3e8a5e9d4 100644 --- a/example_6/test/test_rrbot_modular_actuators_launch.py +++ b/example_6/test/test_rrbot_modular_actuators_launch.py @@ -40,7 +40,6 @@ # import launch_testing.markers import rclpy -from rclpy.node import Node from ros2_control_demo_testing.test_utils import ( check_controllers_running, check_if_js_published, @@ -67,14 +66,19 @@ def generate_test_description(): # This is our test fixture. Each method is a test case. # These run alongside the processes specified in generate_test_description() class TestFixture(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_node_start(self, proc_output): check_node_running(self.node, "robot_state_publisher") diff --git a/example_7/test/test_r6bot_controller_launch.py b/example_7/test/test_r6bot_controller_launch.py index 42a731020..968f789f1 100644 --- a/example_7/test/test_r6bot_controller_launch.py +++ b/example_7/test/test_r6bot_controller_launch.py @@ -40,7 +40,6 @@ # import launch_testing.markers import rclpy -from rclpy.node import Node from ros2_control_demo_testing.test_utils import ( check_controllers_running, check_if_js_published, @@ -67,14 +66,19 @@ def generate_test_description(): # This is our test fixture. Each method is a test case. # These run alongside the processes specified in generate_test_description() class TestFixture(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_node_start(self, proc_output): check_node_running(self.node, "robot_state_publisher") diff --git a/example_8/test/test_rrbot_transmissions_system_position_only_launch.py b/example_8/test/test_rrbot_transmissions_system_position_only_launch.py index 96ba7d3c9..a16f4d7a7 100644 --- a/example_8/test/test_rrbot_transmissions_system_position_only_launch.py +++ b/example_8/test/test_rrbot_transmissions_system_position_only_launch.py @@ -40,7 +40,6 @@ # import launch_testing.markers import rclpy -from rclpy.node import Node from ros2_control_demo_testing.test_utils import ( check_controllers_running, check_if_js_published, @@ -67,14 +66,19 @@ def generate_test_description(): # This is our test fixture. Each method is a test case. # These run alongside the processes specified in generate_test_description() class TestFixture(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_node_start(self, proc_output): check_node_running(self.node, "robot_state_publisher") diff --git a/example_9/test/test_rrbot_launch.py b/example_9/test/test_rrbot_launch.py index fb2211e1e..6817f0e03 100644 --- a/example_9/test/test_rrbot_launch.py +++ b/example_9/test/test_rrbot_launch.py @@ -40,7 +40,6 @@ # import launch_testing.markers import rclpy -from rclpy.node import Node from ros2_control_demo_testing.test_utils import ( check_controllers_running, check_if_js_published, @@ -67,14 +66,19 @@ def generate_test_description(): # This is our test fixture. Each method is a test case. # These run alongside the processes specified in generate_test_description() class TestFixture(unittest.TestCase): + @classmethod + def setUpClass(cls): + rclpy.init() + + @classmethod + def tearDownClass(cls): + rclpy.shutdown() def setUp(self): - rclpy.init() - self.node = Node("test_node") + self.node = rclpy.create_node("test_node") def tearDown(self): self.node.destroy_node() - rclpy.shutdown() def test_node_start(self, proc_output): check_node_running(self.node, "robot_state_publisher")