mcp-dbutils

"""Test logging module""" import io import sys from datetime import datetime import pytest from mcp_dbutils.log import create_logger def test_log_basic_output(): """Test basic log output functionality""" # 捕获stderr输出 stderr = io.StringIO() sys.stderr = stderr # 创建logger logger = create_logger("test") # 测试日志输出 test_message = "Test log message" logger("info", test_message) # 验证输出 output = stderr.getvalue() assert "test" in output assert "info" in output assert test_message in output assert output.count("\n") == 1 # 确保只有一行输出 # 还原stderr sys.stderr = sys.__stderr__ def test_log_debug_mode(): """Test debug mode behavior""" stderr = io.StringIO() sys.stderr = stderr # 创建debug模式的logger logger = create_logger("test", is_debug=True) # 测试debug日志 debug_message = "Debug message" logger("debug", debug_message) # 验证debug消息被输出 output = stderr.getvalue() assert debug_message in output assert "debug" in output # 清空输出缓冲 stderr.truncate(0) stderr.seek(0) # 创建非debug模式的logger logger = create_logger("test", is_debug=False) # 测试debug日志不被输出 logger("debug", debug_message) assert not stderr.getvalue() sys.stderr = sys.__stderr__ def test_log_timestamp(): """Test log timestamp format""" stderr = io.StringIO() sys.stderr = stderr logger = create_logger("test") logger("info", "Test message") output = stderr.getvalue() # 验证时间戳格式 (ISO格式带毫秒) timestamp = output.split()[0] try: datetime.fromisoformat(timestamp.rstrip('Z')) except ValueError: pytest.fail(f"Invalid timestamp format: {timestamp}") sys.stderr = sys.__stderr__ def test_log_multiple_levels(): """Test different log levels""" stderr = io.StringIO() sys.stderr = stderr logger = create_logger("test") # 测试不同级别的日志 levels = ["info", "warning", "error"] messages = { "info": "Info message", "warning": "Warning message", "error": "Error message" } for level in levels: logger(level, messages[level]) output = stderr.getvalue() # 验证所有级别的消息都被正确记录 for level, message in messages.items(): assert f"[{level}]" in output assert message in output sys.stderr = sys.__stderr__