diff options
Diffstat (limited to 'lldb/unittests/Process/gdb-remote')
-rw-r--r-- | lldb/unittests/Process/gdb-remote/CMakeLists.txt | 1 | ||||
-rw-r--r-- | lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationTest.cpp | 67 |
2 files changed, 68 insertions, 0 deletions
diff --git a/lldb/unittests/Process/gdb-remote/CMakeLists.txt b/lldb/unittests/Process/gdb-remote/CMakeLists.txt index 0ec5554a3d8..a9951abb37f 100644 --- a/lldb/unittests/Process/gdb-remote/CMakeLists.txt +++ b/lldb/unittests/Process/gdb-remote/CMakeLists.txt @@ -1,6 +1,7 @@ add_lldb_unittest(ProcessGdbRemoteTests GDBRemoteClientBaseTest.cpp GDBRemoteCommunicationClientTest.cpp + GDBRemoteCommunicationTest.cpp GDBRemoteTestUtils.cpp LINK_LIBS diff --git a/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationTest.cpp b/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationTest.cpp new file mode 100644 index 00000000000..5ae8e700757 --- /dev/null +++ b/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationTest.cpp @@ -0,0 +1,67 @@ +//===-- GDBRemoteCommunicationTest.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 "llvm/Testing/Support/Error.h" + +using namespace lldb_private::process_gdb_remote; +using namespace lldb_private; +using namespace lldb; +typedef GDBRemoteCommunication::PacketResult PacketResult; + +namespace { + +class TestClient : public GDBRemoteCommunication { +public: + TestClient() + : GDBRemoteCommunication("test.client", "test.client.listener") {} + + PacketResult ReadPacket(StringExtractorGDBRemote &response) { + return GDBRemoteCommunication::ReadPacket(response, std::chrono::seconds(1), + /*sync_on_timeout*/ false); + } +}; + +class GDBRemoteCommunicationTest : public GDBRemoteTest { +public: + void SetUp() override { + ASSERT_THAT_ERROR(Connect(client, server), llvm::Succeeded()); + } + +protected: + TestClient client; + MockServer server; + + bool Write(llvm::StringRef packet) { + ConnectionStatus status; + return server.Write(packet.data(), packet.size(), status, nullptr) == + packet.size(); + } +}; +} // end anonymous namespace + +TEST_F(GDBRemoteCommunicationTest, ReadPacket_checksum) { + struct TestCase { + llvm::StringLiteral Packet; + llvm::StringLiteral Payload; + }; + static constexpr TestCase Tests[] = { + {{"$#00"}, {""}}, + {{"$foobar#79"}, {"foobar"}}, + {{"$}}#fa"}, {"]"}}, + {{"$x*%#c7"}, {"xxxxxxxxx"}}, + }; + for (const auto &Test : Tests) { + SCOPED_TRACE(Test.Packet + " -> " + Test.Payload); + StringExtractorGDBRemote response; + ASSERT_TRUE(Write(Test.Packet)); + ASSERT_EQ(PacketResult::Success, client.ReadPacket(response)); + ASSERT_EQ(Test.Payload, response.GetStringRef()); + ASSERT_EQ(PacketResult::Success, server.GetAck()); + } +} |