Fix flapping logbook tests (#81695)

This commit is contained in:
J. Nick Koston 2022-11-07 04:41:02 -06:00 committed by GitHub
parent 1d633ac484
commit 11a55d6d4c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -24,6 +24,7 @@ from homeassistant.const import (
CONF_ENTITIES,
CONF_EXCLUDE,
CONF_INCLUDE,
EVENT_HOMEASSISTANT_FINAL_WRITE,
EVENT_HOMEASSISTANT_START,
STATE_OFF,
STATE_ON,
@ -52,6 +53,15 @@ def set_utc(hass):
hass.config.set_time_zone("UTC")
def listeners_without_writes(listeners: dict[str, int]) -> dict[str, int]:
"""Return listeners without final write listeners since we are not testing for these."""
return {
key: value
for key, value in listeners.items()
if key != EVENT_HOMEASSISTANT_FINAL_WRITE
}
async def _async_mock_logbook_platform(hass: HomeAssistant) -> None:
class MockLogbookPlatform:
"""Mock a logbook platform."""
@ -684,7 +694,9 @@ async def test_subscribe_unsubscribe_logbook_stream_excluded_entities(
assert msg["success"]
# Check our listener got unsubscribed
assert hass.bus.async_listeners() == init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(init_listeners)
@patch("homeassistant.components.logbook.websocket_api.EVENT_COALESCE_TIME", 0)
@ -892,7 +904,9 @@ async def test_subscribe_unsubscribe_logbook_stream_included_entities(
assert msg["success"]
# Check our listener got unsubscribed
assert hass.bus.async_listeners() == init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(init_listeners)
@patch("homeassistant.components.logbook.websocket_api.EVENT_COALESCE_TIME", 0)
@ -1083,7 +1097,9 @@ async def test_logbook_stream_excluded_entities_inherits_filters_from_recorder(
assert msg["success"]
# Check our listener got unsubscribed
assert hass.bus.async_listeners() == init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(init_listeners)
@patch("homeassistant.components.logbook.websocket_api.EVENT_COALESCE_TIME", 0)
@ -1386,7 +1402,9 @@ async def test_subscribe_unsubscribe_logbook_stream(
assert msg["success"]
# Check our listener got unsubscribed
assert hass.bus.async_listeners() == init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(init_listeners)
@patch("homeassistant.components.logbook.websocket_api.EVENT_COALESCE_TIME", 0)
@ -1484,7 +1502,9 @@ async def test_subscribe_unsubscribe_logbook_stream_entities(
assert msg["success"]
# Check our listener got unsubscribed
assert hass.bus.async_listeners() == init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(init_listeners)
@patch("homeassistant.components.logbook.websocket_api.EVENT_COALESCE_TIME", 0)
@ -1586,12 +1606,9 @@ async def test_subscribe_unsubscribe_logbook_stream_entities_with_end_time(
assert msg["success"]
# Check our listener got unsubscribed
listeners = hass.bus.async_listeners()
# The async_fire_time_changed above triggers unsubscribe from
# homeassistant_final_write, don't worry about those
init_listeners.pop("homeassistant_final_write")
listeners.pop("homeassistant_final_write")
assert listeners == init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(init_listeners)
@patch("homeassistant.components.logbook.websocket_api.EVENT_COALESCE_TIME", 0)
@ -1659,7 +1676,9 @@ async def test_subscribe_unsubscribe_logbook_stream_entities_past_only(
assert msg["success"]
# Check our listener got unsubscribed
assert hass.bus.async_listeners() == init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(init_listeners)
@patch("homeassistant.components.logbook.websocket_api.EVENT_COALESCE_TIME", 0)
@ -1759,7 +1778,9 @@ async def test_subscribe_unsubscribe_logbook_stream_big_query(
assert msg["success"]
# Check our listener got unsubscribed
assert hass.bus.async_listeners() == init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(init_listeners)
@patch("homeassistant.components.logbook.websocket_api.EVENT_COALESCE_TIME", 0)
@ -1853,7 +1874,9 @@ async def test_subscribe_unsubscribe_logbook_stream_device(
assert msg["success"]
# Check our listener got unsubscribed
assert hass.bus.async_listeners() == init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(init_listeners)
async def test_event_stream_bad_start_time(recorder_mock, hass, hass_ws_client):
@ -1968,7 +1991,9 @@ async def test_logbook_stream_match_multiple_entities(
assert msg["success"]
# Check our listener got unsubscribed
assert hass.bus.async_listeners() == init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(init_listeners)
async def test_event_stream_bad_end_time(recorder_mock, hass, hass_ws_client):
@ -2091,7 +2116,9 @@ async def test_live_stream_with_one_second_commit_interval(
assert msg["success"]
# Check our listener got unsubscribed
assert hass.bus.async_listeners() == init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(init_listeners)
@patch("homeassistant.components.logbook.websocket_api.EVENT_COALESCE_TIME", 0)
@ -2146,7 +2173,9 @@ async def test_subscribe_disconnected(recorder_mock, hass, hass_ws_client):
await hass.async_block_till_done()
# Check our listener got unsubscribed
assert hass.bus.async_listeners() == init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(init_listeners)
@patch("homeassistant.components.logbook.websocket_api.EVENT_COALESCE_TIME", 0)
@ -2189,7 +2218,9 @@ async def test_stream_consumer_stop_processing(recorder_mock, hass, hass_ws_clie
assert msg["type"] == TYPE_RESULT
assert msg["success"]
assert hass.bus.async_listeners() != init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) != listeners_without_writes(init_listeners)
for _ in range(5):
hass.states.async_set("binary_sensor.is_light", STATE_ON)
hass.states.async_set("binary_sensor.is_light", STATE_OFF)
@ -2197,9 +2228,13 @@ async def test_stream_consumer_stop_processing(recorder_mock, hass, hass_ws_clie
# Check our listener got unsubscribed because
# the queue got full and the overload safety tripped
assert hass.bus.async_listeners() == after_ws_created_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(after_ws_created_listeners)
await websocket_client.close()
assert hass.bus.async_listeners() == init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(init_listeners)
@patch("homeassistant.components.logbook.websocket_api.EVENT_COALESCE_TIME", 0)
@ -2332,7 +2367,9 @@ async def test_subscribe_all_entities_are_continuous(
await hass.async_block_till_done()
# Check our listener got unsubscribed
assert hass.bus.async_listeners() == init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(init_listeners)
@patch("homeassistant.components.logbook.websocket_api.EVENT_COALESCE_TIME", 0)
@ -2494,7 +2531,9 @@ async def test_subscribe_entities_some_have_uom_multiple(
await hass.async_block_till_done()
# Check our listener got unsubscribed
assert hass.bus.async_listeners() == init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(init_listeners)
@patch("homeassistant.components.logbook.websocket_api.EVENT_COALESCE_TIME", 0)
@ -2608,7 +2647,9 @@ async def test_logbook_stream_ignores_forced_updates(
assert msg["success"]
# Check our listener got unsubscribed
assert hass.bus.async_listeners() == init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(init_listeners)
@patch("homeassistant.components.logbook.websocket_api.EVENT_COALESCE_TIME", 0)
@ -2703,4 +2744,6 @@ async def test_subscribe_all_entities_are_continuous_with_device(
await hass.async_block_till_done()
# Check our listener got unsubscribed
assert hass.bus.async_listeners() == init_listeners
assert listeners_without_writes(
hass.bus.async_listeners()
) == listeners_without_writes(init_listeners)