Commit a23dd513 authored by Antoine Pitrou's avatar Antoine Pitrou

Issue #19305: try to fix sporadic test_asyncio failure on FreeBSD 10.0

parent 0d172202
...@@ -7,6 +7,7 @@ import unittest.mock ...@@ -7,6 +7,7 @@ import unittest.mock
import os import os
import sys import sys
import threading import threading
import time
import unittest import unittest
import unittest.mock import unittest.mock
from wsgiref.simple_server import make_server, WSGIRequestHandler, WSGIServer from wsgiref.simple_server import make_server, WSGIRequestHandler, WSGIServer
...@@ -46,6 +47,20 @@ def run_briefly(loop): ...@@ -46,6 +47,20 @@ def run_briefly(loop):
gen.close() 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): def run_once(loop):
"""loop.stop() schedules _raise_stop_error() """loop.stop() schedules _raise_stop_error()
and run_forever() runs until _raise_stop_error() callback. and run_forever() runs until _raise_stop_error() callback.
......
...@@ -558,13 +558,14 @@ class EventLoopTestsMixin: ...@@ -558,13 +558,14 @@ class EventLoopTestsMixin:
self.assertEqual(host, '0.0.0.0') self.assertEqual(host, '0.0.0.0')
client = socket.socket() client = socket.socket()
client.connect(('127.0.0.1', port)) client.connect(('127.0.0.1', port))
client.send(b'xxx') client.sendall(b'xxx')
test_utils.run_briefly(self.loop) test_utils.run_briefly(self.loop)
self.assertIsInstance(proto, MyProto) self.assertIsInstance(proto, MyProto)
self.assertEqual('INITIAL', proto.state) self.assertEqual('INITIAL', proto.state)
test_utils.run_briefly(self.loop) test_utils.run_briefly(self.loop)
self.assertEqual('CONNECTED', proto.state) 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) self.assertEqual(3, proto.nbytes)
# extra info is available # extra info is available
...@@ -623,6 +624,8 @@ class EventLoopTestsMixin: ...@@ -623,6 +624,8 @@ class EventLoopTestsMixin:
self.assertIsInstance(proto, MyProto) self.assertIsInstance(proto, MyProto)
test_utils.run_briefly(self.loop) test_utils.run_briefly(self.loop)
self.assertEqual('CONNECTED', proto.state) self.assertEqual('CONNECTED', proto.state)
test_utils.run_until(self.loop, lambda: proto.nbytes > 0,
timeout=10)
self.assertEqual(3, proto.nbytes) self.assertEqual(3, proto.nbytes)
# extra info is available # extra info is available
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment