mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
Issue #21069: Merge test_fileno() from 3.5
This commit is contained in:
commit
db3e2bd82d
2 changed files with 41 additions and 11 deletions
|
@ -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()
|
||||
|
|
|
@ -99,17 +99,6 @@ class urlopenNetworkTests(unittest.TestCase):
|
|||
open_url.close()
|
||||
self.assertEqual(code, 404)
|
||||
|
||||
# On Windows, socket handles are not file descriptors; this
|
||||
# test can't pass on Windows.
|
||||
@unittest.skipIf(sys.platform in ('win32',), 'not appropriate for Windows')
|
||||
def test_fileno(self):
|
||||
# Make sure fd returned by fileno is valid.
|
||||
with self.urlopen("http://www.google.com/") as open_url:
|
||||
fd = open_url.fileno()
|
||||
with os.fdopen(fd, 'rb') as f:
|
||||
self.assertTrue(f.read(), "reading from file created using fd "
|
||||
"returned by fileno failed")
|
||||
|
||||
def test_bad_address(self):
|
||||
# Make sure proper exception is raised when connecting to a bogus
|
||||
# address.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue