mirror of
https://github.com/esphome/esphome.git
synced 2025-09-12 00:02:21 +01:00
40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
"""Test API server reboot timeout functionality."""
|
|
|
|
import asyncio
|
|
import re
|
|
|
|
import pytest
|
|
|
|
from .types import RunCompiledFunction
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_api_reboot_timeout(
|
|
yaml_config: str,
|
|
run_compiled: RunCompiledFunction,
|
|
) -> None:
|
|
"""Test that the device reboots when no API clients connect within the timeout."""
|
|
reboot_detected = False
|
|
reboot_pattern = re.compile(r"No client connected; rebooting")
|
|
|
|
def check_output(line: str) -> None:
|
|
"""Check output for reboot message."""
|
|
nonlocal reboot_detected
|
|
if reboot_pattern.search(line):
|
|
reboot_detected = True
|
|
|
|
# Run the device without connecting any API client
|
|
async with run_compiled(yaml_config, line_callback=check_output):
|
|
# Wait for up to 3 seconds for the reboot to occur
|
|
# (1s timeout + some margin for processing)
|
|
loop = asyncio.get_running_loop()
|
|
start_time = loop.time()
|
|
while not reboot_detected:
|
|
await asyncio.sleep(0.1)
|
|
elapsed = loop.time() - start_time
|
|
if elapsed > 3.0:
|
|
pytest.fail("Device did not reboot within expected timeout")
|
|
|
|
# Verify that reboot was detected
|
|
assert reboot_detected, "Reboot message was not detected in output"
|