Commit 918e2d48 authored by Brett Cannon's avatar Brett Cannon

Clean up socket closing in test_ftplib.

parent 384917a9
...@@ -107,15 +107,15 @@ class DummyFTPHandler(asynchat.async_chat): ...@@ -107,15 +107,15 @@ class DummyFTPHandler(asynchat.async_chat):
self.push('200 active data connection established') self.push('200 active data connection established')
def cmd_pasv(self, arg): def cmd_pasv(self, arg):
sock = socket.socket() with socket.socket() as sock:
sock.bind((self.socket.getsockname()[0], 0)) sock.bind((self.socket.getsockname()[0], 0))
sock.listen(5) sock.listen(5)
sock.settimeout(10) sock.settimeout(10)
ip, port = sock.getsockname()[:2] ip, port = sock.getsockname()[:2]
ip = ip.replace('.', ','); p1 = port / 256; p2 = port % 256 ip = ip.replace('.', ','); p1 = port / 256; p2 = port % 256
self.push('227 entering passive mode (%s,%d,%d)' %(ip, p1, p2)) self.push('227 entering passive mode (%s,%d,%d)' %(ip, p1, p2))
conn, addr = sock.accept() conn, addr = sock.accept()
self.dtp = self.dtp_handler(conn, baseclass=self) self.dtp = self.dtp_handler(conn, baseclass=self)
def cmd_eprt(self, arg): def cmd_eprt(self, arg):
af, ip, port = arg.split(arg[0])[1:-1] af, ip, port = arg.split(arg[0])[1:-1]
...@@ -125,14 +125,14 @@ class DummyFTPHandler(asynchat.async_chat): ...@@ -125,14 +125,14 @@ class DummyFTPHandler(asynchat.async_chat):
self.push('200 active data connection established') self.push('200 active data connection established')
def cmd_epsv(self, arg): def cmd_epsv(self, arg):
sock = socket.socket(socket.AF_INET6) with socket.socket(socket.AF_INET6) as sock:
sock.bind((self.socket.getsockname()[0], 0)) sock.bind((self.socket.getsockname()[0], 0))
sock.listen(5) sock.listen(5)
sock.settimeout(10) sock.settimeout(10)
port = sock.getsockname()[1] port = sock.getsockname()[1]
self.push('229 entering extended passive mode (|||%d|)' %port) self.push('229 entering extended passive mode (|||%d|)' %port)
conn, addr = sock.accept() conn, addr = sock.accept()
self.dtp = self.dtp_handler(conn, baseclass=self) self.dtp = self.dtp_handler(conn, baseclass=self)
def cmd_echo(self, arg): def cmd_echo(self, arg):
# sends back the received string (used by the test suite) # sends back the received string (used by the test suite)
...@@ -549,9 +549,10 @@ class TestFTPClass(TestCase): ...@@ -549,9 +549,10 @@ class TestFTPClass(TestCase):
self.assertEqual(''.join(l), LIST_DATA.replace('\r\n', '')) self.assertEqual(''.join(l), LIST_DATA.replace('\r\n', ''))
def test_makeport(self): def test_makeport(self):
self.client.makeport() with self.client.makeport():
# IPv4 is in use, just make sure send_eprt has not been used # IPv4 is in use, just make sure send_eprt has not been used
self.assertEqual(self.server.handler_instance.last_received_cmd, 'port') self.assertEqual(self.server.handler_instance.last_received_cmd,
'port')
def test_makepasv(self): def test_makepasv(self):
host, port = self.client.makepasv() host, port = self.client.makepasv()
...@@ -634,8 +635,9 @@ class TestIPv6Environment(TestCase): ...@@ -634,8 +635,9 @@ class TestIPv6Environment(TestCase):
self.assertEqual(self.client.af, socket.AF_INET6) self.assertEqual(self.client.af, socket.AF_INET6)
def test_makeport(self): def test_makeport(self):
self.client.makeport() with self.client.makeport():
self.assertEqual(self.server.handler_instance.last_received_cmd, 'eprt') self.assertEqual(self.server.handler_instance.last_received_cmd,
'eprt')
def test_makepasv(self): def test_makepasv(self):
host, port = self.client.makepasv() host, port = self.client.makepasv()
...@@ -691,23 +693,20 @@ class TestTLS_FTPClass(TestCase): ...@@ -691,23 +693,20 @@ class TestTLS_FTPClass(TestCase):
def test_data_connection(self): def test_data_connection(self):
# clear text # clear text
sock = self.client.transfercmd('list') with self.client.transfercmd('list') as sock:
self.assertNotIsInstance(sock, ssl.SSLSocket) self.assertNotIsInstance(sock, ssl.SSLSocket)
sock.close()
self.assertEqual(self.client.voidresp(), "226 transfer complete") self.assertEqual(self.client.voidresp(), "226 transfer complete")
# secured, after PROT P # secured, after PROT P
self.client.prot_p() self.client.prot_p()
sock = self.client.transfercmd('list') with self.client.transfercmd('list') as sock:
self.assertIsInstance(sock, ssl.SSLSocket) self.assertIsInstance(sock, ssl.SSLSocket)
sock.close()
self.assertEqual(self.client.voidresp(), "226 transfer complete") self.assertEqual(self.client.voidresp(), "226 transfer complete")
# PROT C is issued, the connection must be in cleartext again # PROT C is issued, the connection must be in cleartext again
self.client.prot_c() self.client.prot_c()
sock = self.client.transfercmd('list') with self.client.transfercmd('list') as sock:
self.assertNotIsInstance(sock, ssl.SSLSocket) self.assertNotIsInstance(sock, ssl.SSLSocket)
sock.close()
self.assertEqual(self.client.voidresp(), "226 transfer complete") self.assertEqual(self.client.voidresp(), "226 transfer complete")
def test_login(self): def test_login(self):
...@@ -748,10 +747,9 @@ class TestTLS_FTPClass(TestCase): ...@@ -748,10 +747,9 @@ class TestTLS_FTPClass(TestCase):
self.assertIsInstance(self.client.sock, ssl.SSLSocket) self.assertIsInstance(self.client.sock, ssl.SSLSocket)
self.client.prot_p() self.client.prot_p()
sock = self.client.transfercmd('list') with self.client.transfercmd('list') as sock:
self.assertIs(sock.context, ctx) self.assertIs(sock.context, ctx)
self.assertIsInstance(sock, ssl.SSLSocket) self.assertIsInstance(sock, ssl.SSLSocket)
sock.close()
class TestTimeouts(TestCase): class TestTimeouts(TestCase):
...@@ -769,6 +767,7 @@ class TestTimeouts(TestCase): ...@@ -769,6 +767,7 @@ class TestTimeouts(TestCase):
def tearDown(self): def tearDown(self):
self.evt.wait() self.evt.wait()
self.sock.close()
def server(self, evt, serv): def server(self, evt, serv):
# This method sets the evt 3 times: # This method sets the evt 3 times:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment