"""Unit tests for vm_logs digest / CLI log command builders.""" from __future__ import annotations import pytest from gpu_rent.vm_logs import ( DIGEST_LINES, KILLER_UNIT, OLLAMA_UNIT, build_logs_remote_cmd, fetch_unit_logs, resolve_unit_alias, units_for, ) class _Cfg: def __init__(self, *, enable_swarmui: bool = True, llm_runtime: str = "none"): self.enable_swarmui = enable_swarmui self.llm_runtime = llm_runtime def test_units_for_swarm_and_ollama(): assert units_for(_Cfg(enable_swarmui=True, llm_runtime="ollama")) == [ "swarmui", OLLAMA_UNIT, KILLER_UNIT, ] def test_units_for_swarm_only(): assert units_for(_Cfg(enable_swarmui=True, llm_runtime="none")) == [ "swarmui", KILLER_UNIT, ] def test_units_for_llm_only(): assert units_for(_Cfg(enable_swarmui=False, llm_runtime="ollama")) == [ OLLAMA_UNIT, KILLER_UNIT, ] def test_digest_cmd_has_journal_no_cloud_init(): units = units_for(_Cfg(enable_swarmui=True, llm_runtime="ollama")) cmd = build_logs_remote_cmd( lines=DIGEST_LINES, include_cloud_init=False, journal_units=units, ) assert "cloud-init" not in cmd assert "journalctl -u swarmui" in cmd assert f"journalctl -u {OLLAMA_UNIT}" in cmd # Stock ollama.service is disabled — digest must not query bare unit name assert "journalctl -u ollama -n" not in cmd assert f"journalctl -u {KILLER_UNIT}" in cmd assert f"-n {DIGEST_LINES}" in cmd assert "systemctl is-active swarmui" in cmd def test_full_logs_cmd_includes_cloud_init(): cmd = build_logs_remote_cmd( lines=80, include_cloud_init=True, journal_units=["swarmui", OLLAMA_UNIT, KILLER_UNIT], ) assert "cloud-init-output.log" in cmd assert "journalctl -u swarmui" in cmd assert f"journalctl -u {OLLAMA_UNIT}" in cmd def test_resolve_unit_alias(): assert resolve_unit_alias(None) == "all" assert resolve_unit_alias("swarm") == "swarmui" assert resolve_unit_alias("ollama") == OLLAMA_UNIT assert resolve_unit_alias("gpu-rent-ollama") == OLLAMA_UNIT assert resolve_unit_alias("killer") == KILLER_UNIT with pytest.raises(ValueError, match="неизвестный"): resolve_unit_alias("bogus") def test_fetch_unit_logs_uses_ssh(monkeypatch): calls: list[tuple] = [] def fake_ssh(cfg, host, command, check=False, timeout=60): calls.append((host, command, check, timeout)) return "active\nok" monkeypatch.setattr("gpu_rent.vm_logs.run_ssh", fake_ssh) cfg = _Cfg(enable_swarmui=True, llm_runtime="none") out = fetch_unit_logs(cfg, "1.2.3.4", units_for(cfg), lines=20) assert out == "active\nok" assert calls[0][0] == "1.2.3.4" assert "cloud-init" not in calls[0][1] assert "journalctl -u swarmui" in calls[0][1] assert f"journalctl -u {KILLER_UNIT}" in calls[0][1] assert f"journalctl -u {OLLAMA_UNIT}" not in calls[0][1]