mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2026-07-24 10:48:11 +00:00
chore: improve error msg on home assistant add-on port config (#1186)
When running as a Home Assistant add-on the ports shall not be changed as this would break config.yaml that is used by Home Assistant. Prevent the change and return an error message. Extra fixes: * fix: EOS configuration initialisation by cli under EOSdash. Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com>
This commit is contained in:
@@ -80,7 +80,7 @@ def test_computed_paths(config_eos):
|
||||
def test_config_from_env(monkeypatch, config_eos):
|
||||
"""Test configuration from env."""
|
||||
assert config_eos.server.port == 8503
|
||||
assert config_eos.server.eosdash_port is None
|
||||
assert config_eos.server.eosdash_port == 8504
|
||||
|
||||
monkeypatch.setenv("EOS_SERVER__PORT", "8553")
|
||||
monkeypatch.setenv("EOS_SERVER__EOSDASH_PORT", "8555")
|
||||
|
||||
@@ -11,9 +11,16 @@ import pytest
|
||||
import requests
|
||||
from conftest import cleanup_eos_eosdash
|
||||
from loguru import logger
|
||||
from pydantic import ValidationError
|
||||
|
||||
from akkudoktoreos.config.configabc import is_home_assistant_addon
|
||||
from akkudoktoreos.core.version import __version__
|
||||
from akkudoktoreos.server.server import get_default_host, wait_for_port_free
|
||||
from akkudoktoreos.server.server import (
|
||||
ServerCommonSettings,
|
||||
get_default_host,
|
||||
get_default_port,
|
||||
wait_for_port_free,
|
||||
)
|
||||
|
||||
|
||||
class TestServer:
|
||||
@@ -45,6 +52,38 @@ class TestServer:
|
||||
assert str(data_ouput_path).startswith(eos_dir)
|
||||
|
||||
|
||||
class TestServerSettingsValidation:
|
||||
"""Test the port restrictions in ServerCommonSettings when running as HA addon."""
|
||||
|
||||
def test_ha_addon_default_ports_ok(self, config_eos, monkeypatch):
|
||||
"""Default ports are accepted in HA addon mode."""
|
||||
monkeypatch.setattr('akkudoktoreos.server.server.is_home_assistant_addon', lambda: True)
|
||||
assert config_eos.server.port == get_default_port() # 8503
|
||||
assert config_eos.server.eosdash_port == get_default_port() + 1 # 8504
|
||||
|
||||
def test_server_port_restriction_in_ha_addon(self, config_eos, monkeypatch):
|
||||
"""Server port must be the default (8503) in HA addon mode."""
|
||||
monkeypatch.setattr('akkudoktoreos.server.server.is_home_assistant_addon', lambda: True)
|
||||
with pytest.raises(ValidationError) as excinfo:
|
||||
config_eos.server.port = 9000
|
||||
assert "Server port number `8503` for Home Assistant add-on can not be changed" in str(excinfo.value)
|
||||
|
||||
def test_eosdash_port_restriction_in_ha_addon(self, config_eos, monkeypatch):
|
||||
"""EOSdash port must be the default (8504) in HA addon mode."""
|
||||
monkeypatch.setattr('akkudoktoreos.server.server.is_home_assistant_addon', lambda: True)
|
||||
with pytest.raises(ValidationError) as excinfo:
|
||||
config_eos.server.eosdash_port = 9001
|
||||
assert "EOSdash port number `8504` for Home Assistant add-on can not be changed" in str(excinfo.value)
|
||||
|
||||
def test_ports_allowed_when_not_ha_addon(self, config_eos):
|
||||
"""Custom ports are allowed when not in HA addon mode."""
|
||||
# is_home_assistant_addon() returns False by default in this test environment
|
||||
config_eos.server.port = 9000
|
||||
config_eos.server.eosdash_port = 9001
|
||||
assert config_eos.server.port == 9000
|
||||
assert config_eos.server.eosdash_port == 9001
|
||||
|
||||
|
||||
class TestServerStartStop:
|
||||
|
||||
@pytest.mark.asyncio
|
||||
|
||||
@@ -7,11 +7,11 @@
|
||||
|
||||
| Name | Environment Variable | Type | Read-Only | Default | Description |
|
||||
| ---- | -------------------- | ---- | --------- | ------- | ----------- |
|
||||
| eosdash_host | `EOS_SERVER__EOSDASH_HOST` | `Optional[str]` | `rw` | `None` | EOSdash server IP address. Defaults to EOS server IP address. |
|
||||
| eosdash_port | `EOS_SERVER__EOSDASH_PORT` | `Optional[int]` | `rw` | `None` | EOSdash server IP port number. Defaults to EOS server IP port number + 1. |
|
||||
| eosdash_host | `EOS_SERVER__EOSDASH_HOST` | `str` | `rw` | `127.0.0.1` | EOSdash server IP address. Defaults to EOS server IP address. |
|
||||
| eosdash_port | `EOS_SERVER__EOSDASH_PORT` | `int` | `rw` | `8504` | EOSdash server IP port number. Defaults to 8504. |
|
||||
| eosdash_supervise_interval_sec | `EOS_SERVER__EOSDASH_SUPERVISE_INTERVAL_SEC` | `int` | `rw` | `10` | Supervision interval for EOS server to supervise EOSdash [seconds]. |
|
||||
| host | `EOS_SERVER__HOST` | `Optional[str]` | `rw` | `127.0.0.1` | EOS server IP address. Defaults to 127.0.0.1. |
|
||||
| port | `EOS_SERVER__PORT` | `Optional[int]` | `rw` | `8503` | EOS server IP port number. Defaults to 8503. |
|
||||
| host | `EOS_SERVER__HOST` | `str` | `rw` | `127.0.0.1` | EOS server IP address. Defaults to 127.0.0.1. |
|
||||
| port | `EOS_SERVER__PORT` | `int` | `rw` | `8503` | EOS server IP port number. Defaults to 8503. |
|
||||
| reload | `EOS_SERVER__RELOAD` | `Optional[bool]` | `rw` | `False` | Enable server auto-reload for debugging or development. Default is False. Monitors the package directory for changes and reloads the server. |
|
||||
| run_as_user | `EOS_SERVER__RUN_AS_USER` | `Optional[str]` | `rw` | `None` | The name of the target user to switch to. If ``None`` (default), the current effective user is used and no privilege change is attempted. |
|
||||
| startup_eosdash | `EOS_SERVER__STARTUP_EOSDASH` | `Optional[bool]` | `rw` | `True` | EOS server to start EOSdash server. Defaults to True. |
|
||||
|
||||
5
tests/testdata/eos_config_andreas_now.json
vendored
5
tests/testdata/eos_config_andreas_now.json
vendored
@@ -77,7 +77,6 @@
|
||||
"server": {
|
||||
"host": "0.0.0.0",
|
||||
"verbose": true,
|
||||
"eosdash_host": "0.0.0.0",
|
||||
"eosdash_port": 8504
|
||||
"eosdash_host": "0.0.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
3
tests/testdata/eos_config_minimal_now.json
vendored
3
tests/testdata/eos_config_minimal_now.json
vendored
@@ -14,7 +14,6 @@
|
||||
},
|
||||
"server": {
|
||||
"host": "0.0.0.0",
|
||||
"eosdash_host": "0.0.0.0",
|
||||
"eosdash_port": 8504
|
||||
"eosdash_host": "0.0.0.0"
|
||||
}
|
||||
}
|
||||
6
tests/testdata/eos_config_stripped.json
vendored
6
tests/testdata/eos_config_stripped.json
vendored
@@ -121,9 +121,5 @@
|
||||
},
|
||||
"weather": {
|
||||
"provider": "BrightSky"
|
||||
},
|
||||
"server": {
|
||||
"eosdash_host": "127.0.0.1",
|
||||
"eosdash_port": 8504
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user