Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions lldb/source/Commands/CommandObjectProtocolServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,12 @@ class CommandObjectProtocolServerStart : public CommandObjectParsed {

ProtocolServer::Connection connection;
connection.protocol = protocol_and_mode->first;
connection.name =
formatv("[{0}]:{1}", uri->hostname.empty() ? "0.0.0.0" : uri->hostname,
uri->port.value_or(0));
if (connection.protocol == Socket::SocketProtocol::ProtocolUnixDomain)
connection.name = uri->path;
else
connection.name = formatv(
"[{0}]:{1}", uri->hostname.empty() ? "0.0.0.0" : uri->hostname,
uri->port.value_or(0));

if (llvm::Error error = server->Start(connection)) {
result.AppendErrorWithFormatv("{0}", llvm::fmt_consume(std::move(error)));
Expand All @@ -90,6 +93,7 @@ class CommandObjectProtocolServerStart : public CommandObjectParsed {
result.AppendMessageWithFormatv(
"{0} server started with connection listeners: {1}", protocol,
address);
result.SetStatus(eReturnStatusSuccessFinishNoResult);
}
}
};
Expand Down
23 changes: 23 additions & 0 deletions lldb/test/API/commands/protocol/TestMCPUnixSocket.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import os
import tempfile

from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *


class MCPUnixSocketCommandTestCase(TestBase):
@skipIfWindows
@no_debug_info_test
def test_unix_socket(self):
"""
Test if we can start an MCP protocol-server accepting unix sockets
"""

temp_directory = tempfile.TemporaryDirectory()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One note, for unix sockets there is often a character limit of around 104~108 chars depending on the platform.

This will often fetch a directory using TEMP_DIR, which may be overridden by say a CI system to something pretty long.

We may either want to skip the test if the tempdir is to long or try to find a shorter directory like "/tmp", if it exists.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! I've pushed a change to make sure we skip if the socket path is over that limit

socket_file = os.path.join(temp_directory.name, "mcp.sock")

self.expect(
f"protocol-server start MCP accept://{socket_file}",
startstr="MCP server started with connection listeners:",
substrs=[f"unix-connect://{socket_file}"],
)
Loading