@@ -480,10 +480,7 @@ def testDMARCbisPctRemovedWarning(self):
480480 domain = "example.com"
481481 result = checkdmarc .dmarc .parse_dmarc_record (dmarc_record , domain )
482482 self .assertTrue (
483- any (
484- "pct tag was removed in DMARCbis" in w
485- for w in result ["warnings" ]
486- )
483+ any ("pct tag was removed in DMARCbis" in w for w in result ["warnings" ])
487484 )
488485
489486 def testDMARCbisRfRemovedWarning (self ):
@@ -492,10 +489,7 @@ def testDMARCbisRfRemovedWarning(self):
492489 domain = "example.com"
493490 result = checkdmarc .dmarc .parse_dmarc_record (dmarc_record , domain )
494491 self .assertTrue (
495- any (
496- "rf tag was removed in DMARCbis" in w
497- for w in result ["warnings" ]
498- )
492+ any ("rf tag was removed in DMARCbis" in w for w in result ["warnings" ])
499493 )
500494
501495 def testDMARCbisRiRemovedWarning (self ):
@@ -504,10 +498,7 @@ def testDMARCbisRiRemovedWarning(self):
504498 domain = "example.com"
505499 result = checkdmarc .dmarc .parse_dmarc_record (dmarc_record , domain )
506500 self .assertTrue (
507- any (
508- "ri tag was removed in DMARCbis" in w
509- for w in result ["warnings" ]
510- )
501+ any ("ri tag was removed in DMARCbis" in w for w in result ["warnings" ])
511502 )
512503
513504 def testDMARCbisMissingPTagWarning (self ):
@@ -518,10 +509,7 @@ def testDMARCbisMissingPTagWarning(self):
518509 self .assertEqual (result ["tags" ]["p" ]["value" ], "none" )
519510 self .assertFalse (result ["tags" ]["p" ]["explicit" ])
520511 self .assertTrue (
521- any (
522- "p tag is optional in DMARCbis" in w
523- for w in result ["warnings" ]
524- )
512+ any ("p tag is optional in DMARCbis" in w for w in result ["warnings" ])
525513 )
526514
527515 def testDMARCbisNpDefaultsToSp (self ):
@@ -561,9 +549,7 @@ def testDMARCbisRemovedTagImplicitNoWarning(self):
561549 dmarc_record = "v=DMARC1; p=reject"
562550 domain = "example.com"
563551 result = checkdmarc .dmarc .parse_dmarc_record (dmarc_record , domain )
564- removed_warnings = [
565- w for w in result ["warnings" ] if "removed in DMARCbis" in w
566- ]
552+ removed_warnings = [w for w in result ["warnings" ] if "removed in DMARCbis" in w ]
567553 self .assertEqual (len (removed_warnings ), 0 )
568554
569555 def testDMARCbisBackwardCompatibility (self ):
@@ -834,9 +820,7 @@ def testDMARCPctZero(self):
834820 dmarc_record = "v=DMARC1; p=reject; pct=0"
835821 domain = "example.com"
836822 result = checkdmarc .dmarc .parse_dmarc_record (dmarc_record , domain )
837- self .assertTrue (
838- any ("pct value of 0" in w for w in result ["warnings" ])
839- )
823+ self .assertTrue (any ("pct value of 0" in w for w in result ["warnings" ]))
840824
841825 def testDMARCPctOutOfRange (self ):
842826 """pct value out of range raises DMARCSyntaxError"""
@@ -887,9 +871,7 @@ def testDMARCFoRedundancy(self):
887871 dmarc_record = "v=DMARC1; p=reject; fo=0:1"
888872 domain = "example.com"
889873 result = checkdmarc .dmarc .parse_dmarc_record (dmarc_record , domain )
890- self .assertTrue (
891- any ("redundant" in w .lower () for w in result ["warnings" ])
892- )
874+ self .assertTrue (any ("redundant" in w .lower () for w in result ["warnings" ]))
893875
894876 def testDMARCInvalidFoValue (self ):
895877 """Invalid fo tag value raises InvalidDMARCTagValue"""
@@ -918,41 +900,33 @@ def testDMARCSpNoneWarning(self):
918900 dmarc_record = "v=DMARC1; p=reject; sp=none"
919901 domain = "example.com"
920902 result = checkdmarc .dmarc .parse_dmarc_record (dmarc_record , domain )
921- self .assertTrue (
922- any ("sp tag value of none" in w for w in result ["warnings" ])
923- )
903+ self .assertTrue (any ("sp tag value of none" in w for w in result ["warnings" ]))
924904
925905 def testDMARCParkedDomainPolicyWarning (self ):
926906 """Parked domains with p!=reject produce warnings"""
927907 dmarc_record = "v=DMARC1; p=none"
928908 domain = "example.com"
929- result = checkdmarc .dmarc .parse_dmarc_record (
930- dmarc_record , domain , parked = True
931- )
932- self .assertTrue (
933- any ("parked" in w .lower () for w in result ["warnings" ])
934- )
909+ result = checkdmarc .dmarc .parse_dmarc_record (dmarc_record , domain , parked = True )
910+ self .assertTrue (any ("parked" in w .lower () for w in result ["warnings" ]))
935911
936912 def testDMARCParkedDomainSpWarning (self ):
937913 """Parked domains with sp!=reject produce warnings"""
938914 dmarc_record = "v=DMARC1; p=reject; sp=none"
939915 domain = "example.com"
940- result = checkdmarc .dmarc .parse_dmarc_record (
941- dmarc_record , domain , parked = True
942- )
916+ result = checkdmarc .dmarc .parse_dmarc_record (dmarc_record , domain , parked = True )
943917 self .assertTrue (
944- any ("subdomain policy" in w .lower () and "parked" in w .lower ()
945- for w in result ["warnings" ])
918+ any (
919+ "subdomain policy" in w .lower () and "parked" in w .lower ()
920+ for w in result ["warnings" ]
921+ )
946922 )
947923
948924 def testDMARCMissingRuaWarning (self ):
949925 """Missing rua tag produces a best practice warning"""
950926 dmarc_record = "v=DMARC1; p=reject"
951927 domain = "example.com"
952928 result = checkdmarc .dmarc .parse_dmarc_record (dmarc_record , domain )
953- self .assertTrue (
954- any ("rua" in w .lower () for w in result ["warnings" ])
955- )
929+ self .assertTrue (any ("rua" in w .lower () for w in result ["warnings" ]))
956930
957931 def testDMARCPTagPosition (self ):
958932 """p tag not immediately after v raises DMARCSyntaxError"""
@@ -1080,9 +1054,7 @@ def testDMARCTreeWalkStopsAtTLD(self):
10801054 )
10811055 # Should have been called for sub.example.com and example.com
10821056 # but NOT for "com"
1083- queried_domains = [
1084- c .args [0 ] for c in mock_query .call_args_list
1085- ]
1057+ queried_domains = [c .args [0 ] for c in mock_query .call_args_list ]
10861058 self .assertNotIn ("com" , queried_domains )
10871059
10881060 def testDMARCTreeWalkLongDomain (self ):
@@ -1135,18 +1107,14 @@ def testDMARCCheckDmarcSuccess(self):
11351107
11361108 def testDMARCParseReportURI (self ):
11371109 """parse_dmarc_report_uri parses valid mailto URIs"""
1138- uri = checkdmarc .dmarc .parse_dmarc_report_uri (
1139- "mailto:dmarc@example.com"
1140- )
1110+ uri = checkdmarc .dmarc .parse_dmarc_report_uri ("mailto:dmarc@example.com" )
11411111 self .assertEqual (uri ["scheme" ], "mailto" )
11421112 self .assertEqual (uri ["address" ], "dmarc@example.com" )
11431113 self .assertIsNone (uri ["size_limit" ])
11441114
11451115 def testDMARCParseReportURIWithSize (self ):
11461116 """parse_dmarc_report_uri parses URIs with size limits"""
1147- uri = checkdmarc .dmarc .parse_dmarc_report_uri (
1148- "mailto:dmarc@example.com!10m"
1149- )
1117+ uri = checkdmarc .dmarc .parse_dmarc_report_uri ("mailto:dmarc@example.com!10m" )
11501118 self .assertEqual (uri ["address" ], "dmarc@example.com" )
11511119 self .assertIsNotNone (uri ["size_limit" ])
11521120
@@ -1165,9 +1133,7 @@ def testDMARCRecordAtRoot(self):
11651133 mock_query .return_value = "v=DMARC1; p=reject"
11661134 mock_dns .return_value = ["v=DMARC1; p=reject" ]
11671135 result = checkdmarc .dmarc .query_dmarc_record ("example.com" )
1168- self .assertTrue (
1169- any ("no effect" in w for w in result ["warnings" ])
1170- )
1136+ self .assertTrue (any ("no effect" in w for w in result ["warnings" ]))
11711137
11721138 # ================================================================
11731139 # SPF additional tests
@@ -1200,12 +1166,8 @@ def testSPFParkedDomainWarning(self):
12001166 """Parked domains with wrong SPF record produce a warning"""
12011167 spf_record = "v=spf1 ip4:192.0.2.1 -all"
12021168 domain = "parked-example.com"
1203- result = checkdmarc .spf .parse_spf_record (
1204- spf_record , domain , parked = True
1205- )
1206- self .assertTrue (
1207- any ("parked" in w .lower () for w in result ["warnings" ])
1208- )
1169+ result = checkdmarc .spf .parse_spf_record (spf_record , domain , parked = True )
1170+ self .assertTrue (any ("parked" in w .lower () for w in result ["warnings" ]))
12091171
12101172 def testSPFRedirectWithMacro (self ):
12111173 """SPF redirect with macro is accepted (counts as 1 DNS lookup)"""
@@ -1389,7 +1351,9 @@ def testSoaRnameToEmailInvalid(self):
13891351
13901352 def testParseSoaString (self ):
13911353 """parse_soa_string parses a valid SOA record"""
1392- soa_record = "ns1.example.com. admin.example.com. 2024010101 3600 900 604800 86400"
1354+ soa_record = (
1355+ "ns1.example.com. admin.example.com. 2024010101 3600 900 604800 86400"
1356+ )
13931357 result = checkdmarc .soa .parse_soa_string (soa_record )
13941358 self .assertEqual (result ["primary_nameserver" ], "ns1.example.com" )
13951359 self .assertEqual (result ["serial" ], 2024010101 )
@@ -1491,7 +1455,9 @@ def testParseMtaStsPolicyMissingKey(self):
14911455
14921456 def testParseMtaStsPolicyInvalidMaxAge (self ):
14931457 """parse_mta_sts_policy raises error for negative max_age"""
1494- policy = "version: STSv1\r \n mode: enforce\r \n max_age: -1\r \n mx: mail.example.com\r \n "
1458+ policy = (
1459+ "version: STSv1\r \n mode: enforce\r \n max_age: -1\r \n mx: mail.example.com\r \n "
1460+ )
14951461 self .assertRaises (
14961462 checkdmarc .mta_sts .MTASTSPolicySyntaxError ,
14971463 checkdmarc .mta_sts .parse_mta_sts_policy ,
@@ -1613,9 +1579,7 @@ def testCheckMtaStsError(self):
16131579 def testParseSmtpTlsReportingRecord (self ):
16141580 """parse_smtp_tls_reporting_record parses a valid record"""
16151581 record = "v=TLSRPTv1; rua=mailto:tlsrpt@example.com"
1616- result = checkdmarc .smtp_tls_reporting .parse_smtp_tls_reporting_record (
1617- record
1618- )
1582+ result = checkdmarc .smtp_tls_reporting .parse_smtp_tls_reporting_record (record )
16191583 self .assertIn ("rua" , result ["tags" ])
16201584 self .assertIn ("mailto:tlsrpt@example.com" , result ["tags" ]["rua" ]["value" ])
16211585
@@ -1675,9 +1639,7 @@ def testParseSmtpTlsReportingMissingRua(self):
16751639 def testParseSmtpTlsReportingHttpsURI (self ):
16761640 """HTTPS URIs are accepted in SMTP TLS Reporting"""
16771641 record = "v=TLSRPTv1; rua=https://tlsrpt.example.com/report"
1678- result = checkdmarc .smtp_tls_reporting .parse_smtp_tls_reporting_record (
1679- record
1680- )
1642+ result = checkdmarc .smtp_tls_reporting .parse_smtp_tls_reporting_record (record )
16811643 self .assertIn ("rua" , result ["tags" ])
16821644
16831645 def testCheckSmtpTlsReportingError (self ):
@@ -1709,6 +1671,7 @@ def testDnssecFalseWhenNoKey(self):
17091671 def testGetDnskeyCache (self ):
17101672 """get_dnskey uses cache"""
17111673 from expiringdict import ExpiringDict
1674+
17121675 cache = ExpiringDict (max_len = 100 , max_age_seconds = 60 )
17131676 mock_key = {"test" : "data" }
17141677 cache ["example.com" ] = mock_key
@@ -1727,6 +1690,7 @@ def testConstantsVersion(self):
17271690 def testConstantsEnvironmentOverrides (self ):
17281691 """Environment variable overrides work for constants"""
17291692 import checkdmarc ._constants as constants
1693+
17301694 self .assertIsInstance (constants .CACHE_MAX_LEN , int )
17311695 self .assertIsInstance (constants .CACHE_MAX_AGE_SECONDS , int )
17321696 self .assertIsInstance (constants .SYNTAX_ERROR_MARKER , str )
0 commit comments