[Lldb-commits] [lldb] 441d382 - [lldb-dap] Adding unit tests for Transport. (#139926)
via lldb-commits
lldb-commits at lists.llvm.org
Wed May 14 10:00:04 PDT 2025
Author: John Harrison
Date: 2025-05-14T10:00:01-07:00
New Revision: 441d382f9350c1345555c958244f252c00923824
URL: https://github.com/llvm/llvm-project/commit/441d382f9350c1345555c958244f252c00923824
DIFF: https://github.com/llvm/llvm-project/commit/441d382f9350c1345555c958244f252c00923824.diff
LOG: [lldb-dap] Adding unit tests for Transport. (#139926)
This adds basic support for testing the Transport class and includes
tests for 'Read' and 'Write'.
Added:
lldb/unittests/DAP/TransportTest.cpp
Modified:
lldb/unittests/DAP/CMakeLists.txt
Removed:
################################################################################
diff --git a/lldb/unittests/DAP/CMakeLists.txt b/lldb/unittests/DAP/CMakeLists.txt
index 8b240654046e2..110733e93b192 100644
--- a/lldb/unittests/DAP/CMakeLists.txt
+++ b/lldb/unittests/DAP/CMakeLists.txt
@@ -1,6 +1,7 @@
add_lldb_unittest(DAPTests
JSONUtilsTest.cpp
LLDBUtilsTest.cpp
+ TransportTest.cpp
ProtocolTypesTest.cpp
LINK_LIBS
diff --git a/lldb/unittests/DAP/TransportTest.cpp b/lldb/unittests/DAP/TransportTest.cpp
new file mode 100644
index 0000000000000..5c77b4bb26343
--- /dev/null
+++ b/lldb/unittests/DAP/TransportTest.cpp
@@ -0,0 +1,98 @@
+//===-- TransportTest.cpp -------------------------------------------------===//
+//
+// 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 "Transport.h"
+#include "Protocol/ProtocolBase.h"
+#include "lldb/Host/File.h"
+#include "lldb/Host/Pipe.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/FormatVariadic.h"
+#include "llvm/Testing/Support/Error.h"
+#include "gtest/gtest.h"
+#include <chrono>
+#include <memory>
+#include <optional>
+
+using namespace llvm;
+using namespace lldb;
+using namespace lldb_dap;
+using namespace lldb_dap::protocol;
+using lldb_private::File;
+using lldb_private::NativeFile;
+using lldb_private::Pipe;
+
+class TransportTest : public testing::Test {
+protected:
+ Pipe input;
+ Pipe output;
+ std::unique_ptr<Transport> transport;
+
+ void SetUp() override {
+ ASSERT_THAT_ERROR(input.CreateNew(false).ToError(), Succeeded());
+ ASSERT_THAT_ERROR(output.CreateNew(false).ToError(), Succeeded());
+ transport = std::make_unique<Transport>(
+ "stdio", nullptr,
+ std::make_shared<NativeFile>(input.GetReadFileDescriptor(),
+ File::eOpenOptionReadOnly,
+ NativeFile::Unowned),
+ std::make_shared<NativeFile>(output.GetWriteFileDescriptor(),
+ File::eOpenOptionWriteOnly,
+ NativeFile::Unowned));
+ }
+
+ void Write(StringRef json) {
+ std::string message =
+ formatv("Content-Length: {0}\r\n\r\n{1}", json.size(), json).str();
+ ASSERT_THAT_EXPECTED(input.Write(message.data(), message.size()),
+ Succeeded());
+ }
+};
+
+TEST_F(TransportTest, MalformedRequests) {
+ std::string malformed_header = "COnTent-LenGth: -1{}\r\n\r\nnotjosn";
+ ASSERT_THAT_EXPECTED(
+ input.Write(malformed_header.data(), malformed_header.size()),
+ Succeeded());
+ ASSERT_THAT_EXPECTED(
+ transport->Read(std::chrono::milliseconds(1)),
+ FailedWithMessage(
+ "expected 'Content-Length: ' and got 'COnTent-LenGth: '"));
+}
+
+TEST_F(TransportTest, Read) {
+ Write(R"json({"seq": 1, "type": "request", "command": "abc"})json");
+ ASSERT_THAT_EXPECTED(
+ transport->Read(std::chrono::milliseconds(1)),
+ HasValue(testing::VariantWith<Request>(testing::FieldsAre(
+ /*seq=*/1, /*command=*/"abc", /*arguments=*/std::nullopt))));
+}
+
+TEST_F(TransportTest, ReadWithTimeout) {
+ ASSERT_THAT_EXPECTED(transport->Read(std::chrono::milliseconds(1)),
+ Failed<TimeoutError>());
+}
+
+TEST_F(TransportTest, ReadWithEOF) {
+ input.CloseWriteFileDescriptor();
+ ASSERT_THAT_EXPECTED(transport->Read(std::chrono::milliseconds(1)),
+ Failed<EndOfFileError>());
+}
+
+TEST_F(TransportTest, Write) {
+ ASSERT_THAT_ERROR(transport->Write(Event{"my-event", std::nullopt}),
+ Succeeded());
+ output.CloseWriteFileDescriptor();
+ char buf[1024];
+ Expected<size_t> bytes_read =
+ output.Read(buf, sizeof(buf), std::chrono::milliseconds(1));
+ ASSERT_THAT_EXPECTED(bytes_read, Succeeded());
+ ASSERT_EQ(
+ StringRef(buf, *bytes_read),
+ StringRef("Content-Length: 43\r\n\r\n"
+ R"json({"event":"my-event","seq":0,"type":"event"})json"));
+}
More information about the lldb-commits
mailing list