Преглед на файлове

Fix help when signal command has no args

Mike Naberezny преди 10 години
родител
ревизия
2b999ae96f
променени са 2 файла, в които са добавени 27 реда и са изтрити 5 реда
  1. 7 5
      supervisor/supervisorctl.py
  2. 20 0
      supervisor/tests/test_supervisorctl.py

+ 7 - 5
supervisor/supervisorctl.py

@@ -800,15 +800,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:
@@ -847,6 +848,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():

+ 20 - 0
supervisor/tests/test_supervisorctl.py

@@ -860,6 +860,26 @@ class TestDefaultControllerPlugin(unittest.TestCase):
         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()