mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +00:00
Convert base_config_test in modbus to existing Pytest.fixture (#53836)
* Convert base_config_test to pytest.fixture.
This commit is contained in:
parent
d97f93933f
commit
e7f0768ae6
@ -39,9 +39,15 @@ def mock_pymodbus():
|
|||||||
yield mock_pb
|
yield mock_pb
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture(
|
||||||
async def mock_modbus(hass, do_config):
|
params=[
|
||||||
|
{"testLoad": True},
|
||||||
|
],
|
||||||
|
)
|
||||||
|
async def mock_modbus(hass, caplog, request, do_config):
|
||||||
"""Load integration modbus using mocked pymodbus."""
|
"""Load integration modbus using mocked pymodbus."""
|
||||||
|
|
||||||
|
caplog.set_level(logging.WARNING)
|
||||||
config = {
|
config = {
|
||||||
DOMAIN: [
|
DOMAIN: [
|
||||||
{
|
{
|
||||||
@ -56,7 +62,10 @@ async def mock_modbus(hass, do_config):
|
|||||||
with mock.patch(
|
with mock.patch(
|
||||||
"homeassistant.components.modbus.modbus.ModbusTcpClient", autospec=True
|
"homeassistant.components.modbus.modbus.ModbusTcpClient", autospec=True
|
||||||
) as mock_pb:
|
) as mock_pb:
|
||||||
|
if request.param["testLoad"]:
|
||||||
assert await async_setup_component(hass, DOMAIN, config) is True
|
assert await async_setup_component(hass, DOMAIN, config) is True
|
||||||
|
else:
|
||||||
|
await async_setup_component(hass, DOMAIN, config)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
yield mock_pb
|
yield mock_pb
|
||||||
|
|
||||||
@ -88,7 +97,6 @@ async def base_test(
|
|||||||
register_words,
|
register_words,
|
||||||
expected,
|
expected,
|
||||||
method_discovery=False,
|
method_discovery=False,
|
||||||
check_config_only=False,
|
|
||||||
config_modbus=None,
|
config_modbus=None,
|
||||||
scan_interval=None,
|
scan_interval=None,
|
||||||
expect_init_to_fail=False,
|
expect_init_to_fail=False,
|
||||||
@ -173,8 +181,6 @@ async def base_test(
|
|||||||
assert device is None
|
assert device is None
|
||||||
elif device is None:
|
elif device is None:
|
||||||
pytest.fail("CONFIG failed, see output")
|
pytest.fail("CONFIG failed, see output")
|
||||||
if check_config_only:
|
|
||||||
return
|
|
||||||
|
|
||||||
# Trigger update call with time_changed event
|
# Trigger update call with time_changed event
|
||||||
now = now + timedelta(seconds=scan_interval + 60)
|
now = now + timedelta(seconds=scan_interval + 60)
|
||||||
@ -187,37 +193,6 @@ async def base_test(
|
|||||||
return hass.states.get(entity_id).state
|
return hass.states.get(entity_id).state
|
||||||
|
|
||||||
|
|
||||||
async def base_config_test(
|
|
||||||
hass,
|
|
||||||
config_device,
|
|
||||||
device_name,
|
|
||||||
entity_domain,
|
|
||||||
array_name_discovery,
|
|
||||||
array_name_old_config,
|
|
||||||
method_discovery=False,
|
|
||||||
config_modbus=None,
|
|
||||||
expect_init_to_fail=False,
|
|
||||||
expect_setup_to_fail=False,
|
|
||||||
):
|
|
||||||
"""Check config of device for given config."""
|
|
||||||
|
|
||||||
await base_test(
|
|
||||||
hass,
|
|
||||||
config_device,
|
|
||||||
device_name,
|
|
||||||
entity_domain,
|
|
||||||
array_name_discovery,
|
|
||||||
array_name_old_config,
|
|
||||||
None,
|
|
||||||
None,
|
|
||||||
method_discovery=method_discovery,
|
|
||||||
check_config_only=True,
|
|
||||||
config_modbus=config_modbus,
|
|
||||||
expect_init_to_fail=expect_init_to_fail,
|
|
||||||
expect_setup_to_fail=expect_setup_to_fail,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
async def prepare_service_update(hass, config):
|
async def prepare_service_update(hass, config):
|
||||||
"""Run test for service write_coil."""
|
"""Run test for service write_coil."""
|
||||||
|
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
"""The tests for the Modbus sensor component."""
|
"""The tests for the Modbus sensor component."""
|
||||||
import logging
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from homeassistant.components.modbus.const import (
|
from homeassistant.components.modbus.const import (
|
||||||
@ -37,7 +35,7 @@ from homeassistant.const import (
|
|||||||
)
|
)
|
||||||
from homeassistant.core import State
|
from homeassistant.core import State
|
||||||
|
|
||||||
from .conftest import ReadResult, base_config_test, base_test, prepare_service_update
|
from .conftest import ReadResult, base_test, prepare_service_update
|
||||||
|
|
||||||
SENSOR_NAME = "test_sensor"
|
SENSOR_NAME = "test_sensor"
|
||||||
ENTITY_ID = f"{SENSOR_DOMAIN}.{SENSOR_NAME}"
|
ENTITY_ID = f"{SENSOR_DOMAIN}.{SENSOR_NAME}"
|
||||||
@ -133,95 +131,106 @@ async def test_config_sensor(hass, mock_modbus):
|
|||||||
assert SENSOR_DOMAIN in hass.config.components
|
assert SENSOR_DOMAIN in hass.config.components
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("mock_modbus", [{"testLoad": False}], indirect=True)
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"do_config,error_message",
|
"do_config,error_message",
|
||||||
[
|
[
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
|
CONF_SENSORS: [
|
||||||
|
{
|
||||||
|
CONF_NAME: SENSOR_NAME,
|
||||||
CONF_ADDRESS: 1234,
|
CONF_ADDRESS: 1234,
|
||||||
CONF_COUNT: 8,
|
CONF_COUNT: 8,
|
||||||
CONF_PRECISION: 2,
|
CONF_PRECISION: 2,
|
||||||
CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
|
CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
|
||||||
CONF_STRUCTURE: ">no struct",
|
CONF_STRUCTURE: ">no struct",
|
||||||
},
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
"bad char in struct format",
|
"bad char in struct format",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
|
CONF_SENSORS: [
|
||||||
|
{
|
||||||
|
CONF_NAME: SENSOR_NAME,
|
||||||
CONF_ADDRESS: 1234,
|
CONF_ADDRESS: 1234,
|
||||||
CONF_COUNT: 2,
|
CONF_COUNT: 2,
|
||||||
CONF_PRECISION: 2,
|
CONF_PRECISION: 2,
|
||||||
CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
|
CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
|
||||||
CONF_STRUCTURE: ">4f",
|
CONF_STRUCTURE: ">4f",
|
||||||
},
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
"Structure request 16 bytes, but 2 registers have a size of 4 bytes",
|
"Structure request 16 bytes, but 2 registers have a size of 4 bytes",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
|
CONF_SENSORS: [
|
||||||
|
{
|
||||||
|
CONF_NAME: SENSOR_NAME,
|
||||||
CONF_ADDRESS: 1234,
|
CONF_ADDRESS: 1234,
|
||||||
CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
|
CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
|
||||||
CONF_COUNT: 4,
|
CONF_COUNT: 4,
|
||||||
CONF_SWAP: CONF_SWAP_NONE,
|
CONF_SWAP: CONF_SWAP_NONE,
|
||||||
CONF_STRUCTURE: "invalid",
|
CONF_STRUCTURE: "invalid",
|
||||||
},
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
"bad char in struct format",
|
"bad char in struct format",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
|
CONF_SENSORS: [
|
||||||
|
{
|
||||||
|
CONF_NAME: SENSOR_NAME,
|
||||||
CONF_ADDRESS: 1234,
|
CONF_ADDRESS: 1234,
|
||||||
CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
|
CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
|
||||||
CONF_COUNT: 4,
|
CONF_COUNT: 4,
|
||||||
CONF_SWAP: CONF_SWAP_NONE,
|
CONF_SWAP: CONF_SWAP_NONE,
|
||||||
CONF_STRUCTURE: "",
|
CONF_STRUCTURE: "",
|
||||||
},
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
"Error in sensor test_sensor. The `structure` field can not be empty",
|
"Error in sensor test_sensor. The `structure` field can not be empty",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
|
CONF_SENSORS: [
|
||||||
|
{
|
||||||
|
CONF_NAME: SENSOR_NAME,
|
||||||
CONF_ADDRESS: 1234,
|
CONF_ADDRESS: 1234,
|
||||||
CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
|
CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
|
||||||
CONF_COUNT: 4,
|
CONF_COUNT: 4,
|
||||||
CONF_SWAP: CONF_SWAP_NONE,
|
CONF_SWAP: CONF_SWAP_NONE,
|
||||||
CONF_STRUCTURE: "1s",
|
CONF_STRUCTURE: "1s",
|
||||||
},
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
"Structure request 1 bytes, but 4 registers have a size of 8 bytes",
|
"Structure request 1 bytes, but 4 registers have a size of 8 bytes",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
|
CONF_SENSORS: [
|
||||||
|
{
|
||||||
|
CONF_NAME: SENSOR_NAME,
|
||||||
CONF_ADDRESS: 1234,
|
CONF_ADDRESS: 1234,
|
||||||
CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
|
CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
|
||||||
CONF_COUNT: 1,
|
CONF_COUNT: 1,
|
||||||
CONF_STRUCTURE: "2s",
|
CONF_STRUCTURE: "2s",
|
||||||
CONF_SWAP: CONF_SWAP_WORD,
|
CONF_SWAP: CONF_SWAP_WORD,
|
||||||
},
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
"Error in sensor test_sensor swap(word) not possible due to the registers count: 1, needed: 2",
|
"Error in sensor test_sensor swap(word) not possible due to the registers count: 1, needed: 2",
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_config_wrong_struct_sensor(
|
async def test_config_wrong_struct_sensor(hass, error_message, mock_modbus, caplog):
|
||||||
hass, caplog, do_config, error_message, mock_pymodbus
|
|
||||||
):
|
|
||||||
"""Run test for sensor with wrong struct."""
|
"""Run test for sensor with wrong struct."""
|
||||||
|
messages = str([x.message for x in caplog.get_records("setup")])
|
||||||
config_sensor = {
|
assert error_message in messages
|
||||||
CONF_NAME: SENSOR_NAME,
|
|
||||||
**do_config,
|
|
||||||
}
|
|
||||||
caplog.set_level(logging.WARNING)
|
|
||||||
caplog.clear()
|
|
||||||
|
|
||||||
await base_config_test(
|
|
||||||
hass,
|
|
||||||
config_sensor,
|
|
||||||
SENSOR_NAME,
|
|
||||||
SENSOR_DOMAIN,
|
|
||||||
CONF_SENSORS,
|
|
||||||
None,
|
|
||||||
method_discovery=True,
|
|
||||||
expect_setup_to_fail=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
assert caplog.text.count(error_message)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user