mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +00:00
Add tests for various NUT upses (#34034)
This commit is contained in:
parent
946b77e2ec
commit
6e6ebb9495
@ -1,10 +1,12 @@
|
|||||||
"""Test the Network UPS Tools (NUT) config flow."""
|
"""Test the Network UPS Tools (NUT) config flow."""
|
||||||
from asynctest import MagicMock, patch
|
from asynctest import patch
|
||||||
|
|
||||||
from homeassistant import config_entries, data_entry_flow, setup
|
from homeassistant import config_entries, data_entry_flow, setup
|
||||||
from homeassistant.components.nut.const import DOMAIN
|
from homeassistant.components.nut.const import DOMAIN
|
||||||
from homeassistant.const import CONF_RESOURCES
|
from homeassistant.const import CONF_RESOURCES
|
||||||
|
|
||||||
|
from .util import _get_mock_pynutclient
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
|
|
||||||
VALID_CONFIG = {
|
VALID_CONFIG = {
|
||||||
@ -15,13 +17,6 @@ VALID_CONFIG = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def _get_mock_pynutclient(list_vars=None, list_ups=None):
|
|
||||||
pynutclient = MagicMock()
|
|
||||||
type(pynutclient).list_ups = MagicMock(return_value=list_ups)
|
|
||||||
type(pynutclient).list_vars = MagicMock(return_value=list_vars)
|
|
||||||
return pynutclient
|
|
||||||
|
|
||||||
|
|
||||||
async def test_form_user_one_ups(hass):
|
async def test_form_user_one_ups(hass):
|
||||||
"""Test we get the form."""
|
"""Test we get the form."""
|
||||||
await setup.async_setup_component(hass, "persistent_notification", {})
|
await setup.async_setup_component(hass, "persistent_notification", {})
|
||||||
|
67
tests/components/nut/test_sensor.py
Normal file
67
tests/components/nut/test_sensor.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
"""The sensor tests for the nut platform."""
|
||||||
|
|
||||||
|
|
||||||
|
from .util import async_init_integration
|
||||||
|
|
||||||
|
|
||||||
|
async def test_pr3000rt2u(hass):
|
||||||
|
"""Test creation of PR3000RT2U sensors."""
|
||||||
|
|
||||||
|
await async_init_integration(hass, "PR3000RT2U", ["battery.charge"])
|
||||||
|
|
||||||
|
state = hass.states.get("sensor.ups1_battery_charge")
|
||||||
|
assert state.state == "100"
|
||||||
|
|
||||||
|
expected_attributes = {
|
||||||
|
"device_class": "battery",
|
||||||
|
"friendly_name": "Ups1 Battery Charge",
|
||||||
|
"state": "Online",
|
||||||
|
"unit_of_measurement": "%",
|
||||||
|
}
|
||||||
|
# Only test for a subset of attributes in case
|
||||||
|
# HA changes the implementation and a new one appears
|
||||||
|
assert all(
|
||||||
|
state.attributes[key] == expected_attributes[key] for key in expected_attributes
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_cp1350c(hass):
|
||||||
|
"""Test creation of CP1350C sensors."""
|
||||||
|
|
||||||
|
await async_init_integration(hass, "CP1350C", ["battery.charge"])
|
||||||
|
|
||||||
|
state = hass.states.get("sensor.ups1_battery_charge")
|
||||||
|
assert state.state == "100"
|
||||||
|
|
||||||
|
expected_attributes = {
|
||||||
|
"device_class": "battery",
|
||||||
|
"friendly_name": "Ups1 Battery Charge",
|
||||||
|
"state": "Online",
|
||||||
|
"unit_of_measurement": "%",
|
||||||
|
}
|
||||||
|
# Only test for a subset of attributes in case
|
||||||
|
# HA changes the implementation and a new one appears
|
||||||
|
assert all(
|
||||||
|
state.attributes[key] == expected_attributes[key] for key in expected_attributes
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_5e850i(hass):
|
||||||
|
"""Test creation of 5E850I sensors."""
|
||||||
|
|
||||||
|
await async_init_integration(hass, "5E850I", ["battery.charge"])
|
||||||
|
|
||||||
|
state = hass.states.get("sensor.ups1_battery_charge")
|
||||||
|
assert state.state == "100"
|
||||||
|
|
||||||
|
expected_attributes = {
|
||||||
|
"device_class": "battery",
|
||||||
|
"friendly_name": "Ups1 Battery Charge",
|
||||||
|
"state": "Online",
|
||||||
|
"unit_of_measurement": "%",
|
||||||
|
}
|
||||||
|
# Only test for a subset of attributes in case
|
||||||
|
# HA changes the implementation and a new one appears
|
||||||
|
assert all(
|
||||||
|
state.attributes[key] == expected_attributes[key] for key in expected_attributes
|
||||||
|
)
|
47
tests/components/nut/util.py
Normal file
47
tests/components/nut/util.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
"""Tests for the nut integration."""
|
||||||
|
|
||||||
|
import json
|
||||||
|
|
||||||
|
from asynctest import MagicMock, patch
|
||||||
|
|
||||||
|
from homeassistant.components.nut.const import DOMAIN
|
||||||
|
from homeassistant.const import CONF_HOST, CONF_PORT, CONF_RESOURCES
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
|
from tests.common import MockConfigEntry, load_fixture
|
||||||
|
|
||||||
|
|
||||||
|
def _get_mock_pynutclient(list_vars=None, list_ups=None):
|
||||||
|
pynutclient = MagicMock()
|
||||||
|
type(pynutclient).list_ups = MagicMock(return_value=list_ups)
|
||||||
|
type(pynutclient).list_vars = MagicMock(return_value=list_vars)
|
||||||
|
return pynutclient
|
||||||
|
|
||||||
|
|
||||||
|
async def async_init_integration(
|
||||||
|
hass: HomeAssistant, ups_fixture: str, resources: list
|
||||||
|
) -> MockConfigEntry:
|
||||||
|
"""Set up the nexia integration in Home Assistant."""
|
||||||
|
|
||||||
|
ups_fixture = f"nut/{ups_fixture}.json"
|
||||||
|
list_vars = json.loads(load_fixture(ups_fixture))
|
||||||
|
|
||||||
|
import pprint
|
||||||
|
|
||||||
|
pprint.pprint(list_vars)
|
||||||
|
|
||||||
|
mock_pynut = _get_mock_pynutclient(list_ups={"ups1": "UPS 1"}, list_vars=list_vars)
|
||||||
|
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.nut.PyNUTClient", return_value=mock_pynut,
|
||||||
|
):
|
||||||
|
entry = MockConfigEntry(
|
||||||
|
domain=DOMAIN,
|
||||||
|
data={CONF_HOST: "mock", CONF_PORT: "mock", CONF_RESOURCES: resources},
|
||||||
|
)
|
||||||
|
entry.add_to_hass(hass)
|
||||||
|
|
||||||
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
return entry
|
37
tests/fixtures/nut/5E850I.json
vendored
Normal file
37
tests/fixtures/nut/5E850I.json
vendored
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"driver.parameter.pollfreq" : "30",
|
||||||
|
"ups.power.nominal" : "850",
|
||||||
|
"battery.type" : "PbAc",
|
||||||
|
"driver.parameter.synchronous" : "no",
|
||||||
|
"driver.version" : "2.7.4",
|
||||||
|
"battery.runtime" : "1759",
|
||||||
|
"driver.version.internal" : "0.41",
|
||||||
|
"driver.name" : "usbhid-ups",
|
||||||
|
"outlet.desc" : "Main Outlet",
|
||||||
|
"ups.productid" : "ffff",
|
||||||
|
"ups.firmware" : "03.08.0018",
|
||||||
|
"output.frequency" : "50.0",
|
||||||
|
"device.model" : "5E 850i",
|
||||||
|
"output.voltage" : "238.0",
|
||||||
|
"ups.mfr" : "EATON",
|
||||||
|
"ups.load" : "21",
|
||||||
|
"outlet.id" : "1",
|
||||||
|
"device.type" : "ups",
|
||||||
|
"ups.timer.shutdown" : "-1",
|
||||||
|
"output.frequency.nominal" : "50",
|
||||||
|
"ups.delay.shutdown" : "20",
|
||||||
|
"input.voltage" : "240.0",
|
||||||
|
"ups.vendorid" : "0463",
|
||||||
|
"ups.model" : "5E 850i",
|
||||||
|
"driver.version.data" : "MGE HID 1.39",
|
||||||
|
"outlet.switchable" : "no",
|
||||||
|
"outlet.1.status" : "on",
|
||||||
|
"output.voltage.nominal" : "230",
|
||||||
|
"driver.parameter.port" : "auto",
|
||||||
|
"device.mfr" : "EATON",
|
||||||
|
"ups.start.battery" : "yes",
|
||||||
|
"ups.beeper.status" : "enabled",
|
||||||
|
"ups.status" : "OL",
|
||||||
|
"driver.parameter.pollinterval" : "2",
|
||||||
|
"battery.charge" : "100"
|
||||||
|
}
|
39
tests/fixtures/nut/CP1350C.json
vendored
Normal file
39
tests/fixtures/nut/CP1350C.json
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"device.model" : " CP 1350C",
|
||||||
|
"ups.model" : " CP 1350C",
|
||||||
|
"battery.voltage.nominal" : "12",
|
||||||
|
"ups.delay.start" : "30",
|
||||||
|
"ups.realpower.nominal" : "298",
|
||||||
|
"ups.vendorid" : "0764",
|
||||||
|
"ups.mfr" : "CPS",
|
||||||
|
"driver.version" : "2.7.4",
|
||||||
|
"ups.delay.shutdown" : "20",
|
||||||
|
"battery.type" : "PbAcid",
|
||||||
|
"battery.voltage" : "14.0",
|
||||||
|
"ups.load" : "27",
|
||||||
|
"battery.charge.low" : "10",
|
||||||
|
"ups.beeper.status" : "enabled",
|
||||||
|
"device.mfr" : "CPS",
|
||||||
|
"battery.runtime" : "1225",
|
||||||
|
"driver.version.internal" : "0.41",
|
||||||
|
"input.voltage.nominal" : "230",
|
||||||
|
"input.transfer.high" : "280",
|
||||||
|
"driver.version.data" : "CyberPower HID 0.4",
|
||||||
|
"driver.parameter.port" : "/dev/ttyS1",
|
||||||
|
"input.voltage" : "236.0",
|
||||||
|
"battery.runtime.low" : "300",
|
||||||
|
"driver.parameter.pollinterval" : "2",
|
||||||
|
"driver.parameter.pollfreq" : "30",
|
||||||
|
"ups.timer.shutdown" : "-60",
|
||||||
|
"input.transfer.low" : "180",
|
||||||
|
"device.type" : "ups",
|
||||||
|
"battery.mfr.date" : "CPS",
|
||||||
|
"battery.charge" : "100",
|
||||||
|
"battery.charge.warning" : "20",
|
||||||
|
"ups.productid" : "0501",
|
||||||
|
"driver.name" : "usbhid-ups",
|
||||||
|
"output.voltage" : "236.0",
|
||||||
|
"driver.parameter.synchronous" : "no",
|
||||||
|
"ups.timer.start" : "0",
|
||||||
|
"ups.status" : "OL"
|
||||||
|
}
|
39
tests/fixtures/nut/PR3000RT2U.json
vendored
Normal file
39
tests/fixtures/nut/PR3000RT2U.json
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"ups.delay.shutdown" : "20",
|
||||||
|
"driver.parameter.pollfreq" : "30",
|
||||||
|
"ups.delay.start" : "30",
|
||||||
|
"ups.mfr" : "CPS",
|
||||||
|
"battery.charge.warning" : "35",
|
||||||
|
"battery.type" : "PbAcid",
|
||||||
|
"battery.charge" : "100",
|
||||||
|
"battery.mfr.date" : "CPS",
|
||||||
|
"output.voltage" : "264.0",
|
||||||
|
"ups.productid" : "0601",
|
||||||
|
"input.voltage.nominal" : "120",
|
||||||
|
"driver.parameter.port" : "auto",
|
||||||
|
"input.voltage" : "120.0",
|
||||||
|
"driver.version" : "DSM6-2-2-24922-broadwell-fmp-repack-24922-190507",
|
||||||
|
"ups.vendorid" : "0764",
|
||||||
|
"battery.voltage" : "1.2",
|
||||||
|
"device.model" : "PR3000RT2U",
|
||||||
|
"driver.parameter.pollinterval" : "5",
|
||||||
|
"device.type" : "ups",
|
||||||
|
"battery.charge.low" : "0",
|
||||||
|
"ups.model" : "PR3000RT2U",
|
||||||
|
"ups.test.result" : "No test initiated",
|
||||||
|
"driver.version.data" : "CyberPower HID 0.3",
|
||||||
|
"ups.serial" : "PYVJO2000034",
|
||||||
|
"battery.voltage.nominal" : "22",
|
||||||
|
"ups.beeper.status" : "enabled",
|
||||||
|
"battery.runtime.low" : "300",
|
||||||
|
"battery.runtime" : "2644",
|
||||||
|
"driver.version.internal" : "0.38",
|
||||||
|
"ups.realpower.nominal" : "3000",
|
||||||
|
"device.serial" : "PYVJO2000034",
|
||||||
|
"driver.name" : "usbhid-ups",
|
||||||
|
"device.mfr" : "CPS",
|
||||||
|
"ups.load" : "12",
|
||||||
|
"ups.timer.shutdown" : "0",
|
||||||
|
"ups.timer.start" : "0",
|
||||||
|
"ups.status" : "OL"
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user