Parcourir la source

[2962] Don't raise another exception, but re-raise the same one

... so that we have backtrace of what actual problem caused it.
Mukund Sivaraman il y a 11 ans
Parent
commit
940eae0ca5
2 fichiers modifiés avec 10 ajouts et 10 suppressions
  1. 4 3
      src/bin/cmdctl/cmdctl.py.in
  2. 6 7
      src/bin/cmdctl/tests/cmdctl_test.py

+ 4 - 3
src/bin/cmdctl/cmdctl.py.in

@@ -601,12 +601,13 @@ class SecureHTTPServer(socketserver_mixin.NoPollMixIn,
             # error)
             return ssl_sock
         except ssl.SSLError as err:
+            self.close_request(sock)
             logger.error(CMDCTL_SSL_SETUP_FAILURE_USER_DENIED, err)
+            raise
         except (CmdctlException, IOError) as cce:
+            self.close_request(sock)
             logger.error(CMDCTL_SSL_SETUP_FAILURE_READING_CERT, cce)
-        self.close_request(sock)
-        # raise socket error to finish the request
-        raise socket.error
+            raise
 
     def get_request(self):
         '''Get client request socket and wrap it in SSL context. '''

+ 6 - 7
src/bin/cmdctl/tests/cmdctl_test.py

@@ -15,7 +15,7 @@
 
 
 import unittest
-import socket
+import ssl, socket
 import tempfile
 import time
 import stat
@@ -729,16 +729,15 @@ class TestSecureHTTPServer(unittest.TestCase):
     def test_wrap_sock_in_ssl_context(self):
         sock = socket.socket()
 
-        # Bad files should result in a socket.error raised by our own
-        # code in the basic file checks
-        self.assertRaises(socket.error,
+        # Bad files should result in a CmdctlException in the basic file
+        # checks
+        self.assertRaises(CmdctlException,
                           self.server._wrap_socket_in_ssl_context,
                           sock,
                           'no_such_file', 'no_such_file')
 
-        # Using a non-certificate file would cause an SSLError, which
-        # is caught by our code which then raises a basic socket.error
-        self.assertRaises(socket.error,
+        # Using a non-certificate file would cause an SSLError
+        self.assertRaises(ssl.SSLError,
                           self.server._wrap_socket_in_ssl_context,
                           sock,
                           BUILD_FILE_PATH + 'cmdctl.py',