[Python-checkins] bpo-35998: Avoid TimeoutError in test_asyncio: test_start_tls_server_1() (GH-14080)

Victor Stinner webhook-mailer at python.org
Fri Jun 14 11:26:45 EDT 2019


https://github.com/python/cpython/commit/f0749da9a535375f05a2015e8960e8ae54877349
commit: f0749da9a535375f05a2015e8960e8ae54877349
branch: master
author: Andrew Svetlov <andrew.svetlov at gmail.com>
committer: Victor Stinner <vstinner at redhat.com>
date: 2019年06月14日T17:26:24+02:00
summary:
bpo-35998: Avoid TimeoutError in test_asyncio: test_start_tls_server_1() (GH-14080)
files:
A Misc/NEWS.d/next/Tests/2019-06-14-17-05-49.bpo-35998.yX82oD.rst
M Lib/test/test_asyncio/test_sslproto.py
diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py
index 4215abf5d863..5c861e92b7d6 100644
--- a/Lib/test/test_asyncio/test_sslproto.py
+++ b/Lib/test/test_asyncio/test_sslproto.py
@@ -494,17 +494,14 @@ def eof_received(self):
 
 def test_start_tls_server_1(self):
 HELLO_MSG = b'1' * self.PAYLOAD_SIZE
+ ANSWER = b'answer'
 
 server_context = test_utils.simple_server_sslcontext()
 client_context = test_utils.simple_client_sslcontext()
- if sys.platform.startswith('freebsd') or sys.platform.startswith('win'):
- # bpo-35031: Some FreeBSD and Windows buildbots fail to run this test
- # as the eof was not being received by the server if the payload
- # size is not big enough. This behaviour only appears if the
- # client is using TLS1.3.
- client_context.options |= ssl.OP_NO_TLSv1_3
+ answer = None
 
 def client(sock, addr):
+ nonlocal answer
 sock.settimeout(self.TIMEOUT)
 
 sock.connect(addr)
@@ -513,33 +510,36 @@ def client(sock, addr):
 
 sock.start_tls(client_context)
 sock.sendall(HELLO_MSG)
-
- sock.shutdown(socket.SHUT_RDWR)
+ answer = sock.recv_all(len(ANSWER))
 sock.close()
 
 class ServerProto(asyncio.Protocol):
- def __init__(self, on_con, on_eof, on_con_lost):
+ def __init__(self, on_con, on_con_lost):
 self.on_con = on_con
- self.on_eof = on_eof
 self.on_con_lost = on_con_lost
 self.data = b''
+ self.transport = None
 
 def connection_made(self, tr):
+ self.transport = tr
 self.on_con.set_result(tr)
 
+ def replace_transport(self, tr):
+ self.transport = tr
+
 def data_received(self, data):
 self.data += data
-
- def eof_received(self):
- self.on_eof.set_result(1)
+ if len(self.data) >= len(HELLO_MSG):
+ self.transport.write(ANSWER)
 
 def connection_lost(self, exc):
+ self.transport = None
 if exc is None:
 self.on_con_lost.set_result(None)
 else:
 self.on_con_lost.set_exception(exc)
 
- async def main(proto, on_con, on_eof, on_con_lost):
+ async def main(proto, on_con, on_con_lost):
 tr = await on_con
 tr.write(HELLO_MSG)
 
@@ -550,16 +550,16 @@ def connection_lost(self, exc):
 server_side=True,
 ssl_handshake_timeout=self.TIMEOUT)
 
- await on_eof
+ proto.replace_transport(new_tr)
+
 await on_con_lost
 self.assertEqual(proto.data, HELLO_MSG)
 new_tr.close()
 
 async def run_main():
 on_con = self.loop.create_future()
- on_eof = self.loop.create_future()
 on_con_lost = self.loop.create_future()
- proto = ServerProto(on_con, on_eof, on_con_lost)
+ proto = ServerProto(on_con, on_con_lost)
 
 server = await self.loop.create_server(
 lambda: proto, '127.0.0.1', 0)
@@ -568,11 +568,12 @@ def connection_lost(self, exc):
 with self.tcp_client(lambda sock: client(sock, addr),
 timeout=self.TIMEOUT):
 await asyncio.wait_for(
- main(proto, on_con, on_eof, on_con_lost),
+ main(proto, on_con, on_con_lost),
 timeout=self.TIMEOUT)
 
 server.close()
 await server.wait_closed()
+ self.assertEqual(answer, ANSWER)
 
 self.loop.run_until_complete(run_main())
 
diff --git a/Misc/NEWS.d/next/Tests/2019-06-14-17-05-49.bpo-35998.yX82oD.rst b/Misc/NEWS.d/next/Tests/2019-06-14-17-05-49.bpo-35998.yX82oD.rst
new file mode 100644
index 000000000000..23b6d00f42c5
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2019-06-14-17-05-49.bpo-35998.yX82oD.rst
@@ -0,0 +1 @@
+Avoid TimeoutError in test_asyncio: test_start_tls_server_1()


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /