tests for OfferChaning added devel
authorSandro Knauß <knauss@netzguerilla.net>
Fri, 23 Mar 2012 16:21:22 +0100
branchdevel
changeset 243 b348d8f15b0a
parent 242 745d829d1e02
child 244 48fba7b4afe9
tests for OfferChaning added OfferChaning: First Offers fail, and another sucseed.
iro/controller/task.py
iro/tests/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()
 
--- 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)