def test_wait_timeout_premature(self): s1 = operations.sleep(0.25, obj) s2 = operations.sleep(0.75, obj2) s3 = operations.sleep(1, obj3) result = operations.wait([s1, s2, s3], timeout=0.5).result() self.assertEqual(len(result.done), 1) self.assertEqual(len(result.not_done), 2)
def test_wait_timeout_completed(self): s1 = operations.sleep(0.25, obj) s2 = operations.sleep(0.5, obj2) s3 = operations.sleep(0.75, obj3) result = operations.wait([s1, s2, s3], timeout=1).result() self.assertEqual(len(result.done), 3) self.assertEqual(len(result.not_done), 0)
def test_wait_first_exception_no_error(self): s1 = operations.sleep(0.25, obj) s2 = operations.sleep(0.5, obj2) s3 = operations.sleep(0.75, obj3) result = operations.wait([s1, s2, s3], return_when=FIRST_EXCEPTION).result() self.assertEqual(len(result.done), 3) self.assertEqual(len(result.not_done), 0) self.assertTrue(s1.done()) self.assertTrue(s2.done()) self.assertTrue(s3.done())
def test_wait_shield_parent_cancel(self): s1 = operations.sleep(0.5, obj) s2 = operations.sleep(0.75, obj2) s3 = operations.sleep(1, obj3) w = operations.wait([s1, s2, s3]) time.sleep(0.25) w.cancel() self.assertFalse(s1.cancelled()) self.assertFalse(s2.cancelled()) self.assertFalse(s3.cancelled()) s1.cancel() s2.cancel() s3.cancel()
def test_wait_first_complete(self): s1 = operations.sleep(0.25, obj) s2 = operations.sleep(0.5, obj2) s3 = operations.sleep(0.75, obj3) result = operations.wait([s1, s2, s3], return_when=FIRST_COMPLETED).result() self.assertEqual(len(result.done), 1) self.assertEqual(len(result.not_done), 2) self.assertTrue(s1.done()) self.assertFalse(s2.done()) self.assertFalse(s3.done()) s2.cancel() s3.cancel()
def test_wait_graceful_child_cancel_exception(self): s1 = operations.sleep(0.25, obj) s2 = operations.sleep(0.75, obj2) s3 = operations.sleep(1, obj3) w = operations.wait([s1, s2, s3], return_when=FIRST_EXCEPTION) time.sleep(0.5) s2.cancel() self.assertFalse(w.cancelled()) self.assertFalse(s1.cancelled()) self.assertTrue(s2.cancelled()) self.assertFalse(s3.cancelled()) done, not_done = w.result() self.assertEqual(len(done), 2) self.assertEqual(len(not_done), 1) self.assertTrue( any(isinstance(d.exception(), CancelledError) for d in done))
def test_wait_first_exception(self): @operations.futurize async def _func(): await operations.sleep(.5) raise exc s1 = operations.sleep(0.25, obj) s2 = _func() s3 = operations.sleep(0.75, obj3) result = operations.wait([s1, s2, s3], return_when=FIRST_EXCEPTION).result() self.assertEqual(len(result.done), 2) self.assertEqual(len(result.not_done), 1) self.assertTrue(s1.done()) self.assertTrue(s2.done()) self.assertFalse(s3.done()) s3.cancel()
def test_wait_first_complete_with_error(self): @operations.futurize async def _func(): await operations.sleep(.25) raise exc s1 = _func() s2 = operations.sleep(0.5, obj2) s3 = operations.sleep(0.75, obj3) result = operations.wait([s1, s2, s3], return_when=FIRST_COMPLETED).result() self.assertEqual(len(result.done), 1) self.assertEqual(len(result.not_done), 2) self.assertTrue(s1.done()) self.assertFalse(s2.done()) self.assertFalse(s3.done()) s2.cancel() s3.cancel()