diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2019-06-14 16:12:48 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-14 16:12:48 (GMT) |
commit | 0c2eb6d21013d77e1160250d3cf69ca80215d064 (patch) | |
tree | ec54ab01362b879fe6a690127039a971a165a974 /Lib/test/test_asyncio | |
parent | 047fa1ddae856aa9aaee21c799349348657b8918 (diff) | |
download | cpython-0c2eb6d21013d77e1160250d3cf69ca80215d064.zip cpython-0c2eb6d21013d77e1160250d3cf69ca80215d064.tar.gz cpython-0c2eb6d21013d77e1160250d3cf69ca80215d064.tar.bz2 |
bpo-35998: Avoid TimeoutError in test_asyncio: test_start_tls_server_1() (GH-14080)
(cherry picked from commit f0749da9a535375f05a2015e8960e8ae54877349)
Co-authored-by: Andrew Svetlov <andrew.svetlov@gmail.com>
Diffstat (limited to 'Lib/test/test_asyncio')
-rw-r--r-- | Lib/test/test_asyncio/test_sslproto.py | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py index 4215abf..5c861e9 100644 --- a/Lib/test/test_asyncio/test_sslproto.py +++ b/Lib/test/test_asyncio/test_sslproto.py @@ -494,17 +494,14 @@ class BaseStartTLS(func_tests.FunctionalTestCaseMixin): 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 @@ class BaseStartTLS(func_tests.FunctionalTestCaseMixin): 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 @@ class BaseStartTLS(func_tests.FunctionalTestCaseMixin): 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 @@ class BaseStartTLS(func_tests.FunctionalTestCaseMixin): 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()) |