Import AITURK IDE 1.0.0-beta.1 from Hermes 63279301; preserve MIT license
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
"""Measured-work pins for the _load_global_auth_store() memo.
|
||||
|
||||
read_credential_pool() -> load_pool() runs _load_global_auth_store() once per
|
||||
provider row in the /model picker, and the global-store JSON read + parse
|
||||
cost ~60-100us+ per call even when nothing changed. The memo keyed on the
|
||||
global auth file's path+mtime makes repeat reads a dict lookup. The store
|
||||
only changes when the user authenticates at global scope (writes always go
|
||||
through _save_auth_store, which touches the file), so the mtime key keeps
|
||||
the memo freshness-correct.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
|
||||
import pytest
|
||||
|
||||
import hermes_cli.auth as auth_mod
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def _reset_cache(monkeypatch):
|
||||
# raising=False: on pre-fix code the memo attribute doesn't exist (that
|
||||
# IS the fix); the reset is a no-op there so the measured-work assertions
|
||||
# fail genuinely instead of erroring.
|
||||
monkeypatch.setattr(
|
||||
auth_mod, "_global_auth_store_cache", None, raising=False
|
||||
)
|
||||
yield
|
||||
monkeypatch.setattr(
|
||||
auth_mod, "_global_auth_store_cache", None, raising=False
|
||||
)
|
||||
|
||||
|
||||
def _make_global_store(tmp_path) -> "os.PathLike[str]":
|
||||
"""Write a realistic global auth.json and return its path."""
|
||||
path = tmp_path / "global-hermes" / "auth.json"
|
||||
path.parent.mkdir(parents=True)
|
||||
path.write_text(
|
||||
json.dumps(
|
||||
{
|
||||
"version": 1,
|
||||
"providers": {
|
||||
"openai": {"api_key": "sk-x"},
|
||||
"anthropic": {"api_key": "an-x"},
|
||||
},
|
||||
"credential_pool": {
|
||||
"openai": [{"id": "1", "access_token": "t"}],
|
||||
"anthropic": [{"id": "2", "access_token": "u"}],
|
||||
},
|
||||
}
|
||||
),
|
||||
encoding="utf-8",
|
||||
)
|
||||
return path
|
||||
|
||||
|
||||
class TestLoadGlobalAuthStoreMemo:
|
||||
def test_repeated_calls_read_store_once(self, tmp_path, monkeypatch):
|
||||
"""Repeated calls must not re-read/re-parse the global store."""
|
||||
global_path = _make_global_store(tmp_path)
|
||||
monkeypatch.setattr(
|
||||
auth_mod, "_global_auth_file_path", lambda: global_path
|
||||
)
|
||||
reads = {"n": 0}
|
||||
orig = auth_mod._load_auth_store
|
||||
|
||||
def counting_load(store_path=None):
|
||||
reads["n"] += 1
|
||||
return orig(store_path)
|
||||
|
||||
monkeypatch.setattr(auth_mod, "_load_auth_store", counting_load)
|
||||
|
||||
first = auth_mod._load_global_auth_store()
|
||||
for _ in range(10):
|
||||
auth_mod._load_global_auth_store()
|
||||
assert reads["n"] == 1, (
|
||||
"repeated calls must be memo hits (store read once), "
|
||||
f"got {reads['n']}"
|
||||
)
|
||||
assert first.get("providers", {}).get("openai") == {"api_key": "sk-x"}
|
||||
|
||||
def test_mtime_change_re_reads_once(self, tmp_path, monkeypatch):
|
||||
"""A store file change on disk invalidates the memo."""
|
||||
global_path = _make_global_store(tmp_path)
|
||||
monkeypatch.setattr(
|
||||
auth_mod, "_global_auth_file_path", lambda: global_path
|
||||
)
|
||||
reads = {"n": 0}
|
||||
orig = auth_mod._load_auth_store
|
||||
|
||||
def counting_load(store_path=None):
|
||||
reads["n"] += 1
|
||||
return orig(store_path)
|
||||
|
||||
monkeypatch.setattr(auth_mod, "_load_auth_store", counting_load)
|
||||
|
||||
auth_mod._load_global_auth_store()
|
||||
assert reads["n"] == 1
|
||||
|
||||
# Bump the file mtime -> memo invalidates -> re-read once.
|
||||
os.utime(global_path, (1_700_000_000, 1_700_000_000))
|
||||
auth_mod._load_global_auth_store()
|
||||
assert reads["n"] == 2, "mtime change must force exactly one re-read"
|
||||
|
||||
def test_absent_global_store_returns_empty_without_error(self, tmp_path, monkeypatch):
|
||||
"""No global fallback (classic mode) returns {} and stays cheap."""
|
||||
missing = tmp_path / "no-such" / "auth.json"
|
||||
monkeypatch.setattr(
|
||||
auth_mod, "_global_auth_file_path", lambda: missing
|
||||
)
|
||||
assert auth_mod._load_global_auth_store() == {}
|
||||
assert auth_mod._global_auth_store_cache is None
|
||||
Reference in New Issue
Block a user