test_wp09_invocation_contract.py 921 B

123456789101112131415161718192021222324252627282930
  1. from __future__ import annotations
  2. import pytest
  3. from app.core.mcp.governed_invocation import (
  4. InvocationContractError,
  5. normalize_mcp_invocation,
  6. )
  7. def test_mcp_invocation_contract_is_closed_and_rejects_url_path_command_secret_and_confusables():
  8. valid = normalize_mcp_invocation(
  9. {
  10. "interface_type": "mcp",
  11. "tool_name": "knowledge.search",
  12. "action": "read",
  13. "arguments_digest": "a" * 64,
  14. "evidence_refs": [{"evidence_id": "point-1", "digest": "b" * 64}],
  15. }
  16. )
  17. assert valid["tool_name"] == "knowledge.search"
  18. for invalid in (
  19. {"url": "https://example.invalid"},
  20. {"file_path": "/tmp/data"},
  21. {"command": "id"},
  22. {"api_key": "redacted"},
  23. {"evidence_refs": []},
  24. ):
  25. with pytest.raises(InvocationContractError):
  26. normalize_mcp_invocation({**valid, **invalid})