@@ -339,7 +339,35 @@ async def test_async_resolver_query_ipv6_positive_lookup(loop) -> None:
339
339
mock ().query .assert_called_with ("www.python.org" , "AAAA" )
340
340
341
341
342
- async def test_async_resolver_aiodns_not_present (loop , monkeypatch ) -> None :
342
+ @pytest .mark .skipif (not getaddrinfo , reason = "aiodns >=3.2.0 required" )
343
+ async def test_async_resolver_error_messages_passed (
344
+ loop : asyncio .AbstractEventLoop ,
345
+ ) -> None :
346
+ """Ensure error messages are passed through from aiodns."""
347
+ with patch ("aiodns.DNSResolver" , autospec = True , spec_set = True ) as mock :
348
+ mock ().getaddrinfo .side_effect = aiodns .error .DNSError (1 , "Test error message" )
349
+ resolver = AsyncResolver ()
350
+ with pytest .raises (OSError , match = "Test error message" ) as excinfo :
351
+ await resolver .resolve ("x.org" )
352
+
353
+ assert excinfo .value .strerror == "Test error message"
354
+
355
+
356
+ @pytest .mark .skipif (not getaddrinfo , reason = "aiodns >=3.2.0 required" )
357
+ async def test_async_resolver_error_messages_passed_no_hosts (
358
+ loop : asyncio .AbstractEventLoop ,
359
+ ) -> None :
360
+ """Ensure error messages are passed through from aiodns."""
361
+ with patch ("aiodns.DNSResolver" , autospec = True , spec_set = True ) as mock :
362
+ mock ().getaddrinfo .return_value = fake_aiodns_getaddrinfo_ipv6_result ([])
363
+ resolver = AsyncResolver ()
364
+ with pytest .raises (OSError , match = "DNS lookup failed" ) as excinfo :
365
+ await resolver .resolve ("x.org" )
366
+
367
+ assert excinfo .value .strerror == "DNS lookup failed"
368
+
369
+
370
+ async def test_async_resolver_aiodns_not_present (loop : Any , monkeypatch : Any ) -> None :
343
371
monkeypatch .setattr ("aiohttp.resolver.aiodns" , None )
344
372
with pytest .raises (RuntimeError ):
345
373
AsyncResolver (loop = loop )
0 commit comments