|
15 | 15 | #include "gmock/gmock.h" |
16 | 16 | #include "gtest/gtest.h" |
17 | 17 | #include <chrono> |
| 18 | +#if __linux__ |
| 19 | +#include <lldb/Host/linux/AbstractSocket.h> |
| 20 | +#endif |
18 | 21 |
|
19 | 22 | using namespace lldb_private; |
20 | 23 |
|
@@ -339,6 +342,48 @@ TEST_F(SocketTest, DomainGetConnectURI) { |
339 | 342 | } |
340 | 343 | #endif |
341 | 344 |
|
| 345 | +#if LLDB_ENABLE_POSIX |
| 346 | +TEST_F(SocketTest, DomainSocketFromBoundNativeSocket) { |
| 347 | + // Generate a name for the domain socket. |
| 348 | + llvm::SmallString<64> name; |
| 349 | + std::error_code EC = llvm::sys::fs::createUniqueDirectory( |
| 350 | + "DomainSocketFromBoundNativeSocket", name); |
| 351 | + ASSERT_FALSE(EC); |
| 352 | + llvm::sys::path::append(name, "test"); |
| 353 | + |
| 354 | + DomainSocket socket(true); |
| 355 | + Status error = socket.Listen(name, /*backlog=*/10); |
| 356 | + ASSERT_FALSE(error.ToError()); |
| 357 | + NativeSocket native_socket = socket.GetNativeSocket(); |
| 358 | + |
| 359 | + llvm::Expected<std::unique_ptr<DomainSocket>> sock = |
| 360 | + DomainSocket::FromBoundNativeSocket(native_socket, /*should_close=*/true); |
| 361 | + ASSERT_THAT_EXPECTED(sock, llvm::Succeeded()); |
| 362 | + ASSERT_EQ(Socket::ProtocolUnixDomain, sock->get()->GetSocketProtocol()); |
| 363 | +} |
| 364 | +#endif |
| 365 | + |
| 366 | +#if __linux__ |
| 367 | +TEST_F(SocketTest, AbstractSocketFromBoundNativeSocket) { |
| 368 | + // Generate a name for the abstract socket. |
| 369 | + llvm::SmallString<64> name; |
| 370 | + std::error_code EC = llvm::sys::fs::createUniqueDirectory( |
| 371 | + "AbstractSocketFromBoundNativeSocket", name); |
| 372 | + ASSERT_FALSE(EC); |
| 373 | + llvm::sys::path::append(name, "test"); |
| 374 | + |
| 375 | + AbstractSocket socket; |
| 376 | + Status error = socket.Listen(name, /*backlog=*/10); |
| 377 | + ASSERT_FALSE(error.ToError()); |
| 378 | + NativeSocket native_socket = socket.GetNativeSocket(); |
| 379 | + |
| 380 | + llvm::Expected<std::unique_ptr<DomainSocket>> sock = |
| 381 | + DomainSocket::FromBoundNativeSocket(native_socket, /*should_close=*/true); |
| 382 | + ASSERT_THAT_EXPECTED(sock, llvm::Succeeded()); |
| 383 | + ASSERT_EQ(Socket::ProtocolUnixAbstract, sock->get()->GetSocketProtocol()); |
| 384 | +} |
| 385 | +#endif |
| 386 | + |
342 | 387 | INSTANTIATE_TEST_SUITE_P( |
343 | 388 | SocketTests, SocketTest, |
344 | 389 | testing::Values(SocketTestParams{/*is_ipv6=*/false, |
|
0 commit comments