aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2015-03-14 04:19:32 +0000
committerZachary Turner <zturner@google.com>2015-03-14 04:19:32 +0000
commit2c04f79b018c20b149c93d58a9926dc1a9ead692 (patch)
treed1ea548853ecd6c9ed37be26c57eb3e9e3c67a4f
parent563b1b057a3dc8d5600559c302651eaba86b4f9f (diff)
downloadllvm-2c04f79b018c20b149c93d58a9926dc1a9ead692.zip
llvm-2c04f79b018c20b149c93d58a9926dc1a9ead692.tar.gz
llvm-2c04f79b018c20b149c93d58a9926dc1a9ead692.tar.bz2
[gtest] Fix gtest failures on Windows.
On Windows, you need to call WSAStartup() before making any socket calls, and WSACleanup() before you shutdown. This wasn't being done, so all of the socket tests were failing. This fixes that, which brings the unit test suite to a fully working state on Windows. llvm-svn: 232247
-rw-r--r--lldb/unittests/Host/SocketTest.cpp125
1 files changed, 69 insertions, 56 deletions
diff --git a/lldb/unittests/Host/SocketTest.cpp b/lldb/unittests/Host/SocketTest.cpp
index deed222..26bef35 100644
--- a/lldb/unittests/Host/SocketTest.cpp
+++ b/lldb/unittests/Host/SocketTest.cpp
@@ -13,66 +13,79 @@
#include "lldb/Host/Socket.h"
-class SocketTest: public ::testing::Test
-{
-};
-
using namespace lldb_private;
-void AcceptThread (Socket* listen_socket,
- const char* listen_remote_address,
- bool child_processes_inherit,
- Socket** accept_socket,
- Error* error)
+class SocketTest : public testing::Test
{
- *error = listen_socket->BlockingAccept (listen_remote_address, child_processes_inherit, *accept_socket);
-}
+ public:
+ void
+ SetUp() override
+ {
+#if defined(_MSC_VER)
+ WSADATA data;
+ ::WSAStartup(MAKEWORD(2, 2), &data);
+#endif
+ }
-void CreateConnectedSockets (std::unique_ptr<Socket>* a_up, std::unique_ptr<Socket>* b_up)
-{
- Predicate<uint16_t> port_predicate;
- // Used when binding to port zero to wait for the thread
- // that creates the socket, binds and listens to resolve
- // the port number.
-
- port_predicate.SetValue (0, eBroadcastNever);
-
- bool child_processes_inherit = false;
- Socket *socket = nullptr;
- const char* listen_remote_address = "localhost:0";
- Error error = Socket::TcpListen (listen_remote_address, child_processes_inherit, socket, &port_predicate);
- std::unique_ptr<Socket> listen_socket_up (socket);
- socket = nullptr;
- EXPECT_FALSE (error.Fail ());
- EXPECT_NE (nullptr, listen_socket_up.get ());
- 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);
-
- char connect_remote_address[64];
- snprintf (connect_remote_address, sizeof (connect_remote_address), "localhost:%u", port_predicate.GetValue ());
- error = Socket::TcpConnect (connect_remote_address, child_processes_inherit, socket);
- a_up->reset (socket);
- socket = nullptr;
- EXPECT_TRUE (error.Success ());
- EXPECT_NE (nullptr, a_up->get ());
- EXPECT_TRUE ((*a_up)->IsValid ());
-
- accept_thread.join ();
- b_up->reset (accept_socket);
- EXPECT_TRUE (accept_error.Success ());
- EXPECT_NE (nullptr, b_up->get ());
- EXPECT_TRUE ((*b_up)->IsValid ());
-
- listen_socket_up.reset ();
-}
+ void
+ TearDown() override
+ {
+#if defined(_MSC_VER)
+ ::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->BlockingAccept(listen_remote_address, child_processes_inherit, *accept_socket);
+ }
+
+ void
+ CreateConnectedSockets(std::unique_ptr<Socket> *a_up, std::unique_ptr<Socket> *b_up)
+ {
+ Predicate<uint16_t> port_predicate;
+ // Used when binding to port zero to wait for the thread
+ // that creates the socket, binds and listens to resolve
+ // the port number.
+
+ port_predicate.SetValue(0, eBroadcastNever);
+
+ bool child_processes_inherit = false;
+ Socket *socket = nullptr;
+ const char *listen_remote_address = "localhost:0";
+ Error error = Socket::TcpListen(listen_remote_address, child_processes_inherit, socket, &port_predicate);
+ std::unique_ptr<Socket> listen_socket_up(socket);
+ socket = nullptr;
+ EXPECT_FALSE(error.Fail());
+ EXPECT_NE(nullptr, listen_socket_up.get());
+ 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);
+
+ char connect_remote_address[64];
+ snprintf(connect_remote_address, sizeof(connect_remote_address), "localhost:%u", port_predicate.GetValue());
+ error = Socket::TcpConnect(connect_remote_address, child_processes_inherit, socket);
+ a_up->reset(socket);
+ socket = nullptr;
+ EXPECT_TRUE(error.Success());
+ EXPECT_NE(nullptr, a_up->get());
+ EXPECT_TRUE((*a_up)->IsValid());
+
+ accept_thread.join();
+ b_up->reset(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)
{