Fix publish cancellation handling in MQTT (#120826)
parent
25932dff28
commit
8f98fb2ec4
|
@ -1141,8 +1141,8 @@ class MQTT:
|
|||
# see https://github.com/eclipse/paho.mqtt.python/issues/687
|
||||
# properties and reason codes are not used in Home Assistant
|
||||
future = self._async_get_mid_future(mid)
|
||||
if future.done() and future.exception():
|
||||
# Timed out
|
||||
if future.done() and (future.cancelled() or future.exception()):
|
||||
# Timed out or cancelled
|
||||
return
|
||||
future.set_result(None)
|
||||
|
||||
|
|
|
@ -1194,6 +1194,23 @@ async def test_handle_mqtt_on_callback(
|
|||
assert "No ACK from MQTT server" not in caplog.text
|
||||
|
||||
|
||||
async def test_handle_mqtt_on_callback_after_cancellation(
|
||||
hass: HomeAssistant,
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
mqtt_mock_entry: MqttMockHAClientGenerator,
|
||||
mqtt_client_mock: MqttMockPahoClient,
|
||||
) -> None:
|
||||
"""Test receiving an ACK after a cancellation."""
|
||||
mqtt_mock = await mqtt_mock_entry()
|
||||
# Simulate the mid future getting a cancellation
|
||||
mqtt_mock()._async_get_mid_future(101).cancel()
|
||||
# Simulate an ACK for mid == 101, being received after the cancellation
|
||||
mqtt_client_mock.on_publish(mqtt_client_mock, None, 101)
|
||||
await hass.async_block_till_done()
|
||||
assert "No ACK from MQTT server" not in caplog.text
|
||||
assert "InvalidStateError" not in caplog.text
|
||||
|
||||
|
||||
async def test_handle_mqtt_on_callback_after_timeout(
|
||||
hass: HomeAssistant,
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
|
|
Loading…
Reference in New Issue