hermes-agent/tests/gateway/test_runtime_config_env_expansion.py

97 lines
2.8 KiB
Python

"""Regression tests for gateway runtime config env-var expansion."""
from __future__ import annotations
import json
import pytest
import gateway.run as gateway_run
def _write_config(home, body: str) -> None:
(home / "config.yaml").write_text(body, encoding="utf-8")
@pytest.fixture
def gateway_home(monkeypatch, tmp_path):
monkeypatch.setattr(gateway_run, "_hermes_home", tmp_path)
monkeypatch.delenv("HERMES_PREFILL_MESSAGES_FILE", raising=False)
monkeypatch.delenv("HERMES_EPHEMERAL_SYSTEM_PROMPT", raising=False)
monkeypatch.delenv("HERMES_GATEWAY_BUSY_INPUT_MODE", raising=False)
monkeypatch.delenv("HERMES_RESTART_DRAIN_TIMEOUT", raising=False)
monkeypatch.delenv("HERMES_BACKGROUND_NOTIFICATIONS", raising=False)
return tmp_path
def test_load_prefill_messages_expands_env_var_path(monkeypatch, gateway_home):
prefill = [{"role": "system", "content": "few-shot"}]
(gateway_home / "prefill.json").write_text(json.dumps(prefill), encoding="utf-8")
_write_config(gateway_home, "prefill_messages_file: ${PREFILL_FILE}\n")
monkeypatch.setenv("PREFILL_FILE", "prefill.json")
assert gateway_run.GatewayRunner._load_prefill_messages() == prefill
@pytest.mark.parametrize(
("config_body", "env_name", "env_value", "loader_name", "expected"),
[
(
"agent:\n system_prompt: ${GW_PROMPT}\n",
"GW_PROMPT",
"expanded prompt",
"_load_ephemeral_system_prompt",
"expanded prompt",
),
(
"agent:\n reasoning_effort: ${REASONING_LEVEL}\n",
"REASONING_LEVEL",
"high",
"_load_reasoning_config",
{"enabled": True, "effort": "high"},
),
(
"agent:\n service_tier: ${SERVICE_TIER}\n",
"SERVICE_TIER",
"priority",
"_load_service_tier",
"priority",
),
(
"display:\n busy_input_mode: ${BUSY_MODE}\n",
"BUSY_MODE",
"steer",
"_load_busy_input_mode",
"steer",
),
(
"agent:\n restart_drain_timeout: ${DRAIN_TIMEOUT}\n",
"DRAIN_TIMEOUT",
"12",
"_load_restart_drain_timeout",
12.0,
),
(
"display:\n background_process_notifications: ${BG_MODE}\n",
"BG_MODE",
"error",
"_load_background_notifications_mode",
"error",
),
],
)
def test_gateway_runtime_loaders_expand_env_var_templates(
monkeypatch,
gateway_home,
config_body,
env_name,
env_value,
loader_name,
expected,
):
_write_config(gateway_home, config_body)
monkeypatch.setenv(env_name, env_value)
loader = getattr(gateway_run.GatewayRunner, loader_name)
assert loader() == expected