Files
2026-07-13 12:24:33 +08:00

93 lines
3.2 KiB
Python

# SPDX-License-Identifier: Apache-2.0
"""Tests for 'go back' navigation in the interactive flow."""
# Standard
from typing import Any
from unittest import mock
# First Party
from lmcache.cli.commands.bench.engine_bench import interactive as flow
from lmcache.cli.commands.bench.engine_bench.interactive import terminal
from lmcache.cli.commands.bench.engine_bench.interactive.state import (
InteractiveState,
)
def test_back_token_returns_sentinel_only_when_enabled() -> None:
# The same key ("<") means "go back" everywhere, but only when offered.
with mock.patch("builtins.input", return_value=terminal.BACK_TOKEN):
assert terminal.prompt_text("L", allow_back=True) is terminal.GO_BACK
assert terminal.prompt_text("L", allow_back=False) == terminal.BACK_TOKEN
def test_normalize_url_shorthand() -> None:
assert flow._normalize_url("8000") == "http://localhost:8000"
assert flow._normalize_url("localhost:8000") == "http://localhost:8000"
assert flow._normalize_url("http://host:9000") == "http://host:9000"
assert flow._normalize_url("") == ""
def _drive(monkeypatch: Any, answers: list[tuple[str, Any]]) -> InteractiveState:
"""Run the driver, feeding scripted answers keyed by question identity."""
pending = iter(answers)
def pull(tag: str) -> Any:
expected, value = next(pending)
assert expected == tag, f"expected {expected!r}, got {tag!r}"
return value
monkeypatch.setattr(
flow, "_prompt_for_item", lambda item, allow_back: pull(item.key)
)
monkeypatch.setattr(
flow,
"_prompt_gate",
lambda name, detail, allow_back: pull(
"gate:workload" if "Workload" in name else "gate:general"
),
)
monkeypatch.setattr(flow, "_prompt_action", lambda allow_back: pull("action"))
monkeypatch.setattr(flow, "_print_summary", lambda state: None)
state = InteractiveState()
state.set("__started", flow._gather_config(state))
return state
def test_back_undoes_previous_answer(monkeypatch: Any) -> None:
# has_lmcache=False makes tokens the next question; going back there must
# un-set has_lmcache and re-ask it.
state = _drive(
monkeypatch,
[
("engine_url", "http://x"),
("workload", "random-prefill"),
("has_lmcache", False),
("tokens_per_gb_kvcache", terminal.GO_BACK), # back
("has_lmcache", True), # re-answered
("lmcache_url", "http://y"),
("gate:general", "use defaults"),
("gate:workload", "use defaults"),
("action", "start"),
],
)
assert state.get("__started") is True
assert state.get("has_lmcache") is True
assert state.is_set("tokens_per_gb_kvcache") is False
def test_quit_returns_false(monkeypatch: Any) -> None:
state = _drive(
monkeypatch,
[
("engine_url", "http://x"),
("workload", "random-prefill"),
("has_lmcache", True),
("lmcache_url", "http://y"),
("gate:general", "use defaults"),
("gate:workload", "use defaults"),
("action", "quit"),
],
)
assert state.get("__started") is False