diff options
author | Martin Panter <vadmium+py@gmail.com> | 2016-04-09 14:03:17 (GMT) |
---|---|---|
committer | Martin Panter <vadmium+py@gmail.com> | 2016-04-09 14:03:17 (GMT) |
commit | d979b2cfcf4047b8f9b46e169cfa071e80e30d71 (patch) | |
tree | 516753703f0bb53c954c420320e74ac15026107b /Lib/test/test_httplib.py | |
parent | fc475a9fa6712b707867802df6072232562a3bd9 (diff) | |
download | cpython-d979b2cfcf4047b8f9b46e169cfa071e80e30d71.zip cpython-d979b2cfcf4047b8f9b46e169cfa071e80e30d71.tar.gz cpython-d979b2cfcf4047b8f9b46e169cfa071e80e30d71.tar.bz2 |
Issue #21069: Move test_fileno() from test_urllibnet and rewrite it
* No longer attempts to close already freed socket file descriptor
* Use socket object to be compatible with Windows
* Do not use a timeout to avoid complication with non-blocking mode
* Use internal localhost server rather than depending on a third party
* Avoid trouble with buffered HTTP data by testing tunnelled CONNECT data
Diffstat (limited to 'Lib/test/test_httplib.py')
-rw-r--r-- | Lib/test/test_httplib.py | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index 6d2ed39..7d997b0 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -915,6 +915,47 @@ class BasicTest(TestCase): self.assertEqual(sock.file.read(), extradata) #we read to the end resp.close() + def test_response_fileno(self): + # Make sure fd returned by fileno is valid. + threading = support.import_module("threading") + + serv = socket.socket( + socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP) + self.addCleanup(serv.close) + serv.bind((HOST, 0)) + serv.listen() + + result = None + def run_server(): + [conn, address] = serv.accept() + with conn, conn.makefile("rb") as reader: + # Read the request header until a blank line + while True: + line = reader.readline() + if not line.rstrip(b"\r\n"): + break + conn.sendall(b"HTTP/1.1 200 Connection established\r\n\r\n") + nonlocal result + result = reader.read() + + thread = threading.Thread(target=run_server) + thread.start() + conn = client.HTTPConnection(*serv.getsockname()) + conn.request("CONNECT", "dummy:1234") + response = conn.getresponse() + try: + self.assertEqual(response.status, client.OK) + s = socket.socket(fileno=response.fileno()) + try: + s.sendall(b"proxied data\n") + finally: + s.detach() + finally: + response.close() + conn.close() + thread.join() + self.assertEqual(result, b"proxied data\n") + class ExtendedReadTest(TestCase): """ Test peek(), read1(), readline() |