mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-31 19:16:29 +00:00
Systematic prune per AGENTS.md test policy, one pass over every major test tree (gateway, hermes_cli, tools, agent, run_agent, plugins, cli, cron, tui_gateway, honcho/openviking, root-level): - DELETE: source-reading tests (read_text/getsource on prod files), change-detector tests (exact catalog counts, model-name snapshots, config version literals), mock-echo tests (assert a mock returns what it was told), assertion-free/trivial tests, near-duplicate parametrizations (boundaries + one representative kept), async/sync twin duplicates, cosmetic within-file variations. - KEEP (mandatory): security/redaction/approval guards, message-role alternation invariants, prompt-caching/deterministic-call-id invariants, issue-number regression tests (deduped), E2E tests. - 6 test files deleted outright (script-style/no-assert or fully redundant); conftest.py, fakes/, fixtures/ untouched. - tests/acp/conftest.py added: autouse fixture stubs the live models.dev/GitHub/Copilot/Anthropic inventory fetches that ACP server tests performed on every session create — test_server.py 147s → 3.4s, and the tests are now genuinely hermetic. - Sleep-based slowness shrunk where safe (codex_ttfb_watchdog, compression_concurrent_fork, etc.); no wall-clock assertion tightened. Verification: full hermetic suite via scripts/run_tests.sh — 2439 files, 31,130 tests passed, 0 failed, 0 flaky retries, 315s wall (baseline: 583s wall, 13,564s subprocess CPU).
67 lines
2 KiB
Python
67 lines
2 KiB
Python
"""Regression tests for issue #42130.
|
|
|
|
A credential added via `hermes auth add openrouter` lives in the credential
|
|
pool, NOT as an OPENROUTER_API_KEY env var. Before the fix, resolve_provider()
|
|
auto-detection only checked env vars, so such a credential was invisible:
|
|
the provider failed to resolve (AuthError) or resolved without a key, and
|
|
requests went out with no Authorization header — OpenRouter's
|
|
"HTTP 401: Missing Authentication header".
|
|
|
|
These tests lock in that auto-detection consults the OpenRouter pool.
|
|
"""
|
|
|
|
import uuid
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def _clean_inference_env(monkeypatch):
|
|
"""Strip credential-shaped env vars so the pool is the only source."""
|
|
for key in (
|
|
"OPENROUTER_API_KEY",
|
|
"OPENAI_API_KEY",
|
|
"ANTHROPIC_API_KEY",
|
|
"ANTHROPIC_TOKEN",
|
|
"CLAUDE_CODE_OAUTH_TOKEN",
|
|
"NOUS_API_KEY",
|
|
"HERMES_INFERENCE_PROVIDER",
|
|
):
|
|
monkeypatch.delenv(key, raising=False)
|
|
|
|
|
|
def _seed_openrouter_pool(token: str = "sk-or-FAKEKEY123") -> None:
|
|
"""Mimic `hermes auth add openrouter <token>` — a manual pool entry."""
|
|
from agent.credential_pool import (
|
|
AUTH_TYPE_API_KEY,
|
|
SOURCE_MANUAL,
|
|
PooledCredential,
|
|
load_pool,
|
|
)
|
|
|
|
pool = load_pool("openrouter")
|
|
pool.add_entry(
|
|
PooledCredential(
|
|
provider="openrouter",
|
|
id=uuid.uuid4().hex[:6],
|
|
label="api-key-1",
|
|
auth_type=AUTH_TYPE_API_KEY,
|
|
priority=0,
|
|
source=SOURCE_MANUAL,
|
|
access_token=token,
|
|
base_url="https://openrouter.ai/api/v1",
|
|
)
|
|
)
|
|
|
|
|
|
def test_auto_detects_openrouter_from_pool(tmp_path, monkeypatch):
|
|
"""With only a pool credential (no env var), auto-detection finds it."""
|
|
monkeypatch.setenv("HERMES_HOME", str(tmp_path / "hermes"))
|
|
(tmp_path / "hermes").mkdir(parents=True, exist_ok=True)
|
|
_seed_openrouter_pool()
|
|
|
|
from hermes_cli.auth import resolve_provider
|
|
|
|
assert resolve_provider("auto") == "openrouter"
|
|
|
|
|