feat: 添加启动绑定地址解析功能,支持从配置文件和环境变量迁移
This commit is contained in:
104
pytests/config_test/test_startup_bindings.py
Normal file
104
pytests/config_test/test_startup_bindings.py
Normal file
@@ -0,0 +1,104 @@
|
||||
from pathlib import Path
|
||||
from types import SimpleNamespace
|
||||
import sys
|
||||
|
||||
from src.config.legacy_migration import migrate_legacy_bind_env_to_bot_config_dict
|
||||
from src.config.startup_bindings import (
|
||||
BindAddress,
|
||||
get_startup_main_bind_address,
|
||||
get_startup_webui_bind_address,
|
||||
resolve_main_bind_address,
|
||||
resolve_webui_bind_address,
|
||||
)
|
||||
|
||||
|
||||
def test_startup_bindings_use_defaults_when_config_file_missing(tmp_path: Path):
|
||||
missing_path = tmp_path / "missing_bot_config.toml"
|
||||
|
||||
assert get_startup_main_bind_address(missing_path) == BindAddress(host="127.0.0.1", port=8080)
|
||||
assert get_startup_webui_bind_address(missing_path) == BindAddress(host="127.0.0.1", port=8001)
|
||||
|
||||
|
||||
def test_startup_bindings_can_read_addresses_from_bot_config(tmp_path: Path):
|
||||
config_path = tmp_path / "bot_config.toml"
|
||||
config_path.write_text(
|
||||
"""
|
||||
[inner]
|
||||
version = "8.3.1"
|
||||
|
||||
[maim_message]
|
||||
ws_server_host = "0.0.0.0"
|
||||
ws_server_port = 22345
|
||||
|
||||
[webui]
|
||||
host = "192.168.1.9"
|
||||
port = 18001
|
||||
""".strip(),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
assert get_startup_main_bind_address(config_path) == BindAddress(host="0.0.0.0", port=22345)
|
||||
assert get_startup_webui_bind_address(config_path) == BindAddress(host="192.168.1.9", port=18001)
|
||||
|
||||
|
||||
def test_resolve_bindings_prefer_initialized_global_config(monkeypatch):
|
||||
fake_config_module = SimpleNamespace(
|
||||
global_config=SimpleNamespace(
|
||||
maim_message=SimpleNamespace(ws_server_host="10.0.0.2", ws_server_port=32000),
|
||||
webui=SimpleNamespace(host="10.0.0.3", port=32001),
|
||||
)
|
||||
)
|
||||
|
||||
monkeypatch.setitem(sys.modules, "src.config.config", fake_config_module)
|
||||
|
||||
assert resolve_main_bind_address() == BindAddress(host="10.0.0.2", port=32000)
|
||||
assert resolve_webui_bind_address() == BindAddress(host="10.0.0.3", port=32001)
|
||||
|
||||
|
||||
def test_legacy_env_bindings_are_migrated_when_fields_missing_or_default(monkeypatch):
|
||||
monkeypatch.setenv("HOST", "0.0.0.0")
|
||||
monkeypatch.setenv("PORT", "22345")
|
||||
monkeypatch.setenv("WEBUI_HOST", "192.168.1.8")
|
||||
monkeypatch.setenv("WEBUI_PORT", "19001")
|
||||
|
||||
payload = {
|
||||
"maim_message": {
|
||||
"ws_server_host": "127.0.0.1",
|
||||
"ws_server_port": 8080,
|
||||
},
|
||||
"webui": {},
|
||||
}
|
||||
|
||||
result = migrate_legacy_bind_env_to_bot_config_dict(payload)
|
||||
|
||||
assert result.migrated is True
|
||||
assert payload["maim_message"]["ws_server_host"] == "0.0.0.0"
|
||||
assert payload["maim_message"]["ws_server_port"] == 22345
|
||||
assert payload["webui"]["host"] == "192.168.1.8"
|
||||
assert payload["webui"]["port"] == 19001
|
||||
|
||||
|
||||
def test_legacy_env_bindings_do_not_override_explicit_config(monkeypatch):
|
||||
monkeypatch.setenv("HOST", "0.0.0.0")
|
||||
monkeypatch.setenv("PORT", "22345")
|
||||
monkeypatch.setenv("WEBUI_HOST", "192.168.1.8")
|
||||
monkeypatch.setenv("WEBUI_PORT", "19001")
|
||||
|
||||
payload = {
|
||||
"maim_message": {
|
||||
"ws_server_host": "10.1.1.1",
|
||||
"ws_server_port": 30000,
|
||||
},
|
||||
"webui": {
|
||||
"host": "10.1.1.2",
|
||||
"port": 30001,
|
||||
},
|
||||
}
|
||||
|
||||
result = migrate_legacy_bind_env_to_bot_config_dict(payload)
|
||||
|
||||
assert result.migrated is False
|
||||
assert payload["maim_message"]["ws_server_host"] == "10.1.1.1"
|
||||
assert payload["maim_message"]["ws_server_port"] == 30000
|
||||
assert payload["webui"]["host"] == "10.1.1.2"
|
||||
assert payload["webui"]["port"] == 30001
|
||||
Reference in New Issue
Block a user