Browse Source

get rpcinterface test coverage back up to 100%

Chris McDonough 10 years ago
parent
commit
5f67841ca5
2 changed files with 65 additions and 9 deletions
  1. 9 9
      supervisor/rpcinterface.py
  2. 56 0
      supervisor/tests/test_rpcinterfaces.py

+ 9 - 9
supervisor/rpcinterface.py

@@ -925,16 +925,16 @@ def make_allfunc(processes, predicate, func, **extra_kwargs):
                      'group':group.config.name,
                      'status':e.code,
                      'description':e.text})
-                value = None
-
-            if value is not NOT_DONE_YET:
-                results.append(
-                    {'name':process.config.name,
-                     'group':group.config.name,
-                     'status':Faults.SUCCESS,
-                     'description':'OK'}
-                    )
                 callbacks.remove(struct)
+            else:
+                if value is not NOT_DONE_YET:
+                    results.append(
+                        {'name':process.config.name,
+                         'group':group.config.name,
+                         'status':Faults.SUCCESS,
+                         'description':'OK'}
+                        )
+                    callbacks.remove(struct)
 
         if callbacks:
             return NOT_DONE_YET

+ 56 - 0
supervisor/tests/test_rpcinterfaces.py

@@ -2181,8 +2181,64 @@ class Test_make_allfunc(unittest.TestCase):
             'name': 'process1',
             'status': xmlrpc.Faults.FAILED}])
 
+    def test_func_callback_normal_return_val(self):
+        def cb(name, **kw):
+            return lambda: 1
+        options = DummyOptions()
+        pconfig1 = DummyPConfig(options, 'process1', 'foo')
+        proc = DummyProcess(pconfig1)
+        group = DummyProcessGroup(pconfig1)
+        def pred(proc):
+            return True
+        af = self._callFUT([(group, proc)], pred, cb)
+        result = af()
+        self.assertEqual(
+            result,
+            [{'group': 'process1',
+              'description': 'OK',
+              'status': 80, 'name': 'process1'}]
+            )
 
+    def test_func_callback_raises_RPCError(self):
+        from supervisor import xmlrpc
+        def cb(name, **kw):
+            def inner():
+                raise xmlrpc.RPCError(xmlrpc.Faults.FAILED)
+            return inner
+        options = DummyOptions()
+        pconfig1 = DummyPConfig(options, 'process1', 'foo')
+        proc = DummyProcess(pconfig1)
+        group = DummyProcessGroup(pconfig1)
+        def pred(proc):
+            return True
+        af = self._callFUT([(group, proc)], pred, cb)
+        result = af()
+        self.assertEqual(
+            result,
+            [{'description': 'FAILED',
+              'group': 'process1',
+              'status': 30,
+              'name': 'process1'}]
+            )
 
+    def test_func_callback_returns_NOT_DONE_YET(self):
+        from supervisor.http import NOT_DONE_YET
+        def cb(name, **kw):
+            def inner():
+                return NOT_DONE_YET
+            return inner
+        options = DummyOptions()
+        pconfig1 = DummyPConfig(options, 'process1', 'foo')
+        proc = DummyProcess(pconfig1)
+        group = DummyProcessGroup(pconfig1)
+        def pred(proc):
+            return True
+        af = self._callFUT([(group, proc)], pred, cb)
+        result = af()
+        self.assertEqual(
+            result,
+            NOT_DONE_YET,
+            )
 
 class Test_make_main_rpcinterface(unittest.TestCase):
     def _callFUT(self, supervisord):