예제 #1
0
 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
예제 #2
0
 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
예제 #3
0
 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
예제 #4
0
 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
예제 #5
0
 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
예제 #6
0
 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
예제 #7
0
 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