diff --git a/IPython/parallel/tests/__init__.py b/IPython/parallel/tests/__init__.py index 70d88c6..6e03b8c 100644 --- a/IPython/parallel/tests/__init__.py +++ b/IPython/parallel/tests/__init__.py @@ -65,7 +65,7 @@ def setup(): if cp.poll() is not None: print cp.poll() raise RuntimeError("The test controller failed to start.") - elif time.time()-tic > 10: + elif time.time()-tic > 15: raise RuntimeError("Timeout waiting for the test controller to start.") time.sleep(0.1) add_engines(1) @@ -93,7 +93,7 @@ def add_engines(n=1, profile='iptest', total=False): while len(rc) < base+n: if any([ ep.poll() is not None for ep in eps ]): raise RuntimeError("A test engine failed to start.") - elif time.time()-tic > 10: + elif time.time()-tic > 15: raise RuntimeError("Timeout waiting for engines to connect.") time.sleep(.1) rc.spin() diff --git a/IPython/parallel/tests/test_asyncresult.py b/IPython/parallel/tests/test_asyncresult.py index dfc3d36..2a831e1 100644 --- a/IPython/parallel/tests/test_asyncresult.py +++ b/IPython/parallel/tests/test_asyncresult.py @@ -154,7 +154,7 @@ class AsyncResultTest(ClusterTestCase): ar = v.apply_async(time.sleep, 0.25) self.assertRaises(TimeoutError, getattr, ar, 'serial_time') ar.get(2) - self.assertTrue(ar.serial_time < 0.5) + self.assertTrue(ar.serial_time < 1.) self.assertTrue(ar.serial_time > 0.2) def test_serial_time_multi(self): @@ -171,8 +171,8 @@ class AsyncResultTest(ClusterTestCase): ar = v.apply_async(time.sleep, 0.25) while not ar.ready(): time.sleep(0.01) - self.assertTrue(ar.elapsed < 0.3) - self.assertTrue(ar.elapsed < 0.3) + self.assertTrue(ar.elapsed < 1) + self.assertTrue(ar.elapsed < 1) ar.get(2) def test_elapsed_multi(self): @@ -180,8 +180,8 @@ class AsyncResultTest(ClusterTestCase): ar = v.apply_async(time.sleep, 0.25) while not ar.ready(): time.sleep(0.01) - self.assertTrue(ar.elapsed < 0.3) - self.assertTrue(ar.elapsed < 0.3) + self.assertTrue(ar.elapsed < 1) + self.assertTrue(ar.elapsed < 1) ar.get(2) def test_hubresult_timestamps(self): diff --git a/IPython/parallel/tests/test_view.py b/IPython/parallel/tests/test_view.py index 1b40412..965da8c 100644 --- a/IPython/parallel/tests/test_view.py +++ b/IPython/parallel/tests/test_view.py @@ -575,13 +575,23 @@ class TestView(ClusterTestCase, ParametricTestCase): # begin execute tests + def _wait_for(self, f, timeout=10): + tic = time.time() + while time.time() <= tic + timeout: + if f(): + return + time.sleep(0.1) + self.client.spin() + if not f(): + print "Warning: Awaited condition never arrived" + def test_execute_reply(self): e0 = self.client[self.client.ids[0]] e0.block = True ar = e0.execute("5", silent=False) er = ar.get() - time.sleep(0.2) + self._wait_for(lambda : bool(er.pyout)) self.assertEquals(str(er), "" % er.execution_count) self.assertEquals(er.pyout['text/plain'], '5') @@ -590,14 +600,15 @@ class TestView(ClusterTestCase, ParametricTestCase): e0.block = True ar = e0.execute("print (5)", silent=False) er = ar.get() - time.sleep(0.2) + self._wait_for(lambda : bool(er.stdout)) self.assertEquals(er.stdout.strip(), '5') def test_execute_pyout(self): """execute triggers pyout with silent=False""" view = self.client[:] ar = view.execute("5", silent=False, block=True) - time.sleep(0.2) + self._wait_for(lambda : all(ar.pyout)) + expected = [{'text/plain' : '5'}] * len(view) self.assertEquals(ar.pyout, expected) @@ -615,7 +626,7 @@ class TestView(ClusterTestCase, ParametricTestCase): ar = view.execute("%whos", block=True) # this will raise, if that failed ar.get(5) - time.sleep(0.2) + self._wait_for(lambda : all(ar.stdout)) for stdout in ar.stdout: lines = stdout.splitlines() self.assertEquals(lines[0].split(), ['Variable', 'Type', 'Data/Info']) @@ -632,7 +643,8 @@ class TestView(ClusterTestCase, ParametricTestCase): view = self.client[:] view.execute("from IPython.core.display import *") ar = view.execute("[ display(i) for i in range(5) ]", block=True) - time.sleep(0.2) + + self._wait_for(lambda : all(len(er.outputs) >= 5 for er in ar)) outs = [ {u'text/plain' : unicode(i)} for i in range(5) ] expected = [outs] * len(view) self.assertEquals(ar.outputs, expected) @@ -648,7 +660,7 @@ class TestView(ClusterTestCase, ParametricTestCase): ar = view.apply_async(publish) ar.get(5) - time.sleep(0.2) + self._wait_for(lambda : all(len(out) >= 5 for out in ar.outputs)) outs = [ {u'text/plain' : unicode(j)} for j in range(5) ] expected = [outs] * len(view) self.assertEquals(ar.outputs, expected) @@ -669,6 +681,7 @@ class TestView(ClusterTestCase, ParametricTestCase): # include imports, in case user config ar = view.execute("plot(rand(100))", silent=False) reply = ar.get(5) + self._wait_for(lambda : all(ar.outputs)) self.assertEquals(len(reply.outputs), 1) output = reply.outputs[0] self.assertTrue("image/png" in output)