deer-flow/backend/tests/blocking_io/test_knowledge_management_extension.py
Xuehao Xu f6a5a64c9b
feat(knowledge): add optional ingestion and processing extension (#7293)
* feat(knowledge): add optional ingestion and processing extension

* fix(knowledge): address catalog and ingestion review regressions

* fix(knowledge): add sanitized provider diagnostics and Chinese docs

* fix(knowledge): align capabilities and repair catalog e2e assertions
2026-10-24 08:19:02 +08:00

40 lines
1.8 KiB
Python

"""Management performs SSL trust loading outside the Gateway event loop."""
import asyncio
import ssl
from pathlib import Path
import httpx
import pytest
from deerflow_extension_api.auth import ExtensionPrincipal
@pytest.mark.asyncio
async def test_management_http_client_setup_is_off_loop(monkeypatch):
monkeypatch.syspath_prepend(str(Path(__file__).resolve().parents[3] / "examples/deerflow-extension-knowledge-management"))
from deerflow_extension_knowledge_management.contracts import IngestRequest, ManagementContext
from deerflow_extension_knowledge_management.weknora import WeKnoraManagement
monkeypatch.setenv("MANAGEMENT_BLOCKING_KEY", "synthetic")
provider = WeKnoraManagement(
{"connections": [{"id": "test", "base_url": "https://weknora.invalid", "tenant_id": "1", "api_key_env": "MANAGEMENT_BLOCKING_KEY", "grants": [{"user_id": "alice", "knowledge_base_ids": ["kb"], "operations": ["manual"]}]}]}
)
async def send(self, request, **kwargs):
data = {"id": "kb", "capabilities": {}} if request.method == "GET" else {"id": "doc", "knowledge_base_id": "kb", "parse_status": "pending", "enable_status": "enabled"}
return httpx.Response(200, request=request, json={"success": True, "data": data})
original = ssl.create_default_context
def ssl_context(*args, **kwargs):
try:
asyncio.get_running_loop()
except RuntimeError:
return original(*args, **kwargs)
raise AssertionError("SSL trust loading must run off the event loop")
monkeypatch.setattr(ssl, "create_default_context", ssl_context)
monkeypatch.setattr(httpx.AsyncClient, "send", send)
result = await provider.ingest(ManagementContext(ExtensionPrincipal("alice", is_admin=True)), "test", "kb", IngestRequest(kind="manual", title="Guide", content="Evidence"))
assert result.state == "queued"