brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · ef7593d Raw
90 lines · c
1//===-- GDBRemoteTestUtils.h ------------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8#ifndef LLDB_UNITTESTS_PROCESS_GDB_REMOTE_GDBREMOTETESTUTILS_H9#define LLDB_UNITTESTS_PROCESS_GDB_REMOTE_GDBREMOTETESTUTILS_H10 11#include "gmock/gmock.h"12#include "gtest/gtest.h"13 14#include "Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.h"15#include "lldb/Utility/Connection.h"16 17namespace lldb_private {18namespace process_gdb_remote {19 20class GDBRemoteTest : public testing::Test {21public:22  static void SetUpTestCase();23  static void TearDownTestCase();24};25 26class MockConnection : public lldb_private::Connection {27public:28  MockConnection(std::vector<std::string> &packets) { m_packets = &packets; };29 30  MOCK_METHOD2(Connect,31               lldb::ConnectionStatus(llvm::StringRef url, Status *error_ptr));32  MOCK_METHOD5(Read, size_t(void *dst, size_t dst_len,33                            const Timeout<std::micro> &timeout,34                            lldb::ConnectionStatus &status, Status *error_ptr));35  MOCK_METHOD0(GetURI, std::string());36  MOCK_METHOD0(InterruptRead, bool());37 38  lldb::ConnectionStatus Disconnect(Status *error_ptr) {39    return lldb::eConnectionStatusSuccess;40  };41 42  bool IsConnected() const { return true; };43  size_t Write(const void *dst, size_t dst_len, lldb::ConnectionStatus &status,44               Status *error_ptr) {45    m_packets->emplace_back(static_cast<const char *>(dst), dst_len);46    return dst_len;47  };48 49  lldb::IOObjectSP GetReadObject() { return lldb::IOObjectSP(); }50 51  std::vector<std::string> *m_packets;52};53 54class MockServer : public GDBRemoteCommunicationServer {55public:56  MockServer() : GDBRemoteCommunicationServer() {57    m_send_acks = false;58    m_send_error_strings = true;59  }60 61  PacketResult SendPacket(llvm::StringRef payload) {62    return GDBRemoteCommunicationServer::SendPacketNoLock(payload);63  }64 65  PacketResult GetPacket(StringExtractorGDBRemote &response) {66    const bool sync_on_timeout = false;67    return ReadPacket(response, std::chrono::seconds(1), sync_on_timeout);68  }69 70  using GDBRemoteCommunicationServer::SendErrorResponse;71  using GDBRemoteCommunicationServer::SendOKResponse;72  using GDBRemoteCommunicationServer::SendUnimplementedResponse;73};74 75class MockServerWithMockConnection : public MockServer {76public:77  MockServerWithMockConnection() : MockServer() {78    SetConnection(std::make_unique<MockConnection>(m_packets));79  }80 81  llvm::ArrayRef<std::string> GetPackets() { return m_packets; };82 83  std::vector<std::string> m_packets;84};85 86} // namespace process_gdb_remote87} // namespace lldb_private88 89#endif // LLDB_UNITTESTS_PROCESS_GDB_REMOTE_GDBREMOTETESTUTILS_H90