mirror of
https://github.com/esphome/esphome.git
synced 2026-06-24 13:45:15 +00:00
[core] Honor transferred address cache in has_resolvable_address (#17025)
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
committed by
Jesse Hills
parent
e2157a3d26
commit
ac5a28301a
@@ -504,6 +504,12 @@ def has_resolvable_address() -> bool:
|
|||||||
if has_ip_address():
|
if has_ip_address():
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
# The dashboard pre-resolves the device and passes the IPs via
|
||||||
|
# --mdns-address-cache/--dns-address-cache; honor a cached address even when the
|
||||||
|
# device has mDNS disabled (e.g. a .local host found via ping).
|
||||||
|
if CORE.address_cache and CORE.address_cache.get_addresses(CORE.address):
|
||||||
|
return True
|
||||||
|
|
||||||
if has_mdns():
|
if has_mdns():
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|||||||
@@ -689,6 +689,25 @@ def test_choose_upload_log_host_with_ota_device_with_ota_config() -> None:
|
|||||||
assert result == ["192.168.1.100"]
|
assert result == ["192.168.1.100"]
|
||||||
|
|
||||||
|
|
||||||
|
def test_choose_upload_log_host_ota_mdns_disabled_uses_address_cache() -> None:
|
||||||
|
"""A .local device with mDNS disabled resolves via the dashboard-supplied cache."""
|
||||||
|
setup_core(
|
||||||
|
config={
|
||||||
|
CONF_API: {},
|
||||||
|
CONF_OTA: [{CONF_PLATFORM: CONF_ESPHOME}],
|
||||||
|
CONF_MDNS: {CONF_DISABLED: True},
|
||||||
|
},
|
||||||
|
address="esp32-a1s.local",
|
||||||
|
)
|
||||||
|
CORE.address_cache = AddressCache(mdns_cache={"esp32-a1s.local": ["192.168.1.50"]})
|
||||||
|
|
||||||
|
for purpose in (Purpose.LOGGING, Purpose.UPLOADING):
|
||||||
|
result = choose_upload_log_host(
|
||||||
|
default="OTA", check_default=None, purpose=purpose
|
||||||
|
)
|
||||||
|
assert result == ["192.168.1.50"]
|
||||||
|
|
||||||
|
|
||||||
def test_choose_upload_log_host_with_ota_device_with_api_config() -> None:
|
def test_choose_upload_log_host_with_ota_device_with_api_config() -> None:
|
||||||
"""Test OTA device when API is configured (no upload without OTA in config)."""
|
"""Test OTA device when API is configured (no upload without OTA in config)."""
|
||||||
setup_core(config={CONF_API: {}}, address="192.168.1.100")
|
setup_core(config={CONF_API: {}}, address="192.168.1.100")
|
||||||
@@ -3135,6 +3154,22 @@ def test_has_resolvable_address() -> None:
|
|||||||
setup_core(config={CONF_MDNS: {CONF_DISABLED: True}}, address=None)
|
setup_core(config={CONF_MDNS: {CONF_DISABLED: True}}, address=None)
|
||||||
assert has_resolvable_address() is False
|
assert has_resolvable_address() is False
|
||||||
|
|
||||||
|
# mDNS disabled + .local, but the dashboard cached the address -> resolvable
|
||||||
|
setup_core(
|
||||||
|
config={CONF_MDNS: {CONF_DISABLED: True}}, address="esphome-device.local"
|
||||||
|
)
|
||||||
|
CORE.address_cache = AddressCache(
|
||||||
|
mdns_cache={"esphome-device.local": ["192.168.1.100"]}
|
||||||
|
)
|
||||||
|
assert has_resolvable_address() is True
|
||||||
|
|
||||||
|
# mDNS disabled + .local, cache present but missing this host -> not resolvable
|
||||||
|
setup_core(
|
||||||
|
config={CONF_MDNS: {CONF_DISABLED: True}}, address="esphome-device.local"
|
||||||
|
)
|
||||||
|
CORE.address_cache = AddressCache(mdns_cache={"other-device.local": ["10.0.0.1"]})
|
||||||
|
assert has_resolvable_address() is False
|
||||||
|
|
||||||
|
|
||||||
def test_has_name_add_mac_suffix() -> None:
|
def test_has_name_add_mac_suffix() -> None:
|
||||||
"""Test has_name_add_mac_suffix function."""
|
"""Test has_name_add_mac_suffix function."""
|
||||||
|
|||||||
Reference in New Issue
Block a user