summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_httplib.py
diff options
context:
space:
mode:
authorMartin Panter <vadmium+py@gmail.com>2016-04-09 14:03:17 (GMT)
committerMartin Panter <vadmium+py@gmail.com>2016-04-09 14:03:17 (GMT)
commitd979b2cfcf4047b8f9b46e169cfa071e80e30d71 (patch)
tree516753703f0bb53c954c420320e74ac15026107b /Lib/test/test_httplib.py
parentfc475a9fa6712b707867802df6072232562a3bd9 (diff)
downloadcpython-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.py41
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()