summaryrefslogtreecommitdiff
path: root/src/mailman/handlers/tests/test_rfc_2369.py
diff options
context:
space:
mode:
authorBarry Warsaw2016-03-20 21:31:19 -0400
committerBarry Warsaw2016-03-20 21:31:50 -0400
commit472eb9765f4163aad785f483584ff607f01fdeeb (patch)
treede3c113e48cf8c311a246dc3fa7fab456198fe39 /src/mailman/handlers/tests/test_rfc_2369.py
parentd6d598a15d34b60fa4ceb3ee292bf2740addc878 (diff)
downloadmailman-472eb9765f4163aad785f483584ff607f01fdeeb.tar.gz
mailman-472eb9765f4163aad785f483584ff607f01fdeeb.tar.zst
mailman-472eb9765f4163aad785f483584ff607f01fdeeb.zip
Diffstat (limited to 'src/mailman/handlers/tests/test_rfc_2369.py')
-rw-r--r--src/mailman/handlers/tests/test_rfc_2369.py41
1 files changed, 40 insertions, 1 deletions
diff --git a/src/mailman/handlers/tests/test_rfc_2369.py b/src/mailman/handlers/tests/test_rfc_2369.py
index 110024c16..cbbaf2153 100644
--- a/src/mailman/handlers/tests/test_rfc_2369.py
+++ b/src/mailman/handlers/tests/test_rfc_2369.py
@@ -28,7 +28,8 @@ from mailman.app.lifecycle import create_list
from mailman.config import config
from mailman.handlers import rfc_2369
from mailman.interfaces.archiver import ArchivePolicy, IArchiver
-from mailman.testing.helpers import specialized_message_from_string as mfs
+from mailman.testing.helpers import (
+ LogFileMark, specialized_message_from_string as mfs)
from mailman.testing.layers import ConfigLayer
from urllib.parse import urljoin
from zope.interface import implementer
@@ -56,6 +57,23 @@ class DummyArchiver:
return None
+@implementer(IArchiver)
+class BrokenArchiver:
+ """An archiver that has some broken methods."""
+
+ name = 'broken'
+
+ def list_url(self, mlist):
+ raise RuntimeError('Cannot get list URL')
+
+ def permalink(self, mlist, msg):
+ raise RuntimeError('Cannot get permalink')
+
+ @staticmethod
+ def archive_message(mlist, message):
+ raise RuntimeError('Cannot archive message')
+
+
class TestRFC2369(unittest.TestCase):
"""Test the rfc_2369 handler."""
@@ -123,3 +141,24 @@ Dummy text
rfc_2369.process(self._mlist, self._msg, {})
self.assertNotIn('List-Archive', self._msg)
self.assertNotIn('Archived-At', self._msg)
+
+ def test_broken_archiver(self):
+ # GL issue #208 - IArchive messages raise exceptions, breaking the
+ # rfc-2369 handler and shunting messages.
+ config.push('archiver', """
+ [archiver.broken]
+ class: {}.BrokenArchiver
+ enable: yes
+ """.format(BrokenArchiver.__module__))
+ self.addCleanup(config.pop, 'archiver')
+ mark = LogFileMark('mailman.archiver')
+ rfc_2369.process(self._mlist, self._msg, {})
+ log_messages = mark.read()
+ # Because .list_url() was broken, there will be no List-Archive header.
+ self.assertIsNone(self._msg.get('list-archive'))
+ self.assertIn('Exception in "broken" archiver', log_messages)
+ self.assertIn('RuntimeError: Cannot get list URL', log_messages)
+ # Because .permalink() was broken, there will be no Archived-At header.
+ self.assertIsNone(self._msg.get('archived-at'))
+ self.assertIn('Exception in "broken" archiver', log_messages)
+ self.assertIn('RuntimeError: Cannot get permalink', log_messages)