diff options
author | Sui Chen <suichen@google.com> | 2022-04-11 09:09:36 +0300 |
---|---|---|
committer | Ed Tanous <edtanous@google.com> | 2023-02-28 00:45:22 +0300 |
commit | d1d411f9eebc1d2ca49eec0700670ba564dac5c8 (patch) | |
tree | 076d80209a4ca8688690cc3c48f83fdb6042b4ec | |
parent | af20dd1ccc481af63b528a851bce390a0070ab32 (diff) | |
download | bmcweb-d1d411f9eebc1d2ca49eec0700670ba564dac5c8.tar.xz |
Move getMessage and getMessageFromRegistry to cpp and add test
This change moves getMessage and getMessageFromRegistry to a .cpp file
so that they can be easily tested.
Tested: Unit test passes
Signed-off-by: Sui Chen <suichen@google.com>
Change-Id: Ia9fc91e5a47036198bf013ff3ea21ea9f6d5259a
-rw-r--r-- | meson.build | 1 | ||||
-rw-r--r-- | redfish-core/include/registries.hpp | 5 | ||||
-rw-r--r-- | redfish-core/lib/log_services.hpp | 45 | ||||
-rw-r--r-- | redfish-core/src/registries.cpp | 54 | ||||
-rw-r--r-- | test/redfish-core/include/registries_test.cpp | 32 |
5 files changed, 92 insertions, 45 deletions
diff --git a/meson.build b/meson.build index ae789a961b..93ac8da9be 100644 --- a/meson.build +++ b/meson.build @@ -327,6 +327,7 @@ fs = import('fs') srcfiles_bmcweb = files( 'redfish-core/src/error_messages.cpp', + 'redfish-core/src/registries.cpp', 'redfish-core/src/utils/json_utils.cpp', 'src/boost_asio_ssl.cpp', 'src/boost_asio.cpp', diff --git a/redfish-core/include/registries.hpp b/redfish-core/include/registries.hpp index 03e8bc55a1..bad31c4324 100644 --- a/redfish-core/include/registries.hpp +++ b/redfish-core/include/registries.hpp @@ -120,4 +120,9 @@ inline nlohmann::json::object_t return response; } +const Message* getMessage(std::string_view messageID); + +const Message* getMessageFromRegistry(const std::string& messageKey, + std::span<const MessageEntry> registry); + } // namespace redfish::registries diff --git a/redfish-core/lib/log_services.hpp b/redfish-core/lib/log_services.hpp index 24a065721c..34625d3abc 100644 --- a/redfish-core/lib/log_services.hpp +++ b/redfish-core/lib/log_services.hpp @@ -72,51 +72,6 @@ enum class DumpCreationProgress DUMP_CREATE_INPROGRESS }; -namespace registries -{ -static const Message* - getMessageFromRegistry(const std::string& messageKey, - const std::span<const MessageEntry> registry) -{ - std::span<const MessageEntry>::iterator messageIt = - std::find_if(registry.begin(), registry.end(), - [&messageKey](const MessageEntry& messageEntry) { - return std::strcmp(messageEntry.first, messageKey.c_str()) == 0; - }); - if (messageIt != registry.end()) - { - return &messageIt->second; - } - - return nullptr; -} - -static const Message* getMessage(std::string_view messageID) -{ - // Redfish MessageIds are in the form - // RegistryName.MajorVersion.MinorVersion.MessageKey, so parse it to find - // the right Message - std::vector<std::string> fields; - fields.reserve(4); - bmcweb::split(fields, messageID, '.'); - const std::string& registryName = fields[0]; - const std::string& messageKey = fields[3]; - - // Find the right registry and check it for the MessageKey - if (std::string(base::header.registryPrefix) == registryName) - { - return getMessageFromRegistry( - messageKey, std::span<const MessageEntry>(base::registry)); - } - if (std::string(openbmc::header.registryPrefix) == registryName) - { - return getMessageFromRegistry( - messageKey, std::span<const MessageEntry>(openbmc::registry)); - } - return nullptr; -} -} // namespace registries - namespace fs = std::filesystem; inline std::string translateSeverityDbusToRedfish(const std::string& s) diff --git a/redfish-core/src/registries.cpp b/redfish-core/src/registries.cpp new file mode 100644 index 0000000000..3bfe0591d0 --- /dev/null +++ b/redfish-core/src/registries.cpp @@ -0,0 +1,54 @@ +#include "registries.hpp" + +#include "registries/base_message_registry.hpp" +#include "registries/openbmc_message_registry.hpp" +#include "str_utility.hpp" + +#include <string> +#include <vector> + +namespace redfish::registries +{ + +const Message* getMessageFromRegistry(const std::string& messageKey, + std::span<const MessageEntry> registry) +{ + std::span<const MessageEntry>::iterator messageIt = + std::find_if(registry.begin(), registry.end(), + [&messageKey](const MessageEntry& messageEntry) { + return std::strcmp(messageEntry.first, messageKey.c_str()) == 0; + }); + if (messageIt != registry.end()) + { + return &messageIt->second; + } + + return nullptr; +} + +const Message* getMessage(std::string_view messageID) +{ + // Redfish MessageIds are in the form + // RegistryName.MajorVersion.MinorVersion.MessageKey, so parse it to find + // the right Message + std::vector<std::string> fields; + fields.reserve(4); + bmcweb::split(fields, messageID, '.'); + const std::string& registryName = fields[0]; + const std::string& messageKey = fields[3]; + + // Find the right registry and check it for the MessageKey + if (std::string(base::header.registryPrefix) == registryName) + { + return getMessageFromRegistry( + messageKey, std::span<const MessageEntry>(base::registry)); + } + if (std::string(openbmc::header.registryPrefix) == registryName) + { + return getMessageFromRegistry( + messageKey, std::span<const MessageEntry>(openbmc::registry)); + } + return nullptr; +} + +} // namespace redfish::registries diff --git a/test/redfish-core/include/registries_test.cpp b/test/redfish-core/include/registries_test.cpp index 5c47128ca7..25f2c60deb 100644 --- a/test/redfish-core/include/registries_test.cpp +++ b/test/redfish-core/include/registries_test.cpp @@ -1,4 +1,5 @@ #include "registries.hpp" +#include "registries/openbmc_message_registry.hpp" #include <gtest/gtest.h> // IWYU pragma: keep @@ -22,5 +23,36 @@ TEST(FillMessageArgs, ArgsAreFilledCorrectly) EXPECT_EQ(fillMessageArgs({}, "%foo"), ""); } +TEST(RedfishRegistries, GetMessageFromRegistry) +{ + const redfish::registries::Message* msg = + redfish::registries::getMessageFromRegistry( + "Non-Existent", redfish::registries::openbmc::registry); + ASSERT_EQ(msg, nullptr); + + const redfish::registries::Message* msg1 = + redfish::registries::getMessageFromRegistry( + "ServiceStarted", redfish::registries::openbmc::registry); + ASSERT_NE(msg1, nullptr); + + EXPECT_EQ(std::string(msg1->description), + "Indicates that a service has started successfully."); + EXPECT_EQ(std::string(msg1->message), + "Service %1 has started successfully."); + EXPECT_EQ(std::string(msg1->messageSeverity), "OK"); + EXPECT_EQ(msg1->numberOfArgs, 1); + EXPECT_EQ(std::string(msg1->resolution), "None."); +} + +TEST(RedfishRegistries, GetMessage) +{ + const redfish::registries::Message* msg = + redfish::registries::getMessage("OpenBMC.1.0.Non_Existent_Message"); + ASSERT_EQ(msg, nullptr); + + msg = redfish::registries::getMessage("OpenBMC.1.0.ServiceStarted"); + ASSERT_NE(msg, nullptr); +} + } // namespace } // namespace redfish::registries |