1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-24 12:59:34 +00:00

async_get_url -> get_url (#35382)

This commit is contained in:
Franck Nijhof
2020-05-08 21:53:28 +02:00
committed by GitHub
parent 62f2520ee1
commit e3e3a113e9
25 changed files with 243 additions and 315 deletions

View File

@@ -6,11 +6,11 @@ from homeassistant.config import async_process_ha_core_config
from homeassistant.core import HomeAssistant
from homeassistant.helpers.network import (
NoURLAvailableError,
_async_get_cloud_url,
_async_get_deprecated_base_url,
_async_get_external_url,
_async_get_internal_url,
async_get_url,
_get_cloud_url,
_get_deprecated_base_url,
_get_external_url,
_get_internal_url,
get_url,
)
from tests.async_mock import Mock, patch
@@ -26,14 +26,14 @@ async def test_get_url_internal(hass: HomeAssistant):
)
assert hass.config.internal_url == "http://example.local:8123"
assert _async_get_internal_url(hass) == "http://example.local:8123"
assert _async_get_internal_url(hass, allow_ip=False) == "http://example.local:8123"
assert _get_internal_url(hass) == "http://example.local:8123"
assert _get_internal_url(hass, allow_ip=False) == "http://example.local:8123"
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, require_standard_port=True)
_get_internal_url(hass, require_standard_port=True)
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, require_ssl=True)
_get_internal_url(hass, require_ssl=True)
# Test with internal URL: https://example.local:8123
await async_process_ha_core_config(
@@ -41,14 +41,12 @@ async def test_get_url_internal(hass: HomeAssistant):
)
assert hass.config.internal_url == "https://example.local:8123"
assert _async_get_internal_url(hass) == "https://example.local:8123"
assert _async_get_internal_url(hass, allow_ip=False) == "https://example.local:8123"
assert (
_async_get_internal_url(hass, require_ssl=True) == "https://example.local:8123"
)
assert _get_internal_url(hass) == "https://example.local:8123"
assert _get_internal_url(hass, allow_ip=False) == "https://example.local:8123"
assert _get_internal_url(hass, require_ssl=True) == "https://example.local:8123"
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, require_standard_port=True)
_get_internal_url(hass, require_standard_port=True)
# Test with internal URL: http://example.local:80/
await async_process_ha_core_config(
@@ -56,15 +54,12 @@ async def test_get_url_internal(hass: HomeAssistant):
)
assert hass.config.internal_url == "http://example.local:80/"
assert _async_get_internal_url(hass) == "http://example.local"
assert _async_get_internal_url(hass, allow_ip=False) == "http://example.local"
assert (
_async_get_internal_url(hass, require_standard_port=True)
== "http://example.local"
)
assert _get_internal_url(hass) == "http://example.local"
assert _get_internal_url(hass, allow_ip=False) == "http://example.local"
assert _get_internal_url(hass, require_standard_port=True) == "http://example.local"
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, require_ssl=True)
_get_internal_url(hass, require_ssl=True)
# Test with internal URL: https://example.local:443
await async_process_ha_core_config(
@@ -72,13 +67,12 @@ async def test_get_url_internal(hass: HomeAssistant):
)
assert hass.config.internal_url == "https://example.local:443"
assert _async_get_internal_url(hass) == "https://example.local"
assert _async_get_internal_url(hass, allow_ip=False) == "https://example.local"
assert _get_internal_url(hass) == "https://example.local"
assert _get_internal_url(hass, allow_ip=False) == "https://example.local"
assert (
_async_get_internal_url(hass, require_standard_port=True)
== "https://example.local"
_get_internal_url(hass, require_standard_port=True) == "https://example.local"
)
assert _async_get_internal_url(hass, require_ssl=True) == "https://example.local"
assert _get_internal_url(hass, require_ssl=True) == "https://example.local"
# Test with internal URL: https://192.168.0.1
await async_process_ha_core_config(
@@ -86,15 +80,12 @@ async def test_get_url_internal(hass: HomeAssistant):
)
assert hass.config.internal_url == "https://192.168.0.1"
assert _async_get_internal_url(hass) == "https://192.168.0.1"
assert (
_async_get_internal_url(hass, require_standard_port=True)
== "https://192.168.0.1"
)
assert _async_get_internal_url(hass, require_ssl=True) == "https://192.168.0.1"
assert _get_internal_url(hass) == "https://192.168.0.1"
assert _get_internal_url(hass, require_standard_port=True) == "https://192.168.0.1"
assert _get_internal_url(hass, require_ssl=True) == "https://192.168.0.1"
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, allow_ip=False)
_get_internal_url(hass, allow_ip=False)
# Test with internal URL: http://192.168.0.1:8123
await async_process_ha_core_config(
@@ -102,16 +93,16 @@ async def test_get_url_internal(hass: HomeAssistant):
)
assert hass.config.internal_url == "http://192.168.0.1:8123"
assert _async_get_internal_url(hass) == "http://192.168.0.1:8123"
assert _get_internal_url(hass) == "http://192.168.0.1:8123"
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, require_standard_port=True)
_get_internal_url(hass, require_standard_port=True)
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, require_ssl=True)
_get_internal_url(hass, require_ssl=True)
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, allow_ip=False)
_get_internal_url(hass, allow_ip=False)
async def test_get_url_internal_fallback(hass: HomeAssistant):
@@ -121,60 +112,59 @@ async def test_get_url_internal_fallback(hass: HomeAssistant):
hass.config.api = Mock(
use_ssl=False, port=8123, deprecated_base_url=None, local_ip="192.168.123.123"
)
assert _async_get_internal_url(hass) == "http://192.168.123.123:8123"
assert _get_internal_url(hass) == "http://192.168.123.123:8123"
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, allow_ip=False)
_get_internal_url(hass, allow_ip=False)
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, require_standard_port=True)
_get_internal_url(hass, require_standard_port=True)
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, require_ssl=True)
_get_internal_url(hass, require_ssl=True)
hass.config.api = Mock(
use_ssl=False, port=80, deprecated_base_url=None, local_ip="192.168.123.123"
)
assert _async_get_internal_url(hass) == "http://192.168.123.123"
assert _get_internal_url(hass) == "http://192.168.123.123"
assert (
_async_get_internal_url(hass, require_standard_port=True)
== "http://192.168.123.123"
_get_internal_url(hass, require_standard_port=True) == "http://192.168.123.123"
)
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, allow_ip=False)
_get_internal_url(hass, allow_ip=False)
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, require_ssl=True)
_get_internal_url(hass, require_ssl=True)
hass.config.api = Mock(use_ssl=True, port=443, deprecated_base_url=None)
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass)
_get_internal_url(hass)
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, require_standard_port=True)
_get_internal_url(hass, require_standard_port=True)
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, allow_ip=False)
_get_internal_url(hass, allow_ip=False)
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, require_ssl=True)
_get_internal_url(hass, require_ssl=True)
# Do no accept any local loopback address as fallback
hass.config.api = Mock(
use_ssl=False, port=80, deprecated_base_url=None, local_ip="127.0.0.1"
)
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass)
_get_internal_url(hass)
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, require_standard_port=True)
_get_internal_url(hass, require_standard_port=True)
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, allow_ip=False)
_get_internal_url(hass, allow_ip=False)
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, require_ssl=True)
_get_internal_url(hass, require_ssl=True)
async def test_get_url_external(hass: HomeAssistant):
@@ -187,16 +177,16 @@ async def test_get_url_external(hass: HomeAssistant):
)
assert hass.config.external_url == "http://example.com:8123"
assert _async_get_external_url(hass) == "http://example.com:8123"
assert _async_get_external_url(hass, allow_cloud=False) == "http://example.com:8123"
assert _async_get_external_url(hass, allow_ip=False) == "http://example.com:8123"
assert _async_get_external_url(hass, prefer_cloud=True) == "http://example.com:8123"
assert _get_external_url(hass) == "http://example.com:8123"
assert _get_external_url(hass, allow_cloud=False) == "http://example.com:8123"
assert _get_external_url(hass, allow_ip=False) == "http://example.com:8123"
assert _get_external_url(hass, prefer_cloud=True) == "http://example.com:8123"
with pytest.raises(NoURLAvailableError):
_async_get_external_url(hass, require_standard_port=True)
_get_external_url(hass, require_standard_port=True)
with pytest.raises(NoURLAvailableError):
_async_get_external_url(hass, require_ssl=True)
_get_external_url(hass, require_ssl=True)
# Test with external URL: http://example.com:80/
await async_process_ha_core_config(
@@ -204,65 +194,56 @@ async def test_get_url_external(hass: HomeAssistant):
)
assert hass.config.external_url == "http://example.com:80/"
assert _async_get_external_url(hass) == "http://example.com"
assert _async_get_external_url(hass, allow_cloud=False) == "http://example.com"
assert _async_get_external_url(hass, allow_ip=False) == "http://example.com"
assert _async_get_external_url(hass, prefer_cloud=True) == "http://example.com"
assert (
_async_get_external_url(hass, require_standard_port=True)
== "http://example.com"
)
assert _get_external_url(hass) == "http://example.com"
assert _get_external_url(hass, allow_cloud=False) == "http://example.com"
assert _get_external_url(hass, allow_ip=False) == "http://example.com"
assert _get_external_url(hass, prefer_cloud=True) == "http://example.com"
assert _get_external_url(hass, require_standard_port=True) == "http://example.com"
with pytest.raises(NoURLAvailableError):
_async_get_external_url(hass, require_ssl=True)
_get_external_url(hass, require_ssl=True)
# Test with external url: https://example.com:443/
await async_process_ha_core_config(
hass, {"external_url": "https://example.com:443/"},
)
assert hass.config.external_url == "https://example.com:443/"
assert _async_get_external_url(hass) == "https://example.com"
assert _async_get_external_url(hass, allow_cloud=False) == "https://example.com"
assert _async_get_external_url(hass, allow_ip=False) == "https://example.com"
assert _async_get_external_url(hass, prefer_cloud=True) == "https://example.com"
assert _async_get_external_url(hass, require_ssl=False) == "https://example.com"
assert (
_async_get_external_url(hass, require_standard_port=True)
== "https://example.com"
)
assert _get_external_url(hass) == "https://example.com"
assert _get_external_url(hass, allow_cloud=False) == "https://example.com"
assert _get_external_url(hass, allow_ip=False) == "https://example.com"
assert _get_external_url(hass, prefer_cloud=True) == "https://example.com"
assert _get_external_url(hass, require_ssl=False) == "https://example.com"
assert _get_external_url(hass, require_standard_port=True) == "https://example.com"
# Test with external URL: https://example.com:80
await async_process_ha_core_config(
hass, {"external_url": "https://example.com:80"},
)
assert hass.config.external_url == "https://example.com:80"
assert _async_get_external_url(hass) == "https://example.com:80"
assert _async_get_external_url(hass, allow_cloud=False) == "https://example.com:80"
assert _async_get_external_url(hass, allow_ip=False) == "https://example.com:80"
assert _async_get_external_url(hass, prefer_cloud=True) == "https://example.com:80"
assert _async_get_external_url(hass, require_ssl=True) == "https://example.com:80"
assert _get_external_url(hass) == "https://example.com:80"
assert _get_external_url(hass, allow_cloud=False) == "https://example.com:80"
assert _get_external_url(hass, allow_ip=False) == "https://example.com:80"
assert _get_external_url(hass, prefer_cloud=True) == "https://example.com:80"
assert _get_external_url(hass, require_ssl=True) == "https://example.com:80"
with pytest.raises(NoURLAvailableError):
_async_get_external_url(hass, require_standard_port=True)
_get_external_url(hass, require_standard_port=True)
# Test with external URL: https://192.168.0.1
await async_process_ha_core_config(
hass, {"external_url": "https://192.168.0.1"},
)
assert hass.config.external_url == "https://192.168.0.1"
assert _async_get_external_url(hass) == "https://192.168.0.1"
assert _async_get_external_url(hass, allow_cloud=False) == "https://192.168.0.1"
assert _async_get_external_url(hass, prefer_cloud=True) == "https://192.168.0.1"
assert (
_async_get_external_url(hass, require_standard_port=True)
== "https://192.168.0.1"
)
assert _get_external_url(hass) == "https://192.168.0.1"
assert _get_external_url(hass, allow_cloud=False) == "https://192.168.0.1"
assert _get_external_url(hass, prefer_cloud=True) == "https://192.168.0.1"
assert _get_external_url(hass, require_standard_port=True) == "https://192.168.0.1"
with pytest.raises(NoURLAvailableError):
_async_get_external_url(hass, allow_ip=False)
_get_external_url(hass, allow_ip=False)
with pytest.raises(NoURLAvailableError):
_async_get_external_url(hass, require_ssl=True)
_get_external_url(hass, require_ssl=True)
async def test_get_cloud_url(hass: HomeAssistant):
@@ -275,7 +256,7 @@ async def test_get_cloud_url(hass: HomeAssistant):
"async_remote_ui_url",
return_value="https://example.nabu.casa",
):
assert _async_get_cloud_url(hass) == "https://example.nabu.casa"
assert _get_cloud_url(hass) == "https://example.nabu.casa"
with patch.object(
hass.components.cloud,
@@ -283,7 +264,7 @@ async def test_get_cloud_url(hass: HomeAssistant):
side_effect=cloud.CloudNotAvailable,
):
with pytest.raises(NoURLAvailableError):
_async_get_cloud_url(hass)
_get_cloud_url(hass)
async def test_get_external_url_cloud_fallback(hass: HomeAssistant):
@@ -296,7 +277,7 @@ async def test_get_external_url_cloud_fallback(hass: HomeAssistant):
)
assert hass.config.external_url == "http://1.1.1.1:8123"
assert _async_get_external_url(hass, prefer_cloud=True) == "http://1.1.1.1:8123"
assert _get_external_url(hass, prefer_cloud=True) == "http://1.1.1.1:8123"
# Add Cloud to the previous test
hass.config.components.add("cloud")
@@ -305,23 +286,13 @@ async def test_get_external_url_cloud_fallback(hass: HomeAssistant):
"async_remote_ui_url",
return_value="https://example.nabu.casa",
):
assert _async_get_external_url(hass, allow_cloud=False) == "http://1.1.1.1:8123"
assert _get_external_url(hass, allow_cloud=False) == "http://1.1.1.1:8123"
assert _get_external_url(hass, allow_ip=False) == "https://example.nabu.casa"
assert _get_external_url(hass, prefer_cloud=False) == "http://1.1.1.1:8123"
assert _get_external_url(hass, prefer_cloud=True) == "https://example.nabu.casa"
assert _get_external_url(hass, require_ssl=True) == "https://example.nabu.casa"
assert (
_async_get_external_url(hass, allow_ip=False) == "https://example.nabu.casa"
)
assert (
_async_get_external_url(hass, prefer_cloud=False) == "http://1.1.1.1:8123"
)
assert (
_async_get_external_url(hass, prefer_cloud=True)
== "https://example.nabu.casa"
)
assert (
_async_get_external_url(hass, require_ssl=True)
== "https://example.nabu.casa"
)
assert (
_async_get_external_url(hass, require_standard_port=True)
_get_external_url(hass, require_standard_port=True)
== "https://example.nabu.casa"
)
@@ -331,7 +302,7 @@ async def test_get_external_url_cloud_fallback(hass: HomeAssistant):
)
assert hass.config.external_url == "https://example.com"
assert _async_get_external_url(hass, prefer_cloud=True) == "https://example.com"
assert _get_external_url(hass, prefer_cloud=True) == "https://example.com"
# Add Cloud to the previous test
hass.config.components.add("cloud")
@@ -340,22 +311,16 @@ async def test_get_external_url_cloud_fallback(hass: HomeAssistant):
"async_remote_ui_url",
return_value="https://example.nabu.casa",
):
assert _async_get_external_url(hass, allow_cloud=False) == "https://example.com"
assert _async_get_external_url(hass, allow_ip=False) == "https://example.com"
assert _get_external_url(hass, allow_cloud=False) == "https://example.com"
assert _get_external_url(hass, allow_ip=False) == "https://example.com"
assert _get_external_url(hass, prefer_cloud=False) == "https://example.com"
assert _get_external_url(hass, prefer_cloud=True) == "https://example.nabu.casa"
assert _get_external_url(hass, require_ssl=True) == "https://example.com"
assert (
_async_get_external_url(hass, prefer_cloud=False) == "https://example.com"
_get_external_url(hass, require_standard_port=True) == "https://example.com"
)
assert (
_async_get_external_url(hass, prefer_cloud=True)
== "https://example.nabu.casa"
)
assert _async_get_external_url(hass, require_ssl=True) == "https://example.com"
assert (
_async_get_external_url(hass, require_standard_port=True)
== "https://example.com"
)
assert (
_async_get_external_url(hass, prefer_cloud=True, allow_cloud=False)
_get_external_url(hass, prefer_cloud=True, allow_cloud=False)
== "https://example.com"
)
@@ -366,16 +331,16 @@ async def test_get_url(hass: HomeAssistant):
assert hass.config.internal_url is None
with pytest.raises(NoURLAvailableError):
async_get_url(hass)
get_url(hass)
hass.config.api = Mock(
use_ssl=False, port=8123, deprecated_base_url=None, local_ip="192.168.123.123"
)
assert async_get_url(hass) == "http://192.168.123.123:8123"
assert async_get_url(hass, prefer_external=True) == "http://192.168.123.123:8123"
assert get_url(hass) == "http://192.168.123.123:8123"
assert get_url(hass, prefer_external=True) == "http://192.168.123.123:8123"
with pytest.raises(NoURLAvailableError):
async_get_url(hass, allow_internal=False)
get_url(hass, allow_internal=False)
# Test only external
hass.config.api = None
@@ -384,7 +349,7 @@ async def test_get_url(hass: HomeAssistant):
)
assert hass.config.external_url == "https://example.com"
assert hass.config.internal_url is None
assert async_get_url(hass) == "https://example.com"
assert get_url(hass) == "https://example.com"
# Test preference or allowance
await async_process_ha_core_config(
@@ -393,173 +358,166 @@ async def test_get_url(hass: HomeAssistant):
)
assert hass.config.external_url == "https://example.com"
assert hass.config.internal_url == "http://example.local"
assert async_get_url(hass) == "http://example.local"
assert async_get_url(hass, prefer_external=True) == "https://example.com"
assert async_get_url(hass, allow_internal=False) == "https://example.com"
assert get_url(hass) == "http://example.local"
assert get_url(hass, prefer_external=True) == "https://example.com"
assert get_url(hass, allow_internal=False) == "https://example.com"
assert (
async_get_url(hass, prefer_external=True, allow_external=False)
get_url(hass, prefer_external=True, allow_external=False)
== "http://example.local"
)
with pytest.raises(NoURLAvailableError):
async_get_url(hass, allow_external=False, require_ssl=True)
get_url(hass, allow_external=False, require_ssl=True)
with pytest.raises(NoURLAvailableError):
async_get_url(hass, allow_external=False, allow_internal=False)
get_url(hass, allow_external=False, allow_internal=False)
async def test_get_deprecated_base_url_internal(hass: HomeAssistant):
"""Test getting an internal instance URL from the deprecated base_url."""
# Test with SSL local URL
hass.config.api = Mock(deprecated_base_url="https://example.local")
assert _get_deprecated_base_url(hass, internal=True) == "https://example.local"
assert (
_async_get_deprecated_base_url(hass, internal=True) == "https://example.local"
)
assert (
_async_get_deprecated_base_url(hass, internal=True, allow_ip=False)
_get_deprecated_base_url(hass, internal=True, allow_ip=False)
== "https://example.local"
)
assert (
_async_get_deprecated_base_url(hass, internal=True, require_ssl=True)
_get_deprecated_base_url(hass, internal=True, require_ssl=True)
== "https://example.local"
)
assert (
_async_get_deprecated_base_url(hass, internal=True, require_standard_port=True)
_get_deprecated_base_url(hass, internal=True, require_standard_port=True)
== "https://example.local"
)
# Test with no SSL, local IP URL
hass.config.api = Mock(deprecated_base_url="http://10.10.10.10:8123")
assert (
_async_get_deprecated_base_url(hass, internal=True) == "http://10.10.10.10:8123"
)
assert _get_deprecated_base_url(hass, internal=True) == "http://10.10.10.10:8123"
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, internal=True, allow_ip=False)
_get_deprecated_base_url(hass, internal=True, allow_ip=False)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, internal=True, require_ssl=True)
_get_deprecated_base_url(hass, internal=True, require_ssl=True)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, internal=True, require_standard_port=True)
_get_deprecated_base_url(hass, internal=True, require_standard_port=True)
# Test with SSL, local IP URL
hass.config.api = Mock(deprecated_base_url="https://10.10.10.10")
assert _async_get_deprecated_base_url(hass, internal=True) == "https://10.10.10.10"
assert _get_deprecated_base_url(hass, internal=True) == "https://10.10.10.10"
assert (
_async_get_deprecated_base_url(hass, internal=True, require_ssl=True)
_get_deprecated_base_url(hass, internal=True, require_ssl=True)
== "https://10.10.10.10"
)
assert (
_async_get_deprecated_base_url(hass, internal=True, require_standard_port=True)
_get_deprecated_base_url(hass, internal=True, require_standard_port=True)
== "https://10.10.10.10"
)
# Test external URL
hass.config.api = Mock(deprecated_base_url="https://example.com")
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, internal=True)
_get_deprecated_base_url(hass, internal=True)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, internal=True, require_ssl=True)
_get_deprecated_base_url(hass, internal=True, require_ssl=True)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, internal=True, require_standard_port=True)
_get_deprecated_base_url(hass, internal=True, require_standard_port=True)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, internal=True, allow_ip=False)
_get_deprecated_base_url(hass, internal=True, allow_ip=False)
# Test with loopback
hass.config.api = Mock(deprecated_base_url="https://127.0.0.42")
with pytest.raises(NoURLAvailableError):
assert _async_get_deprecated_base_url(hass, internal=True)
assert _get_deprecated_base_url(hass, internal=True)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, internal=True, allow_ip=False)
_get_deprecated_base_url(hass, internal=True, allow_ip=False)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, internal=True, require_ssl=True)
_get_deprecated_base_url(hass, internal=True, require_ssl=True)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, internal=True, require_standard_port=True)
_get_deprecated_base_url(hass, internal=True, require_standard_port=True)
async def test_get_deprecated_base_url_external(hass: HomeAssistant):
"""Test getting an external instance URL from the deprecated base_url."""
# Test with SSL and external domain on standard port
hass.config.api = Mock(deprecated_base_url="https://example.com:443/")
assert _async_get_deprecated_base_url(hass) == "https://example.com"
assert _get_deprecated_base_url(hass) == "https://example.com"
assert _get_deprecated_base_url(hass, require_ssl=True) == "https://example.com"
assert (
_async_get_deprecated_base_url(hass, require_ssl=True) == "https://example.com"
)
assert (
_async_get_deprecated_base_url(hass, require_standard_port=True)
_get_deprecated_base_url(hass, require_standard_port=True)
== "https://example.com"
)
# Test without SSL and external domain on non-standard port
hass.config.api = Mock(deprecated_base_url="http://example.com:8123/")
assert _async_get_deprecated_base_url(hass) == "http://example.com:8123"
assert _get_deprecated_base_url(hass) == "http://example.com:8123"
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, require_ssl=True)
_get_deprecated_base_url(hass, require_ssl=True)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, require_standard_port=True)
_get_deprecated_base_url(hass, require_standard_port=True)
# Test SSL on external IP
hass.config.api = Mock(deprecated_base_url="https://1.1.1.1")
assert _async_get_deprecated_base_url(hass) == "https://1.1.1.1"
assert _async_get_deprecated_base_url(hass, require_ssl=True) == "https://1.1.1.1"
assert _get_deprecated_base_url(hass) == "https://1.1.1.1"
assert _get_deprecated_base_url(hass, require_ssl=True) == "https://1.1.1.1"
assert (
_async_get_deprecated_base_url(hass, require_standard_port=True)
== "https://1.1.1.1"
_get_deprecated_base_url(hass, require_standard_port=True) == "https://1.1.1.1"
)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, allow_ip=False)
_get_deprecated_base_url(hass, allow_ip=False)
# Test with private IP
hass.config.api = Mock(deprecated_base_url="https://10.10.10.10")
with pytest.raises(NoURLAvailableError):
assert _async_get_deprecated_base_url(hass)
assert _get_deprecated_base_url(hass)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, allow_ip=False)
_get_deprecated_base_url(hass, allow_ip=False)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, require_ssl=True)
_get_deprecated_base_url(hass, require_ssl=True)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, require_standard_port=True)
_get_deprecated_base_url(hass, require_standard_port=True)
# Test with local domain
hass.config.api = Mock(deprecated_base_url="https://example.local")
with pytest.raises(NoURLAvailableError):
assert _async_get_deprecated_base_url(hass)
assert _get_deprecated_base_url(hass)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, allow_ip=False)
_get_deprecated_base_url(hass, allow_ip=False)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, require_ssl=True)
_get_deprecated_base_url(hass, require_ssl=True)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, require_standard_port=True)
_get_deprecated_base_url(hass, require_standard_port=True)
# Test with loopback
hass.config.api = Mock(deprecated_base_url="https://127.0.0.42")
with pytest.raises(NoURLAvailableError):
assert _async_get_deprecated_base_url(hass)
assert _get_deprecated_base_url(hass)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, allow_ip=False)
_get_deprecated_base_url(hass, allow_ip=False)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, require_ssl=True)
_get_deprecated_base_url(hass, require_ssl=True)
with pytest.raises(NoURLAvailableError):
_async_get_deprecated_base_url(hass, require_standard_port=True)
_get_deprecated_base_url(hass, require_standard_port=True)
async def test_get_internal_url_with_base_url_fallback(hass: HomeAssistant):
@@ -568,64 +526,60 @@ async def test_get_internal_url_with_base_url_fallback(hass: HomeAssistant):
use_ssl=False, port=8123, deprecated_base_url=None, local_ip="192.168.123.123"
)
assert hass.config.internal_url is None
assert _async_get_internal_url(hass) == "http://192.168.123.123:8123"
assert _get_internal_url(hass) == "http://192.168.123.123:8123"
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, allow_ip=False)
_get_internal_url(hass, allow_ip=False)
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, require_standard_port=True)
_get_internal_url(hass, require_standard_port=True)
with pytest.raises(NoURLAvailableError):
_async_get_internal_url(hass, require_ssl=True)
_get_internal_url(hass, require_ssl=True)
# Add base_url
hass.config.api = Mock(
use_ssl=False, port=8123, deprecated_base_url="https://example.local"
)
assert _async_get_internal_url(hass) == "https://example.local"
assert _async_get_internal_url(hass, allow_ip=False) == "https://example.local"
assert _get_internal_url(hass) == "https://example.local"
assert _get_internal_url(hass, allow_ip=False) == "https://example.local"
assert (
_async_get_internal_url(hass, require_standard_port=True)
== "https://example.local"
_get_internal_url(hass, require_standard_port=True) == "https://example.local"
)
assert _async_get_internal_url(hass, require_ssl=True) == "https://example.local"
assert _get_internal_url(hass, require_ssl=True) == "https://example.local"
# Add internal URL
await async_process_ha_core_config(
hass, {"internal_url": "https://internal.local"},
)
assert _async_get_internal_url(hass) == "https://internal.local"
assert _async_get_internal_url(hass, allow_ip=False) == "https://internal.local"
assert _get_internal_url(hass) == "https://internal.local"
assert _get_internal_url(hass, allow_ip=False) == "https://internal.local"
assert (
_async_get_internal_url(hass, require_standard_port=True)
== "https://internal.local"
_get_internal_url(hass, require_standard_port=True) == "https://internal.local"
)
assert _async_get_internal_url(hass, require_ssl=True) == "https://internal.local"
assert _get_internal_url(hass, require_ssl=True) == "https://internal.local"
# Add internal URL, mixed results
await async_process_ha_core_config(
hass, {"internal_url": "http://internal.local:8123"},
)
assert _async_get_internal_url(hass) == "http://internal.local:8123"
assert _async_get_internal_url(hass, allow_ip=False) == "http://internal.local:8123"
assert _get_internal_url(hass) == "http://internal.local:8123"
assert _get_internal_url(hass, allow_ip=False) == "http://internal.local:8123"
assert (
_async_get_internal_url(hass, require_standard_port=True)
== "https://example.local"
_get_internal_url(hass, require_standard_port=True) == "https://example.local"
)
assert _async_get_internal_url(hass, require_ssl=True) == "https://example.local"
assert _get_internal_url(hass, require_ssl=True) == "https://example.local"
# Add internal URL set to an IP
await async_process_ha_core_config(
hass, {"internal_url": "http://10.10.10.10:8123"},
)
assert _async_get_internal_url(hass) == "http://10.10.10.10:8123"
assert _async_get_internal_url(hass, allow_ip=False) == "https://example.local"
assert _get_internal_url(hass) == "http://10.10.10.10:8123"
assert _get_internal_url(hass, allow_ip=False) == "https://example.local"
assert (
_async_get_internal_url(hass, require_standard_port=True)
== "https://example.local"
_get_internal_url(hass, require_standard_port=True) == "https://example.local"
)
assert _async_get_internal_url(hass, require_ssl=True) == "https://example.local"
assert _get_internal_url(hass, require_ssl=True) == "https://example.local"
async def test_get_external_url_with_base_url_fallback(hass: HomeAssistant):
@@ -634,58 +588,41 @@ async def test_get_external_url_with_base_url_fallback(hass: HomeAssistant):
assert hass.config.internal_url is None
with pytest.raises(NoURLAvailableError):
_async_get_external_url(hass)
_get_external_url(hass)
# Test with SSL and external domain on standard port
hass.config.api = Mock(deprecated_base_url="https://example.com:443/")
assert _async_get_external_url(hass) == "https://example.com"
assert _async_get_external_url(hass, allow_ip=False) == "https://example.com"
assert _async_get_external_url(hass, require_ssl=True) == "https://example.com"
assert (
_async_get_external_url(hass, require_standard_port=True)
== "https://example.com"
)
assert _get_external_url(hass) == "https://example.com"
assert _get_external_url(hass, allow_ip=False) == "https://example.com"
assert _get_external_url(hass, require_ssl=True) == "https://example.com"
assert _get_external_url(hass, require_standard_port=True) == "https://example.com"
# Add external URL
await async_process_ha_core_config(
hass, {"external_url": "https://external.example.com"},
)
assert _async_get_external_url(hass) == "https://external.example.com"
assert _get_external_url(hass) == "https://external.example.com"
assert _get_external_url(hass, allow_ip=False) == "https://external.example.com"
assert (
_async_get_external_url(hass, allow_ip=False) == "https://external.example.com"
)
assert (
_async_get_external_url(hass, require_standard_port=True)
== "https://external.example.com"
)
assert (
_async_get_external_url(hass, require_ssl=True)
_get_external_url(hass, require_standard_port=True)
== "https://external.example.com"
)
assert _get_external_url(hass, require_ssl=True) == "https://external.example.com"
# Add external URL, mixed results
await async_process_ha_core_config(
hass, {"external_url": "http://external.example.com:8123"},
)
assert _async_get_external_url(hass) == "http://external.example.com:8123"
assert (
_async_get_external_url(hass, allow_ip=False)
== "http://external.example.com:8123"
)
assert (
_async_get_external_url(hass, require_standard_port=True)
== "https://example.com"
)
assert _async_get_external_url(hass, require_ssl=True) == "https://example.com"
assert _get_external_url(hass) == "http://external.example.com:8123"
assert _get_external_url(hass, allow_ip=False) == "http://external.example.com:8123"
assert _get_external_url(hass, require_standard_port=True) == "https://example.com"
assert _get_external_url(hass, require_ssl=True) == "https://example.com"
# Add external URL set to an IP
await async_process_ha_core_config(
hass, {"external_url": "http://1.1.1.1:8123"},
)
assert _async_get_external_url(hass) == "http://1.1.1.1:8123"
assert _async_get_external_url(hass, allow_ip=False) == "https://example.com"
assert (
_async_get_external_url(hass, require_standard_port=True)
== "https://example.com"
)
assert _async_get_external_url(hass, require_ssl=True) == "https://example.com"
assert _get_external_url(hass) == "http://1.1.1.1:8123"
assert _get_external_url(hass, allow_ip=False) == "https://example.com"
assert _get_external_url(hass, require_standard_port=True) == "https://example.com"
assert _get_external_url(hass, require_ssl=True) == "https://example.com"