https://github.com/ashgti updated 
https://github.com/llvm/llvm-project/pull/139926

>From 506e8107a397e2ae88d8b952c0a5351cda9fa161 Mon Sep 17 00:00:00 2001
From: John Harrison <harj...@google.com>
Date: Wed, 14 May 2025 09:13:32 -0700
Subject: [PATCH 1/3] [lldb-dap] Adding unittests for Transport.

This adds basic support for testing the Transport class and includes tests for 
'Read'.
---
 lldb/unittests/DAP/CMakeLists.txt    |  1 +
 lldb/unittests/DAP/TransportTest.cpp | 81 ++++++++++++++++++++++++++++
 2 files changed, 82 insertions(+)
 create mode 100644 lldb/unittests/DAP/TransportTest.cpp

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..d27167cf9da61
--- /dev/null
+++ b/lldb/unittests/DAP/TransportTest.cpp
@@ -0,0 +1,81 @@
+//===-- LLDBUtilsTest.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_private;
+using namespace lldb_dap;
+using namespace lldb_dap::protocol;
+
+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(), llvm::Succeeded());
+    ASSERT_THAT_ERROR(output.CreateNew(false).ToError(), llvm::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(1, "abc", 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>());
+}

>From 8d5ffc83c6fce70a3fe66fb726781e7bd2b08d77 Mon Sep 17 00:00:00 2001
From: John Harrison <harj...@google.com>
Date: Wed, 14 May 2025 09:16:34 -0700
Subject: [PATCH 2/3] Fixing the filename in the top comment.

---
 lldb/unittests/DAP/TransportTest.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lldb/unittests/DAP/TransportTest.cpp 
b/lldb/unittests/DAP/TransportTest.cpp
index d27167cf9da61..b8eade5442814 100644
--- a/lldb/unittests/DAP/TransportTest.cpp
+++ b/lldb/unittests/DAP/TransportTest.cpp
@@ -1,4 +1,4 @@
-//===-- LLDBUtilsTest.cpp 
-------------------------------------------------===//
+//===-- 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.

>From 8de3cd6569f6a17de1f0607666953f06b1593e5b Mon Sep 17 00:00:00 2001
From: John Harrison <harj...@google.com>
Date: Wed, 14 May 2025 09:32:23 -0700
Subject: [PATCH 3/3] Also add a Write test.

---
 lldb/unittests/DAP/TransportTest.cpp | 29 ++++++++++++++++++++++------
 1 file changed, 23 insertions(+), 6 deletions(-)

diff --git a/lldb/unittests/DAP/TransportTest.cpp 
b/lldb/unittests/DAP/TransportTest.cpp
index b8eade5442814..5c77b4bb26343 100644
--- a/lldb/unittests/DAP/TransportTest.cpp
+++ b/lldb/unittests/DAP/TransportTest.cpp
@@ -20,9 +20,11 @@
 
 using namespace llvm;
 using namespace lldb;
-using namespace lldb_private;
 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:
@@ -31,8 +33,8 @@ class TransportTest : public testing::Test {
   std::unique_ptr<Transport> transport;
 
   void SetUp() override {
-    ASSERT_THAT_ERROR(input.CreateNew(false).ToError(), llvm::Succeeded());
-    ASSERT_THAT_ERROR(output.CreateNew(false).ToError(), llvm::Succeeded());
+    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(),
@@ -64,9 +66,10 @@ TEST_F(TransportTest, MalformedRequests) {
 
 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(1, "abc", std::nullopt))));
+  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) {
@@ -79,3 +82,17 @@ TEST_F(TransportTest, ReadWithEOF) {
   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"));
+}

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to