Skip to main content
Glama

MCP KQL Server

test_mcp_server.py•6.41 kB
""" Unit tests for the MCP server module. Author: Arjun Trivedi Email: arjuntrivedi42@yahoo.com """ import unittest import json from unittest.mock import patch from mcp_kql_server.constants import TEST_CONFIG class TestMCPServerFunctions(unittest.TestCase): """Test cases for MCP server functions and operations.""" def setUp(self): """Set up test fixtures.""" self.valid_query = f"cluster('{TEST_CONFIG['mock_cluster_uri']}').database('{TEST_CONFIG['mock_database']}').{TEST_CONFIG['mock_table']} | take 10" self.test_cluster_uri = TEST_CONFIG["mock_cluster_uri"] self.test_database = TEST_CONFIG["mock_database"] self.test_table = TEST_CONFIG["mock_table"] def test_query_processor_integration(self): """Test that QueryProcessor is properly integrated.""" from mcp_kql_server.utils import QueryProcessor from mcp_kql_server.memory import get_memory_manager # Test that QueryProcessor can be instantiated memory_manager = get_memory_manager() processor = QueryProcessor(memory_manager) # Test basic functionality self.assertIsNotNone(processor) self.assertIsNotNone(processor.memory_manager) def test_error_handler_enhancement(self): """Test enhanced ErrorHandler functionality.""" from mcp_kql_server.utils import ErrorHandler # Test basic error handling test_error = Exception("Test error") result = ErrorHandler.handle_kusto_error(test_error) self.assertIsInstance(result, dict) self.assertIn("success", result) self.assertIn("error", result) self.assertIn("suggestions", result) self.assertIn("recovery_actions", result) self.assertFalse(result["success"]) @patch('mcp_kql_server.mcp_server.kusto_manager_global', {'authenticated': True}) def test_natural_language_query_processing(self): """Test natural language query processing logic.""" from mcp_kql_server.mcp_server import _generate_kql_from_natural_language # This would normally be an async function, but we're testing the logic # In a real test, you'd use asyncio.run() or similar self.assertTrue(callable(_generate_kql_from_natural_language)) def test_schema_manager_integration(self): """Test SchemaManager integration.""" from mcp_kql_server.utils import SchemaManager from mcp_kql_server.memory import get_memory_manager memory_manager = get_memory_manager() schema_manager = SchemaManager(memory_manager) self.assertIsNotNone(schema_manager) self.assertIsNotNone(schema_manager.memory_manager) def test_query_validation_logic(self): """Test query validation and preprocessing.""" from mcp_kql_server.utils import QueryProcessor from mcp_kql_server.memory import get_memory_manager processor = QueryProcessor(get_memory_manager()) # Test query cleaning dirty_query = " // Comment\n MyTable | take 10 " clean_query = processor.clean(dirty_query) self.assertIsInstance(clean_query, str) self.assertNotIn("//", clean_query) # Test query parsing test_query = "MyTable | take 10 | project Column1, Column2" parsed = processor.parse(test_query) self.assertIsInstance(parsed, dict) self.assertIn("tables", parsed) self.assertIn("operations", parsed) def test_bracket_if_needed_function(self): """Test the bracket_if_needed utility function.""" from mcp_kql_server.utils import bracket_if_needed # Test normal column name (should not be bracketed) normal_column = "RegularColumn" self.assertEqual(bracket_if_needed(normal_column), normal_column) # Test column with spaces (should be bracketed) spaced_column = "Column With Spaces" result = bracket_if_needed(spaced_column) self.assertTrue(result.startswith("['") and result.endswith("']")) # Test reserved word reserved_word = "table" # This is a KQL reserved word result = bracket_if_needed(reserved_word) self.assertTrue(result.startswith("['") and result.endswith("']")) def test_configuration_constants(self): """Test that required configuration constants are properly defined.""" from mcp_kql_server.constants import ( SERVER_NAME, SERVER_DESCRIPTION, CONNECTION_CONFIG, ERROR_HANDLING_CONFIG, KQL_RESERVED_WORDS ) self.assertIsInstance(SERVER_NAME, str) self.assertIsInstance(SERVER_DESCRIPTION, str) self.assertIsInstance(CONNECTION_CONFIG, dict) self.assertIsInstance(ERROR_HANDLING_CONFIG, dict) self.assertIsInstance(KQL_RESERVED_WORDS, (list, frozenset)) self.assertGreater(len(KQL_RESERVED_WORDS), 0) def test_json_serialization_helper(self): """Test the JSON serialization helper from ErrorHandler.""" from mcp_kql_server.utils import ErrorHandler # Test with simple data simple_data = {"key": "value", "number": 42} result = ErrorHandler.safe_json_dumps(simple_data) self.assertIsInstance(result, str) parsed = json.loads(result) self.assertEqual(parsed["key"], "value") self.assertEqual(parsed["number"], 42) # Test with complex data that might cause issues complex_data = {"datetime": "2023-01-01T00:00:00", "none_value": None} result = ErrorHandler.safe_json_dumps(complex_data) self.assertIsInstance(result, str) def test_memory_manager_availability(self): """Test that memory manager is properly available.""" from mcp_kql_server.memory import get_memory_manager manager = get_memory_manager() self.assertIsNotNone(manager) # Test basic memory manager functionality self.assertTrue(hasattr(manager, 'get_memory_stats')) # Note: clear_schema_cache is available via SchemaManager, not directly on memory manager self.assertTrue(hasattr(manager, 'corpus') or hasattr(manager, 'memory_path')) if __name__ == "__main__": unittest.main()

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/4R9UN/mcp-kql-server'

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