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:
parent
979fe57f7f
commit
a55c56a207
8 changed files with 200 additions and 134 deletions
|
@ -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}
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue