mirror of
https://github.com/home-assistant/core.git
synced 2026-08-29 10:21:09 -05:00
57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
"""Tests for SNMP sensor platform setup behaviour."""
|
|
|
|
from unittest.mock import AsyncMock, patch
|
|
|
|
from pysnmp.proto.rfc1902 import Integer32
|
|
|
|
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
|
|
from homeassistant.components.snmp.sensor import SCAN_INTERVAL
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.setup import async_setup_component
|
|
from homeassistant.util import dt as dt_util
|
|
|
|
from tests.common import async_fire_time_changed
|
|
|
|
CONFIG = {
|
|
SENSOR_DOMAIN: {
|
|
"platform": "snmp",
|
|
"host": "192.168.1.32",
|
|
"baseoid": "1.3.6.1.4.1.2021.10.1.3.1",
|
|
},
|
|
}
|
|
|
|
|
|
async def test_setup_fetches_once(hass: HomeAssistant) -> None:
|
|
"""Test setup performs only one SNMP fetch."""
|
|
get_cmd = AsyncMock(return_value=(None, None, None, [[Integer32(13)]]))
|
|
|
|
with patch("homeassistant.components.snmp.sensor.get_cmd", get_cmd):
|
|
assert await async_setup_component(hass, SENSOR_DOMAIN, CONFIG)
|
|
await hass.async_block_till_done()
|
|
|
|
assert hass.states.get("sensor.snmp").state == "13"
|
|
assert get_cmd.call_count == 1
|
|
|
|
|
|
async def test_entity_recovers_when_device_unreachable(hass: HomeAssistant) -> None:
|
|
"""Test an entity unreachable at setup recovers on the next poll."""
|
|
get_cmd = AsyncMock(
|
|
side_effect=[
|
|
("No SNMP response received before timeout", None, None, None),
|
|
(None, None, None, [[Integer32(13)]]),
|
|
]
|
|
)
|
|
|
|
with patch("homeassistant.components.snmp.sensor.get_cmd", get_cmd):
|
|
assert await async_setup_component(hass, SENSOR_DOMAIN, CONFIG)
|
|
await hass.async_block_till_done()
|
|
|
|
state = hass.states.get("sensor.snmp")
|
|
assert state is not None
|
|
assert state.state == "unknown"
|
|
|
|
async_fire_time_changed(hass, dt_util.utcnow() + SCAN_INTERVAL)
|
|
await hass.async_block_till_done()
|
|
|
|
assert hass.states.get("sensor.snmp").state == "13"
|