def testQueueFuture_ItemException(self): qf = tasklets.QueueFuture() qf.putq(1) f2 = Future() qf.putq(f2) f3 = Future() f3.set_result(3) self.ev.run() qf.putq(f3) self.ev.run() f4 = Future() f4.set_exception(ZeroDivisionError()) self.ev.run() qf.putq(f4) f5 = Future() qf.putq(f5) self.ev.run() qf.complete() self.ev.run() f2.set_result(2) self.ev.run() f5.set_exception(KeyError()) self.ev.run() # Futures are returned in the order of completion, which should be # f1, f3, f4, f2, f5. These produce 1, 3, ZeroDivisionError, 2, # KeyError, respectively. After that EOFError is raised. self.assertEqual(qf.getq().get_result(), 1) self.assertEqual(qf.getq().get_result(), 3) self.assertRaises(ZeroDivisionError, qf.getq().get_result) self.assertEqual(qf.getq().get_result(), 2) self.assertRaises(KeyError, qf.getq().get_result) self.assertRaises(EOFError, qf.getq().get_result) self.assertRaises(EOFError, qf.getq().get_result)
def testQueueFuture_SetException(self): qf = tasklets.QueueFuture() f1 = Future() f1.set_result(1) qf.putq(f1) qf.putq(f1) self.ev.run() qf.putq(2) self.ev.run() f3 = Future() f3.set_exception(ZeroDivisionError()) qf.putq(f3) self.ev.run() f4 = Future() qf.putq(f4) self.ev.run() qf.set_exception(KeyError()) f4.set_result(4) self.ev.run() self.assertRaises(KeyError, qf.get_result) # Futures are returned in the order of completion, which should be # f1, f2, f3, f4. These produce 1, 2, ZeroDivisionError, 4, # respectively. After that KeyError (the exception set on qf # itself) is raised. self.assertEqual(qf.getq().get_result(), 1) self.assertEqual(qf.getq().get_result(), 2) self.assertRaises(ZeroDivisionError, qf.getq().get_result) self.assertEqual(qf.getq().get_result(), 4) self.assertRaises(KeyError, qf.getq().get_result) self.assertRaises(KeyError, qf.getq().get_result)
def testSerialQueueFuture_ItemException(self): sqf = tasklets.SerialQueueFuture() g1 = sqf.getq() f1 = Future() sqf.putq(f1) sqf.complete() f1.set_exception(ZeroDivisionError()) self.assertRaises(ZeroDivisionError, g1.get_result)
def testReducingFuture_ItemException(self): def reducer(arg): return sum(arg) rf = tasklets.ReducingFuture(reducer) f1 = Future() f1.set_exception(ZeroDivisionError()) rf.putq(f1) rf.complete() self.assertRaises(ZeroDivisionError, rf.get_result)
def testMultiFuture_ItemException(self): mf = tasklets.MultiFuture() f1 = Future() f2 = Future() f3 = Future() f2.set_result(2) mf.putq(f1) f1.set_exception(ZeroDivisionError()) mf.putq(f2) mf.putq(f3) f3.set_result(3) self.ev.run() mf.complete() self.assertRaises(ZeroDivisionError, mf.get_result)