# HG changeset patch # User Sandro Knauß # Date 1330987949 -3600 # Node ID 91f87ad13540bc6ca3604b614ae1c51693961f9c # Parent d755b2e0cc0b96932a2ac5ab7c48db09712e2456 integration tests for smtp diff -r d755b2e0cc0b -r 91f87ad13540 iro/model/job.py --- a/iro/model/job.py Mon Mar 05 23:51:56 2012 +0100 +++ b/iro/model/job.py Mon Mar 05 23:52:29 2012 +0100 @@ -61,7 +61,6 @@ self.incStatus() if self.status != "error": self._status(session,"error") - log.err(_why="Error: Job(%s) to '%s' failed."%(self.dbjob, task.recipient),_stuff=err) threadable.synchronize(ExJob) diff -r d755b2e0cc0b -r 91f87ad13540 iro/offer/smtp.py --- a/iro/offer/smtp.py Mon Mar 05 23:51:56 2012 +0100 +++ b/iro/offer/smtp.py Mon Mar 05 23:52:29 2012 +0100 @@ -33,7 +33,7 @@ "SSL":Option(vBool,long="use SSL for connection to MTA", default=False), }) - def send(self,mail,recipient): + def send(self, recipient, mail): if not self.testmode: if self.SSL: smtp = smtplib.SMTP_SSL(self.host,self.port) diff -r d755b2e0cc0b -r 91f87ad13540 tests/offer_integrated.py --- a/tests/offer_integrated.py Mon Mar 05 23:51:56 2012 +0100 +++ b/tests/offer_integrated.py Mon Mar 05 23:52:29 2012 +0100 @@ -7,13 +7,14 @@ from iro.model.job import exJobs from iro.model.pool import data from iro.model.schema import User, Offer as DBOffer, Userright -from iro.model.message import SMS +from iro.model.message import SMS, Mail from iro.model import offer from iro.controller.task import Task, taskPool from iro.telnumber import Telnumber from iro.offer import Smstrade, SMTP, Offer +from iro.offer.smstrade import SmstradeException, StatusCode from .dbtestcase import DBTestCase @@ -24,6 +25,23 @@ def run( f,*a,**k): return f(*a,**k) +from twisted.python import log + +class DummyObserver(object): + def __init__(self): + self.e=[] + + def start(self): + log.addObserver(self.emit) + + def stop(self): + log.removeObserver(self.emit) + + def emit(self, eventDict): + self.e.append(eventDict) + + + class IntegratedOfferTests(DBTestCase): def setUp(self): DBTestCase.setUp(self) @@ -33,7 +51,11 @@ self.taskPool = taskPool.run taskPool.run = run + self.log = DummyObserver() + self.log.start() + def tearDown(self): + self.log.stop() exJobs.clear() data.pool = self.pool self.pool = None @@ -67,11 +89,14 @@ t = Task(Telnumber("0123456789"),j) yield t.start() + self.assertEqual(self.log.e[0]['message'], ("Job(%s) to '0049123456789' ended sucecessfully via bla:basic."%j.dbjob,)) + with self.session() as session: u = session.merge(u) o = session.merge(o) job = u.job(j.dbjob) self.assertEqual(job.status,"sended") + self.assertEqual(job.info,"tesched") self.assertEqual(len(job.messages),1) msg = job.messages[0] @@ -105,6 +130,13 @@ t = Task(Telnumber("0123456789"),j) yield t.start() + errors = self.flushLoggedErrors(SmstradeException) + self.assertEqual(len(errors), 1) + self.assertEqual(self.log.e[0]['why'], "Error: Job(%s) to '0049123456789' failed."%j.dbjob) + + self.assertEqual(t.error, True) + self.assertEqual(str(t.status.value),str(SmstradeException(StatusCode(703)))) + with self.session() as session: u = session.merge(u) o = session.merge(o) @@ -112,10 +144,72 @@ self.assertEqual(job.status,"error") self.assertEqual(len(job.messages),0) - def testSmtp(self): - pass - testSmtp.todo ="to implement" + @patch("smtplib.SMTP") + @inlineCallbacks + def testSmtp(self, p_s ): + with self.session() as session: + u = User(name='test',apikey='abcdef123456789') + session.add(u) + o=DBOffer(name="s", provider="bla", route=None, typ="mail") + u.rights.append(Userright(o)) + + offer.providers["bla"] = SMTP("bla") + offer.providers["bla"].SSL = False + offer.providers["bla"].TLS = False + offer.providers["bla"].host = "localhost" + offer.providers["bla"].port = 12345 + offer.providers["bla"].user = "" + offer.providers["bla"].send_from = "frm@test.de" + offer.offers["s"] = Offer("s",offer.providers["bla"],None,"mail") + + j = yield exJobs.create(u,["t@test.de"],Mail("bla",'msg',None),['s'],'tesched') + t = Task("t@test.de",j) + yield t.start() + + self.assertEqual(self.log.e[0]['message'], ("Job(%s) to 't@test.de' ended sucecessfully via bla:None."%j.dbjob,)) + + with self.session() as session: + u = session.merge(u) + o = session.merge(o) + job = u.job(j.dbjob) + self.assertEqual(job.status,"sended") + self.assertEqual(job.info,"tesched") + self.assertEqual(len(job.messages),0) - def testSmtpException(self): - pass - testSmtpException.todo ="to implement" + @patch("smtplib.SMTP") + @inlineCallbacks + def testSmtpException(self, p_s): + p_s.side_effect = IOError(111,"Connection refused") + with self.session() as session: + u = User(name='test',apikey='abcdef123456789') + session.add(u) + o=DBOffer(name="s", provider="bla", route=None, typ="mail") + u.rights.append(Userright(o)) + + offer.providers["bla"] = SMTP("bla") + offer.providers["bla"].SSL = False + offer.providers["bla"].TLS = False + offer.providers["bla"].host = "localhost" + offer.providers["bla"].port = 12345 + offer.providers["bla"].user = "" + offer.providers["bla"].send_from = "frm@test.de" + offer.offers["s"] = Offer("s",offer.providers["bla"],None,"mail") + + j = yield exJobs.create(u,["t@test.de"],Mail("bla",'msg',None),['s'],'tesched') + t = Task("t@test.de",j) + yield t.start() + + errors = self.flushLoggedErrors(IOError) + self.assertEqual(len(errors), 1) + self.assertEqual(self.log.e[0]['why'], "Error: Job(%s) to 't@test.de' failed."%j.dbjob +) + self.assertEqual(t.error, True) + self.assertEqual(str(t.status.value),str(IOError(111,"Connection refused"))) + + with self.session() as session: + u = session.merge(u) + o = session.merge(o) + job = u.job(j.dbjob) + self.assertEqual(job.status,"error") + self.assertEqual(len(job.messages),0) + diff -r d755b2e0cc0b -r 91f87ad13540 tests/smtp.py --- a/tests/smtp.py Mon Mar 05 23:51:56 2012 +0100 +++ b/tests/smtp.py Mon Mar 05 23:52:29 2012 +0100 @@ -40,7 +40,7 @@ def testSendMail(self): p=self.getSMTP() content = "sadfadfgwertsdgsdf\n\nsdfgaerasdfsad\nadfasdf" - p.send(Mail("sub", content, None), "t@t.de") + p.send("t@t.de", Mail("sub", content, None)) self.assertEqual(len(self.smtp_server.rcvd), 1) @@ -57,7 +57,7 @@ def testSendMailExtraFrm(self): p=self.getSMTP() content = "" - p.send(Mail("sub", content, "f@t.de"), "t@t.de") + p.send("t@t.de", Mail("sub", content, "f@t.de")) self.assertEqual(len(self.smtp_server.rcvd), 1) fromaddr, toaddrs, message = self.smtp_server.rcvd[0] @@ -69,7 +69,7 @@ def testSendMailException(self): p=self.getSMTP({"port":PORT-1}) content = "" - self.assertRaises(IOError, p.send, Mail("sub", content, "f@t.de"), "t@t.de") + self.assertRaises(IOError, p.send, "t@t.de", Mail("sub", content, "f@t.de")) self.assertEqual(len(self.smtp_server.rcvd), 0) @@ -81,7 +81,7 @@ p=self.getSMTP({"SSL":True}) content = "sadfadfgwertsdgsdf\n\nsdfgaerasdfsad\nadfasdf" - p.send(Mail("sub", content, None), "t@t.de") + p.send("t@t.de", Mail("sub", content, None)) self.assertEqual(mock_ssl.call_count,1) @@ -94,7 +94,7 @@ p=self.getSMTP({"TLS":True}) content = "sadfadfgwertsdgsdf\n\nsdfgaerasdfsad\nadfasdf" - p.send(Mail("sub", content, None), "t@t.de") + p.send("t@t.de", Mail("sub", content, None)) mock_s.starttls.assert_called_once_with() self.assertEqual(mock_s.sendmail.call_count,1) @@ -107,7 +107,7 @@ p=self.getSMTP({"user":"user","password":"pw"}) content = "sadfadfgwertsdgsdf\n\nsdfgaerasdfsad\nadfasdf" - p.send(Mail("sub", content, None), "t@t.de") + p.send("t@t.de", Mail("sub", content, None)) mock_s.login.assert_called_once_with("user","pw") self.assertEqual(mock_s.sendmail.call_count,1)