summaryrefslogtreecommitdiff
path: root/test/redfish-core/include/utils/dump_utils.cpp
blob: 6c7bc048082a7b45dbbe62debe4eebdce4570d06 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
// SPDX-License-Identifier: Apache-2.0
// SPDX-FileCopyrightText: Copyright OpenBMC Authors

#include "utils/dump_utils.hpp"

#include "bmcweb_config.h"

#include "async_resp.hpp"
#include "dbus_utility.hpp"
#include "generated/enums/log_entry.hpp"

#include <boost/beast/http/status.hpp>
#include <boost/url/format.hpp>
#include <sdbusplus/message/native_types.hpp>

#include <cstdint>
#include <memory>
#include <optional>
#include <string>

#include <gtest/gtest.h>

namespace redfish::dump_utils
{
TEST(DumpUtils, GetDumpServiceInfo)
{
    auto shareAsyncResp = std::make_shared<bmcweb::AsyncResp>();
    dump_utils::getDumpServiceInfo(shareAsyncResp, static_cast<DumpType>(99));
    EXPECT_EQ(shareAsyncResp->res.result(),
              boost::beast::http::status::internal_server_error);
}

TEST(DumpUtils, DumpTypeToStr)
{
    EXPECT_EQ(dumpTypeToStr(DumpType::BMC), "BMC");
    EXPECT_EQ(dumpTypeToStr(DumpType::System), "System");
    EXPECT_EQ(dumpTypeToStr(DumpType::FaultLog), "FaultLog");
    EXPECT_EQ(dumpTypeToStr(static_cast<DumpType>(99)), std::nullopt);
}

TEST(DumpUtils, DumpTypeToObjPath)
{
    EXPECT_EQ(dumpTypeToObjPath(DumpType::BMC),
              sdbusplus::object_path{"/xyz/openbmc_project/dump/bmc"});
    EXPECT_EQ(dumpTypeToObjPath(DumpType::System),
              sdbusplus::object_path{"/xyz/openbmc_project/dump/system"});
    EXPECT_EQ(dumpTypeToObjPath(DumpType::FaultLog),
              sdbusplus::object_path{"/xyz/openbmc_project/dump/faultlog"});
    // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
    EXPECT_EQ(dumpTypeToObjPath(static_cast<DumpType>(99)), std::nullopt);
}

TEST(DumpUtils, GetDumpEntriesUrl)
{
    EXPECT_EQ(
        getDumpEntriesUrl(DumpType::BMC),
        boost::urls::format("/redfish/v1/Managers/{}/LogServices/Dump/Entries",
                            BMCWEB_REDFISH_MANAGER_URI_NAME));
    EXPECT_EQ(getDumpEntriesUrl(DumpType::FaultLog),
              boost::urls::format(
                  "/redfish/v1/Managers/{}/LogServices/FaultLog/Entries",
                  BMCWEB_REDFISH_MANAGER_URI_NAME));
    EXPECT_EQ(
        getDumpEntriesUrl(DumpType::System),
        boost::urls::format("/redfish/v1/Systems/{}/LogServices/Dump/Entries",
                            BMCWEB_REDFISH_SYSTEM_URI_NAME));
    // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
    EXPECT_EQ(getDumpEntriesUrl(static_cast<DumpType>(99)), std::nullopt);
}

TEST(DumpUtils, MapDbusStatusToDumpProgress)
{
    EXPECT_EQ(
        mapDbusStatusToDumpProgress(
            "xyz.openbmc_project.Common.Progress.OperationStatus.Completed"),
        DumpCreationProgress::DUMP_CREATE_SUCCESS);

    EXPECT_EQ(mapDbusStatusToDumpProgress(
                  "xyz.openbmc_project.Common.Progress.OperationStatus.Failed"),
              DumpCreationProgress::DUMP_CREATE_FAILED);

    EXPECT_EQ(
        mapDbusStatusToDumpProgress(
            "xyz.openbmc_project.Common.Progress.OperationStatus.Aborted"),
        DumpCreationProgress::DUMP_CREATE_FAILED);

    EXPECT_EQ(
        mapDbusStatusToDumpProgress(
            "xyz.openbmc_project.Common.Progress.OperationStatus.InProgress"),
        DumpCreationProgress::DUMP_CREATE_INPROGRESS);

    EXPECT_EQ(mapDbusStatusToDumpProgress(""),
              DumpCreationProgress::DUMP_CREATE_INPROGRESS);
}

TEST(DumpUtils, GetDumpCompletionStatus)
{
    dbus::utility::DBusPropertiesMap values;

    values.emplace_back(
        "Status",
        dbus::utility::DbusVariantType{std::string{
            "xyz.openbmc_project.Common.Progress.OperationStatus.Completed"}});
    EXPECT_EQ(getDumpCompletionStatus(values),
              DumpCreationProgress::DUMP_CREATE_SUCCESS);

    values[0].second =
        "xyz.openbmc_project.Common.Progress.OperationStatus.Failed";
    EXPECT_EQ(getDumpCompletionStatus(values),
              DumpCreationProgress::DUMP_CREATE_FAILED);

    values[0].second =
        "xyz.openbmc_project.Common.Progress.OperationStatus.Aborted";
    EXPECT_EQ(getDumpCompletionStatus(values),
              DumpCreationProgress::DUMP_CREATE_FAILED);

    values[0].second =
        "xyz.openbmc_project.Common.Progress.OperationStatus.InProgress";
    EXPECT_EQ(getDumpCompletionStatus(values),
              DumpCreationProgress::DUMP_CREATE_INPROGRESS);

    values[0].second = dbus::utility::DbusVariantType{uint64_t{1}};
    EXPECT_EQ(getDumpCompletionStatus(values),
              DumpCreationProgress::DUMP_CREATE_FAILED);

    values.clear();
    EXPECT_EQ(getDumpCompletionStatus(values),
              DumpCreationProgress::DUMP_CREATE_INPROGRESS);
}

TEST(DumpUtils, MapDbusOriginatorTypeToRedfish)
{
    EXPECT_EQ(
        mapDbusOriginatorTypeToRedfish(
            "xyz.openbmc_project.Common.OriginatedBy.OriginatorTypes.Client"),
        log_entry::OriginatorTypes::Client);
    EXPECT_EQ(
        mapDbusOriginatorTypeToRedfish(
            "xyz.openbmc_project.Common.OriginatedBy.OriginatorTypes.Internal"),
        log_entry::OriginatorTypes::Internal);
    EXPECT_EQ(
        mapDbusOriginatorTypeToRedfish(
            "xyz.openbmc_project.Common.OriginatedBy.OriginatorTypes.SupportingService"),
        log_entry::OriginatorTypes::SupportingService);
    EXPECT_EQ(mapDbusOriginatorTypeToRedfish(""),
              log_entry::OriginatorTypes::Invalid);
}
} // namespace redfish::dump_utils