diff options
author | 2020-08-03 14:33:06 +0000 | |
---|---|---|
committer | 2020-08-03 14:33:06 +0000 | |
commit | 061da546b983eb767bad15e67af1174fb0bcf31c (patch) | |
tree | 83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationTest.cpp | |
parent | Import LLVM 10.0.0 release including clang, lld and lldb. (diff) | |
download | wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.tar.xz wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.zip |
Import LLVM 10.0.0 release including clang, lld and lldb.
ok hackroom
tested by plenty
Diffstat (limited to 'gnu/llvm/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationTest.cpp')
-rw-r--r-- | gnu/llvm/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationTest.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationTest.cpp b/gnu/llvm/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationTest.cpp new file mode 100644 index 00000000000..2039b9e6d8d --- /dev/null +++ b/gnu/llvm/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationTest.cpp @@ -0,0 +1,67 @@ +//===-- GDBRemoteCommunicationTest.cpp --------------------------*- 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 +// +//===----------------------------------------------------------------------===// +#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(GDBRemoteCommunication::ConnectLocally(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()); + } +} |