From 6bf26d361bb712093fbc8aa6bfc35f5919d66d08 Mon Sep 17 00:00:00 2001
From: Kenny Sharma <kenny.sharma@tum.de>
Date: Wed, 29 Mar 2017 09:59:52 +0200
Subject: [PATCH] [NRRPLT-4885] Cleanup ROS nodes created by distributed
 launch.

The distributed launch now creates a ROS node in the CLE to ensure
logs are properly redirected to stdout. This node and any future nodes
should be cleaned up as we do in the CLELauncher, but this needs to be
done after shutdown of all launched components.

Change-Id: I00733872978d13cf4c3f319c7e594feae866d930
---
 .../hbp_nrp_music_interface/launch/MUSICLauncher.py         | 3 +++
 .../tests/launch/test_music_launcher.py                     | 6 +++++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/hbp_nrp_music_interface/hbp_nrp_music_interface/launch/MUSICLauncher.py b/hbp_nrp_music_interface/hbp_nrp_music_interface/launch/MUSICLauncher.py
index f508830..bb034af 100644
--- a/hbp_nrp_music_interface/hbp_nrp_music_interface/launch/MUSICLauncher.py
+++ b/hbp_nrp_music_interface/hbp_nrp_music_interface/launch/MUSICLauncher.py
@@ -133,3 +133,6 @@ class MUSICLauncher(object):
         if self._launcher:
             self._launcher.shutdown()
         self._launcher = None
+
+        # finally, cleanup the roscore and any registrations launched by the above
+        os.system("echo 'y' | timeout -s SIGKILL 10s rosnode cleanup >/dev/null 2>&1")
diff --git a/hbp_nrp_music_interface/hbp_nrp_music_interface/tests/launch/test_music_launcher.py b/hbp_nrp_music_interface/hbp_nrp_music_interface/tests/launch/test_music_launcher.py
index 6148bfe..6969440 100644
--- a/hbp_nrp_music_interface/hbp_nrp_music_interface/tests/launch/test_music_launcher.py
+++ b/hbp_nrp_music_interface/hbp_nrp_music_interface/tests/launch/test_music_launcher.py
@@ -47,7 +47,8 @@ class TestMUSICLauncher(unittest.TestCase):
           self.__launcher.cle_server.build.assert_called_once()
           self.__launcher.cle_server.launch.assert_called_once()
 
-      def test_shutdown(self):
+      @patch('os.system')
+      def test_shutdown(self, system_mock):
 
           # mock the cleserver and launcher
           mock_cle_server = Mock()
@@ -68,5 +69,8 @@ class TestMUSICLauncher(unittest.TestCase):
           self.assertEqual(self.__launcher.cle_server, None)
           self.assertEqual(self.__launcher._launcher, None)
 
+          # verify the ros cleanup command has been called
+          system_mock.assert_called_once()
+
 if __name__ == "__main__":
     unittest.main()
-- 
GitLab