diff -r 42b55855e3a6 -r aabc04843d25 tests/smtp.py --- a/tests/smtp.py Wed Feb 15 14:43:37 2012 +0100 +++ b/tests/smtp.py Sat Feb 18 17:13:38 2012 +0100 @@ -5,7 +5,10 @@ import base64 from smtp_helper import TestSMTPServer +from mock import patch, Mock +import smtplib +from iro.error import NoRoute, NoTyp, NeededOption, UnknownOption from iro.model.message import Mail from iro.offer.smtp import SMTP @@ -20,15 +23,21 @@ def tearDown(self): self.smtp_server.close() + def getSMTP(self, c=None): + ret={"send_from":"send@t.de", + "host":HOST, + "port":PORT, + "user":"", + "password":"", + } + + if c: + ret.update(c) + + return SMTP("test",ret.items()) + def testSendMail(self): - c=[("send_from","send@t.de"), - ("host",HOST), - ("port",PORT), - ("user",""), - ("password",""), - ] - - p=SMTP("test",c) + p=self.getSMTP() content = "sadfadfgwertsdgsdf\n\nsdfgaerasdfsad\nadfasdf" status = p.send(Mail("sub", content, None), "t@t.de") @@ -46,14 +55,7 @@ self.assertEqual(base64.b64decode(msg.get_payload()),content) def testSendMailExtraFrm(self): - c=[("send_from","send@t.de"), - ("host",HOST), - ("port",PORT), - ("user",""), - ("password",""), - ] - - p=SMTP("test",c) + p=self.getSMTP() content = "" status = p.send(Mail("sub", content, "f@t.de"), "t@t.de") @@ -67,30 +69,85 @@ self.assertEqual(msg.get_all("From"),["f@t.de"]) def testSendMailException(self): - c=[("send_from","send@t.de"), - ("host",HOST), - ("port",PORT-1), - ("user",""), - ("password",""), - ] - - p=SMTP("test",c) + p=self.getSMTP({"port":PORT-1}) content = "" - status = p.send(Mail("sub", content, "f@t.de"), "t@t.de") - self.assertEqual(status.status, status.ERROR) - self.assertIsInstance(status.error,IOError) - self.assertEqual(status.error.errno,111) + self.assertRaises(IOError, p.send, Mail("sub", content, "f@t.de"), "t@t.de") self.assertEqual(len(self.smtp_server.rcvd), 0) - def testNeededOption(self): - pass - testNeededOption.todo = "test NeededOption is not implemented" + @patch("smtplib.SMTP_SSL") + def testSSLSendMail(self,mock_ssl): + def se(*args): + return smtplib.SMTP(*args) + mock_ssl.side_effect=se + + p=self.getSMTP({"SSL":True}) + content = "sadfadfgwertsdgsdf\n\nsdfgaerasdfsad\nadfasdf" + status = p.send(Mail("sub", content, None), "t@t.de") + + self.assertEqual(mock_ssl.call_count,1) + self.assertEqual(status.status, status.GOOD) + + self.assertEqual(len(self.smtp_server.rcvd), 1) + + @patch("smtplib.SMTP") + def testTLSSendMail(self,mock_smtp): + mock_s = Mock() + mock_smtp.return_value = mock_s + + p=self.getSMTP({"TLS":True}) + content = "sadfadfgwertsdgsdf\n\nsdfgaerasdfsad\nadfasdf" + status = p.send(Mail("sub", content, None), "t@t.de") + + mock_s.starttls.assert_called_once_with() + self.assertEqual(mock_s.sendmail.call_count,1) + self.assertEqual([i[0] for i in mock_s.method_calls],["starttls","sendmail","quit"]) + self.assertEqual(status.status, status.GOOD) + + @patch("smtplib.SMTP") + def testLoginSendMail(self,mock_smtp): + mock_s = Mock() + mock_smtp.return_value = mock_s - def testUnknownOption(self): - pass - testUnknownOption.todo = "test UnknownOption is not implemented" + p=self.getSMTP({"user":"user","password":"pw"}) + content = "sadfadfgwertsdgsdf\n\nsdfgaerasdfsad\nadfasdf" + status = p.send(Mail("sub", content, None), "t@t.de") + + mock_s.login.assert_called_once_with("user","pw") + self.assertEqual(mock_s.sendmail.call_count,1) + self.assertEqual([i[0] for i in mock_s.method_calls],["login","sendmail","quit"]) + self.assertEqual(status.status, status.GOOD) + + + def testNeededOption(self): + c={"send_from":"send@t.de", + "host":HOST, + "port":PORT, + "user":"u", + "password":"p", + } + s=SMTP("test",c.items()) + self.assertEqual(s.send_from, "send@t.de") + self.assertEqual(s.host, HOST) + self.assertEqual(s.port, PORT) + self.assertEqual(s.user, "u") + self.assertEqual(s.password, "p") + self.assertEqual(s.bSSL,False) + self.assertEqual(s.bTLS,False) + + c.update({"TLS":True, "SSL":True}) + s=SMTP("test", c.items()) + self.assertEqual(s.bSSL,True) + self.assertEqual(s.bTLS,True) + + del c["host"] + self.assertRaises(NeededOption,SMTP,"test",c.items()) + + c = {"unknown":""} + self.assertRaises(UnknownOption,SMTP,"test",c.items()) def testSendFunc(self): - pass - testSendFunc.todo = "test getSendFunc is not implemented" + s = self.getSMTP() + self.assertEqual(s.getSendFunc("mail",None), s.send) + self.assertRaises(NoRoute,s.getSendFunc,"mail","foo") + self.assertRaises(NoTyp,s.getSendFunc,"mail2","foo")