aboutsummaryrefslogtreecommitdiff
path: root/lldb/unittests/Host/SocketTest.cpp
diff options
context:
space:
mode:
authorJohn Harrison <harjohn@google.com>2024-12-03 11:11:32 -0800
committerGitHub <noreply@github.com>2024-12-03 11:11:32 -0800
commit384562495bae44be053c1bbd40c359ef4b82d803 (patch)
tree655b64977ee1bf921fee64a874ff484f583fd275 /lldb/unittests/Host/SocketTest.cpp
parent0ccd18ead138e9efc56b6c16ded6c3f4df86ae91 (diff)
downloadllvm-384562495bae44be053c1bbd40c359ef4b82d803.zip
llvm-384562495bae44be053c1bbd40c359ef4b82d803.tar.gz
llvm-384562495bae44be053c1bbd40c359ef4b82d803.tar.bz2
[lldb] For a host socket, add a method to print the listening address. (#118330)
This is most useful if you are listening on an address like 'localhost:0' and want to know the resolved ip + port of the socket listener.
Diffstat (limited to 'lldb/unittests/Host/SocketTest.cpp')
-rw-r--r--lldb/unittests/Host/SocketTest.cpp41
1 files changed, 40 insertions, 1 deletions
diff --git a/lldb/unittests/Host/SocketTest.cpp b/lldb/unittests/Host/SocketTest.cpp
index b20cfe5..a74352c 100644
--- a/lldb/unittests/Host/SocketTest.cpp
+++ b/lldb/unittests/Host/SocketTest.cpp
@@ -88,6 +88,28 @@ TEST_P(SocketTest, DomainListenConnectAccept) {
CreateDomainConnectedSockets(Path, &socket_a_up, &socket_b_up);
}
+TEST_P(SocketTest, DomainListenGetListeningConnectionURI) {
+ llvm::SmallString<64> Path;
+ std::error_code EC =
+ llvm::sys::fs::createUniqueDirectory("DomainListenConnectAccept", Path);
+ ASSERT_FALSE(EC);
+ llvm::sys::path::append(Path, "test");
+
+ // Skip the test if the $TMPDIR is too long to hold a domain socket.
+ if (Path.size() > 107u)
+ return;
+
+ auto listen_socket_up = std::make_unique<DomainSocket>(
+ /*should_close=*/true);
+ Status error = listen_socket_up->Listen(Path, 5);
+ ASSERT_THAT_ERROR(error.ToError(), llvm::Succeeded());
+ ASSERT_TRUE(listen_socket_up->IsValid());
+
+ ASSERT_THAT(
+ listen_socket_up->GetListeningConnectionURI(),
+ testing::ElementsAre(llvm::formatv("unix-connect://{0}", Path).str()));
+}
+
TEST_P(SocketTest, DomainMainLoopAccept) {
llvm::SmallString<64> Path;
std::error_code EC =
@@ -225,12 +247,29 @@ TEST_P(SocketTest, TCPListen0GetPort) {
if (!HostSupportsIPv4())
return;
llvm::Expected<std::unique_ptr<TCPSocket>> sock =
- Socket::TcpListen("10.10.12.3:0", false);
+ Socket::TcpListen("10.10.12.3:0", 5);
ASSERT_THAT_EXPECTED(sock, llvm::Succeeded());
ASSERT_TRUE(sock.get()->IsValid());
EXPECT_NE(sock.get()->GetLocalPortNumber(), 0);
}
+TEST_P(SocketTest, TCPListen0GetListeningConnectionURI) {
+ if (!HostSupportsProtocol())
+ return;
+
+ std::string addr = llvm::formatv("[{0}]:0", GetParam().localhost_ip).str();
+ llvm::Expected<std::unique_ptr<TCPSocket>> sock = Socket::TcpListen(addr);
+ ASSERT_THAT_EXPECTED(sock, llvm::Succeeded());
+ ASSERT_TRUE(sock.get()->IsValid());
+
+ EXPECT_THAT(
+ sock.get()->GetListeningConnectionURI(),
+ testing::ElementsAre(llvm::formatv("connection://[{0}]:{1}",
+ GetParam().localhost_ip,
+ sock->get()->GetLocalPortNumber())
+ .str()));
+}
+
TEST_P(SocketTest, TCPGetConnectURI) {
std::unique_ptr<TCPSocket> socket_a_up;
std::unique_ptr<TCPSocket> socket_b_up;