oclaw/tests/test_mcp_store.py
oliver 420abac9f1 refactor: root-package imports (svc/runtime/interfaces) and fix PYTHONPATH
- Rename platform/ to svc/ to avoid shadowing stdlib platform.
- Replace from oclaw.* with from svc/runtime/interfaces; update -m CLI paths.
- tests/conftest: prepend repo root to sys.path (no parent-folder package name).
- CI: paths and offline_eval script under repo root.
- Ops scripts: PYTHONPATH must be repo root for python -m runtime.* (fixes gateway/WhatsApp sidecar startup).
- Fix default oclaw.json path in tabular/file attachment limits; stabilize attachment test config.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-13 14:51:17 +08:00

73 lines
2.6 KiB
Python

from __future__ import annotations
import tempfile
import unittest
from pathlib import Path
from svc.persistence.sqlite_store import SqliteStore
class McpStoreTests(unittest.TestCase):
def setUp(self) -> None:
self._tmp = tempfile.TemporaryDirectory(ignore_cleanup_errors=True)
self.db = Path(self._tmp.name) / "ops.sqlite"
self.store = SqliteStore(str(self.db))
def tearDown(self) -> None:
self._tmp.cleanup()
def test_upsert_list_and_tools(self) -> None:
self.store.upsert_mcp_server(
server_id="s1",
source_type="github",
source_ref="https://github.com/acme/mcp-a",
version="v1",
entry_command="python",
entry_args=["-m", "mcp_a"],
required_permissions=["admin:read"],
enabled=True,
)
self.store.replace_mcp_server_tools(
server_id="s1",
tools=[
{"tool_name": "ping", "description": "Ping tool", "parameters": {"type": "object", "properties": {}}},
],
)
rows = self.store.list_mcp_servers(enabled_only=True)
self.assertEqual(len(rows), 1)
self.assertEqual(rows[0]["server_id"], "s1")
tools = self.store.list_mcp_server_tools(server_id="s1")
self.assertEqual(len(tools), 1)
self.assertEqual(tools[0]["tool_name"], "ping")
def test_install_and_health_logs(self) -> None:
self.store.add_mcp_installation_log(
server_id="s1",
status="error",
error_code="mcp_install_failed",
detail={"x": 1},
install_command="npm i -g foo",
)
self.store.set_mcp_server_health(server_id="s1", status="ok", detail={"latency_ms": 2})
logs = self.store.list_mcp_installation_logs(server_id="s1", limit=20)
self.assertEqual(len(logs), 1)
self.assertEqual(logs[0]["error_code"], "mcp_install_failed")
health = self.store.list_mcp_server_health()
self.assertEqual(len(health), 1)
self.assertEqual(health[0]["server_id"], "s1")
self.store.add_mcp_installation_log(
server_id="s1",
status="error",
error_code="mcp_install_failed",
detail={},
install_command="npm i",
)
summary = self.store.list_mcp_install_failure_summary(limit=10)
self.assertTrue(len(summary) >= 1)
self.assertEqual(summary[0]["server_id"], "s1")
self.assertEqual(summary[0]["error_code"], "mcp_install_failed")
if __name__ == "__main__":
unittest.main()