1
0
mirror of https://github.com/esphome/esphome.git synced 2026-02-08 00:31:58 +00:00

[api] Fire on_client_disconnected trigger after removing client from list (#13088)

This commit is contained in:
J. Nick Koston
2026-01-08 20:36:24 -10:00
committed by GitHub
parent 2c165e4817
commit cd43b4114e
3 changed files with 27 additions and 3 deletions

View File

@@ -24,6 +24,14 @@ api:
- logger.log:
format: "Client %s disconnected from %s"
args: [client_info.c_str(), client_address.c_str()]
# Verify fix for issue #11131: api.connected should reflect true state in trigger
- if:
condition:
api.connected:
then:
- logger.log: "Other clients still connected"
else:
- logger.log: "No clients remaining"
logger:
level: DEBUG

View File

@@ -23,12 +23,14 @@ async def test_api_conditional_memory(
# Track log messages
connected_future = loop.create_future()
disconnected_future = loop.create_future()
no_clients_future = loop.create_future()
service_simple_future = loop.create_future()
service_args_future = loop.create_future()
# Patterns to match in logs
connected_pattern = re.compile(r"Client .* connected from")
disconnected_pattern = re.compile(r"Client .* disconnected from")
no_clients_pattern = re.compile(r"No clients remaining")
service_simple_pattern = re.compile(r"Simple service called")
service_args_pattern = re.compile(
r"Service called with: test_string, 123, 1, 42\.50"
@@ -40,6 +42,8 @@ async def test_api_conditional_memory(
connected_future.set_result(True)
elif not disconnected_future.done() and disconnected_pattern.search(line):
disconnected_future.set_result(True)
elif not no_clients_future.done() and no_clients_pattern.search(line):
no_clients_future.set_result(True)
elif not service_simple_future.done() and service_simple_pattern.search(line):
service_simple_future.set_result(True)
elif not service_args_future.done() and service_args_pattern.search(line):
@@ -109,3 +113,7 @@ async def test_api_conditional_memory(
# Client disconnected here, wait for disconnect log
await asyncio.wait_for(disconnected_future, timeout=5.0)
# Verify fix for issue #11131: api.connected should be false in trigger
# when the last client disconnects
await asyncio.wait_for(no_clients_future, timeout=5.0)