//===-- GDBRemoteTestUtils.h ------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLDB_UNITTESTS_PROCESS_GDB_REMOTE_GDBREMOTETESTUTILS_H #define LLDB_UNITTESTS_PROCESS_GDB_REMOTE_GDBREMOTETESTUTILS_H #include "gmock/gmock.h" #include "gtest/gtest.h" #include "Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.h" #include "lldb/Utility/Connection.h" namespace lldb_private { namespace process_gdb_remote { class GDBRemoteTest : public testing::Test { public: static void SetUpTestCase(); static void TearDownTestCase(); }; class MockConnection : public lldb_private::Connection { public: MockConnection(std::vector &packets) { m_packets = &packets; }; MOCK_METHOD2(Connect, lldb::ConnectionStatus(llvm::StringRef url, Status *error_ptr)); MOCK_METHOD5(Read, size_t(void *dst, size_t dst_len, const Timeout &timeout, lldb::ConnectionStatus &status, Status *error_ptr)); MOCK_METHOD0(GetURI, std::string()); MOCK_METHOD0(InterruptRead, bool()); lldb::ConnectionStatus Disconnect(Status *error_ptr) { return lldb::eConnectionStatusSuccess; }; bool IsConnected() const { return true; }; size_t Write(const void *dst, size_t dst_len, lldb::ConnectionStatus &status, Status *error_ptr) { m_packets->emplace_back(static_cast(dst), dst_len); return dst_len; }; lldb::IOObjectSP GetReadObject() { return lldb::IOObjectSP(); } std::vector *m_packets; }; class MockServer : public GDBRemoteCommunicationServer { public: MockServer() : GDBRemoteCommunicationServer("mock-server", "mock-server.listener") { m_send_acks = false; m_send_error_strings = true; } PacketResult SendPacket(llvm::StringRef payload) { return GDBRemoteCommunicationServer::SendPacketNoLock(payload); } PacketResult GetPacket(StringExtractorGDBRemote &response) { const bool sync_on_timeout = false; return WaitForPacketNoLock(response, std::chrono::seconds(1), sync_on_timeout); } using GDBRemoteCommunicationServer::SendErrorResponse; using GDBRemoteCommunicationServer::SendOKResponse; using GDBRemoteCommunicationServer::SendUnimplementedResponse; }; class MockServerWithMockConnection : public MockServer { public: MockServerWithMockConnection() : MockServer() { SetConnection(std::make_unique(m_packets)); } llvm::ArrayRef GetPackets() { return m_packets; }; std::vector m_packets; }; } // namespace process_gdb_remote } // namespace lldb_private #endif // LLDB_UNITTESTS_PROCESS_GDB_REMOTE_GDBREMOTETESTUTILS_H