Update rfxtrx library to handle connection retries (#111366)

Upgrade rfxtrx library to one that leaves reconnection to home assistant and handle loss of connection by reloading the integration.

https://github.com/Danielhiversen/pyRFXtrx/releases/tag/0.31.0
This commit is contained in:
Joakim Plate 2024-02-26 19:30:22 +01:00 committed by GitHub
parent 979fe57f7f
commit a55c56a207
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 200 additions and 134 deletions

View file

@ -2,6 +2,7 @@
import os
from unittest.mock import MagicMock, patch, sentinel
from RFXtrx import RFXtrxTransportError
import serial.tools.list_ports
from homeassistant import config_entries, data_entry_flow
@ -15,16 +16,6 @@ from tests.common import MockConfigEntry
SOME_PROTOCOLS = ["ac", "arc"]
def serial_connect(self):
"""Mock a serial connection."""
self.serial = True
def serial_connect_fail(self):
"""Mock a failed serial connection."""
self.serial = None
def com_port():
"""Mock of a serial port."""
port = serial.tools.list_ports_common.ListPortInfo("/dev/ttyUSB1234")
@ -46,7 +37,6 @@ async def start_options_flow(hass, entry):
return await hass.config_entries.options.async_init(entry.entry_id)
@patch("homeassistant.components.rfxtrx.rfxtrxmod.PyNetworkTransport", autospec=True)
async def test_setup_network(transport_mock, hass: HomeAssistant) -> None:
"""Test we can setup network."""
result = await hass.config_entries.flow.async_init(
@ -83,15 +73,7 @@ async def test_setup_network(transport_mock, hass: HomeAssistant) -> None:
@patch("serial.tools.list_ports.comports", return_value=[com_port()])
@patch(
"homeassistant.components.rfxtrx.rfxtrxmod.PySerialTransport.connect",
serial_connect,
)
@patch(
"homeassistant.components.rfxtrx.rfxtrxmod.PySerialTransport.close",
return_value=None,
)
async def test_setup_serial(com_mock, connect_mock, hass: HomeAssistant) -> None:
async def test_setup_serial(com_mock, transport_mock, hass: HomeAssistant) -> None:
"""Test we can setup serial."""
port = com_port()
@ -129,15 +111,9 @@ async def test_setup_serial(com_mock, connect_mock, hass: HomeAssistant) -> None
@patch("serial.tools.list_ports.comports", return_value=[com_port()])
@patch(
"homeassistant.components.rfxtrx.rfxtrxmod.PySerialTransport.connect",
serial_connect,
)
@patch(
"homeassistant.components.rfxtrx.rfxtrxmod.PySerialTransport.close",
return_value=None,
)
async def test_setup_serial_manual(com_mock, connect_mock, hass: HomeAssistant) -> None:
async def test_setup_serial_manual(
com_mock, transport_mock, hass: HomeAssistant
) -> None:
"""Test we can setup serial with manual entry."""
result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -180,13 +156,9 @@ async def test_setup_serial_manual(com_mock, connect_mock, hass: HomeAssistant)
}
@patch(
"homeassistant.components.rfxtrx.rfxtrxmod.PyNetworkTransport",
autospec=True,
side_effect=OSError,
)
async def test_setup_network_fail(transport_mock, hass: HomeAssistant) -> None:
"""Test we can setup network."""
transport_mock.return_value.connect.side_effect = RFXtrxTransportError
result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER}
)
@ -214,12 +186,9 @@ async def test_setup_network_fail(transport_mock, hass: HomeAssistant) -> None:
@patch("serial.tools.list_ports.comports", return_value=[com_port()])
@patch(
"homeassistant.components.rfxtrx.rfxtrxmod.PySerialTransport.connect",
side_effect=serial.SerialException,
)
async def test_setup_serial_fail(com_mock, connect_mock, hass: HomeAssistant) -> None:
async def test_setup_serial_fail(com_mock, transport_mock, hass: HomeAssistant) -> None:
"""Test setup serial failed connection."""
transport_mock.return_value.connect.side_effect = RFXtrxTransportError
port = com_port()
result = await hass.config_entries.flow.async_init(
@ -249,12 +218,11 @@ async def test_setup_serial_fail(com_mock, connect_mock, hass: HomeAssistant) ->
@patch("serial.tools.list_ports.comports", return_value=[com_port()])
@patch(
"homeassistant.components.rfxtrx.rfxtrxmod.PySerialTransport.connect",
serial_connect_fail,
)
async def test_setup_serial_manual_fail(com_mock, hass: HomeAssistant) -> None:
async def test_setup_serial_manual_fail(
com_mock, transport_mock, hass: HomeAssistant
) -> None:
"""Test setup serial failed connection."""
transport_mock.return_value.connect.side_effect = RFXtrxTransportError
result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER}
)