Add tests for additional nut ups models (#34240)
* Add NUT tests for an Eaton 5E650I UPS * add a test to make sure multiple ups get setup * Add a few more upses * fix missing status key * cover * Force CI run
This commit is contained in:
parent
1f4cdda234
commit
188f3e35fd
6 changed files with 198 additions and 4 deletions
|
@ -21,6 +21,8 @@ from .const import (
|
||||||
DEFAULT_HOST,
|
DEFAULT_HOST,
|
||||||
DEFAULT_PORT,
|
DEFAULT_PORT,
|
||||||
DEFAULT_SCAN_INTERVAL,
|
DEFAULT_SCAN_INTERVAL,
|
||||||
|
KEY_STATUS,
|
||||||
|
KEY_STATUS_DISPLAY,
|
||||||
SENSOR_NAME,
|
SENSOR_NAME,
|
||||||
SENSOR_TYPES,
|
SENSOR_TYPES,
|
||||||
)
|
)
|
||||||
|
@ -53,6 +55,11 @@ def _resource_schema_base(available_resources, selected_resources):
|
||||||
if sensor_id in available_resources
|
if sensor_id in available_resources
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if KEY_STATUS in known_available_resources:
|
||||||
|
known_available_resources[KEY_STATUS_DISPLAY] = SENSOR_TYPES[
|
||||||
|
KEY_STATUS_DISPLAY
|
||||||
|
][SENSOR_NAME]
|
||||||
|
|
||||||
return {
|
return {
|
||||||
vol.Required(CONF_RESOURCES, default=selected_resources): cv.multi_select(
|
vol.Required(CONF_RESOURCES, default=selected_resources): cv.multi_select(
|
||||||
known_available_resources
|
known_available_resources
|
||||||
|
|
|
@ -27,7 +27,7 @@ async def test_form_user_one_ups(hass):
|
||||||
assert result["errors"] == {}
|
assert result["errors"] == {}
|
||||||
|
|
||||||
mock_pynut = _get_mock_pynutclient(
|
mock_pynut = _get_mock_pynutclient(
|
||||||
list_vars={"battery.voltage": "voltage"}, list_ups=["ups1"]
|
list_vars={"battery.voltage": "voltage", "ups.status": "OL"}, list_ups=["ups1"]
|
||||||
)
|
)
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
|
@ -54,7 +54,8 @@ async def test_form_user_one_ups(hass):
|
||||||
"homeassistant.components.nut.async_setup_entry", return_value=True,
|
"homeassistant.components.nut.async_setup_entry", return_value=True,
|
||||||
) as mock_setup_entry:
|
) as mock_setup_entry:
|
||||||
result3 = await hass.config_entries.flow.async_configure(
|
result3 = await hass.config_entries.flow.async_configure(
|
||||||
result2["flow_id"], {"resources": ["battery.voltage"]},
|
result2["flow_id"],
|
||||||
|
{"resources": ["battery.voltage", "ups.status", "ups.status.display"]},
|
||||||
)
|
)
|
||||||
|
|
||||||
assert result3["type"] == "create_entry"
|
assert result3["type"] == "create_entry"
|
||||||
|
@ -63,7 +64,7 @@ async def test_form_user_one_ups(hass):
|
||||||
"host": "1.1.1.1",
|
"host": "1.1.1.1",
|
||||||
"password": "test-password",
|
"password": "test-password",
|
||||||
"port": 2222,
|
"port": 2222,
|
||||||
"resources": ["battery.voltage"],
|
"resources": ["battery.voltage", "ups.status", "ups.status.display"],
|
||||||
"username": "test-username",
|
"username": "test-username",
|
||||||
}
|
}
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@ -74,6 +75,14 @@ async def test_form_user_one_ups(hass):
|
||||||
async def test_form_user_multiple_ups(hass):
|
async def test_form_user_multiple_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", {})
|
||||||
|
|
||||||
|
config_entry = MockConfigEntry(
|
||||||
|
domain=DOMAIN,
|
||||||
|
data={"host": "2.2.2.2", "port": 123, "resources": ["battery.charge"]},
|
||||||
|
options={CONF_RESOURCES: ["battery.charge"]},
|
||||||
|
)
|
||||||
|
config_entry.add_to_hass(hass)
|
||||||
|
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
||||||
)
|
)
|
||||||
|
@ -134,7 +143,7 @@ async def test_form_user_multiple_ups(hass):
|
||||||
}
|
}
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert len(mock_setup.mock_calls) == 1
|
assert len(mock_setup.mock_calls) == 1
|
||||||
assert len(mock_setup_entry.mock_calls) == 1
|
assert len(mock_setup_entry.mock_calls) == 2
|
||||||
|
|
||||||
|
|
||||||
async def test_form_import(hass):
|
async def test_form_import(hass):
|
||||||
|
|
|
@ -80,6 +80,31 @@ async def test_5e850i(hass):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_5e650i(hass):
|
||||||
|
"""Test creation of 5E650I sensors."""
|
||||||
|
|
||||||
|
await async_init_integration(hass, "5E650I", ["battery.charge"])
|
||||||
|
registry = await hass.helpers.entity_registry.async_get_registry()
|
||||||
|
entry = registry.async_get("sensor.ups1_battery_charge")
|
||||||
|
# No unique id, no registry entry
|
||||||
|
assert not entry
|
||||||
|
|
||||||
|
state = hass.states.get("sensor.ups1_battery_charge")
|
||||||
|
assert state.state == "100"
|
||||||
|
|
||||||
|
expected_attributes = {
|
||||||
|
"device_class": "battery",
|
||||||
|
"friendly_name": "Ups1 Battery Charge",
|
||||||
|
"state": "Online Battery Charging",
|
||||||
|
"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_backupsses600m1(hass):
|
async def test_backupsses600m1(hass):
|
||||||
"""Test creation of BACKUPSES600M1 sensors."""
|
"""Test creation of BACKUPSES600M1 sensors."""
|
||||||
|
|
||||||
|
@ -132,3 +157,53 @@ async def test_cp1500pfclcd(hass):
|
||||||
assert all(
|
assert all(
|
||||||
state.attributes[key] == expected_attributes[key] for key in expected_attributes
|
state.attributes[key] == expected_attributes[key] for key in expected_attributes
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_dl650elcd(hass):
|
||||||
|
"""Test creation of DL650ELCD sensors."""
|
||||||
|
|
||||||
|
await async_init_integration(hass, "DL650ELCD", ["battery.charge"])
|
||||||
|
registry = await hass.helpers.entity_registry.async_get_registry()
|
||||||
|
entry = registry.async_get("sensor.ups1_battery_charge")
|
||||||
|
# No unique id, no registry entry
|
||||||
|
assert not entry
|
||||||
|
|
||||||
|
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": UNIT_PERCENTAGE,
|
||||||
|
}
|
||||||
|
# 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_blazer_usb(hass):
|
||||||
|
"""Test creation of blazer_usb sensors."""
|
||||||
|
|
||||||
|
await async_init_integration(hass, "blazer_usb", ["battery.charge"])
|
||||||
|
registry = await hass.helpers.entity_registry.async_get_registry()
|
||||||
|
entry = registry.async_get("sensor.ups1_battery_charge")
|
||||||
|
# No unique id, no registry entry
|
||||||
|
assert not entry
|
||||||
|
|
||||||
|
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": UNIT_PERCENTAGE,
|
||||||
|
}
|
||||||
|
# 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
|
||||||
|
)
|
||||||
|
|
36
tests/fixtures/nut/5E650I.json
vendored
Normal file
36
tests/fixtures/nut/5E650I.json
vendored
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
{
|
||||||
|
"driver.version.internal" : "0.38",
|
||||||
|
"outlet.switchable" : "no",
|
||||||
|
"driver.parameter.port" : "auto",
|
||||||
|
"device.model" : "5E 650i",
|
||||||
|
"ups.model" : "5E 650i",
|
||||||
|
"driver.parameter.pollfreq" : "30",
|
||||||
|
"ups.timer.shutdown" : "-1",
|
||||||
|
"ups.productid" : "ffff",
|
||||||
|
"ups.load" : "28",
|
||||||
|
"ups.delay.shutdown" : "20",
|
||||||
|
"ups.power.nominal" : "650",
|
||||||
|
"output.voltage.nominal" : "230",
|
||||||
|
"outlet.1.status" : "on",
|
||||||
|
"battery.type" : "PbAc",
|
||||||
|
"driver.version.data" : "MGE HID 1.33",
|
||||||
|
"ups.vendorid" : "0463",
|
||||||
|
"driver.parameter.pollinterval" : "5",
|
||||||
|
"ups.status" : "OL CHRG",
|
||||||
|
"driver.version" : "DSM6-2-2-24922-broadwell-fmp-repack-24922-190507",
|
||||||
|
"ups.firmware" : "03.08.0018",
|
||||||
|
"ups.start.battery" : "yes",
|
||||||
|
"output.frequency.nominal" : "50",
|
||||||
|
"battery.charge" : "100",
|
||||||
|
"outlet.id" : "1",
|
||||||
|
"output.frequency" : "49.9",
|
||||||
|
"driver.name" : "usbhid-ups",
|
||||||
|
"battery.runtime" : "1032",
|
||||||
|
"input.voltage" : "239.0",
|
||||||
|
"ups.beeper.status" : "enabled",
|
||||||
|
"device.mfr" : "EATON",
|
||||||
|
"device.type" : "ups",
|
||||||
|
"ups.mfr" : "EATON",
|
||||||
|
"output.voltage" : "238.0",
|
||||||
|
"outlet.desc" : "Main Outlet"
|
||||||
|
}
|
39
tests/fixtures/nut/DL650ELCD.json
vendored
Normal file
39
tests/fixtures/nut/DL650ELCD.json
vendored
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
{
|
||||||
|
"ups.delay.shutdown" : "20",
|
||||||
|
"battery.charge.warning" : "20",
|
||||||
|
"battery.runtime.low" : "300",
|
||||||
|
"device.type" : "ups",
|
||||||
|
"ups.load" : "33",
|
||||||
|
"driver.parameter.port" : "auto",
|
||||||
|
"driver.name" : "usbhid-ups",
|
||||||
|
"input.transfer.high" : "0",
|
||||||
|
"ups.mfr" : "CPS",
|
||||||
|
"ups.test.result" : "No test initiated",
|
||||||
|
"output.voltage" : "229.0",
|
||||||
|
"ups.vendorid" : "0764",
|
||||||
|
"ups.realpower.nominal" : "360",
|
||||||
|
"device.model" : "DL650ELCD",
|
||||||
|
"battery.voltage.nominal" : "12",
|
||||||
|
"battery.type" : "PbAcid",
|
||||||
|
"ups.model" : "DL650ELCD",
|
||||||
|
"ups.beeper.status" : "enabled",
|
||||||
|
"driver.version.data" : "CyberPower HID 0.3",
|
||||||
|
"device.mfr" : "CPS",
|
||||||
|
"driver.parameter.pollinterval" : "5",
|
||||||
|
"ups.status" : "OL",
|
||||||
|
"battery.mfr.date" : "CPS",
|
||||||
|
"battery.charge.low" : "10",
|
||||||
|
"input.voltage" : "230.0",
|
||||||
|
"driver.version" : "SDS5-2-2015Q1branch-5619-150904",
|
||||||
|
"input.transfer.low" : "0",
|
||||||
|
"driver.parameter.pollfreq" : "30",
|
||||||
|
"driver.version.internal" : "0.38",
|
||||||
|
"ups.productid" : "0501",
|
||||||
|
"ups.timer.shutdown" : "-60",
|
||||||
|
"input.voltage.nominal" : "230",
|
||||||
|
"battery.voltage" : "9.1",
|
||||||
|
"battery.charge" : "100",
|
||||||
|
"ups.timer.start" : "-60",
|
||||||
|
"battery.runtime" : "850",
|
||||||
|
"ups.delay.start" : "30"
|
||||||
|
}
|
28
tests/fixtures/nut/blazer_usb.json
vendored
Normal file
28
tests/fixtures/nut/blazer_usb.json
vendored
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"input.voltage.fault" : "228.4",
|
||||||
|
"ups.status" : "OL",
|
||||||
|
"ups.productid" : "0000",
|
||||||
|
"ups.beeper.status" : "enabled",
|
||||||
|
"input.current.nominal" : "4.0",
|
||||||
|
"driver.name" : "blazer_usb",
|
||||||
|
"input.voltage" : "228.4",
|
||||||
|
"battery.voltage.low" : "20.80",
|
||||||
|
"battery.charge" : "100",
|
||||||
|
"driver.version.internal" : "0.11",
|
||||||
|
"input.frequency.nominal" : "50",
|
||||||
|
"battery.voltage.high" : "26.00",
|
||||||
|
"driver.parameter.port" : "auto",
|
||||||
|
"ups.type" : "offline / line interactive",
|
||||||
|
"driver.parameter.pollinterval" : "5",
|
||||||
|
"device.type" : "ups",
|
||||||
|
"output.voltage" : "228.4",
|
||||||
|
"input.frequency" : "50.1",
|
||||||
|
"input.voltage.nominal" : "230",
|
||||||
|
"ups.delay.shutdown" : "30",
|
||||||
|
"battery.voltage.nominal" : "24.0",
|
||||||
|
"ups.load" : "7",
|
||||||
|
"driver.version" : "DSM6-2-2-24922-broadwell-fmp-repack-24922-190507",
|
||||||
|
"ups.vendorid" : "0001",
|
||||||
|
"battery.voltage" : "27.00",
|
||||||
|
"ups.delay.start" : "180"
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue