xref: /llvm-project/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationServerTest.cpp (revision 1f8a3286e065b8cb82628db0d335b3e82b9373fd)
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"
14e2f1fe36SPavel Labath #include "lldb/Utility/UnimplementedError.h"
15*1f8a3286SPavel Labath #include "lldb/lldb-enumerations.h"
1657e2da4fSAntonio Afonso 
1757e2da4fSAntonio Afonso namespace lldb_private {
1857e2da4fSAntonio Afonso namespace process_gdb_remote {
1957e2da4fSAntonio Afonso 
2057e2da4fSAntonio Afonso TEST(GDBRemoteCommunicationServerTest, SendErrorResponse_ErrorNumber) {
2157e2da4fSAntonio Afonso   MockServerWithMockConnection server;
2257e2da4fSAntonio Afonso   server.SendErrorResponse(0x42);
2357e2da4fSAntonio Afonso 
2457e2da4fSAntonio Afonso   EXPECT_THAT(server.GetPackets(), testing::ElementsAre("$E42#ab"));
2557e2da4fSAntonio Afonso }
2657e2da4fSAntonio Afonso 
2757e2da4fSAntonio Afonso TEST(GDBRemoteCommunicationServerTest, SendErrorResponse_Status) {
2857e2da4fSAntonio Afonso   MockServerWithMockConnection server;
29*1f8a3286SPavel Labath   Status status(0x42, lldb::eErrorTypePOSIX, "Test error message");
3057e2da4fSAntonio Afonso   server.SendErrorResponse(status);
3157e2da4fSAntonio Afonso 
3257e2da4fSAntonio Afonso   EXPECT_THAT(
3357e2da4fSAntonio Afonso       server.GetPackets(),
3457e2da4fSAntonio Afonso       testing::ElementsAre("$E42;54657374206572726f72206d657373616765#ad"));
3557e2da4fSAntonio Afonso }
3657e2da4fSAntonio Afonso 
3757e2da4fSAntonio Afonso TEST(GDBRemoteCommunicationServerTest, SendErrorResponse_UnimplementedError) {
3857e2da4fSAntonio Afonso   MockServerWithMockConnection server;
3957e2da4fSAntonio Afonso 
40e2f1fe36SPavel Labath   auto error = llvm::make_error<UnimplementedError>();
4157e2da4fSAntonio Afonso   server.SendErrorResponse(std::move(error));
4257e2da4fSAntonio Afonso 
4357e2da4fSAntonio Afonso   EXPECT_THAT(server.GetPackets(), testing::ElementsAre("$#00"));
4457e2da4fSAntonio Afonso }
4557e2da4fSAntonio Afonso 
4657e2da4fSAntonio Afonso TEST(GDBRemoteCommunicationServerTest, SendErrorResponse_StringError) {
4757e2da4fSAntonio Afonso   MockServerWithMockConnection server;
4857e2da4fSAntonio Afonso 
4957e2da4fSAntonio Afonso   auto error = llvm::createStringError(llvm::inconvertibleErrorCode(),
5057e2da4fSAntonio Afonso                                        "String error test");
5157e2da4fSAntonio Afonso   server.SendErrorResponse(std::move(error));
5257e2da4fSAntonio Afonso 
5357e2da4fSAntonio Afonso   EXPECT_THAT(
5457e2da4fSAntonio Afonso       server.GetPackets(),
5557e2da4fSAntonio Afonso       testing::ElementsAre("$Eff;537472696e67206572726f722074657374#b0"));
5657e2da4fSAntonio Afonso }
5757e2da4fSAntonio Afonso 
5857e2da4fSAntonio Afonso TEST(GDBRemoteCommunicationServerTest, SendErrorResponse_ErrorList) {
5957e2da4fSAntonio Afonso   MockServerWithMockConnection server;
6057e2da4fSAntonio Afonso 
61e2f1fe36SPavel Labath   auto error = llvm::joinErrors(llvm::make_error<UnimplementedError>(),
62e2f1fe36SPavel Labath                                 llvm::make_error<UnimplementedError>());
6357e2da4fSAntonio Afonso 
6457e2da4fSAntonio Afonso   server.SendErrorResponse(std::move(error));
6557e2da4fSAntonio Afonso   // Make sure only one packet is sent even when there are multiple errors.
6657e2da4fSAntonio Afonso   EXPECT_EQ(server.GetPackets().size(), 1UL);
6757e2da4fSAntonio Afonso }
6857e2da4fSAntonio Afonso 
6957e2da4fSAntonio Afonso } // namespace process_gdb_remote
7057e2da4fSAntonio Afonso } // namespace lldb_private
71