tests/smtp_helper.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 02 Mar 2012 02:50:17 +0100
branchdevel
changeset 205 02ae72e8bab9
parent 164 b634a8fed51f
permissions -rw-r--r--
implementing vRoutes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
164
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     1
"""
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     2
A helper class which allows test code to intercept and store sent email.
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     3
(from: http://lakin.weckers.net/thoughts/twisted/part1/threaded/)
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     4
"""
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     5
import smtpd
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
import asyncore
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     7
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     8
class TestSMTPServer(smtpd.SMTPServer):
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     9
    """
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    10
    An SMTP Server used to allow integration tests which ensure email is sent.
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    11
    """
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    12
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    13
    def __init__(self, localaddr):
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    14
        self.rcvd = []
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    15
        smtpd.SMTPServer.__init__(self, localaddr, None)
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    16
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    17
    def start(self):
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    18
        import threading
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    19
        self.poller = threading.Thread(target=asyncore.loop,
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    20
                kwargs={'timeout':0.1, 'use_poll':True})
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    21
        self.poller.start()
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    22
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    23
    def process_message(self, peer, mailfrom, rcpttos, data):
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    24
        self.rcvd.append((mailfrom, rcpttos, data))
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    25
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26
    def close(self):
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    27
        smtpd.SMTPServer.close(self)
b634a8fed51f adding tests for smtp backend
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    28
        self.poller.join()