diff options
Diffstat (limited to 'lldb/unittests/Host')
-rw-r--r-- | lldb/unittests/Host/FileSpecTest.cpp | 200 | ||||
-rw-r--r-- | lldb/unittests/Host/SocketAddressTest.cpp | 88 | ||||
-rw-r--r-- | lldb/unittests/Host/SocketTest.cpp | 328 | ||||
-rw-r--r-- | lldb/unittests/Host/SymbolsTest.cpp | 27 |
4 files changed, 329 insertions, 314 deletions
diff --git a/lldb/unittests/Host/FileSpecTest.cpp b/lldb/unittests/Host/FileSpecTest.cpp index 522f4bc69ea..765dd9e0b5b 100644 --- a/lldb/unittests/Host/FileSpecTest.cpp +++ b/lldb/unittests/Host/FileSpecTest.cpp @@ -13,105 +13,115 @@ using namespace lldb_private; -TEST(FileSpecTest, FileAndDirectoryComponents) -{ - FileSpec fs_posix("/foo/bar", false, FileSpec::ePathSyntaxPosix); - EXPECT_STREQ("/foo/bar", fs_posix.GetCString()); - EXPECT_STREQ("/foo", fs_posix.GetDirectory().GetCString()); - EXPECT_STREQ("bar", fs_posix.GetFilename().GetCString()); - - FileSpec fs_windows("F:\\bar", false, FileSpec::ePathSyntaxWindows); - EXPECT_STREQ("F:\\bar", fs_windows.GetCString()); - // EXPECT_STREQ("F:\\", fs_windows.GetDirectory().GetCString()); // It returns "F:/" - EXPECT_STREQ("bar", fs_windows.GetFilename().GetCString()); - - FileSpec fs_posix_root("/", false, FileSpec::ePathSyntaxPosix); - EXPECT_STREQ("/", fs_posix_root.GetCString()); - EXPECT_EQ(nullptr, fs_posix_root.GetDirectory().GetCString()); - EXPECT_STREQ("/", fs_posix_root.GetFilename().GetCString()); - - FileSpec fs_windows_drive("F:", false, FileSpec::ePathSyntaxWindows); - EXPECT_STREQ("F:", fs_windows_drive.GetCString()); - EXPECT_EQ(nullptr, fs_windows_drive.GetDirectory().GetCString()); - EXPECT_STREQ("F:", fs_windows_drive.GetFilename().GetCString()); - - FileSpec fs_windows_root("F:\\", false, FileSpec::ePathSyntaxWindows); - EXPECT_STREQ("F:\\", fs_windows_root.GetCString()); - EXPECT_STREQ("F:", fs_windows_root.GetDirectory().GetCString()); - // EXPECT_STREQ("\\", fs_windows_root.GetFilename().GetCString()); // It returns "/" - - FileSpec fs_posix_long("/foo/bar/baz", false, FileSpec::ePathSyntaxPosix); - EXPECT_STREQ("/foo/bar/baz", fs_posix_long.GetCString()); - EXPECT_STREQ("/foo/bar", fs_posix_long.GetDirectory().GetCString()); - EXPECT_STREQ("baz", fs_posix_long.GetFilename().GetCString()); - - FileSpec fs_windows_long("F:\\bar\\baz", false, FileSpec::ePathSyntaxWindows); - EXPECT_STREQ("F:\\bar\\baz", fs_windows_long.GetCString()); - // EXPECT_STREQ("F:\\bar", fs_windows_long.GetDirectory().GetCString()); // It returns "F:/bar" - EXPECT_STREQ("baz", fs_windows_long.GetFilename().GetCString()); - - FileSpec fs_posix_trailing_slash("/foo/bar/", false, FileSpec::ePathSyntaxPosix); - EXPECT_STREQ("/foo/bar/.", fs_posix_trailing_slash.GetCString()); - EXPECT_STREQ("/foo/bar", fs_posix_trailing_slash.GetDirectory().GetCString()); - EXPECT_STREQ(".", fs_posix_trailing_slash.GetFilename().GetCString()); - - FileSpec fs_windows_trailing_slash("F:\\bar\\", false, FileSpec::ePathSyntaxWindows); - EXPECT_STREQ("F:\\bar\\.", fs_windows_trailing_slash.GetCString()); - // EXPECT_STREQ("F:\\bar", fs_windows_trailing_slash.GetDirectory().GetCString()); // It returns "F:/bar" - EXPECT_STREQ(".", fs_windows_trailing_slash.GetFilename().GetCString()); +TEST(FileSpecTest, FileAndDirectoryComponents) { + FileSpec fs_posix("/foo/bar", false, FileSpec::ePathSyntaxPosix); + EXPECT_STREQ("/foo/bar", fs_posix.GetCString()); + EXPECT_STREQ("/foo", fs_posix.GetDirectory().GetCString()); + EXPECT_STREQ("bar", fs_posix.GetFilename().GetCString()); + + FileSpec fs_windows("F:\\bar", false, FileSpec::ePathSyntaxWindows); + EXPECT_STREQ("F:\\bar", fs_windows.GetCString()); + // EXPECT_STREQ("F:\\", fs_windows.GetDirectory().GetCString()); // It returns + // "F:/" + EXPECT_STREQ("bar", fs_windows.GetFilename().GetCString()); + + FileSpec fs_posix_root("/", false, FileSpec::ePathSyntaxPosix); + EXPECT_STREQ("/", fs_posix_root.GetCString()); + EXPECT_EQ(nullptr, fs_posix_root.GetDirectory().GetCString()); + EXPECT_STREQ("/", fs_posix_root.GetFilename().GetCString()); + + FileSpec fs_windows_drive("F:", false, FileSpec::ePathSyntaxWindows); + EXPECT_STREQ("F:", fs_windows_drive.GetCString()); + EXPECT_EQ(nullptr, fs_windows_drive.GetDirectory().GetCString()); + EXPECT_STREQ("F:", fs_windows_drive.GetFilename().GetCString()); + + FileSpec fs_windows_root("F:\\", false, FileSpec::ePathSyntaxWindows); + EXPECT_STREQ("F:\\", fs_windows_root.GetCString()); + EXPECT_STREQ("F:", fs_windows_root.GetDirectory().GetCString()); + // EXPECT_STREQ("\\", fs_windows_root.GetFilename().GetCString()); // It + // returns "/" + + FileSpec fs_posix_long("/foo/bar/baz", false, FileSpec::ePathSyntaxPosix); + EXPECT_STREQ("/foo/bar/baz", fs_posix_long.GetCString()); + EXPECT_STREQ("/foo/bar", fs_posix_long.GetDirectory().GetCString()); + EXPECT_STREQ("baz", fs_posix_long.GetFilename().GetCString()); + + FileSpec fs_windows_long("F:\\bar\\baz", false, FileSpec::ePathSyntaxWindows); + EXPECT_STREQ("F:\\bar\\baz", fs_windows_long.GetCString()); + // EXPECT_STREQ("F:\\bar", fs_windows_long.GetDirectory().GetCString()); // It + // returns "F:/bar" + EXPECT_STREQ("baz", fs_windows_long.GetFilename().GetCString()); + + FileSpec fs_posix_trailing_slash("/foo/bar/", false, + FileSpec::ePathSyntaxPosix); + EXPECT_STREQ("/foo/bar/.", fs_posix_trailing_slash.GetCString()); + EXPECT_STREQ("/foo/bar", fs_posix_trailing_slash.GetDirectory().GetCString()); + EXPECT_STREQ(".", fs_posix_trailing_slash.GetFilename().GetCString()); + + FileSpec fs_windows_trailing_slash("F:\\bar\\", false, + FileSpec::ePathSyntaxWindows); + EXPECT_STREQ("F:\\bar\\.", fs_windows_trailing_slash.GetCString()); + // EXPECT_STREQ("F:\\bar", + // fs_windows_trailing_slash.GetDirectory().GetCString()); // It returns + // "F:/bar" + EXPECT_STREQ(".", fs_windows_trailing_slash.GetFilename().GetCString()); } -TEST(FileSpecTest, AppendPathComponent) -{ - FileSpec fs_posix("/foo", false, FileSpec::ePathSyntaxPosix); - fs_posix.AppendPathComponent("bar"); - EXPECT_STREQ("/foo/bar", fs_posix.GetCString()); - EXPECT_STREQ("/foo", fs_posix.GetDirectory().GetCString()); - EXPECT_STREQ("bar", fs_posix.GetFilename().GetCString()); - - FileSpec fs_posix_2("/foo", false, FileSpec::ePathSyntaxPosix); - fs_posix_2.AppendPathComponent("//bar/baz"); - EXPECT_STREQ("/foo/bar/baz", fs_posix_2.GetCString()); - EXPECT_STREQ("/foo/bar", fs_posix_2.GetDirectory().GetCString()); - EXPECT_STREQ("baz", fs_posix_2.GetFilename().GetCString()); - - FileSpec fs_windows("F:\\bar", false, FileSpec::ePathSyntaxWindows); - fs_windows.AppendPathComponent("baz"); - EXPECT_STREQ("F:\\bar\\baz", fs_windows.GetCString()); - // EXPECT_STREQ("F:\\bar", fs_windows.GetDirectory().GetCString()); // It returns "F:/bar" - EXPECT_STREQ("baz", fs_windows.GetFilename().GetCString()); - - FileSpec fs_posix_root("/", false, FileSpec::ePathSyntaxPosix); - fs_posix_root.AppendPathComponent("bar"); - EXPECT_STREQ("/bar", fs_posix_root.GetCString()); - EXPECT_STREQ("/", fs_posix_root.GetDirectory().GetCString()); - EXPECT_STREQ("bar", fs_posix_root.GetFilename().GetCString()); - - FileSpec fs_windows_root("F:\\", false, FileSpec::ePathSyntaxWindows); - fs_windows_root.AppendPathComponent("bar"); - EXPECT_STREQ("F:\\bar", fs_windows_root.GetCString()); - // EXPECT_STREQ("F:\\", fs_windows_root.GetDirectory().GetCString()); // It returns "F:/" - EXPECT_STREQ("bar", fs_windows_root.GetFilename().GetCString()); +TEST(FileSpecTest, AppendPathComponent) { + FileSpec fs_posix("/foo", false, FileSpec::ePathSyntaxPosix); + fs_posix.AppendPathComponent("bar"); + EXPECT_STREQ("/foo/bar", fs_posix.GetCString()); + EXPECT_STREQ("/foo", fs_posix.GetDirectory().GetCString()); + EXPECT_STREQ("bar", fs_posix.GetFilename().GetCString()); + + FileSpec fs_posix_2("/foo", false, FileSpec::ePathSyntaxPosix); + fs_posix_2.AppendPathComponent("//bar/baz"); + EXPECT_STREQ("/foo/bar/baz", fs_posix_2.GetCString()); + EXPECT_STREQ("/foo/bar", fs_posix_2.GetDirectory().GetCString()); + EXPECT_STREQ("baz", fs_posix_2.GetFilename().GetCString()); + + FileSpec fs_windows("F:\\bar", false, FileSpec::ePathSyntaxWindows); + fs_windows.AppendPathComponent("baz"); + EXPECT_STREQ("F:\\bar\\baz", fs_windows.GetCString()); + // EXPECT_STREQ("F:\\bar", fs_windows.GetDirectory().GetCString()); // It + // returns "F:/bar" + EXPECT_STREQ("baz", fs_windows.GetFilename().GetCString()); + + FileSpec fs_posix_root("/", false, FileSpec::ePathSyntaxPosix); + fs_posix_root.AppendPathComponent("bar"); + EXPECT_STREQ("/bar", fs_posix_root.GetCString()); + EXPECT_STREQ("/", fs_posix_root.GetDirectory().GetCString()); + EXPECT_STREQ("bar", fs_posix_root.GetFilename().GetCString()); + + FileSpec fs_windows_root("F:\\", false, FileSpec::ePathSyntaxWindows); + fs_windows_root.AppendPathComponent("bar"); + EXPECT_STREQ("F:\\bar", fs_windows_root.GetCString()); + // EXPECT_STREQ("F:\\", fs_windows_root.GetDirectory().GetCString()); // It + // returns "F:/" + EXPECT_STREQ("bar", fs_windows_root.GetFilename().GetCString()); } -TEST(FileSpecTest, CopyByAppendingPathComponent) -{ - FileSpec fs = FileSpec("/foo", false, FileSpec::ePathSyntaxPosix).CopyByAppendingPathComponent("bar"); - EXPECT_STREQ("/foo/bar", fs.GetCString()); - EXPECT_STREQ("/foo", fs.GetDirectory().GetCString()); - EXPECT_STREQ("bar", fs.GetFilename().GetCString()); +TEST(FileSpecTest, CopyByAppendingPathComponent) { + FileSpec fs = FileSpec("/foo", false, FileSpec::ePathSyntaxPosix) + .CopyByAppendingPathComponent("bar"); + EXPECT_STREQ("/foo/bar", fs.GetCString()); + EXPECT_STREQ("/foo", fs.GetDirectory().GetCString()); + EXPECT_STREQ("bar", fs.GetFilename().GetCString()); } -TEST(FileSpecTest, Equal) -{ - FileSpec backward("C:\\foo\\bar", false, FileSpec::ePathSyntaxWindows); - FileSpec forward("C:/foo/bar", false, FileSpec::ePathSyntaxWindows); - EXPECT_EQ(forward, backward); - - const bool full_match = true; - const bool remove_backup_dots = true; - EXPECT_TRUE(FileSpec::Equal(forward, backward, full_match, remove_backup_dots)); - EXPECT_TRUE(FileSpec::Equal(forward, backward, full_match, !remove_backup_dots)); - EXPECT_TRUE(FileSpec::Equal(forward, backward, !full_match, remove_backup_dots)); - EXPECT_TRUE(FileSpec::Equal(forward, backward, !full_match, !remove_backup_dots)); +TEST(FileSpecTest, Equal) { + FileSpec backward("C:\\foo\\bar", false, FileSpec::ePathSyntaxWindows); + FileSpec forward("C:/foo/bar", false, FileSpec::ePathSyntaxWindows); + EXPECT_EQ(forward, backward); + + const bool full_match = true; + const bool remove_backup_dots = true; + EXPECT_TRUE( + FileSpec::Equal(forward, backward, full_match, remove_backup_dots)); + EXPECT_TRUE( + FileSpec::Equal(forward, backward, full_match, !remove_backup_dots)); + EXPECT_TRUE( + FileSpec::Equal(forward, backward, !full_match, remove_backup_dots)); + EXPECT_TRUE( + FileSpec::Equal(forward, backward, !full_match, !remove_backup_dots)); } diff --git a/lldb/unittests/Host/SocketAddressTest.cpp b/lldb/unittests/Host/SocketAddressTest.cpp index 6b27e04ce70..3c18137ac06 100644 --- a/lldb/unittests/Host/SocketAddressTest.cpp +++ b/lldb/unittests/Host/SocketAddressTest.cpp @@ -7,68 +7,64 @@ // //===----------------------------------------------------------------------===// - #include "gtest/gtest.h" #include "lldb/Host/SocketAddress.h" -namespace -{ - class SocketAddressTest: public ::testing::Test - { - }; +namespace { +class SocketAddressTest : public ::testing::Test {}; } using namespace lldb_private; -TEST_F (SocketAddressTest, Set) -{ - SocketAddress sa; - ASSERT_TRUE (sa.SetToLocalhost (AF_INET, 1138)); - ASSERT_STREQ ("127.0.0.1", sa.GetIPAddress ().c_str ()); - ASSERT_EQ (1138, sa.GetPort ()); +TEST_F(SocketAddressTest, Set) { + SocketAddress sa; + ASSERT_TRUE(sa.SetToLocalhost(AF_INET, 1138)); + ASSERT_STREQ("127.0.0.1", sa.GetIPAddress().c_str()); + ASSERT_EQ(1138, sa.GetPort()); - ASSERT_TRUE (sa.SetToAnyAddress (AF_INET, 0)); - ASSERT_STREQ ("0.0.0.0", sa.GetIPAddress ().c_str ()); - ASSERT_EQ (0, sa.GetPort ()); + ASSERT_TRUE(sa.SetToAnyAddress(AF_INET, 0)); + ASSERT_STREQ("0.0.0.0", sa.GetIPAddress().c_str()); + ASSERT_EQ(0, sa.GetPort()); - ASSERT_TRUE (sa.SetToLocalhost (AF_INET6, 1139)); - ASSERT_TRUE(sa.GetIPAddress() == "::1" || sa.GetIPAddress() == "0:0:0:0:0:0:0:1") << "Address was: " - << sa.GetIPAddress(); - ASSERT_EQ (1139, sa.GetPort ()); + ASSERT_TRUE(sa.SetToLocalhost(AF_INET6, 1139)); + ASSERT_TRUE(sa.GetIPAddress() == "::1" || + sa.GetIPAddress() == "0:0:0:0:0:0:0:1") + << "Address was: " << sa.GetIPAddress(); + ASSERT_EQ(1139, sa.GetPort()); } #ifdef _WIN32 // we need to test our inet_ntop implementation for Windows XP -const char* inet_ntop (int af, const void * src, - char * dst, socklen_t size); +const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); -TEST_F (SocketAddressTest, inet_ntop) -{ - const uint8_t address4[4] = {255, 0, 1, 100}; - const uint8_t address6[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 255, 0}; - - char buffer[INET6_ADDRSTRLEN]; - memset (buffer, 'x', sizeof (buffer)); - EXPECT_STREQ ("1:203:405:607:809:a0b:c0d:ff00", inet_ntop (AF_INET6, address6, buffer, sizeof (buffer))); - memset (buffer, 'x', sizeof (buffer)); - EXPECT_STREQ ("1:203:405:607:809:a0b:c0d:ff00", inet_ntop (AF_INET6, address6, buffer, 31)); - memset (buffer, 'x', sizeof (buffer)); - EXPECT_STREQ (nullptr, inet_ntop (AF_INET6, address6, buffer, 0)); - memset (buffer, 'x', sizeof (buffer)); - EXPECT_STREQ (nullptr, inet_ntop (AF_INET6, address6, buffer, 30)); - - memset (buffer, 'x', sizeof (buffer)); - EXPECT_STREQ ("255.0.1.100", inet_ntop (AF_INET, address4, buffer, sizeof (buffer))); - memset (buffer, 'x', sizeof (buffer)); - EXPECT_STREQ ("255.0.1.100", inet_ntop (AF_INET, address4, buffer, 12)); - memset (buffer, 'x', sizeof (buffer)); - EXPECT_STREQ (nullptr, inet_ntop (AF_INET, address4, buffer, 0)); - memset (buffer, 'x', sizeof (buffer)); - EXPECT_STREQ (nullptr, inet_ntop (AF_INET, address4, buffer, 11)); -} +TEST_F(SocketAddressTest, inet_ntop) { + const uint8_t address4[4] = {255, 0, 1, 100}; + const uint8_t address6[16] = {0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 255, 0}; -#endif + char buffer[INET6_ADDRSTRLEN]; + memset(buffer, 'x', sizeof(buffer)); + EXPECT_STREQ("1:203:405:607:809:a0b:c0d:ff00", + inet_ntop(AF_INET6, address6, buffer, sizeof(buffer))); + memset(buffer, 'x', sizeof(buffer)); + EXPECT_STREQ("1:203:405:607:809:a0b:c0d:ff00", + inet_ntop(AF_INET6, address6, buffer, 31)); + memset(buffer, 'x', sizeof(buffer)); + EXPECT_STREQ(nullptr, inet_ntop(AF_INET6, address6, buffer, 0)); + memset(buffer, 'x', sizeof(buffer)); + EXPECT_STREQ(nullptr, inet_ntop(AF_INET6, address6, buffer, 30)); + memset(buffer, 'x', sizeof(buffer)); + EXPECT_STREQ("255.0.1.100", + inet_ntop(AF_INET, address4, buffer, sizeof(buffer))); + memset(buffer, 'x', sizeof(buffer)); + EXPECT_STREQ("255.0.1.100", inet_ntop(AF_INET, address4, buffer, 12)); + memset(buffer, 'x', sizeof(buffer)); + EXPECT_STREQ(nullptr, inet_ntop(AF_INET, address4, buffer, 0)); + memset(buffer, 'x', sizeof(buffer)); + EXPECT_STREQ(nullptr, inet_ntop(AF_INET, address4, buffer, 11)); +} +#endif diff --git a/lldb/unittests/Host/SocketTest.cpp b/lldb/unittests/Host/SocketTest.cpp index e3e52274476..b7ecf190b59 100644 --- a/lldb/unittests/Host/SocketTest.cpp +++ b/lldb/unittests/Host/SocketTest.cpp @@ -8,7 +8,8 @@ //===----------------------------------------------------------------------===// #if defined(_MSC_VER) && (_HAS_EXCEPTIONS == 0) -// Workaround for MSVC standard library bug, which fails to include <thread> when +// Workaround for MSVC standard library bug, which fails to include <thread> +// when // exceptions are disabled. #include <eh.h> #endif @@ -30,182 +31,189 @@ using namespace lldb_private; -class SocketTest : public testing::Test -{ - public: - void - SetUp() override - { +class SocketTest : public testing::Test { +public: + void SetUp() override { #if defined(_MSC_VER) - WSADATA data; - ::WSAStartup(MAKEWORD(2, 2), &data); + WSADATA data; + ::WSAStartup(MAKEWORD(2, 2), &data); #endif - } + } - void - TearDown() override - { + void TearDown() override { #if defined(_MSC_VER) - ::WSACleanup(); + ::WSACleanup(); #endif - } - - protected: - static void - AcceptThread(Socket *listen_socket, const char *listen_remote_address, bool child_processes_inherit, - Socket **accept_socket, Error *error) - { - *error = listen_socket->Accept(listen_remote_address, child_processes_inherit, *accept_socket); - } - - template<typename SocketType> - void - CreateConnectedSockets(const char *listen_remote_address, const std::function<std::string(const SocketType&)> &get_connect_addr, std::unique_ptr<SocketType> *a_up, std::unique_ptr<SocketType> *b_up) - { - bool child_processes_inherit = false; - Error error; - std::unique_ptr<SocketType> listen_socket_up(new SocketType(child_processes_inherit, error)); - EXPECT_FALSE(error.Fail()); - error = listen_socket_up->Listen(listen_remote_address, 5); - EXPECT_FALSE(error.Fail()); - EXPECT_TRUE(listen_socket_up->IsValid()); - - Error accept_error; - Socket *accept_socket; - std::thread accept_thread(AcceptThread, listen_socket_up.get(), listen_remote_address, child_processes_inherit, - &accept_socket, &accept_error); - - std::string connect_remote_address = get_connect_addr(*listen_socket_up); - std::unique_ptr<SocketType> connect_socket_up(new SocketType(child_processes_inherit, error)); - EXPECT_FALSE(error.Fail()); - error = connect_socket_up->Connect(connect_remote_address.c_str()); - EXPECT_FALSE(error.Fail()); - EXPECT_TRUE(connect_socket_up->IsValid()); - - a_up->swap(connect_socket_up); - EXPECT_TRUE(error.Success()); - EXPECT_NE(nullptr, a_up->get()); - EXPECT_TRUE((*a_up)->IsValid()); - - accept_thread.join(); - b_up->reset(static_cast<SocketType*>(accept_socket)); - EXPECT_TRUE(accept_error.Success()); - EXPECT_NE(nullptr, b_up->get()); - EXPECT_TRUE((*b_up)->IsValid()); - - listen_socket_up.reset(); - } -}; - -TEST_F (SocketTest, DecodeHostAndPort) -{ - std::string host_str; - std::string port_str; - int32_t port; + } + +protected: + static void AcceptThread(Socket *listen_socket, + const char *listen_remote_address, + bool child_processes_inherit, Socket **accept_socket, + Error *error) { + *error = listen_socket->Accept(listen_remote_address, + child_processes_inherit, *accept_socket); + } + + template <typename SocketType> + void CreateConnectedSockets( + const char *listen_remote_address, + const std::function<std::string(const SocketType &)> &get_connect_addr, + std::unique_ptr<SocketType> *a_up, std::unique_ptr<SocketType> *b_up) { + bool child_processes_inherit = false; Error error; - EXPECT_TRUE (Socket::DecodeHostAndPort ("localhost:1138", host_str, port_str, port, &error)); - EXPECT_STREQ ("localhost", host_str.c_str ()); - EXPECT_STREQ ("1138", port_str.c_str ()); - EXPECT_EQ (1138, port); - EXPECT_TRUE (error.Success ()); - - EXPECT_FALSE (Socket::DecodeHostAndPort ("google.com:65536", host_str, port_str, port, &error)); - EXPECT_TRUE (error.Fail ()); - EXPECT_STREQ ("invalid host:port specification: 'google.com:65536'", error.AsCString ()); - - EXPECT_FALSE (Socket::DecodeHostAndPort ("google.com:-1138", host_str, port_str, port, &error)); - EXPECT_TRUE (error.Fail ()); - EXPECT_STREQ ("invalid host:port specification: 'google.com:-1138'", error.AsCString ()); - - EXPECT_FALSE(Socket::DecodeHostAndPort("google.com:65536", host_str, port_str, port, &error)); - EXPECT_TRUE(error.Fail()); - EXPECT_STREQ("invalid host:port specification: 'google.com:65536'", error.AsCString()); - - EXPECT_TRUE (Socket::DecodeHostAndPort ("12345", host_str, port_str, port, &error)); - EXPECT_STREQ ("", host_str.c_str ()); - EXPECT_STREQ ("12345", port_str.c_str ()); - EXPECT_EQ (12345, port); - EXPECT_TRUE (error.Success ()); - - EXPECT_TRUE (Socket::DecodeHostAndPort ("*:0", host_str, port_str, port, &error)); - EXPECT_STREQ ("*", host_str.c_str ()); - EXPECT_STREQ ("0", port_str.c_str ()); - EXPECT_EQ (0, port); - EXPECT_TRUE (error.Success ()); - - EXPECT_TRUE(Socket::DecodeHostAndPort("*:65535", host_str, port_str, port, &error)); - EXPECT_STREQ("*", host_str.c_str()); - EXPECT_STREQ("65535", port_str.c_str()); - EXPECT_EQ(65535, port); + std::unique_ptr<SocketType> listen_socket_up( + new SocketType(child_processes_inherit, error)); + EXPECT_FALSE(error.Fail()); + error = listen_socket_up->Listen(listen_remote_address, 5); + EXPECT_FALSE(error.Fail()); + EXPECT_TRUE(listen_socket_up->IsValid()); + + Error accept_error; + Socket *accept_socket; + std::thread accept_thread(AcceptThread, listen_socket_up.get(), + listen_remote_address, child_processes_inherit, + &accept_socket, &accept_error); + + std::string connect_remote_address = get_connect_addr(*listen_socket_up); + std::unique_ptr<SocketType> connect_socket_up( + new SocketType(child_processes_inherit, error)); + EXPECT_FALSE(error.Fail()); + error = connect_socket_up->Connect(connect_remote_address.c_str()); + EXPECT_FALSE(error.Fail()); + EXPECT_TRUE(connect_socket_up->IsValid()); + + a_up->swap(connect_socket_up); EXPECT_TRUE(error.Success()); + EXPECT_NE(nullptr, a_up->get()); + EXPECT_TRUE((*a_up)->IsValid()); + + accept_thread.join(); + b_up->reset(static_cast<SocketType *>(accept_socket)); + EXPECT_TRUE(accept_error.Success()); + EXPECT_NE(nullptr, b_up->get()); + EXPECT_TRUE((*b_up)->IsValid()); + + listen_socket_up.reset(); + } +}; + +TEST_F(SocketTest, DecodeHostAndPort) { + std::string host_str; + std::string port_str; + int32_t port; + Error error; + EXPECT_TRUE(Socket::DecodeHostAndPort("localhost:1138", host_str, port_str, + port, &error)); + EXPECT_STREQ("localhost", host_str.c_str()); + EXPECT_STREQ("1138", port_str.c_str()); + EXPECT_EQ(1138, port); + EXPECT_TRUE(error.Success()); + + EXPECT_FALSE(Socket::DecodeHostAndPort("google.com:65536", host_str, port_str, + port, &error)); + EXPECT_TRUE(error.Fail()); + EXPECT_STREQ("invalid host:port specification: 'google.com:65536'", + error.AsCString()); + + EXPECT_FALSE(Socket::DecodeHostAndPort("google.com:-1138", host_str, port_str, + port, &error)); + EXPECT_TRUE(error.Fail()); + EXPECT_STREQ("invalid host:port specification: 'google.com:-1138'", + error.AsCString()); + + EXPECT_FALSE(Socket::DecodeHostAndPort("google.com:65536", host_str, port_str, + port, &error)); + EXPECT_TRUE(error.Fail()); + EXPECT_STREQ("invalid host:port specification: 'google.com:65536'", + error.AsCString()); + + EXPECT_TRUE( + Socket::DecodeHostAndPort("12345", host_str, port_str, port, &error)); + EXPECT_STREQ("", host_str.c_str()); + EXPECT_STREQ("12345", port_str.c_str()); + EXPECT_EQ(12345, port); + EXPECT_TRUE(error.Success()); + + EXPECT_TRUE( + Socket::DecodeHostAndPort("*:0", host_str, port_str, port, &error)); + EXPECT_STREQ("*", host_str.c_str()); + EXPECT_STREQ("0", port_str.c_str()); + EXPECT_EQ(0, port); + EXPECT_TRUE(error.Success()); + + EXPECT_TRUE( + Socket::DecodeHostAndPort("*:65535", host_str, port_str, port, &error)); + EXPECT_STREQ("*", host_str.c_str()); + EXPECT_STREQ("65535", port_str.c_str()); + EXPECT_EQ(65535, port); + EXPECT_TRUE(error.Success()); } #ifndef LLDB_DISABLE_POSIX -TEST_F (SocketTest, DomainListenConnectAccept) -{ - char* file_name_str = tempnam(nullptr, nullptr); - EXPECT_NE (nullptr, file_name_str); - const std::string file_name(file_name_str); - free(file_name_str); - - std::unique_ptr<DomainSocket> socket_a_up; - std::unique_ptr<DomainSocket> socket_b_up; - CreateConnectedSockets<DomainSocket>(file_name.c_str(), - [=](const DomainSocket &) - { - return file_name; - }, - &socket_a_up, &socket_b_up); +TEST_F(SocketTest, DomainListenConnectAccept) { + char *file_name_str = tempnam(nullptr, nullptr); + EXPECT_NE(nullptr, file_name_str); + const std::string file_name(file_name_str); + free(file_name_str); + + std::unique_ptr<DomainSocket> socket_a_up; + std::unique_ptr<DomainSocket> socket_b_up; + CreateConnectedSockets<DomainSocket>( + file_name.c_str(), [=](const DomainSocket &) { return file_name; }, + &socket_a_up, &socket_b_up); } #endif -TEST_F (SocketTest, TCPListen0ConnectAccept) -{ - std::unique_ptr<TCPSocket> socket_a_up; - std::unique_ptr<TCPSocket> socket_b_up; - CreateConnectedSockets<TCPSocket>("127.0.0.1:0", - [=](const TCPSocket &s) - { - char connect_remote_address[64]; - snprintf(connect_remote_address, sizeof(connect_remote_address), "localhost:%u", s.GetLocalPortNumber()); - return std::string(connect_remote_address); - }, - &socket_a_up, &socket_b_up); +TEST_F(SocketTest, TCPListen0ConnectAccept) { + std::unique_ptr<TCPSocket> socket_a_up; + std::unique_ptr<TCPSocket> socket_b_up; + CreateConnectedSockets<TCPSocket>( + "127.0.0.1:0", + [=](const TCPSocket &s) { + char connect_remote_address[64]; + snprintf(connect_remote_address, sizeof(connect_remote_address), + "localhost:%u", s.GetLocalPortNumber()); + return std::string(connect_remote_address); + }, + &socket_a_up, &socket_b_up); } -TEST_F (SocketTest, TCPGetAddress) -{ - std::unique_ptr<TCPSocket> socket_a_up; - std::unique_ptr<TCPSocket> socket_b_up; - CreateConnectedSockets<TCPSocket>("127.0.0.1:0", - [=](const TCPSocket &s) - { - char connect_remote_address[64]; - snprintf(connect_remote_address, sizeof(connect_remote_address), "localhost:%u", s.GetLocalPortNumber()); - return std::string(connect_remote_address); - }, - &socket_a_up, - &socket_b_up); - - EXPECT_EQ (socket_a_up->GetLocalPortNumber (), socket_b_up->GetRemotePortNumber ()); - EXPECT_EQ (socket_b_up->GetLocalPortNumber (), socket_a_up->GetRemotePortNumber ()); - EXPECT_NE (socket_a_up->GetLocalPortNumber (), socket_b_up->GetLocalPortNumber ()); - EXPECT_STREQ ("127.0.0.1", socket_a_up->GetRemoteIPAddress ().c_str ()); - EXPECT_STREQ ("127.0.0.1", socket_b_up->GetRemoteIPAddress ().c_str ()); +TEST_F(SocketTest, TCPGetAddress) { + std::unique_ptr<TCPSocket> socket_a_up; + std::unique_ptr<TCPSocket> socket_b_up; + CreateConnectedSockets<TCPSocket>( + "127.0.0.1:0", + [=](const TCPSocket &s) { + char connect_remote_address[64]; + snprintf(connect_remote_address, sizeof(connect_remote_address), + "localhost:%u", s.GetLocalPortNumber()); + return std::string(connect_remote_address); + }, + &socket_a_up, &socket_b_up); + + EXPECT_EQ(socket_a_up->GetLocalPortNumber(), + socket_b_up->GetRemotePortNumber()); + EXPECT_EQ(socket_b_up->GetLocalPortNumber(), + socket_a_up->GetRemotePortNumber()); + EXPECT_NE(socket_a_up->GetLocalPortNumber(), + socket_b_up->GetLocalPortNumber()); + EXPECT_STREQ("127.0.0.1", socket_a_up->GetRemoteIPAddress().c_str()); + EXPECT_STREQ("127.0.0.1", socket_b_up->GetRemoteIPAddress().c_str()); } -TEST_F (SocketTest, UDPConnect) -{ - Socket* socket_a; - Socket* socket_b; +TEST_F(SocketTest, UDPConnect) { + Socket *socket_a; + Socket *socket_b; + + bool child_processes_inherit = false; + auto error = UDPSocket::Connect("127.0.0.1:0", child_processes_inherit, + socket_a, socket_b); - bool child_processes_inherit = false; - auto error = UDPSocket::Connect("127.0.0.1:0", child_processes_inherit, socket_a, socket_b); - - std::unique_ptr<Socket> a_up(socket_a); - std::unique_ptr<Socket> b_up(socket_b); + std::unique_ptr<Socket> a_up(socket_a); + std::unique_ptr<Socket> b_up(socket_b); - EXPECT_TRUE(error.Success ()); - EXPECT_TRUE(a_up->IsValid()); - EXPECT_TRUE(b_up->IsValid()); + EXPECT_TRUE(error.Success()); + EXPECT_TRUE(a_up->IsValid()); + EXPECT_TRUE(b_up->IsValid()); } diff --git a/lldb/unittests/Host/SymbolsTest.cpp b/lldb/unittests/Host/SymbolsTest.cpp index cb59b2c5653..ba100bdb507 100644 --- a/lldb/unittests/Host/SymbolsTest.cpp +++ b/lldb/unittests/Host/SymbolsTest.cpp @@ -7,24 +7,25 @@ // //===----------------------------------------------------------------------===// -#include "gtest/gtest.h" #include "lldb/Host/Symbols.h" #include "lldb/Core/ModuleSpec.h" +#include "gtest/gtest.h" using namespace lldb_private; -TEST(SymbolsTest, LocateExecutableSymbolFileForUnknownExecutableAndUnknownSymbolFile) -{ - ModuleSpec module_spec; - FileSpec symbol_file_spec = Symbols::LocateExecutableSymbolFile(module_spec); - EXPECT_TRUE(symbol_file_spec.GetFilename().IsEmpty()); +TEST(SymbolsTest, + LocateExecutableSymbolFileForUnknownExecutableAndUnknownSymbolFile) { + ModuleSpec module_spec; + FileSpec symbol_file_spec = Symbols::LocateExecutableSymbolFile(module_spec); + EXPECT_TRUE(symbol_file_spec.GetFilename().IsEmpty()); } -TEST(SymbolsTest, LocateExecutableSymbolFileForUnknownExecutableAndMissingSymbolFile) -{ - ModuleSpec module_spec; - // using a GUID here because the symbol file shouldn't actually exist on disk - module_spec.GetSymbolFileSpec().SetFile("4A524676-B24B-4F4E-968A-551D465EBAF1.so", false); - FileSpec symbol_file_spec = Symbols::LocateExecutableSymbolFile(module_spec); - EXPECT_TRUE(symbol_file_spec.GetFilename().IsEmpty()); +TEST(SymbolsTest, + LocateExecutableSymbolFileForUnknownExecutableAndMissingSymbolFile) { + ModuleSpec module_spec; + // using a GUID here because the symbol file shouldn't actually exist on disk + module_spec.GetSymbolFileSpec().SetFile( + "4A524676-B24B-4F4E-968A-551D465EBAF1.so", false); + FileSpec symbol_file_spec = Symbols::LocateExecutableSymbolFile(module_spec); + EXPECT_TRUE(symbol_file_spec.GetFilename().IsEmpty()); } |