58 lines
2.1 KiB
Python
58 lines
2.1 KiB
Python
# ============================================================
|
||
# M-D 黄金测试:Skill manifest 扩展(capabilities/ragScopes/version)
|
||
# + 健康探测历史 + 旧配置自动升级
|
||
# ============================================================
|
||
from __future__ import annotations
|
||
|
||
import json
|
||
|
||
from server.agent_core.skills import SkillRegistry
|
||
|
||
|
||
def test_default_manifest_has_md_fields(tmp_path):
|
||
reg = SkillRegistry(path=str(tmp_path / "skills.json"))
|
||
s = reg.get("algo.stub")
|
||
assert s is not None
|
||
assert s["version"] == "1.0"
|
||
assert "flex_schedule" in s["capabilities"]
|
||
assert set(s["ragScopes"]) == {"process", "sop"}
|
||
|
||
|
||
def test_legacy_config_upgraded_with_new_fields(tmp_path):
|
||
path = tmp_path / "skills.json"
|
||
legacy = {"skills": [{
|
||
"skill_id": "algo.legacy", "name": "旧算法", "endpoint": "http://x:1",
|
||
"auth": "", "max_power": "P1", "track": "flex", "enabled": True,
|
||
"timeout_sec": 60.0, "description": "", "golden_tests": [],
|
||
}]}
|
||
path.write_text(json.dumps(legacy), encoding="utf-8")
|
||
reg = SkillRegistry(path=str(path))
|
||
s = reg.get("algo.legacy")
|
||
assert s["version"] == "1.0"
|
||
assert s["capabilities"] == ["flex_schedule"]
|
||
assert s["ragScopes"] == []
|
||
# 升级已落盘
|
||
saved = json.loads(path.read_text(encoding="utf-8"))
|
||
assert saved["skills"][0]["capabilities"] == ["flex_schedule"]
|
||
|
||
|
||
def test_health_probe_records_history(tmp_path):
|
||
reg = SkillRegistry(path=str(tmp_path / "skills.json"))
|
||
reg.health("algo.stub")
|
||
reg.health("algo.stub")
|
||
hist = reg.history("algo.stub")
|
||
assert len(hist) == 2
|
||
assert all(h["ok"] for h in hist)
|
||
assert all("ts" in h for h in hist)
|
||
|
||
|
||
def test_upsert_keeps_rag_scopes(tmp_path):
|
||
reg = SkillRegistry(path=str(tmp_path / "skills.json"))
|
||
reg.upsert({"skill_id": "algo.opt", "name": "外部优化器", "endpoint": "http://127.0.0.1:9000",
|
||
"ragScopes": ["process"], "capabilities": ["flex_schedule", "due_promise"],
|
||
"version": "2.1"})
|
||
s = reg.get("algo.opt")
|
||
assert s["version"] == "2.1"
|
||
assert s["ragScopes"] == ["process"]
|
||
assert "due_promise" in s["capabilities"]
|