180814287SRaphael Isemann //===-- GDBRemoteCommunicationServerTest.cpp ------------------------------===//
257e2da4fSAntonio Afonso //
357e2da4fSAntonio Afonso // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457e2da4fSAntonio Afonso // See https://llvm.org/LICENSE.txt for license information.
557e2da4fSAntonio Afonso // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
657e2da4fSAntonio Afonso //
757e2da4fSAntonio Afonso //===----------------------------------------------------------------------===//
857e2da4fSAntonio Afonso #include "gmock/gmock.h"
957e2da4fSAntonio Afonso #include "gtest/gtest.h"
1057e2da4fSAntonio Afonso 
1157e2da4fSAntonio Afonso #include "GDBRemoteTestUtils.h"
1257e2da4fSAntonio Afonso #include "Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.h"
1357e2da4fSAntonio Afonso #include "lldb/Utility/Connection.h"
14*e2f1fe36SPavel Labath #include "lldb/Utility/UnimplementedError.h"
1557e2da4fSAntonio Afonso 
1657e2da4fSAntonio Afonso namespace lldb_private {
1757e2da4fSAntonio Afonso namespace process_gdb_remote {
1857e2da4fSAntonio Afonso 
TEST(GDBRemoteCommunicationServerTest,SendErrorResponse_ErrorNumber)1957e2da4fSAntonio Afonso TEST(GDBRemoteCommunicationServerTest, SendErrorResponse_ErrorNumber) {
2057e2da4fSAntonio Afonso   MockServerWithMockConnection server;
2157e2da4fSAntonio Afonso   server.SendErrorResponse(0x42);
2257e2da4fSAntonio Afonso 
2357e2da4fSAntonio Afonso   EXPECT_THAT(server.GetPackets(), testing::ElementsAre("$E42#ab"));
2457e2da4fSAntonio Afonso }
2557e2da4fSAntonio Afonso 
TEST(GDBRemoteCommunicationServerTest,SendErrorResponse_Status)2657e2da4fSAntonio Afonso TEST(GDBRemoteCommunicationServerTest, SendErrorResponse_Status) {
2757e2da4fSAntonio Afonso   MockServerWithMockConnection server;
2857e2da4fSAntonio Afonso   Status status;
2957e2da4fSAntonio Afonso 
3057e2da4fSAntonio Afonso   status.SetError(0x42, lldb::eErrorTypeGeneric);
3157e2da4fSAntonio Afonso   status.SetErrorString("Test error message");
3257e2da4fSAntonio Afonso   server.SendErrorResponse(status);
3357e2da4fSAntonio Afonso 
3457e2da4fSAntonio Afonso   EXPECT_THAT(
3557e2da4fSAntonio Afonso       server.GetPackets(),
3657e2da4fSAntonio Afonso       testing::ElementsAre("$E42;54657374206572726f72206d657373616765#ad"));
3757e2da4fSAntonio Afonso }
3857e2da4fSAntonio Afonso 
TEST(GDBRemoteCommunicationServerTest,SendErrorResponse_UnimplementedError)3957e2da4fSAntonio Afonso TEST(GDBRemoteCommunicationServerTest, SendErrorResponse_UnimplementedError) {
4057e2da4fSAntonio Afonso   MockServerWithMockConnection server;
4157e2da4fSAntonio Afonso 
42*e2f1fe36SPavel Labath   auto error = llvm::make_error<UnimplementedError>();
4357e2da4fSAntonio Afonso   server.SendErrorResponse(std::move(error));
4457e2da4fSAntonio Afonso 
4557e2da4fSAntonio Afonso   EXPECT_THAT(server.GetPackets(), testing::ElementsAre("$#00"));
4657e2da4fSAntonio Afonso }
4757e2da4fSAntonio Afonso 
TEST(GDBRemoteCommunicationServerTest,SendErrorResponse_StringError)4857e2da4fSAntonio Afonso TEST(GDBRemoteCommunicationServerTest, SendErrorResponse_StringError) {
4957e2da4fSAntonio Afonso   MockServerWithMockConnection server;
5057e2da4fSAntonio Afonso 
5157e2da4fSAntonio Afonso   auto error = llvm::createStringError(llvm::inconvertibleErrorCode(),
5257e2da4fSAntonio Afonso                                        "String error test");
5357e2da4fSAntonio Afonso   server.SendErrorResponse(std::move(error));
5457e2da4fSAntonio Afonso 
5557e2da4fSAntonio Afonso   EXPECT_THAT(
5657e2da4fSAntonio Afonso       server.GetPackets(),
5757e2da4fSAntonio Afonso       testing::ElementsAre("$Eff;537472696e67206572726f722074657374#b0"));
5857e2da4fSAntonio Afonso }
5957e2da4fSAntonio Afonso 
TEST(GDBRemoteCommunicationServerTest,SendErrorResponse_ErrorList)6057e2da4fSAntonio Afonso TEST(GDBRemoteCommunicationServerTest, SendErrorResponse_ErrorList) {
6157e2da4fSAntonio Afonso   MockServerWithMockConnection server;
6257e2da4fSAntonio Afonso 
63*e2f1fe36SPavel Labath   auto error = llvm::joinErrors(llvm::make_error<UnimplementedError>(),
64*e2f1fe36SPavel Labath                                 llvm::make_error<UnimplementedError>());
6557e2da4fSAntonio Afonso 
6657e2da4fSAntonio Afonso   server.SendErrorResponse(std::move(error));
6757e2da4fSAntonio Afonso   // Make sure only one packet is sent even when there are multiple errors.
6857e2da4fSAntonio Afonso   EXPECT_EQ(server.GetPackets().size(), 1UL);
6957e2da4fSAntonio Afonso }
7057e2da4fSAntonio Afonso 
7157e2da4fSAntonio Afonso } // namespace process_gdb_remote
7257e2da4fSAntonio Afonso } // namespace lldb_private
73