Instead of every test creating a client-server combo, do that in the SetUp method of the test fixture. This also means that we can rely on gtest to not run the test if the SetUp method fails and delete the if(HasFailure) calls. llvm-svn: 306013
64 lines
2.0 KiB
C++
64 lines
2.0 KiB
C++
//===-- GDBRemoteTestUtils.cpp ----------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "GDBRemoteTestUtils.h"
|
|
|
|
#include "lldb/Host/common/TCPSocket.h"
|
|
#include "lldb/Host/posix/ConnectionFileDescriptorPosix.h"
|
|
|
|
#include <future>
|
|
|
|
namespace lldb_private {
|
|
namespace process_gdb_remote {
|
|
|
|
void GDBRemoteTest::SetUpTestCase() {
|
|
#if defined(_MSC_VER)
|
|
WSADATA data;
|
|
::WSAStartup(MAKEWORD(2, 2), &data);
|
|
#endif
|
|
}
|
|
|
|
void GDBRemoteTest::TearDownTestCase() {
|
|
#if defined(_MSC_VER)
|
|
::WSACleanup();
|
|
#endif
|
|
}
|
|
|
|
llvm::Error GDBRemoteTest::Connect(GDBRemoteCommunication &client,
|
|
GDBRemoteCommunication &server) {
|
|
bool child_processes_inherit = false;
|
|
TCPSocket listen_socket(true, child_processes_inherit);
|
|
if (llvm::Error error = listen_socket.Listen("127.0.0.1:0", 5).ToError())
|
|
return error;
|
|
|
|
Socket *accept_socket;
|
|
std::future<Status> accept_status = std::async(
|
|
std::launch::async, [&] { return listen_socket.Accept(accept_socket); });
|
|
|
|
llvm::SmallString<32> remote_addr;
|
|
llvm::raw_svector_ostream(remote_addr)
|
|
<< "connect://localhost:" << listen_socket.GetLocalPortNumber();
|
|
|
|
std::unique_ptr<ConnectionFileDescriptor> conn_up(
|
|
new ConnectionFileDescriptor());
|
|
if (conn_up->Connect(remote_addr, nullptr) != lldb::eConnectionStatusSuccess)
|
|
return llvm::make_error<llvm::StringError>("Unable to connect",
|
|
llvm::inconvertibleErrorCode());
|
|
|
|
client.SetConnection(conn_up.release());
|
|
if (llvm::Error error = accept_status.get().ToError())
|
|
return error;
|
|
|
|
server.SetConnection(new ConnectionFileDescriptor(accept_socket));
|
|
return llvm::Error::success();
|
|
}
|
|
|
|
} // namespace process_gdb_remote
|
|
} // namespace lldb_private
|