Skip to content

Commit e9bb473

Browse files
committed
Issue #16923: Fix ResourceWarnings in test_ssl.
2 parents 1e37e9e + e1ceb50 commit e9bb473

File tree

2 files changed

+37
-33
lines changed

2 files changed

+37
-33
lines changed

Lib/test/test_ssl.py

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -217,29 +217,30 @@ def test_refcycle(self):
217217
s = socket.socket(socket.AF_INET)
218218
ss = ssl.wrap_socket(s)
219219
wr = weakref.ref(ss)
220-
del ss
221-
self.assertEqual(wr(), None)
220+
with support.check_warnings(("", ResourceWarning)):
221+
del ss
222+
self.assertEqual(wr(), None)
222223

223224
def test_wrapped_unconnected(self):
224225
# Methods on an unconnected SSLSocket propagate the original
225226
# OSError raise by the underlying socket object.
226227
s = socket.socket(socket.AF_INET)
227-
ss = ssl.wrap_socket(s)
228-
self.assertRaises(OSError, ss.recv, 1)
229-
self.assertRaises(OSError, ss.recv_into, bytearray(b'x'))
230-
self.assertRaises(OSError, ss.recvfrom, 1)
231-
self.assertRaises(OSError, ss.recvfrom_into, bytearray(b'x'), 1)
232-
self.assertRaises(OSError, ss.send, b'x')
233-
self.assertRaises(OSError, ss.sendto, b'x', ('0.0.0.0', 0))
228+
with ssl.wrap_socket(s) as ss:
229+
self.assertRaises(OSError, ss.recv, 1)
230+
self.assertRaises(OSError, ss.recv_into, bytearray(b'x'))
231+
self.assertRaises(OSError, ss.recvfrom, 1)
232+
self.assertRaises(OSError, ss.recvfrom_into, bytearray(b'x'), 1)
233+
self.assertRaises(OSError, ss.send, b'x')
234+
self.assertRaises(OSError, ss.sendto, b'x', ('0.0.0.0', 0))
234235

235236
def test_timeout(self):
236237
# Issue #8524: when creating an SSL socket, the timeout of the
237238
# original socket should be retained.
238239
for timeout in (None, 0.0, 5.0):
239240
s = socket.socket(socket.AF_INET)
240241
s.settimeout(timeout)
241-
ss = ssl.wrap_socket(s)
242-
self.assertEqual(timeout, ss.gettimeout())
242+
with ssl.wrap_socket(s) as ss:
243+
self.assertEqual(timeout, ss.gettimeout())
243244

244245
def test_errors(self):
245246
sock = socket.socket()
@@ -252,9 +253,9 @@ def test_errors(self):
252253
self.assertRaisesRegex(ValueError,
253254
"certfile must be specified for server-side operations",
254255
ssl.wrap_socket, sock, server_side=True, certfile="")
255-
s = ssl.wrap_socket(sock, server_side=True, certfile=CERTFILE)
256-
self.assertRaisesRegex(ValueError, "can't connect in server-side mode",
257-
s.connect, (HOST, 8080))
256+
with ssl.wrap_socket(sock, server_side=True, certfile=CERTFILE) as s:
257+
self.assertRaisesRegex(ValueError, "can't connect in server-side mode",
258+
s.connect, (HOST, 8080))
258259
with self.assertRaises(OSError) as cm:
259260
with socket.socket() as sock:
260261
ssl.wrap_socket(sock, certfile=WRONGCERT)
@@ -367,21 +368,21 @@ def test_server_side(self):
367368
def test_unknown_channel_binding(self):
368369
# should raise ValueError for unknown type
369370
s = socket.socket(socket.AF_INET)
370-
ss = ssl.wrap_socket(s)
371-
with self.assertRaises(ValueError):
372-
ss.get_channel_binding("unknown-type")
371+
with ssl.wrap_socket(s) as ss:
372+
with self.assertRaises(ValueError):
373+
ss.get_channel_binding("unknown-type")
373374

374375
@unittest.skipUnless("tls-unique" in ssl.CHANNEL_BINDING_TYPES,
375376
"'tls-unique' channel binding not available")
376377
def test_tls_unique_channel_binding(self):
377378
# unconnected should return None for known type
378379
s = socket.socket(socket.AF_INET)
379-
ss = ssl.wrap_socket(s)
380-
self.assertIsNone(ss.get_channel_binding("tls-unique"))
380+
with ssl.wrap_socket(s) as ss:
381+
self.assertIsNone(ss.get_channel_binding("tls-unique"))
381382
# the same for server-side
382383
s = socket.socket(socket.AF_INET)
383-
ss = ssl.wrap_socket(s, server_side=True, certfile=CERTFILE)
384-
self.assertIsNone(ss.get_channel_binding("tls-unique"))
384+
with ssl.wrap_socket(s, server_side=True, certfile=CERTFILE) as ss:
385+
self.assertIsNone(ss.get_channel_binding("tls-unique"))
385386

386387
def test_dealloc_warn(self):
387388
ss = ssl.wrap_socket(socket.socket(socket.AF_INET))
@@ -660,10 +661,10 @@ def test_subclass(self):
660661
with socket.socket() as s:
661662
s.bind(("127.0.0.1", 0))
662663
s.listen(5)
663-
with socket.socket() as c:
664-
c.connect(s.getsockname())
665-
c.setblocking(False)
666-
c = ctx.wrap_socket(c, False, do_handshake_on_connect=False)
664+
c = socket.socket()
665+
c.connect(s.getsockname())
666+
c.setblocking(False)
667+
with ctx.wrap_socket(c, False, do_handshake_on_connect=False) as c:
667668
with self.assertRaises(ssl.SSLWantReadError) as cm:
668669
c.do_handshake()
669670
s = str(cm.exception)
@@ -904,12 +905,12 @@ def _test_get_server_certificate(host, port, cert=None):
904905
def test_ciphers(self):
905906
remote = ("svn.python.org", 443)
906907
with support.transient_internet(remote[0]):
907-
s = ssl.wrap_socket(socket.socket(socket.AF_INET),
908-
cert_reqs=ssl.CERT_NONE, ciphers="ALL")
909-
s.connect(remote)
910-
s = ssl.wrap_socket(socket.socket(socket.AF_INET),
911-
cert_reqs=ssl.CERT_NONE, ciphers="DEFAULT")
912-
s.connect(remote)
908+
with ssl.wrap_socket(socket.socket(socket.AF_INET),
909+
cert_reqs=ssl.CERT_NONE, ciphers="ALL") as s:
910+
s.connect(remote)
911+
with ssl.wrap_socket(socket.socket(socket.AF_INET),
912+
cert_reqs=ssl.CERT_NONE, ciphers="DEFAULT") as s:
913+
s.connect(remote)
913914
# Error checking can happen at instantiation or when connecting
914915
with self.assertRaisesRegex(ssl.SSLError, "No cipher can be selected"):
915916
with socket.socket(socket.AF_INET) as sock:
@@ -1886,6 +1887,8 @@ def serve():
18861887
client_addr = client.getsockname()
18871888
client.close()
18881889
t.join()
1890+
remote.close()
1891+
server.close()
18891892
# Sanity checks.
18901893
self.assertIsInstance(remote, ssl.SSLSocket)
18911894
self.assertEqual(peer, client_addr)
@@ -1900,8 +1903,7 @@ def test_default_ciphers(self):
19001903
with ThreadedEchoServer(CERTFILE,
19011904
ssl_version=ssl.PROTOCOL_SSLv23,
19021905
chatty=False) as server:
1903-
with socket.socket() as sock:
1904-
s = context.wrap_socket(sock)
1906+
with context.wrap_socket(socket.socket()) as s:
19051907
with self.assertRaises(OSError):
19061908
s.connect((HOST, server.port))
19071909
self.assertIn("no shared cipher", str(server.conn_errors[0]))

Misc/NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,8 @@ Extension Modules
635635
Tests
636636
-----
637637

638+
- Issue #16923: Fix ResourceWarnings in test_ssl.
639+
638640
- Issue #15539: Added regression tests for Tools/scripts/pindent.py.
639641

640642
- Issue #16836: Enable IPv6 support even if IPv6 is disabled on the build host.

0 commit comments

Comments
 (0)