diff options
| author | Mark Sapiro | 2017-01-02 08:55:28 -0800 |
|---|---|---|
| committer | Mark Sapiro | 2017-01-02 08:55:28 -0800 |
| commit | b9883ecec0f8ad6dd4d4b84b4c7bac35183172c7 (patch) | |
| tree | 82c8c8f5b7d8018e2694277b72b6d5e152884bfd /src/mailman/rules/tests/test_dmarc.py | |
| parent | f658d72f313b991a0074620b3e1007adeb27eeef (diff) | |
| download | mailman-b9883ecec0f8ad6dd4d4b84b4c7bac35183172c7.tar.gz mailman-b9883ecec0f8ad6dd4d4b84b4c7bac35183172c7.tar.zst mailman-b9883ecec0f8ad6dd4d4b84b4c7bac35183172c7.zip | |
Diffstat (limited to 'src/mailman/rules/tests/test_dmarc.py')
| -rw-r--r-- | src/mailman/rules/tests/test_dmarc.py | 95 |
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') |
