summaryrefslogtreecommitdiff
path: root/src/mailman/chains/tests/test_headers.py
diff options
context:
space:
mode:
authorAurélien Bompard2016-02-18 10:11:23 +0100
committerBarry Warsaw2016-02-29 21:52:13 -0500
commit65459448ee6da85878159e0ad1c8f556c1bd617e (patch)
treefa5f96634b708f6fe64e7740d2e793f98482a1b4 /src/mailman/chains/tests/test_headers.py
parentac2fdda2b90f0dcea205f494751335fcc93cddc5 (diff)
downloadmailman-65459448ee6da85878159e0ad1c8f556c1bd617e.tar.gz
mailman-65459448ee6da85878159e0ad1c8f556c1bd617e.tar.zst
mailman-65459448ee6da85878159e0ad1c8f556c1bd617e.zip
Diffstat (limited to 'src/mailman/chains/tests/test_headers.py')
-rw-r--r--src/mailman/chains/tests/test_headers.py50
1 files changed, 48 insertions, 2 deletions
diff --git a/src/mailman/chains/tests/test_headers.py b/src/mailman/chains/tests/test_headers.py
index c2e01e5e3..28c3e1cdc 100644
--- a/src/mailman/chains/tests/test_headers.py
+++ b/src/mailman/chains/tests/test_headers.py
@@ -30,7 +30,8 @@ from mailman.config import config
from mailman.core.chains import process
from mailman.email.message import Message
from mailman.interfaces.action import Action
-from mailman.interfaces.chain import LinkAction, HoldEvent
+from mailman.interfaces.chain import LinkAction, HoldEvent, DiscardEvent
+from mailman.interfaces.configuration import ConfigurationUpdatedEvent
from mailman.interfaces.mailinglist import IHeaderMatchList
from mailman.testing.helpers import (
LogFileMark, configuration, event_subscribers,
@@ -152,7 +153,8 @@ class TestHeaderChain(unittest.TestCase):
links = [link for link in chain.get_links(self._mlist, Message(), {})
if link.rule.name != 'any']
self.assertEqual(len(links), 1)
- self.assertEqual(links[0].action, LinkAction.defer)
+ self.assertEqual(links[0].action, LinkAction.jump)
+ self.assertEqual(links[0].chain.name, config.antispam.jump_chain)
self.assertEqual(links[0].rule.header, 'foo')
self.assertEqual(links[0].rule.pattern, 'a+')
@@ -205,3 +207,47 @@ A message body.
# Site-wide wants to hold the message, the list wants to accept it.
self.assertTrue(isinstance(event, HoldEvent))
self.assertEqual(event.chain, config.chains['hold'])
+
+ def test_no_action_defaults_to_site_wide_action(self):
+ # Test that list-specific checks with no action always follow the
+ # site-wide antispam action.
+ msg = mfs("""\
+From: anne@example.com
+To: test@example.com
+Subject: A message
+Message-ID: <ant>
+Foo: foo
+MIME-Version: 1.0
+
+A message body.
+""")
+ msgdata = {}
+ header_matches = IHeaderMatchList(self._mlist)
+ header_matches.append('Foo', 'foo')
+ # This event subscriber records the event that occurs when the message
+ # is processed by the owner chain.
+ events = []
+ def record_event(event):
+ if isinstance(event, ConfigurationUpdatedEvent):
+ return
+ events.append(event)
+ with event_subscribers(record_event):
+ # The site-wide default is hold.
+ with configuration('antispam', header_checks="""
+ Spam: [*]{3,}
+ """, jump_chain='hold'):
+ process(self._mlist, msg, msgdata, start_chain='header-match')
+ self.assertEqual(len(events), 1)
+ event = events[0]
+ self.assertTrue(isinstance(event, HoldEvent))
+ self.assertEqual(event.chain, config.chains['hold'])
+ # The site-wide default is now discard.
+ msg.replace_header('Message-Id', '<bee>')
+ with configuration('antispam', header_checks="""
+ Spam: [*]{3,}
+ """, jump_chain='discard'):
+ process(self._mlist, msg, msgdata, start_chain='header-match')
+ self.assertEqual(len(events), 2)
+ event = events[1]
+ self.assertTrue(isinstance(event, DiscardEvent))
+ self.assertEqual(event.chain, config.chains['discard'])