From 7766e35578a7f0dd57d54cbd485d2940ed529db1 Mon Sep 17 00:00:00 2001 From: OoO Date: Wed, 13 May 2026 15:54:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=88=E4=BD=8F=20MCP=20compose=20=E5=AE=89?= =?UTF-8?q?=E5=85=A8=E9=82=8A=E7=95=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_mcp_compose_contracts.py | 46 +++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 tests/test_mcp_compose_contracts.py diff --git a/tests/test_mcp_compose_contracts.py b/tests/test_mcp_compose_contracts.py new file mode 100644 index 0000000..29b2f6b --- /dev/null +++ b/tests/test_mcp_compose_contracts.py @@ -0,0 +1,46 @@ +from pathlib import Path +import re + + +ROOT = Path(__file__).resolve().parents[1] +MCP_COMPOSE = ROOT / "docker-compose.mcp.yml" + + +def _service_block(compose: str, service_name: str) -> str: + match = re.search( + rf"^ {re.escape(service_name)}:\n(?P.*?)(?=^ [A-Za-z0-9_-]+:\n|\Z)", + compose, + flags=re.MULTILINE | re.DOTALL, + ) + assert match, f"{service_name} service block missing" + return match.group("body") + + +def test_mcp_http_services_keep_healthchecks(): + compose = MCP_COMPOSE.read_text(encoding="utf-8") + + for service_name in ["postgres-mcp", "mcp-omnisearch", "firecrawl-self"]: + block = _service_block(compose, service_name) + assert "healthcheck:" in block + assert "wget" in block + assert "/health" in block + + +def test_firecrawl_stack_keeps_memory_guardrails(): + compose = MCP_COMPOSE.read_text(encoding="utf-8") + + assert "memory: 2g" in _service_block(compose, "firecrawl-self") + assert "memory: 1.5g" in _service_block(compose, "firecrawl-playwright") + assert "memory: 128m" in _service_block(compose, "firecrawl-redis") + assert "memory: 128m" in _service_block(compose, "filesystem-mcp") + + +def test_filesystem_mcp_stays_read_only(): + compose = MCP_COMPOSE.read_text(encoding="utf-8") + block = _service_block(compose, "filesystem-mcp") + + assert "ALLOWED_PATHS=/data,/logs" in block + assert "./data:/data:ro" in block + assert "./logs:/logs:ro" in block + assert ":rw" not in block + assert "/var/run/docker.sock" not in block