tests/test_client.py
| 1 | """Tests for PQCMCPClient — message signing and response verification.""" |
| 2 | |
| 3 | from __future__ import annotations |
| 4 | |
| 5 | import pytest |
| 6 | from quantumshield.identity.agent import AgentIdentity |
| 7 | |
| 8 | from pqc_mcp_transport.client import PQCMCPClient |
| 9 | from pqc_mcp_transport.signer import MessageSigner |
| 10 | |
| 11 | |
| 12 | class TestClientSigning: |
| 13 | def test_client_signs_tool_call( |
| 14 | self, client_identity: AgentIdentity |
| 15 | ) -> None: |
| 16 | """The client's signer produces valid PQC-signed messages.""" |
| 17 | client = PQCMCPClient( |
| 18 | identity=client_identity, |
| 19 | server_url="http://localhost:8080", |
| 20 | ) |
| 21 | message = { |
| 22 | "jsonrpc": "2.0", |
| 23 | "method": "tools/call", |
| 24 | "id": "test-1", |
| 25 | "params": {"name": "greet", "arguments": {"name": "World"}}, |
| 26 | } |
| 27 | signed = client.signer.sign_message(message) |
| 28 | assert "_pqc" in signed |
| 29 | result = MessageSigner.verify_message(signed) |
| 30 | assert result.valid is True |
| 31 | assert result.signer_did == client_identity.did |
| 32 | |
| 33 | def test_client_verifies_response( |
| 34 | self, |
| 35 | client_identity: AgentIdentity, |
| 36 | server_identity: AgentIdentity, |
| 37 | sample_response: dict, |
| 38 | ) -> None: |
| 39 | """The client can verify a server-signed response.""" |
| 40 | server_signer = MessageSigner(server_identity) |
| 41 | signed_response = server_signer.sign_message(sample_response) |
| 42 | |
| 43 | result = MessageSigner.verify_message(signed_response) |
| 44 | assert result.valid is True |
| 45 | assert result.signer_did == server_identity.did |
| 46 | |