summaryrefslogtreecommitdiff
path: root/src/mailman/queue/tests/test_outgoing.py
diff options
context:
space:
mode:
authorBarry Warsaw2011-05-14 13:01:10 +0200
committerBarry Warsaw2011-05-14 13:01:10 +0200
commitc201299b4932ea153e765f6316bab4c02ff09e50 (patch)
tree8aef406732fd19caee9d3c51688d705f3fddb68c /src/mailman/queue/tests/test_outgoing.py
parent7af50e2b346b76daab8206c448e5e67f06cbacbd (diff)
downloadmailman-c201299b4932ea153e765f6316bab4c02ff09e50.tar.gz
mailman-c201299b4932ea153e765f6316bab4c02ff09e50.tar.zst
mailman-c201299b4932ea153e765f6316bab4c02ff09e50.zip
Diffstat (limited to 'src/mailman/queue/tests/test_outgoing.py')
-rw-r--r--src/mailman/queue/tests/test_outgoing.py109
1 files changed, 104 insertions, 5 deletions
diff --git a/src/mailman/queue/tests/test_outgoing.py b/src/mailman/queue/tests/test_outgoing.py
index fc4eb3070..7fc1143bc 100644
--- a/src/mailman/queue/tests/test_outgoing.py
+++ b/src/mailman/queue/tests/test_outgoing.py
@@ -25,17 +25,20 @@ __all__ = [
]
-import datetime
import unittest
+from contextlib import contextmanager
+from datetime import timedelta
+
from mailman.app.lifecycle import create_list
from mailman.config import config
+from mailman.interfaces.mailinglist import Personalization
from mailman.queue.outgoing import OutgoingRunner
from mailman.testing.helpers import (
get_queue_messages,
make_testable_runner,
specialized_message_from_string as message_from_string)
-from mailman.testing.layers import SMTPLayer
+from mailman.testing.layers import ConfigLayer, SMTPLayer
from mailman.utilities.datetime import now
@@ -48,6 +51,16 @@ def run_once(qrunner):
return True
+@contextmanager
+def temporary_config(name, settings):
+ """Temporarily set a configuration (use in a with-statement)."""
+ config.push(name, settings)
+ try:
+ yield
+ finally:
+ config.pop(name)
+
+
class TestOnce(unittest.TestCase):
"""Test outgoing runner message disposition."""
@@ -69,10 +82,10 @@ Message-Id: <first>
def test_deliver_after(self):
# When the metadata has a deliver_after key in the future, the queue
# runner will re-enqueue the message rather than delivering it.
- deliver_after = now() + datetime.timedelta(days=10)
+ deliver_after = now() + timedelta(days=10)
self._msgdata['deliver_after'] = deliver_after
- self._outq.enqueue(self._msg, self._msgdata, tolist=True,
- listname='test@example.com')
+ self._outq.enqueue(self._msg, self._msgdata,
+ tolist=True, listname='test@example.com')
self._runner.run()
items = get_queue_messages('out')
self.assertEqual(len(items), 1)
@@ -81,7 +94,93 @@ Message-Id: <first>
+captured_mlist = None
+captured_msg = None
+captured_msgdata = None
+
+def capture(mlist, msg, msgdata):
+ global captured_mlist, captured_msg, captured_msgdata
+ captured_mlist = mlist
+ captured_msg = msg
+ captured_msgdata = msgdata
+
+
+class TestVERPSettings(unittest.TestCase):
+ """Test the selection of VERP based on various criteria."""
+
+ layer = ConfigLayer
+
+ def setUp(self):
+ global captured_mlist, captured_msg, captured_msgdata
+ # Push a config where actual delivery is handled by a dummy function.
+ # We generally don't care what this does, since we're just testing the
+ # setting of the 'verp' key in the metadata.
+ config.push('fake outgoing', """
+ [mta]
+ outgoing: mailman.queue.tests.test_outgoing.capture
+ """)
+ # Reset the captured data.
+ captured_mlist = None
+ captured_msg = None
+ captured_msgdata = None
+ self._mlist = create_list('test@example.com')
+ self._outq = config.switchboards['out']
+ self._runner = make_testable_runner(OutgoingRunner, 'out')
+ self._msg = message_from_string("""\
+From: anne@example.com
+To: test@example.com
+Message-Id: <first>
+
+""")
+
+ def tearDown(self):
+ config.pop('fake outgoing')
+
+ def test_delivery_callback(self):
+ # Test that the configuration variable calls the appropriate callback.
+ self._outq.enqueue(self._msg, {}, listname='test@example.com')
+ self._runner.run()
+ self.assertEqual(captured_mlist, self._mlist)
+ self.assertEqual(captured_msg.as_string(), self._msg.as_string())
+ # Of course, the message metadata will contain a bunch of keys added
+ # by the processing. We don't really care about the details, so this
+ # test is a good enough stand-in.
+ self.assertEqual(captured_msgdata['listname'], 'test@example.com')
+
+ def test_verp_in_metadata(self):
+ # Test that if the metadata has a 'verp' key, it is unchanged.
+ marker = 'yepper'
+ msgdata = dict(verp=marker)
+ self._outq.enqueue(self._msg, msgdata, listname='test@example.com')
+ self._runner.run()
+ self.assertEqual(captured_msgdata['verp'], marker)
+
+ def test_personalized_deliveries_verp(self):
+ # When deliveries are personalized, and the configuration setting
+ # indicates, messages will be VERP'd.
+ msgdata = {}
+ self._mlist.personalize = Personalization.individual
+ self._outq.enqueue(self._msg, msgdata, listname='test@example.com')
+ with temporary_config('personalize', """
+ [mta]
+ verp_personalized_deliveries: yes
+ """):
+ self._runner.run()
+ self.assertTrue(msgdata['verp'])
+ msgdata = {}
+ self._mlist.personalize = Personalization.full
+ self._outq.enqueue(self._msg, msgdata, listname='test@example.com')
+ with temporary_config('personalize', """
+ [mta]
+ verp_personalized_deliveries: yes
+ """):
+ self._runner.run()
+ self.assertTrue(msgdata['verp'])
+
+
+
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestOnce))
+ suite.addTest(unittest.makeSuite(TestVERPSettings))
return suite