summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@redhat.com>2019-06-14 18:26:37 +0200
committerGitHub <noreply@github.com>2019-06-14 18:26:37 +0200
commit33feb2e1a391cde91aefcb8d9cf5144b5fbc5d87 (patch)
tree4649ec1c31375e6f800c37c8987a2f9bb58162d6
parent0bd1469a90648229f4c704741ba13f6709b166ea (diff)
downloadcpython-git-33feb2e1a391cde91aefcb8d9cf5144b5fbc5d87.tar.gz
bpo-35998: Avoid TimeoutError in test_asyncio: test_start_tls_server_1() (GH-14080) (GH-14086)
(cherry picked from commit f0749da9a535375f05a2015e8960e8ae54877349)
-rw-r--r--Lib/test/test_asyncio/test_sslproto.py37
-rw-r--r--Misc/NEWS.d/next/Tests/2019-06-14-17-05-49.bpo-35998.yX82oD.rst1
2 files changed, 20 insertions, 18 deletions
diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py
index 6d085f3035..4d3c064eaf 100644
--- a/Lib/test/test_asyncio/test_sslproto.py
+++ b/Lib/test/test_asyncio/test_sslproto.py
@@ -491,17 +491,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)
@@ -510,33 +507,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)
@@ -547,16 +547,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)
@@ -565,11 +565,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),
loop=self.loop, 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 0000000000..23b6d00f42
--- /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()