From: Antoine Pitrou Date: Sat, 19 Oct 2013 23:51:25 +0000 (+0200) Subject: Issue #19305: try to fix sporadic test_asyncio failure on FreeBSD 10.0 X-Git-Tag: v3.4.0a4~9 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d20afad7d4f2d712da5f37a5108979d2a0c5d8ca;p=thirdparty%2FPython%2Fcpython.git Issue #19305: try to fix sporadic test_asyncio failure on FreeBSD 10.0 --- diff --git a/Lib/asyncio/test_utils.py b/Lib/asyncio/test_utils.py index 91bbedbafa46..d650c4476a06 100644 --- a/Lib/asyncio/test_utils.py +++ b/Lib/asyncio/test_utils.py @@ -7,6 +7,7 @@ import unittest.mock import os import sys import threading +import time import unittest import unittest.mock from wsgiref.simple_server import make_server, WSGIRequestHandler, WSGIServer @@ -46,6 +47,20 @@ def run_briefly(loop): gen.close() +def run_until(loop, pred, timeout=None): + if timeout is not None: + deadline = time.time() + timeout + while not pred(): + if timeout is not None: + timeout = deadline - time.time() + if timeout <= 0: + return False + loop.run_until_complete(tasks.sleep(timeout, loop=loop)) + else: + run_briefly(loop) + return True + + def run_once(loop): """loop.stop() schedules _raise_stop_error() and run_forever() runs until _raise_stop_error() callback. diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py index 098cf71f89d9..f0f4810f6752 100644 --- a/Lib/test/test_asyncio/test_events.py +++ b/Lib/test/test_asyncio/test_events.py @@ -558,13 +558,14 @@ class EventLoopTestsMixin: self.assertEqual(host, '0.0.0.0') client = socket.socket() client.connect(('127.0.0.1', port)) - client.send(b'xxx') + client.sendall(b'xxx') test_utils.run_briefly(self.loop) self.assertIsInstance(proto, MyProto) self.assertEqual('INITIAL', proto.state) test_utils.run_briefly(self.loop) self.assertEqual('CONNECTED', proto.state) - test_utils.run_briefly(self.loop) # windows iocp + test_utils.run_until(self.loop, lambda: proto.nbytes > 0, + timeout=10) self.assertEqual(3, proto.nbytes) # extra info is available @@ -623,6 +624,8 @@ class EventLoopTestsMixin: self.assertIsInstance(proto, MyProto) test_utils.run_briefly(self.loop) self.assertEqual('CONNECTED', proto.state) + test_utils.run_until(self.loop, lambda: proto.nbytes > 0, + timeout=10) self.assertEqual(3, proto.nbytes) # extra info is available