Jelajahi Sumber

Show a nicer error message for domain socket users also.

Mike Naberezny 15 tahun lalu
induk
melakukan
89a3c33249

+ 7 - 0
src/supervisor/supervisorctl.py

@@ -227,6 +227,10 @@ class Controller(cmd.Cmd):
             if why[0] == errno.ECONNREFUSED:
                 self.output('%s refused connection' % self.options.serverurl)
                 return False
+            elif why[0] == errno.ENOENT:
+                msg = 'ERROR: %s no such file (already shut down?)'
+                self.output(msg % self.options.serverurl)
+                return False
             raise
         return True
 
@@ -771,6 +775,9 @@ class DefaultControllerPlugin(ControllerPluginBase):
                 if e[0] == errno.ECONNREFUSED:
                     msg = 'ERROR: %s refused connection (already shut down?)'
                     self.ctl.output(msg % self.ctl.options.serverurl)
+                elif e[0] == errno.ENOENT:
+                    msg = 'ERROR: %s no such file (already shut down?)'
+                    self.ctl.output(msg % self.ctl.options.serverurl)
                 else:
                     raise
             else:

+ 18 - 3
src/supervisor/tests/test_supervisorctl.py

@@ -540,9 +540,24 @@ class TestDefaultControllerPlugin(unittest.TestCase):
 
         result = plugin.do_shutdown('')
         self.assertEqual(result, None)
-        self.assertEqual(plugin.ctl.stdout.getvalue(), 
-                         'ERROR: http://localhost:92491 refused'
-                         ' connection (already shut down?)\n')
+
+        output = plugin.ctl.stdout.getvalue()
+        self.assertTrue('refused connection (already shut down?)' in output)
+
+    def test_shutdown_catches_socket_error_ENOENT(self):
+        plugin = self._makeOne()
+        import socket
+        import errno
+        
+        def raise_fault(*arg, **kw):     
+            raise socket.error(errno.ENOENT, 'no file')
+        plugin.ctl.options._server.supervisor.shutdown = raise_fault
+
+        result = plugin.do_shutdown('')
+        self.assertEqual(result, None)
+        
+        output = plugin.ctl.stdout.getvalue() 
+        self.assertTrue('no such file (already shut down?)' in output)        
 
     def test_shutdown_reraises_other_socket_errors(self):
         plugin = self._makeOne()