tests/smtp.py
branchdevel
changeset 169 aabc04843d25
parent 164 b634a8fed51f
child 174 762981cada07
equal deleted inserted replaced
168:42b55855e3a6 169:aabc04843d25
     3 import email
     3 import email
     4 from email.header import decode_header
     4 from email.header import decode_header
     5 import base64
     5 import base64
     6 from smtp_helper import TestSMTPServer
     6 from smtp_helper import TestSMTPServer
     7 
     7 
       
     8 from mock import patch, Mock
       
     9 import smtplib
     8 
    10 
       
    11 from iro.error import NoRoute, NoTyp, NeededOption, UnknownOption
     9 from iro.model.message import Mail
    12 from iro.model.message import Mail
    10 from iro.offer.smtp import SMTP
    13 from iro.offer.smtp import SMTP
    11 
    14 
    12 HOST = "localhost"
    15 HOST = "localhost"
    13 PORT = 9999
    16 PORT = 9999
    18         self.smtp_server.start()
    21         self.smtp_server.start()
    19 
    22 
    20     def tearDown(self):
    23     def tearDown(self):
    21         self.smtp_server.close()
    24         self.smtp_server.close()
    22 
    25 
       
    26     def getSMTP(self, c=None):
       
    27         ret={"send_from":"send@t.de",
       
    28             "host":HOST,
       
    29             "port":PORT,
       
    30             "user":"",
       
    31             "password":"",
       
    32             }
       
    33 
       
    34         if c:
       
    35             ret.update(c)
       
    36 
       
    37         return SMTP("test",ret.items())
       
    38 
    23     def testSendMail(self):
    39     def testSendMail(self):
    24         c=[("send_from","send@t.de"),
    40         p=self.getSMTP()
    25             ("host",HOST),
       
    26             ("port",PORT),
       
    27             ("user",""),
       
    28             ("password",""),
       
    29             ]
       
    30 
       
    31         p=SMTP("test",c)
       
    32         content = "sadfadfgwertsdgsdf\n\nsdfgaerasdfsad\nadfasdf"
    41         content = "sadfadfgwertsdgsdf\n\nsdfgaerasdfsad\nadfasdf"
    33         status = p.send(Mail("sub", content, None), "t@t.de")
    42         status = p.send(Mail("sub", content, None), "t@t.de")
    34 
    43 
    35         self.assertEqual(status.status, status.GOOD)
    44         self.assertEqual(status.status, status.GOOD)
    36 
    45 
    44         self.assertEqual(msg.get_all("To"),["t@t.de"])
    53         self.assertEqual(msg.get_all("To"),["t@t.de"])
    45         self.assertEqual(decode_header(msg.get("Subject")),[("sub","utf-8")])
    54         self.assertEqual(decode_header(msg.get("Subject")),[("sub","utf-8")])
    46         self.assertEqual(base64.b64decode(msg.get_payload()),content)
    55         self.assertEqual(base64.b64decode(msg.get_payload()),content)
    47 
    56 
    48     def testSendMailExtraFrm(self):
    57     def testSendMailExtraFrm(self):
    49         c=[("send_from","send@t.de"),
    58         p=self.getSMTP()
    50             ("host",HOST),
       
    51             ("port",PORT),
       
    52             ("user",""),
       
    53             ("password",""),
       
    54             ]
       
    55 
       
    56         p=SMTP("test",c)
       
    57         content = ""
    59         content = ""
    58         status = p.send(Mail("sub", content, "f@t.de"), "t@t.de")
    60         status = p.send(Mail("sub", content, "f@t.de"), "t@t.de")
    59 
    61 
    60         self.assertEqual(status.status, status.GOOD)
    62         self.assertEqual(status.status, status.GOOD)
    61 
    63 
    65         
    67         
    66         self.assertEqual(fromaddr,"f@t.de")
    68         self.assertEqual(fromaddr,"f@t.de")
    67         self.assertEqual(msg.get_all("From"),["f@t.de"])
    69         self.assertEqual(msg.get_all("From"),["f@t.de"])
    68 
    70 
    69     def testSendMailException(self):
    71     def testSendMailException(self):
    70         c=[("send_from","send@t.de"),
    72         p=self.getSMTP({"port":PORT-1})
    71             ("host",HOST),
       
    72             ("port",PORT-1),
       
    73             ("user",""),
       
    74             ("password",""),
       
    75             ]
       
    76 
       
    77         p=SMTP("test",c)
       
    78         content = ""
    73         content = ""
    79         status = p.send(Mail("sub", content, "f@t.de"), "t@t.de")
    74         self.assertRaises(IOError, p.send, Mail("sub", content, "f@t.de"), "t@t.de")
    80         self.assertEqual(status.status, status.ERROR)
       
    81         self.assertIsInstance(status.error,IOError)
       
    82         self.assertEqual(status.error.errno,111)
       
    83 
    75 
    84         self.assertEqual(len(self.smtp_server.rcvd), 0)
    76         self.assertEqual(len(self.smtp_server.rcvd), 0)
    85 
    77 
       
    78     @patch("smtplib.SMTP_SSL")
       
    79     def testSSLSendMail(self,mock_ssl):
       
    80         def se(*args):
       
    81             return smtplib.SMTP(*args)
       
    82         mock_ssl.side_effect=se
       
    83 
       
    84         p=self.getSMTP({"SSL":True})
       
    85         content = "sadfadfgwertsdgsdf\n\nsdfgaerasdfsad\nadfasdf"
       
    86         status = p.send(Mail("sub", content, None), "t@t.de")
       
    87 
       
    88         self.assertEqual(mock_ssl.call_count,1)
       
    89         self.assertEqual(status.status, status.GOOD)
       
    90 
       
    91         self.assertEqual(len(self.smtp_server.rcvd), 1)
       
    92 
       
    93     @patch("smtplib.SMTP")
       
    94     def testTLSSendMail(self,mock_smtp):
       
    95         mock_s = Mock()
       
    96         mock_smtp.return_value = mock_s
       
    97 
       
    98         p=self.getSMTP({"TLS":True})
       
    99         content = "sadfadfgwertsdgsdf\n\nsdfgaerasdfsad\nadfasdf"
       
   100         status = p.send(Mail("sub", content, None), "t@t.de")
       
   101         
       
   102         mock_s.starttls.assert_called_once_with()
       
   103         self.assertEqual(mock_s.sendmail.call_count,1)
       
   104         self.assertEqual([i[0] for i in mock_s.method_calls],["starttls","sendmail","quit"])
       
   105         self.assertEqual(status.status, status.GOOD)
       
   106 
       
   107     @patch("smtplib.SMTP")
       
   108     def testLoginSendMail(self,mock_smtp):
       
   109         mock_s = Mock()
       
   110         mock_smtp.return_value = mock_s
       
   111 
       
   112         p=self.getSMTP({"user":"user","password":"pw"})
       
   113         content = "sadfadfgwertsdgsdf\n\nsdfgaerasdfsad\nadfasdf"
       
   114         status = p.send(Mail("sub", content, None), "t@t.de")
       
   115         
       
   116         mock_s.login.assert_called_once_with("user","pw")
       
   117         self.assertEqual(mock_s.sendmail.call_count,1)
       
   118         self.assertEqual([i[0] for i in mock_s.method_calls],["login","sendmail","quit"])
       
   119         self.assertEqual(status.status, status.GOOD)
       
   120 
       
   121     
    86     def testNeededOption(self):
   122     def testNeededOption(self):
    87         pass
   123         c={"send_from":"send@t.de",
    88     testNeededOption.todo = "test NeededOption is not implemented"
   124             "host":HOST,
       
   125             "port":PORT,
       
   126             "user":"u",
       
   127             "password":"p",
       
   128             }
       
   129         s=SMTP("test",c.items())
       
   130         self.assertEqual(s.send_from, "send@t.de")
       
   131         self.assertEqual(s.host, HOST)
       
   132         self.assertEqual(s.port, PORT)
       
   133         self.assertEqual(s.user, "u")
       
   134         self.assertEqual(s.password, "p")
       
   135         self.assertEqual(s.bSSL,False)
       
   136         self.assertEqual(s.bTLS,False)
    89 
   137 
    90     def testUnknownOption(self):
   138         c.update({"TLS":True, "SSL":True})
    91         pass
   139         s=SMTP("test", c.items())
    92     testUnknownOption.todo = "test UnknownOption is not implemented"
   140         self.assertEqual(s.bSSL,True)
       
   141         self.assertEqual(s.bTLS,True)
       
   142         
       
   143         del c["host"]
       
   144         self.assertRaises(NeededOption,SMTP,"test",c.items())
       
   145 
       
   146         c = {"unknown":""}
       
   147         self.assertRaises(UnknownOption,SMTP,"test",c.items())
    93 
   148 
    94     def testSendFunc(self):
   149     def testSendFunc(self):
    95         pass
   150         s = self.getSMTP()
    96     testSendFunc.todo = "test getSendFunc is not implemented"
   151         self.assertEqual(s.getSendFunc("mail",None), s.send)
       
   152         self.assertRaises(NoRoute,s.getSendFunc,"mail","foo")
       
   153         self.assertRaises(NoTyp,s.getSendFunc,"mail2","foo")