Add tests for various NUT upses (#34034)

This commit is contained in:
J. Nick Koston 2020-04-11 11:17:57 -05:00 committed by GitHub
parent 946b77e2ec
commit 6e6ebb9495
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 232 additions and 8 deletions

View File

@ -1,10 +1,12 @@
"""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.components.nut.const import DOMAIN
from homeassistant.const import CONF_RESOURCES
from .util import _get_mock_pynutclient
from tests.common import MockConfigEntry
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):
"""Test we get the form."""
await setup.async_setup_component(hass, "persistent_notification", {})

View 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
)

View 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
View 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
View 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
View 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"
}