bpo-44359: Fix test_ftplib unhandled thread exceptions (GH-31069)

test_ftplib now silently ignores socket errors to prevent logging
unhandled threading exceptions.
(cherry picked from commit 0611eafc709cbe8a2a0bdde082d25df0c5034de7)

Co-authored-by: Victor Stinner <vstinner@python.org>
This commit is contained in:
Miss Islington (bot) 2022-02-01 18:16:58 -08:00 committed by GitHub
parent a1869e385b
commit 0371e5d7f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 4 deletions

View File

@ -49,6 +49,13 @@ MLSD_DATA = ("type=cdir;perm=el;unique==keVO1+ZF4; test\r\n"
"type=file;perm=r;unique==SGP2; file \xAE non-ascii char\r\n")
def default_error_handler():
# bpo-44359: Silently ignore socket errors. Such errors occur when a client
# socket is closed, in TestFTPClass.tearDown() and makepasv() tests, and
# the server gets an error on its side.
pass
class DummyDTPHandler(asynchat.async_chat):
dtp_conn_closed = False
@ -80,7 +87,7 @@ class DummyDTPHandler(asynchat.async_chat):
super(DummyDTPHandler, self).push(what.encode(self.encoding))
def handle_error(self):
raise Exception
default_error_handler()
class DummyFTPHandler(asynchat.async_chat):
@ -130,7 +137,7 @@ class DummyFTPHandler(asynchat.async_chat):
self.push('550 command "%s" not understood.' %cmd)
def handle_error(self):
raise Exception
default_error_handler()
def push(self, data):
asynchat.async_chat.push(self, data.encode(self.encoding) + b'\r\n')
@ -308,7 +315,7 @@ class DummyFTPServer(asyncore.dispatcher, threading.Thread):
return 0
def handle_error(self):
raise Exception
default_error_handler()
if ssl is not None:
@ -411,7 +418,7 @@ if ssl is not None:
raise
def handle_error(self):
raise Exception
default_error_handler()
def close(self):
if (isinstance(self.socket, ssl.SSLSocket) and

View File

@ -0,0 +1,2 @@
test_ftplib now silently ignores socket errors to prevent logging unhandled
threading exceptions. Patch by Victor Stinner.