# HG changeset patch # User Sandro Knauß # Date 1332516082 -3600 # Node ID b348d8f15b0ae282fec307dd79b280ccf1fa919e # Parent 745d829d1e02e3fe9a8f0b4fbf2042bdb830916c tests for OfferChaning added OfferChaning: First Offers fail, and another sucseed. diff -r 745d829d1e02 -r b348d8f15b0a iro/controller/task.py --- 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() diff -r 745d829d1e02 -r b348d8f15b0a iro/tests/task.py --- 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)