mirror of
https://github.com/home-assistant/core.git
synced 2025-04-25 17:57:55 +00:00
Add tests DNS IP (#82059)
This commit is contained in:
parent
ae436d46fc
commit
48f6c9a486
@ -234,8 +234,6 @@ omit =
|
|||||||
homeassistant/components/dlib_face_detect/image_processing.py
|
homeassistant/components/dlib_face_detect/image_processing.py
|
||||||
homeassistant/components/dlib_face_identify/image_processing.py
|
homeassistant/components/dlib_face_identify/image_processing.py
|
||||||
homeassistant/components/dlink/switch.py
|
homeassistant/components/dlink/switch.py
|
||||||
homeassistant/components/dnsip/__init__.py
|
|
||||||
homeassistant/components/dnsip/sensor.py
|
|
||||||
homeassistant/components/dominos/*
|
homeassistant/components/dominos/*
|
||||||
homeassistant/components/doods/*
|
homeassistant/components/doods/*
|
||||||
homeassistant/components/doorbird/__init__.py
|
homeassistant/components/doorbird/__init__.py
|
||||||
|
@ -1 +1,37 @@
|
|||||||
"""Tests for the dnsip integration."""
|
"""Tests for the dnsip integration."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
|
||||||
|
class QueryResult:
|
||||||
|
"""Return Query results."""
|
||||||
|
|
||||||
|
host = "1.2.3.4"
|
||||||
|
ttl = 60
|
||||||
|
|
||||||
|
|
||||||
|
class RetrieveDNS:
|
||||||
|
"""Return list of test information."""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self, nameservers: list[str] | None = None, error: Exception | None = None
|
||||||
|
) -> None:
|
||||||
|
"""Initialize DNS class."""
|
||||||
|
if nameservers:
|
||||||
|
self.nameservers = nameservers
|
||||||
|
self._nameservers = ["1.2.3.4"]
|
||||||
|
self.error = error
|
||||||
|
|
||||||
|
async def query(self, hostname, qtype) -> dict[str, str]:
|
||||||
|
"""Return information."""
|
||||||
|
if self.error:
|
||||||
|
raise self.error
|
||||||
|
return [QueryResult]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def nameservers(self) -> list[str]:
|
||||||
|
"""Return nameserver."""
|
||||||
|
return self._nameservers
|
||||||
|
|
||||||
|
@nameservers.setter
|
||||||
|
def nameservers(self, value: list[str]) -> None:
|
||||||
|
self._nameservers = value
|
||||||
|
@ -20,23 +20,11 @@ from homeassistant.const import CONF_NAME
|
|||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.data_entry_flow import FlowResultType
|
from homeassistant.data_entry_flow import FlowResultType
|
||||||
|
|
||||||
|
from . import RetrieveDNS
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
|
|
||||||
|
|
||||||
class RetrieveDNS:
|
|
||||||
"""Return list of test information."""
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
async def query(hostname, qtype) -> dict[str, str]:
|
|
||||||
"""Return information."""
|
|
||||||
return {"hostname": "1.2.3.4"}
|
|
||||||
|
|
||||||
@property
|
|
||||||
def nameservers(self) -> list[str]:
|
|
||||||
"""Return nameserver."""
|
|
||||||
return ["1.2.3.4"]
|
|
||||||
|
|
||||||
|
|
||||||
async def test_form(hass: HomeAssistant) -> None:
|
async def test_form(hass: HomeAssistant) -> None:
|
||||||
"""Test we get the form."""
|
"""Test we get the form."""
|
||||||
|
|
||||||
@ -164,12 +152,13 @@ async def test_flow_already_exist(hass: HomeAssistant) -> None:
|
|||||||
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
dns_mock = RetrieveDNS()
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.dnsip.async_setup_entry",
|
"homeassistant.components.dnsip.async_setup_entry",
|
||||||
return_value=True,
|
return_value=True,
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.dnsip.config_flow.aiodns.DNSResolver",
|
"homeassistant.components.dnsip.config_flow.aiodns.DNSResolver",
|
||||||
return_value=RetrieveDNS,
|
return_value=dns_mock,
|
||||||
):
|
):
|
||||||
result2 = await hass.config_entries.flow.async_configure(
|
result2 = await hass.config_entries.flow.async_configure(
|
||||||
result["flow_id"],
|
result["flow_id"],
|
||||||
@ -204,9 +193,6 @@ async def test_options_flow(hass: HomeAssistant) -> None:
|
|||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.dnsip.config_flow.aiodns.DNSResolver",
|
"homeassistant.components.dnsip.config_flow.aiodns.DNSResolver",
|
||||||
return_value=RetrieveDNS(),
|
return_value=RetrieveDNS(),
|
||||||
), patch(
|
|
||||||
"homeassistant.components.dnsip.async_setup_entry",
|
|
||||||
return_value=True,
|
|
||||||
):
|
):
|
||||||
assert await hass.config_entries.async_setup(entry.entry_id)
|
assert await hass.config_entries.async_setup(entry.entry_id)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
@ -223,6 +209,7 @@ async def test_options_flow(hass: HomeAssistant) -> None:
|
|||||||
CONF_RESOLVER_IPV6: "2001:4860:4860::8888",
|
CONF_RESOLVER_IPV6: "2001:4860:4860::8888",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == FlowResultType.CREATE_ENTRY
|
assert result["type"] == FlowResultType.CREATE_ENTRY
|
||||||
assert result["data"] == {
|
assert result["data"] == {
|
||||||
@ -230,6 +217,8 @@ async def test_options_flow(hass: HomeAssistant) -> None:
|
|||||||
"resolver_ipv6": "2001:4860:4860::8888",
|
"resolver_ipv6": "2001:4860:4860::8888",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert entry.state == config_entries.ConfigEntryState.LOADED
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"p_input",
|
"p_input",
|
||||||
|
54
tests/components/dnsip/test_init.py
Normal file
54
tests/components/dnsip/test_init.py
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
"""Test for DNS IP component Init."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from homeassistant import config_entries
|
||||||
|
from homeassistant.components.dnsip.const import (
|
||||||
|
CONF_HOSTNAME,
|
||||||
|
CONF_IPV4,
|
||||||
|
CONF_IPV6,
|
||||||
|
CONF_RESOLVER,
|
||||||
|
CONF_RESOLVER_IPV6,
|
||||||
|
DOMAIN,
|
||||||
|
)
|
||||||
|
from homeassistant.config_entries import SOURCE_USER
|
||||||
|
from homeassistant.const import CONF_NAME
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
|
from . import RetrieveDNS
|
||||||
|
|
||||||
|
from tests.common import MockConfigEntry
|
||||||
|
|
||||||
|
|
||||||
|
async def test_load_unload_entry(hass: HomeAssistant) -> None:
|
||||||
|
"""Test load and unload an entry."""
|
||||||
|
entry = MockConfigEntry(
|
||||||
|
domain=DOMAIN,
|
||||||
|
source=SOURCE_USER,
|
||||||
|
data={
|
||||||
|
CONF_HOSTNAME: "home-assistant.io",
|
||||||
|
CONF_NAME: "home-assistant.io",
|
||||||
|
CONF_IPV4: True,
|
||||||
|
CONF_IPV6: False,
|
||||||
|
},
|
||||||
|
options={
|
||||||
|
CONF_RESOLVER: "208.67.222.222",
|
||||||
|
CONF_RESOLVER_IPV6: "2620:0:ccc::2",
|
||||||
|
},
|
||||||
|
entry_id="1",
|
||||||
|
unique_id="home-assistant.io",
|
||||||
|
)
|
||||||
|
entry.add_to_hass(hass)
|
||||||
|
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.dnsip.config_flow.aiodns.DNSResolver",
|
||||||
|
return_value=RetrieveDNS(),
|
||||||
|
):
|
||||||
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert entry.state == config_entries.ConfigEntryState.LOADED
|
||||||
|
assert await hass.config_entries.async_unload(entry.entry_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
assert entry.state is config_entries.ConfigEntryState.NOT_LOADED
|
105
tests/components/dnsip/test_sensor.py
Normal file
105
tests/components/dnsip/test_sensor.py
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
"""The test for the DNS IP sensor platform."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from datetime import timedelta
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from aiodns.error import DNSError
|
||||||
|
|
||||||
|
from homeassistant.components.dnsip.const import (
|
||||||
|
CONF_HOSTNAME,
|
||||||
|
CONF_IPV4,
|
||||||
|
CONF_IPV6,
|
||||||
|
CONF_RESOLVER,
|
||||||
|
CONF_RESOLVER_IPV6,
|
||||||
|
DOMAIN,
|
||||||
|
)
|
||||||
|
from homeassistant.config_entries import SOURCE_USER
|
||||||
|
from homeassistant.const import CONF_NAME, STATE_UNAVAILABLE
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
|
from homeassistant.util import dt
|
||||||
|
|
||||||
|
from . import RetrieveDNS
|
||||||
|
|
||||||
|
from tests.common import MockConfigEntry, async_fire_time_changed
|
||||||
|
|
||||||
|
|
||||||
|
async def test_sensor(hass: HomeAssistant) -> None:
|
||||||
|
"""Test the DNS IP sensor."""
|
||||||
|
entry = MockConfigEntry(
|
||||||
|
domain=DOMAIN,
|
||||||
|
source=SOURCE_USER,
|
||||||
|
data={
|
||||||
|
CONF_HOSTNAME: "home-assistant.io",
|
||||||
|
CONF_NAME: "home-assistant.io",
|
||||||
|
CONF_IPV4: True,
|
||||||
|
CONF_IPV6: True,
|
||||||
|
},
|
||||||
|
options={
|
||||||
|
CONF_RESOLVER: "208.67.222.222",
|
||||||
|
CONF_RESOLVER_IPV6: "2620:0:ccc::2",
|
||||||
|
},
|
||||||
|
entry_id="1",
|
||||||
|
unique_id="home-assistant.io",
|
||||||
|
)
|
||||||
|
entry.add_to_hass(hass)
|
||||||
|
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.dnsip.sensor.aiodns.DNSResolver",
|
||||||
|
return_value=RetrieveDNS(),
|
||||||
|
):
|
||||||
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
state1 = hass.states.get("sensor.home_assistant_io")
|
||||||
|
state2 = hass.states.get("sensor.home_assistant_io_ipv6")
|
||||||
|
|
||||||
|
assert state1.state == "1.2.3.4"
|
||||||
|
assert state2.state == "1.2.3.4"
|
||||||
|
|
||||||
|
|
||||||
|
async def test_sensor_no_response(hass: HomeAssistant) -> None:
|
||||||
|
"""Test the DNS IP sensor with DNS error."""
|
||||||
|
entry = MockConfigEntry(
|
||||||
|
domain=DOMAIN,
|
||||||
|
source=SOURCE_USER,
|
||||||
|
data={
|
||||||
|
CONF_HOSTNAME: "home-assistant.io",
|
||||||
|
CONF_NAME: "home-assistant.io",
|
||||||
|
CONF_IPV4: True,
|
||||||
|
CONF_IPV6: False,
|
||||||
|
},
|
||||||
|
options={
|
||||||
|
CONF_RESOLVER: "208.67.222.222",
|
||||||
|
CONF_RESOLVER_IPV6: "2620:0:ccc::2",
|
||||||
|
},
|
||||||
|
entry_id="1",
|
||||||
|
unique_id="home-assistant.io",
|
||||||
|
)
|
||||||
|
entry.add_to_hass(hass)
|
||||||
|
|
||||||
|
dns_mock = RetrieveDNS()
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.dnsip.sensor.aiodns.DNSResolver",
|
||||||
|
return_value=dns_mock,
|
||||||
|
):
|
||||||
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
state = hass.states.get("sensor.home_assistant_io")
|
||||||
|
|
||||||
|
assert state.state == "1.2.3.4"
|
||||||
|
|
||||||
|
dns_mock.error = DNSError()
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.dnsip.sensor.aiodns.DNSResolver",
|
||||||
|
return_value=dns_mock,
|
||||||
|
):
|
||||||
|
async_fire_time_changed(
|
||||||
|
hass,
|
||||||
|
dt.utcnow() + timedelta(minutes=10),
|
||||||
|
)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
state = hass.states.get("sensor.home_assistant_io")
|
||||||
|
assert state.state == STATE_UNAVAILABLE
|
Loading…
x
Reference in New Issue
Block a user