Browse Source

Fix help when signal command has no args

Mike Naberezny 11 years ago
parent
commit
93b060adbb
2 changed files with 39 additions and 5 deletions
  1. 7 5
      supervisor/supervisorctl.py
  2. 32 0
      supervisor/tests/test_supervisorctl.py

+ 7 - 5
supervisor/supervisorctl.py

@@ -825,15 +825,16 @@ class DefaultControllerPlugin(ControllerPluginBase):
             return
 
         args = arg.split()
+        if len(args) < 2:
+            self.ctl.output(
+                'Error: signal requires a signal name and a process name')
+            self.help_signal()
+            return
+
         sig = args[0]
         names = args[1:]
         supervisor = self.ctl.get_supervisor()
 
-        if not names:
-            self.ctl.output('Error: signal requires a process name')
-            self.help_signal()
-            return
-
         if 'all' in names:
             results = supervisor.signalAllProcesses(sig)
             for result in results:
@@ -872,6 +873,7 @@ class DefaultControllerPlugin(ControllerPluginBase):
         self.ctl.output("signal <signal name> <name>\t\tSignal a process")
         self.ctl.output("signal <signal name> <gname>:*\t\tSignal all processes in a group")
         self.ctl.output("signal <signal name> <name> <name>\tSignal multiple processes or groups")
+        self.ctl.output("signal <signal name> all\t\tSignal all processes")
 
     def do_restart(self, arg):
         if not self.ctl.upcheck():

+ 32 - 0
supervisor/tests/test_supervisorctl.py

@@ -796,6 +796,38 @@ class TestDefaultControllerPlugin(unittest.TestCase):
                          'foo2: stopped\n'
                          'failed_group:failed: ERROR (no such process)\n')
 
+    def test_stop_upcheck_failed(self):
+        plugin = self._makeOne()
+        plugin.ctl.upcheck = lambda: False
+        called = []
+        def f(*arg, **kw):
+            called.append(True)
+        supervisor = plugin.ctl.options._server.supervisor
+        supervisor.stopAllProcesses = f
+        supervisor.stopProcessGroup = f
+        plugin.do_stop('foo')
+        self.assertEqual(called, [])
+
+    def test_signal_help(self):
+        plugin = self._makeOne()
+        plugin.help_signal()
+        out = plugin.ctl.stdout.getvalue()
+        self.assertTrue("signal <signal name> <name>" in out)
+
+    def test_signal_no_arg(self):
+        plugin = self._makeOne()
+        result = plugin.do_signal('')
+        self.assertEqual(result, None)
+        msg = 'Error: signal requires a signal name and a process name'
+        self.assertEqual(plugin.ctl.stdout.getvalue().split('\n')[0], msg)
+
+    def test_signal_one_arg(self):
+        plugin = self._makeOne()
+        result = plugin.do_signal('hup')
+        self.assertEqual(result, None)
+        msg = 'Error: signal requires a signal name and a process name'
+        self.assertEqual(plugin.ctl.stdout.getvalue().split('\n')[0], msg)
+
     def test_restart_help(self):
         plugin = self._makeOne()
         plugin.help_restart()