def test_recovery_tasks(self): self.addEngine(1) t = task.StringTask("i=16", pull='i') t2 = task.StringTask("raise Exception", recovery_task=t, retries = 2) d = self.tc.run(t2) d.addCallback(self.tc.get_task_result, block=True) d.addCallback(lambda tr: tr.ns.i) d.addCallback(lambda r: self.assertEquals(r, 16)) return d
def test_task_ids(self): self.addEngine(1) d = self.tc.run(task.StringTask('a=5')) d.addCallback(lambda r: self.assertEquals(r, 0)) d.addCallback(lambda r: self.tc.run(task.StringTask('a=5'))) d.addCallback(lambda r: self.assertEquals(r, 1)) d.addCallback(lambda r: self.tc.run(task.StringTask('a=5'))) d.addCallback(lambda r: self.assertEquals(r, 2)) d.addCallback(lambda r: self.tc.run(task.StringTask('a=5'))) d.addCallback(lambda r: self.assertEquals(r, 3)) return d
def test_simple_retries(self): self.addEngine(1) t = task.StringTask("i += 1\nassert i == 16", pull='i',retries=10) t2 = task.StringTask("i += 1\nassert i == 16", pull='i',retries=10) d = self.multiengine.execute('i=0', targets=0) d.addCallback(lambda r: self.tc.run(t)) d.addCallback(self.tc.get_task_result, block=True) d.addCallback(lambda tr: tr.ns.i) d.addErrback(lambda f: self.assertRaises(AssertionError, f.raiseException)) d.addCallback(lambda r: self.tc.run(t2)) d.addCallback(self.tc.get_task_result, block=True) d.addCallback(lambda tr: tr.ns.i) d.addCallback(lambda r: self.assertEquals(r, 16)) return d
def test_setup_ns(self): self.addEngine(1) d = self.multiengine.execute('a=0', targets=0) ns = dict(a=1, b=0) t = task.StringTask("", push=ns, pull=['a','b']) d.addCallback(lambda r: self.tc.run(t)) d.addCallback(self.tc.get_task_result, block=True) d.addCallback(lambda tr: {'a':tr.ns.a, 'b':tr['b']}) d.addCallback(lambda r: self.assertEquals(r, ns)) return d
def test_clear_before_and_after(self): self.addEngine(1) t = task.StringTask('a=1', clear_before=True, pull='b', clear_after=True) d = self.multiengine.execute('b=1', targets=0) d.addCallback(lambda _: self.tc.run(t)) d.addCallback(lambda tid: self.tc.get_task_result(tid,block=True)) d.addCallback(lambda tr: tr.failure) d.addErrback(lambda f: self.assertRaises(NameError, f.raiseException)) d.addCallback(lambda _:self.multiengine.pull('a', targets=0)) d.addErrback(lambda f: self.assertRaises(NameError, _raise_it, f)) return d
def test_abort(self): """Cannot do a proper abort test, because blocking execution prevents abort from being called before task completes""" self.addEngine(1) t = task.StringTask('a=5') d = self.tc.abort(0) d.addErrback(lambda f: self.assertRaises(IndexError, f.raiseException)) d.addCallback(lambda _:self.tc.run(t)) d.addCallback(self.tc.abort) d.addErrback(lambda f: self.assertRaises(IndexError, f.raiseException)) return d
def test_string_task_results(self): self.addEngine(1) t1 = task.StringTask('a=5', pull='a') d = self.tc.run(t1) d.addCallback(self.tc.get_task_result, block=True) d.addCallback(lambda tr: (tr.ns.a,tr['a'],tr.failure, tr.raise_exception())) d.addCallback(lambda r: self.assertEquals(r, (5,5,None,None))) t2 = task.StringTask('7=5') d.addCallback(lambda r: self.tc.run(t2)) d.addCallback(self.tc.get_task_result, block=True) d.addCallback(lambda tr: tr.ns) d.addErrback(lambda f: self.assertRaises(SyntaxError, f.raiseException)) t3 = task.StringTask('', pull='b') d.addCallback(lambda r: self.tc.run(t3)) d.addCallback(self.tc.get_task_result, block=True) d.addCallback(lambda tr: tr.ns) d.addErrback(lambda f: self.assertRaises(NameError, f.raiseException)) return d
def check_traceback(self, cmd, nframes, exception=IOError): """Ensure that we have a traceback object in task failures.""" self.addEngine(1) t1 = task.StringTask(cmd) d = self.tc.run(t1) d.addCallback(self.tc.get_task_result, block=True) # Sanity check, that the right exception is raised d.addCallback( lambda r: self.assertRaises(exception, r.raise_exception)) # Rerun the same task, this time we check for the traceback to have the # right number of frames d.addCallback(lambda r: self.tc.run(t1)) d.addCallback(self.tc.get_task_result, block=True) d.addCallback(self.get_traceback_frames) d.addCallback(lambda frames: self.assertEquals(len(frames), nframes)) return d