[Lldb-commits] [lldb] 0964328 - [lldb] Fix the SocketTest failure on unsupported hosts (#118673)
via lldb-commits
lldb-commits at lists.llvm.org
Thu Dec 5 09:08:21 PST 2024
Author: John Harrison
Date: 2024-12-05T09:08:17-08:00
New Revision: 0964328c2960159f66ad232bb2257fbabab3c0ec
URL: https://github.com/llvm/llvm-project/commit/0964328c2960159f66ad232bb2257fbabab3c0ec
DIFF: https://github.com/llvm/llvm-project/commit/0964328c2960159f66ad232bb2257fbabab3c0ec.diff
LOG: [lldb] Fix the SocketTest failure on unsupported hosts (#118673)
The test `SocketTest::TCPListen0MultiListenerGetListeningConnectionURI`
is failing on hosts that do not map `localhost` to both an ipv4 and ipv6
address. For example this build
https://lab.llvm.org/buildbot/#/builders/195/builds/1909.
To fix this, I added a helper to validate if the host has an /etc/hosts
entry for both ipv4 and ipv6, otherwise we skip the test.
Added:
Modified:
lldb/unittests/Host/SocketTest.cpp
lldb/unittests/TestingSupport/Host/SocketTestUtilities.cpp
lldb/unittests/TestingSupport/Host/SocketTestUtilities.h
Removed:
################################################################################
diff --git a/lldb/unittests/Host/SocketTest.cpp b/lldb/unittests/Host/SocketTest.cpp
index 689ef4019c618c..9cbf3e26b0883f 100644
--- a/lldb/unittests/Host/SocketTest.cpp
+++ b/lldb/unittests/Host/SocketTest.cpp
@@ -271,7 +271,7 @@ TEST_P(SocketTest, TCPListen0GetListeningConnectionURI) {
}
TEST_F(SocketTest, TCPListen0MultiListenerGetListeningConnectionURI) {
- if (!HostSupportsIPv6() || !HostSupportsIPv4())
+ if (!HostSupportsLocalhostToIPv4() || !HostSupportsLocalhostToIPv6())
return;
llvm::Expected<std::unique_ptr<TCPSocket>> sock =
diff --git a/lldb/unittests/TestingSupport/Host/SocketTestUtilities.cpp b/lldb/unittests/TestingSupport/Host/SocketTestUtilities.cpp
index eb5bda0fabc770..80545b8c533a03 100644
--- a/lldb/unittests/TestingSupport/Host/SocketTestUtilities.cpp
+++ b/lldb/unittests/TestingSupport/Host/SocketTestUtilities.cpp
@@ -116,6 +116,30 @@ bool lldb_private::HostSupportsIPv6() {
return CheckIPSupport("IPv6", "[::1]:0");
}
+bool lldb_private::HostSupportsLocalhostToIPv4() {
+ if (!HostSupportsIPv4())
+ return false;
+
+ auto addresses = SocketAddress::GetAddressInfo(
+ "localhost", nullptr, AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP);
+ return std::find_if(addresses.begin(), addresses.end(),
+ [](SocketAddress &addr) {
+ return addr.GetFamily() == AF_INET;
+ }) != addresses.end();
+}
+
+bool lldb_private::HostSupportsLocalhostToIPv6() {
+ if (!HostSupportsIPv6())
+ return false;
+
+ auto addresses = SocketAddress::GetAddressInfo(
+ "localhost", nullptr, AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP);
+ return std::find_if(addresses.begin(), addresses.end(),
+ [](SocketAddress &addr) {
+ return addr.GetFamily() == AF_INET6;
+ }) != addresses.end();
+}
+
llvm::Expected<std::string> lldb_private::GetLocalhostIP() {
if (HostSupportsIPv4())
return "127.0.0.1";
diff --git a/lldb/unittests/TestingSupport/Host/SocketTestUtilities.h b/lldb/unittests/TestingSupport/Host/SocketTestUtilities.h
index efd17428ceefb6..e5bab163cf82eb 100644
--- a/lldb/unittests/TestingSupport/Host/SocketTestUtilities.h
+++ b/lldb/unittests/TestingSupport/Host/SocketTestUtilities.h
@@ -43,6 +43,11 @@ void CreateDomainConnectedSockets(llvm::StringRef path,
bool HostSupportsIPv6();
bool HostSupportsIPv4();
+/// Returns true if the name `localhost` maps to a loopback IPv4 address.
+bool HostSupportsLocalhostToIPv4();
+/// Returns true if the name `localhost` maps to a loopback IPv6 address.
+bool HostSupportsLocalhostToIPv6();
+
/// Return an IP for localhost based on host support.
///
/// This will return either "127.0.0.1" if IPv4 is detected, or "[::1]" if IPv6
More information about the lldb-commits
mailing list