diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index b4f4e2b14351a6a..3e5f476ca08ae17 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -2383,12 +2383,33 @@ def test_tunnel_debuglog(self): self.conn.set_debuglevel(1) self.conn._create_connection = self._create_connection(response_text) + self.conn.set_tunnel("destination.com") + self.conn.request('HEAD', '/', '') + + + def test_tunnel_leak(self): + sock = None + + def _create_connection(address, timeout=None, source_address=None): + nonlocal sock + sock = FakeSocket( + 'HTTP/1.1 404 NOT FOUND\r\n\r\n', + host=address[0], + port=address[1], + ) + return sock + + self.conn._create_connection = _create_connection self.conn.set_tunnel('destination.com') + exc = None + try: + self.conn.request('HEAD', '/', '') + except OSError as e: + # keeping a reference to exc keeps response alive in the traceback + exc = e + self.assertIsNotNone(exc) + self.assertTrue(sock.file_closed) - with support.captured_stdout() as output: - self.conn.request('PUT', '/', '') - lines = output.getvalue().splitlines() - self.assertIn('header: {}'.format(expected_header), lines) if __name__ == '__main__':