@@ -213,31 +213,72 @@ def test_check_dns_records_multiple_records(self, maildomain_factory):
213
213
"target" : "@" ,
214
214
"value" : "v=spf1 include:_spf.example.com -all" ,
215
215
},
216
+ {
217
+ "type" : "TXT" ,
218
+ "target" : "_dmarc" ,
219
+ "value" : "v=DMARC1; p=reject; adkim=s; aspf=s;" ,
220
+ },
221
+ {
222
+ "type" : "TXT" ,
223
+ "target" : "_dmarc_stripped" ,
224
+ "value" : "v=DMARC1;p=reject;adkim=s;aspf=s; " ,
225
+ },
226
+ {
227
+ "type" : "TXT" ,
228
+ "target" : "_dmarc_missing" ,
229
+ "value" : "v=DMARC1;p=reject;adkim=s;aspf=s; " ,
230
+ },
216
231
]
217
232
218
233
with patch ("core.services.dns.check.dns.resolver.resolve" ) as mock_resolve :
219
- # Mock responses for both records
220
- mock_mx_answer = MagicMock ()
221
- mock_mx_answer .preference = 10
222
- mock_mx_answer .exchange = "mx1.example.com"
223
234
224
- mock_txt_answer = MagicMock ()
225
- mock_txt_answer .to_text .return_value = (
226
- '"v=spf1 include:_spf.example.com -all"'
227
- )
228
-
229
- mock_resolve .side_effect = [
230
- [mock_mx_answer ], # MX record response
231
- [mock_txt_answer ], # TXT record response
232
- ]
235
+ def resolve_side_effect (name , record_type ):
236
+ if name == "_dmarc_missing.example.com" :
237
+ raise NoAnswer ()
238
+
239
+ if record_type == "MX" :
240
+ mock_mx_answer = MagicMock ()
241
+ mock_mx_answer .preference = 10
242
+ mock_mx_answer .exchange = "mx1.example.com"
243
+ return [mock_mx_answer ]
244
+
245
+ if record_type == "TXT" and name == "@.example.com" :
246
+ mock_txt_answer = MagicMock ()
247
+ mock_txt_answer .to_text .return_value = (
248
+ '"v=spf1 include:_spf.example.com -all"'
249
+ )
250
+ garbage = MagicMock ()
251
+ garbage .to_text .return_value = "some-garbage"
252
+ return [garbage , mock_txt_answer , garbage ]
253
+
254
+ if (
255
+ record_type == "TXT"
256
+ and name == "_dmarc.example.com"
257
+ or name == "_dmarc_stripped.example.com"
258
+ ):
259
+ mock_txt_dmarc_answer = MagicMock ()
260
+ mock_txt_dmarc_answer .to_text .return_value = (
261
+ '"v=DMARC1; p=reject; adkim=s; aspf=s;"'
262
+ )
263
+ return [mock_txt_dmarc_answer ]
264
+
265
+ return []
266
+
267
+ mock_resolve .side_effect = resolve_side_effect
233
268
234
269
results = check_dns_records (maildomain )
235
270
236
- assert len (results ) == 2
271
+ assert len (results ) == 5
237
272
assert results [0 ]["type" ] == "MX"
238
- assert results [0 ]["_check" ]["status" ] == "correct"
273
+ assert results [0 ]["_check" ]["status" ] == "correct" , results [ 0 ]
239
274
assert results [1 ]["type" ] == "TXT"
240
- assert results [1 ]["_check" ]["status" ] == "correct"
275
+ assert results [1 ]["_check" ]["status" ] == "correct" , results [1 ]
276
+ assert results [2 ]["type" ] == "TXT"
277
+ assert results [2 ]["_check" ]["status" ] == "correct" , results [2 ]
278
+ assert results [3 ]["type" ] == "TXT"
279
+ assert results [3 ]["_check" ]["status" ] == "correct" , results [3 ]
280
+ assert results [4 ]["type" ] == "TXT"
281
+ assert results [4 ]["_check" ]["status" ] == "missing"
241
282
242
283
def test_check_dns_records_mixed_status (self , maildomain_factory ):
243
284
"""Test checking DNS records with mixed status (correct, incorrect, missing)."""
0 commit comments