tests: make IterReadTest a little more robust

issue510
David Wilson 7 years ago
parent 9a83b1a82b
commit f1661abe4e

@ -233,6 +233,7 @@ class IterReadTest(testlib.TestCase):
func = staticmethod(mitogen.parent.iter_read) func = staticmethod(mitogen.parent.iter_read)
def make_proc(self): def make_proc(self):
# I produce text every 100ms.
args = [testlib.data_path('iter_read_generator.py')] args = [testlib.data_path('iter_read_generator.py')]
proc = subprocess.Popen(args, stdout=subprocess.PIPE) proc = subprocess.Popen(args, stdout=subprocess.PIPE)
mitogen.core.set_nonblock(proc.stdout.fileno()) mitogen.core.set_nonblock(proc.stdout.fileno())
@ -267,18 +268,22 @@ class IterReadTest(testlib.TestCase):
def test_deadline_exceeded_during_call(self): def test_deadline_exceeded_during_call(self):
proc = self.make_proc() proc = self.make_proc()
reader = self.func([proc.stdout.fileno()], time.time() + 0.4) deadline = time.time() + 0.4
reader = self.func([proc.stdout.fileno()], deadline)
try: try:
got = [] got = []
try: try:
for chunk in reader: for chunk in reader:
if time.time() > (deadline + 1.0):
assert 0, 'TimeoutError not raised'
got.append(chunk) got.append(chunk)
assert 0, 'TimeoutError not raised'
except mitogen.core.TimeoutError: except mitogen.core.TimeoutError:
# Give a little wiggle room in case of imperfect scheduling. # Give a little wiggle room in case of imperfect scheduling.
# Ideal number should be 9. # Ideal number should be 9.
self.assertLess(3, len(got)) self.assertLess(deadline, time.time())
self.assertLess(len(got), 5) self.assertLess(1, len(got))
self.assertLess(len(got), 20)
finally: finally:
proc.terminate() proc.terminate()
proc.stdout.close() proc.stdout.close()

Loading…
Cancel
Save