summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Sapiro2017-01-02 08:55:28 -0800
committerMark Sapiro2017-01-02 08:55:28 -0800
commitb9883ecec0f8ad6dd4d4b84b4c7bac35183172c7 (patch)
tree82c8c8f5b7d8018e2694277b72b6d5e152884bfd
parentf658d72f313b991a0074620b3e1007adeb27eeef (diff)
downloadmailman-b9883ecec0f8ad6dd4d4b84b4c7bac35183172c7.tar.gz
mailman-b9883ecec0f8ad6dd4d4b84b4c7bac35183172c7.tar.zst
mailman-b9883ecec0f8ad6dd4d4b84b4c7bac35183172c7.zip
-rw-r--r--src/mailman/rules/tests/test_dmarc.py95
1 files changed, 60 insertions, 35 deletions
diff --git a/src/mailman/rules/tests/test_dmarc.py b/src/mailman/rules/tests/test_dmarc.py
index 37a00afde..52c231439 100644
--- a/src/mailman/rules/tests/test_dmarc.py
+++ b/src/mailman/rules/tests/test_dmarc.py
@@ -48,7 +48,8 @@ def get_dns_resolver(
rdata=b'v=DMARC1; p=reject;',
rmult=False,
cmult=False,
- cloop=False):
+ cloop=False,
+ cmiss=False):
"""Create a dns.resolver.Resolver mock.
This is used to return a predictable response to a _dmarc query. It
@@ -67,22 +68,22 @@ def get_dns_resolver(
class Item:
# mock answer.items
- def __init__(self, d=rdata, n='_dmarc.example.com.'):
- self.strings = [d]
+ def __init__(self, rdata=rdata, cname='_dmarc.example.com.'):
+ self.strings = [rdata]
# for CNAMES
- self.target = Name(n)
+ self.target = Name(cname)
class Ans_e:
# mock answer element
def __init__(
self,
- typ=rtype,
- d=rdata,
- t='_dmarc.example.com.',
- n='_dmarc.example.biz.'):
- self.rdtype = typ
- self.items = [Item(d, t)]
- self.name = Name(n)
+ rtype=rtype,
+ rdata=rdata,
+ cname='_dmarc.example.com.',
+ name='_dmarc.example.biz.'):
+ self.rdtype = rtype
+ self.items = [Item(rdata, cname)]
+ self.name = Name(name)
class Answer:
# mock answer
@@ -90,31 +91,54 @@ def get_dns_resolver(
if cloop:
self.answer = [
Ans_e(
- typ=CNAME,
- n='_dmarc.example.biz.',
- t='_dmarc.example.org.'
+ rtype=CNAME,
+ name='_dmarc.example.biz.',
+ cname='_dmarc.example.org.'
),
Ans_e(
- typ=CNAME,
- n='_dmarc.example.org.',
- t='_dmarc.example.biz.'
+ rtype=CNAME,
+ name='_dmarc.example.org.',
+ cname='_dmarc.example.biz.'
+ ),
+ Ans_e(
+ rtype=TXT,
+ name='_dmarc.example.org.',
+ rdata=b'v=DMARC1; p=reject;'
),
]
elif cmult:
self.answer = [
Ans_e(
- typ=CNAME,
- n='_dmarc.example.biz.',
- t='_dmarc.example.net.'
+ rtype=CNAME,
+ name='_dmarc.example.biz.',
+ cname='_dmarc.example.net.'
+ ),
+ Ans_e(
+ rtype=CNAME,
+ name='_dmarc.example.net.',
+ cname='_dmarc.example.com.'
+ ),
+ Ans_e(
+ rtype=TXT,
+ name='_dmarc.example.com.',
+ rdata=b'v=DMARC1; p=quarantine;'
+ ),
+ ]
+ elif cmiss:
+ self.answer = [
+ Ans_e(
+ rtype=CNAME,
+ name='_dmarc.example.biz.',
+ cname='_dmarc.example.net.'
),
Ans_e(
- typ=CNAME,
- n='_dmarc.example.net.',
- t='_dmarc.example.com.'
+ rtype=TXT,
+ name='_dmarc.example.biz.',
+ rdata=b'v=DMARC1; p=reject;'
),
]
elif rmult:
- self.answer = [Ans_e(), Ans_e(d=b'v=DMARC1; p=none;')]
+ self.answer = [Ans_e(), Ans_e(rdata=b'v=DMARC1; p=none;')]
else:
self.answer = [Ans_e()]
@@ -214,7 +238,7 @@ To: ant@example.com
'anne@example.info (_dmarc.example.info). '
'Abstract base class shared by all dnspython exceptions.\n')
- def test_cname_return(self):
+ def test_cname_wrong_txt_name(self):
mlist = create_list('ant@example.com')
# Use action reject. The rule only hits on reject and discard.
mlist.dmarc_mitigate_action = DMARCMitigateAction.reject
@@ -223,12 +247,9 @@ From: anne@example.biz
To: ant@example.com
""")
- mark = LogFileMark('mailman.error')
rule = dmarc.DMARCMitigation()
- with get_dns_resolver(rtype=CNAME):
+ with get_dns_resolver(cmiss=True):
self.assertFalse(rule.check(mlist, msg, {}))
- line = mark.readline()
- self.assertEqual(line, '')
def test_domain_with_subdomain_policy(self):
mlist = create_list('ant@example.com')
@@ -297,12 +318,14 @@ From: anne@example.biz
To: ant@example.com
""")
- mark = LogFileMark('mailman.error')
+ mark = LogFileMark('mailman.vette')
rule = dmarc.DMARCMitigation()
with get_dns_resolver(cmult=True):
- self.assertFalse(rule.check(mlist, msg, {}))
+ self.assertTrue(rule.check(mlist, msg, {}))
line = mark.readline()
- self.assertEqual(line, '')
+ self.assertEqual(
+ line[-60:],
+ 'ant: DMARC lookup for anne@example.biz (_dmarc.example.biz)\n')
def test_looping_cnames(self):
mlist = create_list('ant@example.com')
@@ -313,12 +336,14 @@ From: anne@example.biz
To: ant@example.com
""")
- mark = LogFileMark('mailman.error')
+ mark = LogFileMark('mailman.vette')
rule = dmarc.DMARCMitigation()
with get_dns_resolver(cloop=True):
- self.assertFalse(rule.check(mlist, msg, {}))
+ self.assertTrue(rule.check(mlist, msg, {}))
line = mark.readline()
- self.assertEqual(line, '')
+ self.assertEqual(
+ line[-60:],
+ 'ant: DMARC lookup for anne@example.biz (_dmarc.example.biz)\n')
def test_no_policy(self):
mlist = create_list('ant@example.com')