Skip to main content
Glama
aiopnet

MCP Nautobot Server

by aiopnet
conftest.py6.23 kB
""" Test configuration and fixtures for the MCP Nautobot server. This module provides common test fixtures and configuration for testing the Nautobot MCP server integration. """ import pytest import asyncio from unittest.mock import AsyncMock, MagicMock from mcp_nautobot_server.nautobot_client import ( NautobotClient, NautobotConfig, IPAddress, Prefix ) @pytest.fixture def event_loop(): """Create an instance of the default event loop for the test session.""" loop = asyncio.get_event_loop_policy().new_event_loop() yield loop loop.close() @pytest.fixture def nautobot_config(): """Provide test configuration for Nautobot client.""" return NautobotConfig( nautobot_url="http://localhost:8000", # type: ignore nautobot_token="test-token-123", nautobot_verify_ssl=False, nautobot_timeout=30, nautobot_rate_limit=100 ) @pytest.fixture def sample_ip_address_data(): """Provide sample IP address data for testing.""" return { "id": "123e4567-e89b-12d3-a456-426614174000", "url": "http://localhost:8000/api/ipam/ip-addresses/123e4567-e89b-12d3-a456-426614174000/", "address": "192.168.1.100/24", "status": { "value": "active", "label": "Active" }, "role": { "value": "host", "label": "Host" }, "tenant": None, "vrf": None, "nat_inside": None, "nat_outside": None, "dns_name": "test.example.com", "description": "Test server IP address", "comments": "Used for testing", "tags": [], "custom_fields": {}, "created": "2024-01-01T12:00:00Z", "last_updated": "2024-01-01T12:00:00Z" } @pytest.fixture def sample_prefix_data(): """Provide sample prefix data for testing.""" return { "id": "456e7890-e89b-12d3-a456-426614174000", "url": "http://localhost:8000/api/ipam/prefixes/456e7890-e89b-12d3-a456-426614174000/", "prefix": "192.168.1.0/24", "status": { "value": "active", "label": "Active" }, "site": { "value": "site1", "label": "Site 1" }, "vrf": None, "tenant": None, "vlan": None, "role": { "value": "lan", "label": "LAN" }, "is_pool": False, "description": "Test network prefix", "comments": "Used for testing", "tags": [], "custom_fields": {}, "created": "2024-01-01T12:00:00Z", "last_updated": "2024-01-01T12:00:00Z" } @pytest.fixture def mock_httpx_response(): """Provide a mock httpx response.""" response = MagicMock() response.status_code = 200 response.is_success = True response.json.return_value = {"results": []} return response @pytest.fixture def mock_nautobot_client(nautobot_config, sample_ip_address_data, sample_prefix_data): """Provide a mock Nautobot client for testing.""" client = AsyncMock(spec=NautobotClient) client.config = nautobot_config client.base_url = str(nautobot_config.nautobot_url).rstrip('/') client.api_base = f"{client.base_url}/api" # Mock IP address methods sample_ip = IPAddress(**sample_ip_address_data) client.get_ip_addresses.return_value = [sample_ip] client.get_ip_address_by_id.return_value = sample_ip client.search_ip_addresses.return_value = [sample_ip] # Mock prefix methods sample_prefix = Prefix(**sample_prefix_data) client.get_prefixes.return_value = [sample_prefix] # Mock connection test client.test_connection.return_value = True # Mock context manager client.__aenter__.return_value = client client.__aexit__.return_value = None client.close.return_value = None return client @pytest.fixture def nautobot_api_responses(): """Provide sample API response data for different endpoints.""" return { "status": { "status": "ok", "version": "2.0.0" }, "ip_addresses": { "count": 1, "next": None, "previous": None, "results": [ { "id": "123e4567-e89b-12d3-a456-426614174000", "url": "http://localhost:8000/api/ipam/ip-addresses/123e4567-e89b-12d3-a456-426614174000/", "address": "192.168.1.100/24", "status": {"value": "active", "label": "Active"}, "role": {"value": "host", "label": "Host"}, "tenant": None, "vrf": None, "nat_inside": None, "nat_outside": None, "dns_name": "test.example.com", "description": "Test server IP address", "comments": "Used for testing", "tags": [], "custom_fields": {}, "created": "2024-01-01T12:00:00Z", "last_updated": "2024-01-01T12:00:00Z" } ] }, "prefixes": { "count": 1, "next": None, "previous": None, "results": [ { "id": "456e7890-e89b-12d3-a456-426614174000", "url": "http://localhost:8000/api/ipam/prefixes/456e7890-e89b-12d3-a456-426614174000/", "prefix": "192.168.1.0/24", "status": {"value": "active", "label": "Active"}, "site": {"value": "site1", "label": "Site 1"}, "vrf": None, "tenant": None, "vlan": None, "role": {"value": "lan", "label": "LAN"}, "is_pool": False, "description": "Test network prefix", "comments": "Used for testing", "tags": [], "custom_fields": {}, "created": "2024-01-01T12:00:00Z", "last_updated": "2024-01-01T12:00:00Z" } ] } }

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/aiopnet/mcp-nautobot'

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