tests for OfferChaning added
OfferChaning: First Offers fail, and another sucseed.
--- a/iro/controller/task.py Fri Mar 23 16:18:12 2012 +0100
+++ b/iro/controller/task.py Fri Mar 23 16:21:22 2012 +0100
@@ -1,5 +1,6 @@
from functools import partial
+from twisted.python import log
from twisted.internet.defer import inlineCallbacks, returnValue, maybeDeferred, Deferred
from ..error import NoRouteForTask, RejectRecipient
@@ -44,15 +45,16 @@
offer = os.next()
d = maybeDeferred(offers[offer],self.recipient,self.job.message)
d.addCallback(self.d.callback)
- d.addErrback(addErr)
+ d.addErrback(addErr,offer)
d.addErrback(self.d.errback)
return d
except StopIteration:
self.d.errback(NoRouteForTask())
- def addErr(failure):
- failure.trap(RejectRecipient)
- return n()
+ def addErr(failure, offer):
+ if not isinstance(failure.value, RejectRecipient):
+ log.err(_why="Job(%s): Send to '%s' failed via '%s'"%(self.job.dbjob, self.recipient, offer),_stuff=failure)
+ n()
n()
--- a/iro/tests/task.py Fri Mar 23 16:18:12 2012 +0100
+++ b/iro/tests/task.py Fri Mar 23 16:21:22 2012 +0100
@@ -113,6 +113,45 @@
d.addCallback(c)
return d
+ def testChaining(self):
+ with self.session() as session:
+ u = User(name='test',apikey='abcdef123456789')
+ session.add(u)
+ o=DBOffer(name="test", provider="bla", route="basic", typ="sms")
+ u.rights.append(Userright(o))
+ o=DBOffer(name="test2", provider="bla", route="basic2", typ="sms")
+ u.rights.append(Userright(o))
+
+ p=Provider(name="p", typs={"sms":["basic","basic2"]})
+ def send(typ,route,recipient,message):
+ if route=="basic":
+ raise Exception("oh my god an exception")
+ return Status(p,route)
+ p.send=send
+ offers["test"] = Offer("test",provider=p, route="basic", typ="sms")
+ offers["test2"] = Offer("test2",provider=p, route="basic2", typ="sms")
+
+ def c(exjob):
+ task = Task(Telnumber('123456789'), exjob)
+ task.d = Deferred()
+ task.d.addCallback(stat, task)
+ task._run()
+ return task.d
+
+ def stat(status, task):
+ errors = self.flushLoggedErrors(Exception)
+ self.assertEqual(len(errors), 1)
+ self.assertEqual(self.log.e[1]['why'], "Job(%s): Send to '0049123456789' failed via 'test'"% task.job.dbjob)
+ self.assertIsInstance(status, Status)
+ self.assertEqual(status.provider, p)
+ self.assertEqual(status.route, "basic2")
+
+ d = exJobs.create(u, [Telnumber('123456789')], SMS('test'), ['test','test2'])
+ d.addCallback(c)
+ return d
+
+
+
def testSetStatus(self):
task=Task(Telnumber('123456789'), None)
self.assertEqual(task.status,None)