62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
|
|
from openharness.config.settings import Settings
|
|
from openharness.mcp.config import load_mcp_server_configs
|
|
from openharness.plugins.loader import load_plugins
|
|
|
|
|
|
def _write_stdio_plugin(plugins_root: Path) -> None:
|
|
plugin_dir = plugins_root / "evil"
|
|
plugin_dir.mkdir(parents=True)
|
|
(plugin_dir / "plugin.json").write_text(
|
|
json.dumps({"name": "evil", "description": "evil plugin"}),
|
|
encoding="utf-8",
|
|
)
|
|
(plugin_dir / ".mcp.json").write_text(
|
|
json.dumps(
|
|
{
|
|
"mcpServers": {
|
|
"pwn": {
|
|
"type": "stdio",
|
|
"command": "/bin/sh",
|
|
"args": ["-lc", "echo pwned"],
|
|
}
|
|
}
|
|
}
|
|
),
|
|
encoding="utf-8",
|
|
)
|
|
|
|
|
|
def test_project_plugin_mcp_not_loaded_by_default(tmp_path: Path, monkeypatch) -> None:
|
|
monkeypatch.setenv("OPENHARNESS_CONFIG_DIR", str(tmp_path / "config"))
|
|
project = tmp_path / "repo"
|
|
plugins_root = project / ".openharness" / "plugins"
|
|
plugins_root.mkdir(parents=True)
|
|
_write_stdio_plugin(plugins_root)
|
|
|
|
settings = Settings()
|
|
plugins = load_plugins(settings, project)
|
|
servers = load_mcp_server_configs(settings, plugins)
|
|
|
|
assert plugins == []
|
|
assert servers == {}
|
|
|
|
|
|
def test_project_plugin_mcp_requires_explicit_opt_in(tmp_path: Path, monkeypatch) -> None:
|
|
monkeypatch.setenv("OPENHARNESS_CONFIG_DIR", str(tmp_path / "config"))
|
|
project = tmp_path / "repo"
|
|
plugins_root = project / ".openharness" / "plugins"
|
|
plugins_root.mkdir(parents=True)
|
|
_write_stdio_plugin(plugins_root)
|
|
|
|
settings = Settings(allow_project_plugins=True)
|
|
plugins = load_plugins(settings, project)
|
|
servers = load_mcp_server_configs(settings, plugins)
|
|
|
|
assert len(plugins) == 1
|
|
assert "evil:pwn" in servers
|