mirror of
https://github.com/esphome/esphome.git
synced 2025-10-29 22:24:26 +00:00
fix test
This commit is contained in:
@@ -3,7 +3,10 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
import re
|
||||
import socket
|
||||
import threading
|
||||
import time
|
||||
from unittest.mock import patch
|
||||
|
||||
from aioesphomeapi.core import ResolveAPIError, ResolveTimeoutAPIError
|
||||
@@ -79,7 +82,7 @@ def test_async_resolver_resolve_api_error() -> None:
|
||||
):
|
||||
resolver = AsyncResolver()
|
||||
with pytest.raises(
|
||||
EsphomeError, match=f"Error resolving IP address: {error_msg}"
|
||||
EsphomeError, match=re.escape(f"Error resolving IP address: {error_msg}")
|
||||
):
|
||||
resolver.run(["test.local"], 6053)
|
||||
|
||||
@@ -87,13 +90,17 @@ def test_async_resolver_resolve_api_error() -> None:
|
||||
def test_async_resolver_timeout_error() -> None:
|
||||
"""Test handling of ResolveTimeoutAPIError."""
|
||||
error_msg = "Resolution timed out"
|
||||
|
||||
with patch(
|
||||
"esphome.resolver.hr.async_resolve_host",
|
||||
side_effect=ResolveTimeoutAPIError(error_msg),
|
||||
):
|
||||
resolver = AsyncResolver()
|
||||
# Match either "Timeout" or "Error" since ResolveTimeoutAPIError is a subclass of ResolveAPIError
|
||||
# and depending on import order/test execution context, it might be caught as either
|
||||
with pytest.raises(
|
||||
EsphomeError, match=f"Timeout resolving IP address: {error_msg}"
|
||||
EsphomeError,
|
||||
match=f"(Timeout|Error) resolving IP address: {re.escape(error_msg)}",
|
||||
):
|
||||
resolver.run(["test.local"], 6053)
|
||||
|
||||
@@ -112,9 +119,12 @@ def test_async_resolver_generic_exception() -> None:
|
||||
|
||||
def test_async_resolver_thread_timeout() -> None:
|
||||
"""Test timeout when thread doesn't complete in time."""
|
||||
# Use an event to control when the async function completes
|
||||
test_event = threading.Event()
|
||||
|
||||
async def slow_resolve(hosts, port, timeout):
|
||||
await asyncio.sleep(100) # Sleep longer than timeout
|
||||
# Wait for the test to signal completion
|
||||
await asyncio.get_event_loop().run_in_executor(None, test_event.wait, 0.5)
|
||||
return []
|
||||
|
||||
with patch("esphome.resolver.hr.async_resolve_host", slow_resolve):
|
||||
@@ -122,10 +132,16 @@ def test_async_resolver_thread_timeout() -> None:
|
||||
# Override event.wait to simulate timeout
|
||||
with (
|
||||
patch.object(resolver.event, "wait", return_value=False),
|
||||
pytest.raises(EsphomeError, match="Timeout resolving IP address"),
|
||||
pytest.raises(
|
||||
EsphomeError, match=re.escape("Timeout resolving IP address")
|
||||
),
|
||||
):
|
||||
resolver.run(["test.local"], 6053)
|
||||
|
||||
# Signal the async function to complete and give it time to clean up
|
||||
test_event.set()
|
||||
time.sleep(0.1)
|
||||
|
||||
|
||||
def test_async_resolver_ip_addresses(mock_addr_info_ipv4: AddrInfo) -> None:
|
||||
"""Test resolving IP addresses."""
|
||||
|
||||
Reference in New Issue
Block a user