Browse Source

[2353] Test exception handling in BoB.reap_children()

Mukund Sivaraman 12 years ago
parent
commit
09f21f49fa
1 changed files with 28 additions and 0 deletions
  1. 28 0
      src/bin/bind10/tests/bind10_test.py.in

+ 28 - 0
src/bin/bind10/tests/bind10_test.py.in

@@ -717,6 +717,15 @@ class MockBob(BoB):
         self.get_process_exit_status_called = True
         return (53, 0)
 
+    def _get_process_exit_status_raises_oserror_echild(self):
+        raise OSError(errno.ECHILD, 'Mock error')
+
+    def _get_process_exit_status_raises_oserror_other(self):
+        raise OSError(0, 'Mock error')
+
+    def _get_process_exit_status_raises_other(self):
+        raise Exception('Mock error')
+
 class MockBobSimple(BoB):
     def __init__(self):
         BoB.__init__(self)
@@ -1448,6 +1457,25 @@ class TestBossComponents(unittest.TestCase):
         # now, we should as the mock component.failed() returns False
         self.assertTrue(component in bob.components_to_restart)
 
+        # case where bob._get_process_exit_status() raises OSError with errno.ECHILD
+        bob._get_process_exit_status = bob._get_process_exit_status_raises_oserror_echild
+        bob.components_to_restart = []
+        # this should catch and handle the OSError
+        bob.reap_children()
+        self.assertFalse(component in bob.components_to_restart)
+
+        # case where bob._get_process_exit_status() raises OSError with
+        # errno other than ECHILD
+        bob._get_process_exit_status = bob._get_process_exit_status_raises_oserror_other
+        with self.assertRaises(OSError):
+            bob.reap_children()
+
+        # case where bob._get_process_exit_status() raises something
+        # other than OSError
+        bob._get_process_exit_status = bob._get_process_exit_status_raises_other
+        with self.assertRaises(Exception):
+            bob.reap_children()
+
     def test_kill_started_components(self):
         '''Test that started components are killed.'''
         bob = MockBob()