فهرست منبع

Show a specific error message for a bad group name

Mike Naberezny 11 سال پیش
والد
کامیت
38a49923c3
3فایلهای تغییر یافته به همراه30 افزوده شده و 11 حذف شده
  1. 10 10
      supervisor/supervisorctl.py
  2. 6 0
      supervisor/tests/base.py
  3. 14 1
      supervisor/tests/test_supervisorctl.py

+ 10 - 10
supervisor/supervisorctl.py

@@ -683,11 +683,11 @@ class DefaultControllerPlugin(ControllerPluginBase):
                             result = self._startresult(result)
                             self.ctl.output(result)
                     except xmlrpclib.Fault, e:
-                        error = self._startresult({'status': e.faultCode,
-                                                   'name': process_name,
-                                                   'group': group_name,
-                                                   'description': e.faultString})
-                        self.ctl.output(error)
+                        if e.faultCode == xmlrpc.Faults.BAD_NAME:
+                            error = "%s: ERROR (no such group)" % group_name
+                            self.ctl.output(error)
+                        else:
+                            raise
                 else:
                     try:
                         result = supervisor.startProcess(name)
@@ -752,11 +752,11 @@ class DefaultControllerPlugin(ControllerPluginBase):
                             result = self._stopresult(result)
                             self.ctl.output(result)
                     except xmlrpclib.Fault, e:
-                        error = self._stopresult({'status': e.faultCode,
-                                                  'name': process_name,
-                                                  'group': group_name,
-                                                  'description': e.faultString})
-                        self.ctl.output(error)
+                        if e.faultCode == xmlrpc.Faults.BAD_NAME:
+                            error = "%s: ERROR (no such group)" % group_name
+                            self.ctl.output(error)
+                        else:
+                            raise
                 else:
                     try:
                         result = supervisor.stopProcess(name)

+ 6 - 0
supervisor/tests/base.py

@@ -767,6 +767,9 @@ class DummySupervisorRPCNamespace:
 
     def startProcessGroup(self, name):
         from supervisor import xmlrpc
+        from xmlrpclib import Fault
+        if name == 'BAD_NAME':
+            raise Fault(xmlrpc.Faults.BAD_NAME, 'BAD_NAME')
         return [
             {'name':'foo_00', 'group':'foo',
              'status': xmlrpc.Faults.SUCCESS,
@@ -792,6 +795,9 @@ class DummySupervisorRPCNamespace:
 
     def stopProcessGroup(self, name):
         from supervisor import xmlrpc
+        from xmlrpclib import Fault
+        if name == 'BAD_NAME':
+            raise Fault(xmlrpc.Faults.BAD_NAME, 'BAD_NAME')
         return [
             {'name':'foo_00', 'group':'foo',
              'status': xmlrpc.Faults.SUCCESS,

+ 14 - 1
supervisor/tests/test_supervisorctl.py

@@ -621,6 +621,13 @@ class TestDefaultControllerPlugin(unittest.TestCase):
                          'foo:foo_00: started\n'
                          'foo:foo_01: started\n')
 
+    def test_start_group_bad_name(self):
+        plugin = self._makeOne()
+        result = plugin.do_start('BAD_NAME:')
+        self.assertEqual(result, None)
+        self.assertEqual(plugin.ctl.stdout.getvalue(),
+                         'BAD_NAME: ERROR (no such group)\n')
+
     def test_start_all(self):
         plugin = self._makeOne()
         result = plugin.do_start('all')
@@ -688,11 +695,17 @@ class TestDefaultControllerPlugin(unittest.TestCase):
                          'foo:foo_00: stopped\n'
                          'foo:foo_01: stopped\n')
 
+    def test_stop_group_bad_name(self):
+        plugin = self._makeOne()
+        result = plugin.do_stop('BAD_NAME:')
+        self.assertEqual(result, None)
+        self.assertEqual(plugin.ctl.stdout.getvalue(),
+                         'BAD_NAME: ERROR (no such group)\n')
+
     def test_stop_all(self):
         plugin = self._makeOne()
         result = plugin.do_stop('all')
         self.assertEqual(result, None)
-
         self.assertEqual(plugin.ctl.stdout.getvalue(),
                          'foo: stopped\n'
                          'foo2: stopped\n'