Browse Source

[2353] Test various combinations of booleans in BoB.reap_children()

Mukund Sivaraman 12 years ago
parent
commit
b1c8e1ce93
1 changed files with 37 additions and 9 deletions
  1. 37 9
      src/bin/bind10/tests/bind10_test.py.in

+ 37 - 9
src/bin/bind10/tests/bind10_test.py.in

@@ -1014,6 +1014,8 @@ class MockComponent:
         self.address = lambda: address
         self.restarted = False
         self.forceful = False
+        self.running = True
+        self.has_failed = False
 
     def get_restart_time(self):
         return 0                # arbitrary dummy value
@@ -1023,10 +1025,10 @@ class MockComponent:
         return True
 
     def is_running(self):
-        return True
+        return self.running
 
     def failed(self, status):
-        return False
+        return self.has_failed
 
     def kill(self, forceful):
         self.forceful = forceful
@@ -1449,19 +1451,45 @@ class TestBossComponents(unittest.TestCase):
             last_pid = pid
             self.assertEqual([pid, 'test' + str(pid), 'Test' + str(pid)], process)
 
-    def test_reap_children(self):
-        '''Test that children are queued to be restarted when they ask for it.'''
+    def _test_reap_children_helper(self, runnable, is_running, failed):
+        '''Construct a BoB instance, set various data in it according to
+        passed args and check if the component was added to the list of
+        components to restart.'''
         bob = MockBob()
-        bob.runnable = True
+        bob.runnable = runnable
+
         component = MockComponent('test', 53)
+        component.running = is_running
+        component.has_failed = failed
         bob.components[53] = component
 
-        # at first, we don't have the component with pid 53 that
-        # terminated in our restart queue.
         self.assertFalse(component in bob.components_to_restart)
+
         bob.reap_children()
-        # now, we should as the mock component.failed() returns False
-        self.assertTrue(component in bob.components_to_restart)
+
+        if runnable and is_running and not failed:
+            self.assertTrue(bob.components_to_restart)
+        else:
+            self.assertFalse(bob.components_to_restart)
+
+    def test_reap_children(self):
+        '''Test that children are queued to be restarted when they ask for it.'''
+        # test various combinations of 3 booleans
+        # (BoB.runnable, component.is_running(), component.failed())
+        self._test_reap_children_helper(False, False, False)
+        self._test_reap_children_helper(False, False, True)
+        self._test_reap_children_helper(False, True,  False)
+        self._test_reap_children_helper(False, True,  True)
+        self._test_reap_children_helper(True,  False, False)
+        self._test_reap_children_helper(True,  False, True)
+        self._test_reap_children_helper(True,  True,  False)
+        self._test_reap_children_helper(True,  True,  True)
+
+        # setup for more tests below
+        bob = MockBob()
+        bob.runnable = True
+        component = MockComponent('test', 53)
+        bob.components[53] = component
 
         # case where the returned pid is unknown to us. nothing should
         # happpen then.