Files
hermes-agent/tests/hermes_cli/test_local_runtime_load_mode.py
2026-09-14 21:49:13 -04:00

76 lines
3.0 KiB
Python

"""Managed launch preserves direct I/O across engine command-line versions."""
from __future__ import annotations
import subprocess
from types import SimpleNamespace
import pytest
from hermes_cli.local_runtime import supervisor
@pytest.mark.parametrize("help_text, expected", [
("-lm, --load-mode MODE\n dio: use DirectIO if available", ["--load-mode", "dio"]),
("-dio, --direct-io use DirectIO if available", ["-dio"]),
])
def test_spawn_selects_supported_direct_io_option(tmp_path, monkeypatch, help_text, expected):
monkeypatch.setattr(supervisor, "runtimes_root", lambda: tmp_path / "runtime")
executable = tmp_path / "engine" / "llama-server"
monkeypatch.setattr(supervisor, "server_binary", lambda _: executable)
probes = []
def run(argv, **kwargs):
probes.append(argv)
return subprocess.CompletedProcess(argv, 0, help_text, "")
monkeypatch.setattr(supervisor.subprocess, "run", run)
commands = []
monkeypatch.setattr(supervisor, "spawn_server", lambda argv, **kwargs: (
commands.append(argv) or SimpleNamespace(pid=123, poll=lambda: 0), None,
))
sup = supervisor.LlamaServerSupervisor(tmp_path / "engine", tmp_path / "models", port=19001)
monkeypatch.setattr(sup, "_write_state", lambda: None)
try:
sup._spawn()
index = commands[0].index(expected[0])
assert commands[0][index:index + len(expected)] == expected
if expected[0] == "--load-mode":
assert "-dio" not in commands[0]
assert probes == [[str(executable), "--help"]]
finally:
sup.stop()
def test_direct_io_probe_is_reused_for_the_same_engine(tmp_path, monkeypatch):
calls = []
def run(argv, **kwargs):
calls.append(argv)
return subprocess.CompletedProcess(argv, 0, "--load-mode MODE", "")
monkeypatch.setattr(supervisor.subprocess, "run", run)
executable = tmp_path / "llama-server"
assert supervisor._direct_io_args(executable) == ("--load-mode", "dio")
assert supervisor._direct_io_args(executable) == ("--load-mode", "dio")
assert len(calls) == 1
def test_failed_engine_probe_can_be_retried(tmp_path, monkeypatch):
executable = tmp_path / "llama-server"
def fail(argv, **kwargs):
raise subprocess.TimeoutExpired(argv, 15)
monkeypatch.setattr(supervisor.subprocess, "run", fail)
with pytest.raises(subprocess.TimeoutExpired):
supervisor._direct_io_args(executable)
monkeypatch.setattr(supervisor.subprocess, "run", lambda argv, **kwargs:
subprocess.CompletedProcess(argv, 0, "--load-mode MODE", ""))
assert supervisor._direct_io_args(executable) == ("--load-mode", "dio")
def test_engine_without_direct_io_uses_its_supported_defaults(tmp_path, monkeypatch):
monkeypatch.setattr(supervisor.subprocess, "run", lambda argv, **kwargs:
subprocess.CompletedProcess(argv, 0, "--model FILE", ""))
assert supervisor._direct_io_args(tmp_path / "llama-server") == ()