from twisted.trial import unittest
import email
from email.header import decode_header
import base64
from smtp_helper import TestSMTPServer
from iro.model.message import Mail
from iro.offer.smtp import SMTP
HOST = "localhost"
PORT = 9999
class TestSMTPProvider(unittest.TestCase):
def setUp(self):
self.smtp_server = TestSMTPServer((HOST, PORT))
self.smtp_server.start()
def tearDown(self):
self.smtp_server.close()
def testSendMail(self):
c=[("send_from","send@t.de"),
("host",HOST),
("port",PORT),
("user",""),
("password",""),
]
p=SMTP("test",c)
content = "sadfadfgwertsdgsdf\n\nsdfgaerasdfsad\nadfasdf"
status = p.send(Mail("sub", content, None), "t@t.de")
self.assertEqual(status.status, status.GOOD)
self.assertEqual(len(self.smtp_server.rcvd), 1)
fromaddr, toaddrs, message = self.smtp_server.rcvd[0]
msg = email.message_from_string(message)
self.assertEqual(fromaddr,"send@t.de")
self.assertEqual(msg.get_all("From"),["send@t.de"])
self.assertEqual(toaddrs,["t@t.de"])
self.assertEqual(msg.get_all("To"),["t@t.de"])
self.assertEqual(decode_header(msg.get("Subject")),[("sub","utf-8")])
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)
content = ""
status = p.send(Mail("sub", content, "f@t.de"), "t@t.de")
self.assertEqual(status.status, status.GOOD)
self.assertEqual(len(self.smtp_server.rcvd), 1)
fromaddr, toaddrs, message = self.smtp_server.rcvd[0]
msg = email.message_from_string(message)
self.assertEqual(fromaddr,"f@t.de")
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)
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.assertEqual(len(self.smtp_server.rcvd), 0)
def testNeededOption(self):
pass
testNeededOption.todo = "test NeededOption is not implemented"
def testUnknownOption(self):
pass
testUnknownOption.todo = "test UnknownOption is not implemented"
def testSendFunc(self):
pass
testSendFunc.todo = "test getSendFunc is not implemented"