52 lines
2.1 KiB
Python
52 lines
2.1 KiB
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
import sys
|
|
|
|
import hermes_cli.config as config_mod
|
|
import hermes_cli.main as main_mod
|
|
from hermes_cli.subcommands.dashboard import build_dashboard_parser, build_serve_parser
|
|
|
|
|
|
def _capture(_args) -> None:
|
|
return None
|
|
|
|
|
|
def test_lean_serve_parser_matches_full_subcommand_parser() -> None:
|
|
root = argparse.ArgumentParser()
|
|
subparsers = root.add_subparsers(dest="command")
|
|
build_dashboard_parser(subparsers, cmd_dashboard=_capture, cmd_dashboard_register=_capture)
|
|
lean = build_serve_parser(cmd_dashboard=_capture)
|
|
|
|
argv = [
|
|
"--host", "127.0.0.1", "--port", "0", "--no-open",
|
|
"--ssh-session-token-file", "token.txt", "--ssh-owner-nonce", "0123456789abcdef",
|
|
]
|
|
|
|
assert vars(lean.parse_args(argv)) == vars(root.parse_args(["serve", *argv]))
|
|
|
|
|
|
def test_fast_serve_launch_dispatches_only_unambiguous_serve(monkeypatch) -> None:
|
|
captured = []
|
|
monkeypatch.setattr(config_mod, "get_container_exec_info", lambda: None)
|
|
monkeypatch.setattr(main_mod, "cmd_dashboard", captured.append)
|
|
|
|
monkeypatch.setattr(sys, "argv", ["hermes", "serve", "--host", "127.0.0.1", "--port", "0"])
|
|
assert main_mod._try_fast_serve_launch() is True
|
|
assert (captured[0].command, captured[0].headless_backend, captured[0].no_open, captured[0].port) == (
|
|
"serve", True, True, 0,
|
|
)
|
|
|
|
# Every ambiguous shape falls back to the full parser: unknown flags,
|
|
# help, the opt-out, and container routing.
|
|
for argv in (["serve", "--future-flag"], ["serve", "--help"], ["chat"]):
|
|
monkeypatch.setattr(sys, "argv", ["hermes", *argv])
|
|
assert main_mod._try_fast_serve_launch() is False
|
|
monkeypatch.setenv("HERMES_DISABLE_FAST_SERVE_LAUNCH", "1")
|
|
monkeypatch.setattr(sys, "argv", ["hermes", "serve"])
|
|
assert main_mod._try_fast_serve_launch() is False
|
|
monkeypatch.delenv("HERMES_DISABLE_FAST_SERVE_LAUNCH")
|
|
monkeypatch.setattr(config_mod, "get_container_exec_info", lambda: {"name": "managed"})
|
|
assert main_mod._try_fast_serve_launch() is False
|
|
assert len(captured) == 1
|