| 52 | | # e.stopService() |
|---|
| 53 | | pass |
|---|
| 54 | | |
|---|
| 55 | | def testTaskIDs(self): |
|---|
| 56 | | l = [] |
|---|
| 57 | | for i in range(16): |
|---|
| 58 | | d = self.tc.run(task.Task('a=5')) |
|---|
| 59 | | d = self.assertDeferredEquals(d, i) |
|---|
| 60 | | l.append(d) |
|---|
| 61 | | return defer.DeferredList(l) |
|---|
| 62 | | |
|---|
| 63 | | def testAbort(self): |
|---|
| 64 | | """Cannot do a proper abort test, because blocking execution prevents |
|---|
| 65 | | abort from being called before task completes""" |
|---|
| 66 | | t = task.Task('a=5') |
|---|
| 67 | | d = self.tc.abort(0) |
|---|
| 68 | | d = self.assertDeferredRaises(d, IndexError) |
|---|
| 69 | | d.addCallback(lambda _:self.tc.run(t)) |
|---|
| 70 | | d.addCallback(self.tc.abort) |
|---|
| 71 | | d = self.assertDeferredRaises(d, IndexError) |
|---|
| 72 | | return d |
|---|
| 73 | | |
|---|
| 74 | | def testClears(self): |
|---|
| 75 | | d = self.me.execute('b=1', targets=0) |
|---|
| 76 | | t = task.Task('a=1', clearBefore=True, resultNames='b', clearAfter=True) |
|---|
| 77 | | d.addCallback(lambda _:self.tc.run(t)) |
|---|
| 78 | | d.addCallback(self.tc.getTaskResult,block=True) |
|---|
| 79 | | d.addCallback(lambda tr: tr.failure) |
|---|
| 80 | | d = self.assertDeferredRaises(d, NameError) # check b for clearBefore |
|---|
| 81 | | d.addCallback(lambda _:self.me.pull('a', targets=0)) |
|---|
| 82 | | d = self.assertDeferredRaises(d, NameError) # check a for clearAfter |
|---|
| 83 | | return d |
|---|
| 84 | | |
|---|
| 85 | | def testSimpleRetries(self): |
|---|
| 86 | | d = self.me.execute('i=0', targets=0) |
|---|
| 87 | | t = task.Task("i += 1\nassert i == 16", resultNames='i',retries=10) |
|---|
| 88 | | t2 = task.Task("i += 1\nassert i == 16", resultNames='i',retries=10) |
|---|
| 89 | | |
|---|
| 90 | | d.addCallback(lambda r: self.tc.run(t)) |
|---|
| 91 | | d.addCallback(self.tc.getTaskResult, block=True) |
|---|
| 92 | | d.addCallback(lambda tr: tr.ns.i) |
|---|
| 93 | | d = self.assertDeferredRaises(d, AssertionError) |
|---|
| 94 | | |
|---|
| 95 | | d.addCallback(lambda r: self.tc.run(t2)) |
|---|
| 96 | | d.addCallback(self.tc.getTaskResult, block=True) |
|---|
| 97 | | d.addCallback(lambda tr: tr.ns.i) |
|---|
| 98 | | d = self.assertDeferredEquals(d, 16) |
|---|
| 99 | | return d |
|---|
| 100 | | |
|---|
| 101 | | def testRecoveryTasks(self): |
|---|
| 102 | | t = task.Task("i=16", resultNames='i') |
|---|
| 103 | | t2 = task.Task("raise Exception", recoveryTask=t, retries = 2) |
|---|
| 104 | | |
|---|
| 105 | | d = self.tc.run(t2) |
|---|
| 106 | | d.addCallback(self.tc.getTaskResult, block=True) |
|---|
| 107 | | d.addCallback(lambda tr: tr.ns.i) |
|---|
| 108 | | d = self.assertDeferredEquals(d, 16) |
|---|
| 109 | | return d |
|---|
| 110 | | |
|---|
| 111 | | def testInfiniteRecoveryLoop(self): |
|---|
| 112 | | t = task.Task("raise Exception", retries = 5) |
|---|
| 113 | | t2 = task.Task("assert False", retries = 2, recoveryTask = t) |
|---|
| 114 | | t.recoveryTask = t2 |
|---|
| 115 | | |
|---|
| 116 | | d = self.tc.run(t) |
|---|
| 117 | | d.addCallback(self.tc.getTaskResult, block=True) |
|---|
| 118 | | d.addCallback(lambda tr: tr.ns.i) |
|---|
| 119 | | d = self.assertDeferredRaises(d, AssertionError) |
|---|
| 120 | | return d |
|---|
| 121 | | |
|---|
| 122 | | def testSetupNS(self): |
|---|
| 123 | | d = self.me.execute('a=0', targets=0) |
|---|
| 124 | | ns = dict(a=1, b=0) |
|---|
| 125 | | t = task.Task("", setupNS=ns, resultNames=['a','b']) |
|---|
| 126 | | d.addCallback(lambda r: self.tc.run(t)) |
|---|
| 127 | | d.addCallback(self.tc.getTaskResult, block=True) |
|---|
| 128 | | d.addCallback(lambda tr: {'a':tr.ns.a, 'b':tr['b']}) |
|---|
| 129 | | d = self.assertDeferredEquals(d, ns) |
|---|
| 130 | | return d |
|---|
| 131 | | |
|---|
| 132 | | |
|---|
| 133 | | def testTaskResults(self): |
|---|
| 134 | | t1 = task.Task('a=5', resultNames='a') |
|---|
| 135 | | d = self.tc.run(t1) |
|---|
| 136 | | d.addCallback(self.tc.getTaskResult, block=True) |
|---|
| 137 | | d.addCallback(lambda tr: (tr.ns.a,tr['a'],tr.failure, tr.raiseException())) |
|---|
| 138 | | d = self.assertDeferredEquals(d, (5,5,None,None)) |
|---|
| 139 | | |
|---|
| 140 | | t2 = task.Task('7=5') |
|---|
| 141 | | d.addCallback(lambda r: self.tc.run(t2)) |
|---|
| 142 | | d.addCallback(self.tc.getTaskResult, block=True) |
|---|
| 143 | | d.addCallback(lambda tr: tr.ns) |
|---|
| 144 | | d = self.assertDeferredRaises(d, SyntaxError) |
|---|
| 145 | | |
|---|
| 146 | | t3 = task.Task('', resultNames='b') |
|---|
| 147 | | d.addCallback(lambda r: self.tc.run(t3)) |
|---|
| 148 | | d.addCallback(self.tc.getTaskResult, block=True) |
|---|
| 149 | | d.addCallback(lambda tr: tr.ns) |
|---|
| 150 | | d = self.assertDeferredRaises(d, NameError) |
|---|
| 151 | | return d |
|---|
| 152 | | |
|---|
| | 46 | e.stopService() |
|---|
| | 47 | |
|---|
| | 48 | |
|---|