Skip to main content
Glama
test_terminal_tools.py6.78 kB
"""终端工具测试""" from unittest.mock import MagicMock, patch import pytest from uart_mcp.tools.terminal import ( clear_buffer, close_session, create_session, get_session_info, list_sessions, read_output, send_command, ) @pytest.fixture def mock_terminal_manager(): """模拟终端管理器""" with patch("uart_mcp.tools.terminal.get_terminal_manager") as mock: yield mock class TestCreateSession: """测试 create_session 工具""" def test_create_session_success(self, mock_terminal_manager): """测试成功创建会话""" mock_info = MagicMock() mock_info.to_dict.return_value = { "session_id": "/dev/ttyUSB0", "port": "/dev/ttyUSB0", "config": {"line_ending": "CRLF"}, } mock_terminal_manager.return_value.create_session.return_value = mock_info result = create_session(port="/dev/ttyUSB0") assert result["session_id"] == "/dev/ttyUSB0" mock_terminal_manager.return_value.create_session.assert_called_once_with( port="/dev/ttyUSB0", line_ending="CRLF", local_echo=False, buffer_size=65536, ) def test_create_session_with_options(self, mock_terminal_manager): """测试带选项创建会话""" mock_info = MagicMock() mock_info.to_dict.return_value = {"session_id": "/dev/ttyUSB0"} mock_terminal_manager.return_value.create_session.return_value = mock_info create_session( port="/dev/ttyUSB0", line_ending="LF", local_echo=True, buffer_size=32768, ) mock_terminal_manager.return_value.create_session.assert_called_once_with( port="/dev/ttyUSB0", line_ending="LF", local_echo=True, buffer_size=32768, ) class TestCloseSession: """测试 close_session 工具""" def test_close_session_success(self, mock_terminal_manager): """测试成功关闭会话""" mock_terminal_manager.return_value.close_session.return_value = { "success": True, "session_id": "/dev/ttyUSB0", } result = close_session(session_id="/dev/ttyUSB0") assert result["success"] is True mock_terminal_manager.return_value.close_session.assert_called_once_with( "/dev/ttyUSB0" ) class TestSendCommand: """测试 send_command 工具""" def test_send_command_success(self, mock_terminal_manager): """测试成功发送命令""" mock_terminal_manager.return_value.send_command.return_value = { "success": True, "bytes_written": 10, } result = send_command(session_id="/dev/ttyUSB0", command="ls -la") assert result["success"] is True assert result["bytes_written"] == 10 mock_terminal_manager.return_value.send_command.assert_called_once_with( session_id="/dev/ttyUSB0", command="ls -la", add_line_ending=True, ) def test_send_command_without_line_ending(self, mock_terminal_manager): """测试发送命令(不带换行符)""" mock_terminal_manager.return_value.send_command.return_value = { "success": True, "bytes_written": 6, } send_command( session_id="/dev/ttyUSB0", command="ls -la", add_line_ending=False, ) mock_terminal_manager.return_value.send_command.assert_called_once_with( session_id="/dev/ttyUSB0", command="ls -la", add_line_ending=False, ) class TestReadOutput: """测试 read_output 工具""" def test_read_output_success(self, mock_terminal_manager): """测试成功读取输出""" mock_terminal_manager.return_value.read_output.return_value = { "data": "test output\n", "bytes_read": 12, } result = read_output(session_id="/dev/ttyUSB0") assert result["data"] == "test output\n" assert result["bytes_read"] == 12 mock_terminal_manager.return_value.read_output.assert_called_once_with( session_id="/dev/ttyUSB0", clear=True, ) def test_read_output_without_clear(self, mock_terminal_manager): """测试读取输出(不清空)""" mock_terminal_manager.return_value.read_output.return_value = { "data": "test", "bytes_read": 4, } read_output(session_id="/dev/ttyUSB0", clear=False) mock_terminal_manager.return_value.read_output.assert_called_once_with( session_id="/dev/ttyUSB0", clear=False, ) class TestListSessions: """测试 list_sessions 工具""" def test_list_sessions_empty(self, mock_terminal_manager): """测试空会话列表""" mock_terminal_manager.return_value.list_sessions.return_value = [] result = list_sessions() assert result["sessions"] == [] assert result["count"] == 0 def test_list_sessions_with_data(self, mock_terminal_manager): """测试有会话的列表""" mock_terminal_manager.return_value.list_sessions.return_value = [ {"session_id": "/dev/ttyUSB0"}, {"session_id": "/dev/ttyUSB1"}, ] result = list_sessions() assert len(result["sessions"]) == 2 assert result["count"] == 2 class TestGetSessionInfo: """测试 get_session_info 工具""" def test_get_session_info_success(self, mock_terminal_manager): """测试成功获取会话信息""" mock_terminal_manager.return_value.get_session_info.return_value = { "session_id": "/dev/ttyUSB0", "port": "/dev/ttyUSB0", "buffer_size": 100, "is_active": True, } result = get_session_info(session_id="/dev/ttyUSB0") assert result["session_id"] == "/dev/ttyUSB0" assert result["is_active"] is True mock_terminal_manager.return_value.get_session_info.assert_called_once_with( "/dev/ttyUSB0" ) class TestClearBuffer: """测试 clear_buffer 工具""" def test_clear_buffer_success(self, mock_terminal_manager): """测试成功清空缓冲区""" mock_terminal_manager.return_value.clear_buffer.return_value = { "success": True, "session_id": "/dev/ttyUSB0", } result = clear_buffer(session_id="/dev/ttyUSB0") assert result["success"] is True mock_terminal_manager.return_value.clear_buffer.assert_called_once_with( "/dev/ttyUSB0" )

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/donnel666/uart-mcp'

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