Skip to main content
Glama
test_error_handling.py2.99 kB
import pytest import asyncio from pytest_asyncio import fixture as pytest_asyncio_fixture from fastmcp.client import Client from fastmcp.exceptions import ToolError @pytest.mark.asyncio async def test_invalid_params(mcp_server): """Test error handling for invalid parameters.""" session, uri, _ = mcp_server async with session as session: with pytest.raises(ToolError) as exc_info: await session.call_tool( "get_stats", {"user": "current", "range": "invalid"} ) assert "invalid range" in str(exc_info.value).lower() @pytest.mark.asyncio async def test_timeout(mcp_server): """Test timeout simulation for tool calls.""" session, uri, _ = mcp_server async with session as session: # Use asyncio.timeout to simulate short timeout try: async with asyncio.timeout(0.1): await session.call_tool( "get_stats", {"user": "current", "range": "today"} ) except asyncio.TimeoutError as e: assert "timeout" in str(e).lower() @pytest_asyncio_fixture async def no_server(): """Fixture for simulating server not started.""" # Simulate no server by using invalid URI invalid_uri = "http://localhost:9999/sse" session = Client(invalid_uri) try: await session.__aenter__() # If __aenter__ succeeds, try to list tools to trigger the error try: await session.list_tools() # If no exception is raised, force an error for the test raise RuntimeError("Expected connection error, but none occurred") except Exception as e: # Catch the exception from list_tools and pass it to the test await session.__aexit__(None, None, None) yield e except Exception as e: # Catch the exception from __aenter__ and pass it to the test yield e @pytest.mark.asyncio async def test_server_not_started(no_server): """Test error when server is not started.""" # no_server fixture yields the exception exception = no_server # Assert that the exception is of the expected type # The actual exception type might be RuntimeError or httpx.ConnectError # depending on where the failure occurs. We'll check for RuntimeError for now. assert isinstance(exception, RuntimeError) assert "Client failed to connect" in str( exception ) or "Expected connection error" in str(exception) @pytest.mark.asyncio async def test_wakapi_error(mcp_server): """Test WakapiError handling.""" session, uri, _ = mcp_server async with session as session: # Test with invalid API key simulation (if possible) or invalid endpoint with pytest.raises(ToolError) as exc_info: await session.call_tool( "get_stats", {"user": "invalid_user", "range": "today"} ) assert "user not found" in str(exc_info.value).lower()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/impure0xntk/mcp-wakapi'

If you have feedback or need assistance with the MCP directory API, please join our Discord server