summaryrefslogtreecommitdiff
path: root/mailman/tests/helpers.py
diff options
context:
space:
mode:
authorBarry Warsaw2008-03-06 00:29:11 -0500
committerBarry Warsaw2008-03-06 00:29:11 -0500
commit5ca899a81b547dd46197b8d51c7f51538ecde397 (patch)
tree43f1ce1d7b94ff46d8e546ab9abf92e4dd9e494e /mailman/tests/helpers.py
parenta1c73f6c305c7f74987d99855ba59d8fa823c253 (diff)
downloadmailman-5ca899a81b547dd46197b8d51c7f51538ecde397.tar.gz
mailman-5ca899a81b547dd46197b8d51c7f51538ecde397.tar.zst
mailman-5ca899a81b547dd46197b8d51c7f51538ecde397.zip
Fix a typo in a roster name.
Remove an outdated comment. Add an SMTPServer wrapper class to the test helpers module. This will be used in tests of the outgoing queue, which actually needs to talk to an SMTP server. Adapt the smtpd-based server to being run under thread control, and remove some now unnecessary code.
Diffstat (limited to 'mailman/tests/helpers.py')
-rw-r--r--mailman/tests/helpers.py55
1 files changed, 51 insertions, 4 deletions
diff --git a/mailman/tests/helpers.py b/mailman/tests/helpers.py
index 92d652236..4dc289458 100644
--- a/mailman/tests/helpers.py
+++ b/mailman/tests/helpers.py
@@ -32,16 +32,17 @@ import os
import time
import errno
import mailbox
-import subprocess
+import smtplib
+import tempfile
+import threading
+from Queue import Empty, Queue
from datetime import datetime, timedelta
from mailman.bin.master import Loop as Master
from mailman.configuration import config
from mailman.queue import Switchboard
-
-
-WAIT_INTERVAL = timedelta(seconds=3)
+from mailman.tests.smtplistener import Server
@@ -132,3 +133,49 @@ class TestableMaster(Master):
"""The pids of all the child qrunner processes."""
for pid in self._started_kids:
yield pid
+
+
+
+class SMTPServer:
+ """An smtp server for testing."""
+
+ host = 'localhost'
+ port = 9025
+
+ def __init__(self):
+ self._messages = []
+ self._queue = Queue()
+ self._server = Server((self.host, self.port), self._queue)
+ self._thread = threading.Thread(target=self._server.start)
+
+ def start(self):
+ """Start the smtp server in a thread."""
+ self._thread.start()
+
+ def stop(self):
+ """Stop the smtp server."""
+ smtpd = smtplib.SMTP()
+ smtpd.connect(self.host, self.port)
+ smtpd.docmd('EXIT')
+ self.clear()
+ # Wait for the thread to exit.
+ self._thread.join()
+
+ @property
+ def messages(self):
+ """Return all the messages received by the smtp server."""
+ for message in self._messages:
+ # See if there's anything waiting in the queue.
+ try:
+ message = self._queue.get_nowait()
+ except Empty:
+ pass
+ else:
+ self._messages.append(message)
+ yield message
+
+ def clear(self):
+ """Clear all messages from the queue."""
+ # Just throw these away.
+ list(self._messages)
+ self._messages = []