Skip to content

Commit 0d4f08c

Browse files
committed
ftplib tests: provide a global socket's TIMEOUT variable and use it everywhere so that failing tests won't accidentally hang
1 parent dd778eb commit 0d4f08c

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

Lib/test/test_ftplib.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from test.support import HOST
2222
threading = support.import_module('threading')
2323

24+
TIMEOUT = 3
2425
# the dummy data returned by server over the data channel when
2526
# RETR, LIST, NLST, MLSD commands are issued
2627
RETR_DATA = 'abcde12345\r\n' * 1000
@@ -125,15 +126,15 @@ def cmd_port(self, arg):
125126
addr = list(map(int, arg.split(',')))
126127
ip = '%d.%d.%d.%d' %tuple(addr[:4])
127128
port = (addr[4] * 256) + addr[5]
128-
s = socket.create_connection((ip, port), timeout=2)
129+
s = socket.create_connection((ip, port), timeout=TIMEOUT)
129130
self.dtp = self.dtp_handler(s, baseclass=self)
130131
self.push('200 active data connection established')
131132

132133
def cmd_pasv(self, arg):
133134
with socket.socket() as sock:
134135
sock.bind((self.socket.getsockname()[0], 0))
135136
sock.listen(5)
136-
sock.settimeout(10)
137+
sock.settimeout(TIMEOUT)
137138
ip, port = sock.getsockname()[:2]
138139
ip = ip.replace('.', ','); p1 = port / 256; p2 = port % 256
139140
self.push('227 entering passive mode (%s,%d,%d)' %(ip, p1, p2))
@@ -143,15 +144,15 @@ def cmd_pasv(self, arg):
143144
def cmd_eprt(self, arg):
144145
af, ip, port = arg.split(arg[0])[1:-1]
145146
port = int(port)
146-
s = socket.create_connection((ip, port), timeout=2)
147+
s = socket.create_connection((ip, port), timeout=TIMEOUT)
147148
self.dtp = self.dtp_handler(s, baseclass=self)
148149
self.push('200 active data connection established')
149150

150151
def cmd_epsv(self, arg):
151152
with socket.socket(socket.AF_INET6) as sock:
152153
sock.bind((self.socket.getsockname()[0], 0))
153154
sock.listen(5)
154-
sock.settimeout(10)
155+
sock.settimeout(TIMEOUT)
155156
port = sock.getsockname()[1]
156157
self.push('229 entering extended passive mode (|||%d|)' %port)
157158
conn, addr = sock.accept()
@@ -454,7 +455,7 @@ class TestFTPClass(TestCase):
454455
def setUp(self):
455456
self.server = DummyFTPServer((HOST, 0))
456457
self.server.start()
457-
self.client = ftplib.FTP(timeout=2)
458+
self.client = ftplib.FTP(timeout=TIMEOUT)
458459
self.client.connect(self.server.host, self.server.port)
459460

460461
def tearDown(self):
@@ -667,7 +668,7 @@ def test_makeport(self):
667668

668669
def test_makepasv(self):
669670
host, port = self.client.makepasv()
670-
conn = socket.create_connection((host, port), 10)
671+
conn = socket.create_connection((host, port), timeout=TIMEOUT)
671672
conn.close()
672673
# IPv4 is in use, just make sure send_epsv has not been used
673674
self.assertEqual(self.server.handler_instance.last_received_cmd, 'pasv')
@@ -685,15 +686,15 @@ def is_client_connected():
685686
return True
686687

687688
# base test
688-
with ftplib.FTP(timeout=2) as self.client:
689+
with ftplib.FTP(timeout=TIMEOUT) as self.client:
689690
self.client.connect(self.server.host, self.server.port)
690691
self.client.sendcmd('noop')
691692
self.assertTrue(is_client_connected())
692693
self.assertEqual(self.server.handler_instance.last_received_cmd, 'quit')
693694
self.assertFalse(is_client_connected())
694695

695696
# QUIT sent inside the with block
696-
with ftplib.FTP(timeout=2) as self.client:
697+
with ftplib.FTP(timeout=TIMEOUT) as self.client:
697698
self.client.connect(self.server.host, self.server.port)
698699
self.client.sendcmd('noop')
699700
self.client.quit()
@@ -703,7 +704,7 @@ def is_client_connected():
703704
# force a wrong response code to be sent on QUIT: error_perm
704705
# is expected and the connection is supposed to be closed
705706
try:
706-
with ftplib.FTP(timeout=2) as self.client:
707+
with ftplib.FTP(timeout=TIMEOUT) as self.client:
707708
self.client.connect(self.server.host, self.server.port)
708709
self.client.sendcmd('noop')
709710
self.server.handler_instance.next_response = '550 error on quit'
@@ -759,7 +760,7 @@ class TestIPv6Environment(TestCase):
759760
def setUp(self):
760761
self.server = DummyFTPServer(('::1', 0), af=socket.AF_INET6)
761762
self.server.start()
762-
self.client = ftplib.FTP()
763+
self.client = ftplib.FTP(timeout=TIMEOUT)
763764
self.client.connect(self.server.host, self.server.port)
764765

765766
def tearDown(self):
@@ -776,7 +777,7 @@ def test_makeport(self):
776777

777778
def test_makepasv(self):
778779
host, port = self.client.makepasv()
779-
conn = socket.create_connection((host, port), 10)
780+
conn = socket.create_connection((host, port), timeout=TIMEOUT)
780781
conn.close()
781782
self.assertEqual(self.server.handler_instance.last_received_cmd, 'epsv')
782783

@@ -802,7 +803,7 @@ class TestTLS_FTPClassMixin(TestFTPClass):
802803
def setUp(self):
803804
self.server = DummyTLS_FTPServer((HOST, 0))
804805
self.server.start()
805-
self.client = ftplib.FTP_TLS(timeout=2)
806+
self.client = ftplib.FTP_TLS(timeout=TIMEOUT)
806807
self.client.connect(self.server.host, self.server.port)
807808
# enable TLS
808809
self.client.auth()
@@ -815,7 +816,7 @@ class TestTLS_FTPClass(TestCase):
815816
def setUp(self):
816817
self.server = DummyTLS_FTPServer((HOST, 0))
817818
self.server.start()
818-
self.client = ftplib.FTP_TLS(timeout=2)
819+
self.client = ftplib.FTP_TLS(timeout=TIMEOUT)
819820
self.client.connect(self.server.host, self.server.port)
820821

821822
def tearDown(self):
@@ -875,7 +876,7 @@ def test_context(self):
875876
self.assertRaises(ValueError, ftplib.FTP_TLS, certfile=CERTFILE,
876877
keyfile=CERTFILE, context=ctx)
877878

878-
self.client = ftplib.FTP_TLS(context=ctx, timeout=2)
879+
self.client = ftplib.FTP_TLS(context=ctx, timeout=TIMEOUT)
879880
self.client.connect(self.server.host, self.server.port)
880881
self.assertNotIsInstance(self.client.sock, ssl.SSLSocket)
881882
self.client.auth()

0 commit comments

Comments
 (0)