diff options
Diffstat (limited to 'src/mailman/runners/tests/test_digest.py')
| -rw-r--r-- | src/mailman/runners/tests/test_digest.py | 104 |
1 files changed, 67 insertions, 37 deletions
diff --git a/src/mailman/runners/tests/test_digest.py b/src/mailman/runners/tests/test_digest.py index 80cf253bc..fb1bb7071 100644 --- a/src/mailman/runners/tests/test_digest.py +++ b/src/mailman/runners/tests/test_digest.py @@ -25,18 +25,20 @@ __all__ = [ ] -import os import unittest +from StringIO import StringIO +from email.iterators import _structure as structure from email.mime.text import MIMEText from mailman.app.lifecycle import create_list from mailman.config import config from mailman.email.message import Message from mailman.runners.digest import DigestRunner from mailman.testing.helpers import ( - LogFileMark, digest_mbox, get_queue_messages, make_testable_runner, - specialized_message_from_string as mfs) + LogFileMark, digest_mbox, get_queue_messages, make_digest_messages, + make_testable_runner, message_from_string) from mailman.testing.layers import ConfigLayer +from string import Template @@ -44,6 +46,7 @@ class TestDigest(unittest.TestCase): """Test the digest runner.""" layer = ConfigLayer + maxDiff = None def setUp(self): self._mlist = create_list('test@example.com') @@ -54,23 +57,9 @@ class TestDigest(unittest.TestCase): self._runner = make_testable_runner(DigestRunner, 'digest') self._process = config.handlers['to-digest'].process - def test_simple_message(self): - msg = mfs("""\ -From: anne@example.org -To: test@example.com - -message triggering a digest -""") - mbox_path = os.path.join(self._mlist.data_path, 'digest.mmdf') - self._process(self._mlist, msg, {}) - self._digestq.enqueue( - msg, - listname=self._mlist.fqdn_listname, - digest_path=mbox_path, - volume=1, digest_number=1) - self._runner.run() - # There are two messages in the virgin queue: the digest as plain-text - # and as multipart. + def _check_virgin_queue(self): + # There should be two messages in the virgin queue: the digest as + # plain-text and as multipart. messages = get_queue_messages('virgin') self.assertEqual(len(messages), 2) self.assertEqual( @@ -80,6 +69,10 @@ message triggering a digest self.assertEqual(item.msg['subject'], 'Test Digest, Vol 1, Issue 1') + def test_simple_message(self): + make_digest_messages(self._mlist) + self._check_virgin_queue() + def test_non_ascii_message(self): msg = Message() msg['From'] = 'anne@example.org' @@ -88,25 +81,62 @@ message triggering a digest msg.attach(MIMEText('message with non-ascii chars: \xc3\xa9', 'plain', 'utf-8')) mbox = digest_mbox(self._mlist) - mbox_path = os.path.join(self._mlist.data_path, 'digest.mmdf') mbox.add(msg.as_string()) - self._digestq.enqueue( - msg, - listname=self._mlist.fqdn_listname, - digest_path=mbox_path, - volume=1, digest_number=1) # Use any error logs as the error message if the test fails. error_log = LogFileMark('mailman.error') - self._runner.run() + make_digest_messages(self._mlist, msg) # The runner will send the file to the shunt queue on exception. self.assertEqual(len(self._shuntq.files), 0, error_log.read()) - # There are two messages in the virgin queue: the digest as plain-text - # and as multipart. - messages = get_queue_messages('virgin') - self.assertEqual(len(messages), 2) - self.assertEqual( - sorted(item.msg.get_content_type() for item in messages), - ['multipart/mixed', 'text/plain']) - for item in messages: - self.assertEqual(item.msg['subject'], - 'Test Digest, Vol 1, Issue 1') + self._check_virgin_queue() + + def test_mime_digest_format(self): + # Make sure that the format of the MIME digest is as expected. + self._mlist.digest_size_threshold = 0.6 + self._mlist.volume = 1 + self._mlist.next_digest_number = 1 + self._mlist.send_welcome_message = False + # Fill the digest. + process = config.handlers['to-digest'].process + size = 0 + for i in range(1, 5): + text = Template("""\ +From: aperson@example.com +To: xtest@example.com +Subject: Test message $i +List-Post: <test@example.com> + +Here is message $i +""").substitute(i=i) + msg = message_from_string(text) + process(self._mlist, msg, {}) + size += len(text) + if size >= self._mlist.digest_size_threshold * 1024: + break + # Run the digest runner to create the MIME and RFC 1153 digests. + runner = make_testable_runner(DigestRunner) + runner.run() + items = get_queue_messages('virgin') + self.assertEqual(len(items), 2) + # Find the MIME one. + mime_digest = None + for item in items: + if item.msg.is_multipart(): + assert mime_digest is None, 'We got two MIME digests' + mime_digest = item.msg + fp = StringIO() + # Verify the structure is what we expect. + structure(mime_digest, fp) + self.assertMultiLineEqual(fp.getvalue(), """\ +multipart/mixed + text/plain + text/plain + message/rfc822 + text/plain + message/rfc822 + text/plain + message/rfc822 + text/plain + message/rfc822 + text/plain + text/plain +""") |
