From d24b3e0a3c074b438f6c96700e1f510098387b50 Mon Sep 17 00:00:00 2001 From: jan iversen Date: Tue, 20 Apr 2021 20:25:37 +0200 Subject: [PATCH] Test pymodbus (#49053) --- tests/components/modbus/test_init.py | 144 +++++++++++++++++++++++++ tests/components/modbus/test_modbus.py | 72 ------------- 2 files changed, 144 insertions(+), 72 deletions(-) delete mode 100644 tests/components/modbus/test_modbus.py diff --git a/tests/components/modbus/test_init.py b/tests/components/modbus/test_init.py index cd8edb656a0..393a9ce86da 100644 --- a/tests/components/modbus/test_init.py +++ b/tests/components/modbus/test_init.py @@ -1,8 +1,28 @@ """The tests for the Modbus init.""" +import logging +from unittest import mock + import pytest import voluptuous as vol from homeassistant.components.modbus import number +from homeassistant.components.modbus.const import ( + CONF_BAUDRATE, + CONF_BYTESIZE, + CONF_PARITY, + CONF_STOPBITS, + MODBUS_DOMAIN as DOMAIN, +) +from homeassistant.const import ( + CONF_DELAY, + CONF_HOST, + CONF_METHOD, + CONF_NAME, + CONF_PORT, + CONF_TIMEOUT, + CONF_TYPE, +) +from homeassistant.setup import async_setup_component @pytest.mark.parametrize( @@ -33,3 +53,127 @@ async def test_number_exception(): return pytest.fail("Number not throwing exception") + + +async def _config_helper(hass, do_config): + """Run test for modbus.""" + + config = {DOMAIN: do_config} + + with mock.patch( + "homeassistant.components.modbus.modbus.ModbusTcpClient" + ), mock.patch( + "homeassistant.components.modbus.modbus.ModbusSerialClient" + ), mock.patch( + "homeassistant.components.modbus.modbus.ModbusUdpClient" + ): + assert await async_setup_component(hass, DOMAIN, config) is True + await hass.async_block_till_done() + + +@pytest.mark.parametrize( + "do_config", + [ + { + CONF_TYPE: "tcp", + CONF_HOST: "modbusTestHost", + CONF_PORT: 5501, + }, + { + CONF_TYPE: "tcp", + CONF_HOST: "modbusTestHost", + CONF_PORT: 5501, + CONF_NAME: "modbusTest", + CONF_TIMEOUT: 30, + CONF_DELAY: 10, + }, + { + CONF_TYPE: "udp", + CONF_HOST: "modbusTestHost", + CONF_PORT: 5501, + }, + { + CONF_TYPE: "udp", + CONF_HOST: "modbusTestHost", + CONF_PORT: 5501, + CONF_NAME: "modbusTest", + CONF_TIMEOUT: 30, + CONF_DELAY: 10, + }, + { + CONF_TYPE: "rtuovertcp", + CONF_HOST: "modbusTestHost", + CONF_PORT: 5501, + }, + { + CONF_TYPE: "rtuovertcp", + CONF_HOST: "modbusTestHost", + CONF_PORT: 5501, + CONF_NAME: "modbusTest", + CONF_TIMEOUT: 30, + CONF_DELAY: 10, + }, + { + CONF_TYPE: "serial", + CONF_BAUDRATE: 9600, + CONF_BYTESIZE: 8, + CONF_METHOD: "rtu", + CONF_PORT: "usb01", + CONF_PARITY: "E", + CONF_STOPBITS: 1, + }, + { + CONF_TYPE: "serial", + CONF_BAUDRATE: 9600, + CONF_BYTESIZE: 8, + CONF_METHOD: "rtu", + CONF_PORT: "usb01", + CONF_PARITY: "E", + CONF_STOPBITS: 1, + CONF_NAME: "modbusTest", + CONF_TIMEOUT: 30, + CONF_DELAY: 10, + }, + ], +) +async def test_config_modbus(hass, caplog, do_config): + """Run test for modbus.""" + + caplog.set_level(logging.ERROR) + await _config_helper(hass, do_config) + assert DOMAIN in hass.config.components + assert len(caplog.records) == 0 + + +async def test_config_multiple_modbus(hass, caplog): + """Run test for multiple modbus.""" + + do_config = [ + { + CONF_TYPE: "tcp", + CONF_HOST: "modbusTestHost", + CONF_PORT: 5501, + CONF_NAME: "modbusTest1", + }, + { + CONF_TYPE: "tcp", + CONF_HOST: "modbusTestHost", + CONF_PORT: 5501, + CONF_NAME: "modbusTest2", + }, + { + CONF_TYPE: "serial", + CONF_BAUDRATE: 9600, + CONF_BYTESIZE: 8, + CONF_METHOD: "rtu", + CONF_PORT: "usb01", + CONF_PARITY: "E", + CONF_STOPBITS: 1, + CONF_NAME: "modbusTest3", + }, + ] + + caplog.set_level(logging.ERROR) + await _config_helper(hass, do_config) + assert DOMAIN in hass.config.components + assert len(caplog.records) == 0 diff --git a/tests/components/modbus/test_modbus.py b/tests/components/modbus/test_modbus.py deleted file mode 100644 index 708519bbb44..00000000000 --- a/tests/components/modbus/test_modbus.py +++ /dev/null @@ -1,72 +0,0 @@ -"""The tests for the Modbus sensor component.""" -import pytest - -from homeassistant.components.modbus.const import ( - CONF_BAUDRATE, - CONF_BYTESIZE, - CONF_PARITY, - CONF_STOPBITS, - MODBUS_DOMAIN as DOMAIN, -) -from homeassistant.const import ( - CONF_DELAY, - CONF_HOST, - CONF_METHOD, - CONF_NAME, - CONF_PORT, - CONF_TIMEOUT, - CONF_TYPE, -) - -from .conftest import base_config_test - - -@pytest.mark.parametrize("do_discovery", [False, True]) -@pytest.mark.parametrize( - "do_options", - [ - {}, - { - CONF_NAME: "modbusTest", - CONF_TIMEOUT: 30, - CONF_DELAY: 10, - }, - ], -) -@pytest.mark.parametrize( - "do_config", - [ - { - CONF_TYPE: "tcp", - CONF_HOST: "modbusTestHost", - CONF_PORT: 5501, - }, - { - CONF_TYPE: "serial", - CONF_BAUDRATE: 9600, - CONF_BYTESIZE: 8, - CONF_METHOD: "rtu", - CONF_PORT: "usb01", - CONF_PARITY: "E", - CONF_STOPBITS: 1, - }, - ], -) -async def test_config_modbus(hass, do_discovery, do_options, do_config): - """Run test for modbus.""" - config = { - DOMAIN: { - **do_config, - **do_options, - } - } - await base_config_test( - hass, - None, - "", - DOMAIN, - None, - None, - method_discovery=do_discovery, - config_modbus=config, - )