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