From 33e1f122b740c5de679dc0350b5f41e8d975499f Mon Sep 17 00:00:00 2001 From: Andrew Geissler Date: Mon, 26 Feb 2024 21:10:16 -0600 Subject: AllowedHostTransitions: look for on dbus Commit [1] introduced a new optional dbus property that OpenBMC developers can populate to define which redfish/v1/Systems/system/ResetActionInfo AllowableValues are. Look for that new property on dbus. If not found, hard code the previous values otherwise utilize the property to fill in the return value. Tested: - Put new property on dbus and confirmed Redfish API returned expected values: ``` curl -k -H "X-Auth-Token: $token" -X GET https://${bmc}/redfish/v1/Systems/system/ResetActionInfo { "@odata.id": "/redfish/v1/Systems/system/ResetActionInfo", "@odata.type": "#ActionInfo.v1_1_2.ActionInfo", "Id": "ResetActionInfo", "Name": "Reset Action Info", "Parameters": [ { "AllowableValues": [ "ForceOff", "PowerCycle", "Nmi", "On", "ForceOn", "ForceRestart", "GracefulRestart", "GracefulShutdown" ], "DataType": "String", "Name": "ResetType", "Required": true } ] } ``` - Did not run redfish validator as response was same as previous [1]: https://gerrit.openbmc.org/c/openbmc/phosphor-dbus-interfaces/+/68933 Change-Id: Iecece14e7ff55db98d96df71b106ecc9e3f0ac33 Signed-off-by: Andrew Geissler Signed-off-by: Gunnar Mills --- test/redfish-core/lib/system_test.cpp | 132 ++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 test/redfish-core/lib/system_test.cpp (limited to 'test') diff --git a/test/redfish-core/lib/system_test.cpp b/test/redfish-core/lib/system_test.cpp new file mode 100644 index 0000000000..481c0df746 --- /dev/null +++ b/test/redfish-core/lib/system_test.cpp @@ -0,0 +1,132 @@ +#include "app.hpp" +#include "async_resp.hpp" +#include "http_request.hpp" +#include "http_response.hpp" +#include "systems.hpp" + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +namespace redfish +{ +namespace +{ + +TEST(GetAllowedHostTransition, UnexpectedError) +{ + auto response = std::make_shared(); + boost::system::error_code ec = boost::asio::error::invalid_argument; + std::vector allowedHostTransitions; + + afterGetAllowedHostTransitions(response, ec, allowedHostTransitions); + + EXPECT_EQ(response->res.result(), + boost::beast::http::status::internal_server_error); +} + +TEST(GetAllowedHostTransition, NoPropOnDbus) +{ + auto response = std::make_shared(); + boost::system::error_code ec = + boost::system::linux_error::bad_request_descriptor; + std::vector allowedHostTransitions; + + afterGetAllowedHostTransitions(response, ec, allowedHostTransitions); + + nlohmann::json::array_t parameters; + nlohmann::json::object_t parameter; + parameter["Name"] = "ResetType"; + parameter["Required"] = true; + parameter["DataType"] = "String"; + nlohmann::json::array_t allowed; + allowed.emplace_back(resource::ResetType::ForceOff); + allowed.emplace_back(resource::ResetType::PowerCycle); + allowed.emplace_back(resource::ResetType::Nmi); + allowed.emplace_back(resource::ResetType::On); + allowed.emplace_back(resource::ResetType::ForceOn); + allowed.emplace_back(resource::ResetType::ForceRestart); + allowed.emplace_back(resource::ResetType::GracefulRestart); + allowed.emplace_back(resource::ResetType::GracefulShutdown); + parameter["AllowableValues"] = std::move(allowed); + parameters.emplace_back(std::move(parameter)); + + EXPECT_EQ(response->res.jsonValue["Parameters"], parameters); +} + +TEST(GetAllowedHostTransition, NoForceRestart) +{ + auto response = std::make_shared(); + boost::system::error_code ec; + + std::vector allowedHostTransitions = { + "xyz.openbmc_project.State.Host.Transition.On", + "xyz.openbmc_project.State.Host.Transition.Off", + "xyz.openbmc_project.State.Host.Transition.GracefulWarmReboot", + }; + + afterGetAllowedHostTransitions(response, ec, allowedHostTransitions); + + nlohmann::json::array_t parameters; + nlohmann::json::object_t parameter; + parameter["Name"] = "ResetType"; + parameter["Required"] = true; + parameter["DataType"] = "String"; + nlohmann::json::array_t allowed; + allowed.emplace_back(resource::ResetType::ForceOff); + allowed.emplace_back(resource::ResetType::PowerCycle); + allowed.emplace_back(resource::ResetType::Nmi); + allowed.emplace_back(resource::ResetType::On); + allowed.emplace_back(resource::ResetType::ForceOn); + allowed.emplace_back(resource::ResetType::GracefulShutdown); + allowed.emplace_back(resource::ResetType::GracefulRestart); + parameter["AllowableValues"] = std::move(allowed); + parameters.emplace_back(std::move(parameter)); + + EXPECT_EQ(response->res.jsonValue["Parameters"], parameters); +} + +TEST(GetAllowedHostTransition, AllSupported) +{ + auto response = std::make_shared(); + boost::system::error_code ec; + + std::vector allowedHostTransitions = { + "xyz.openbmc_project.State.Host.Transition.On", + "xyz.openbmc_project.State.Host.Transition.Off", + "xyz.openbmc_project.State.Host.Transition.GracefulWarmReboot", + "xyz.openbmc_project.State.Host.Transition.ForceWarmReboot", + }; + + afterGetAllowedHostTransitions(response, ec, allowedHostTransitions); + + nlohmann::json::array_t parameters; + nlohmann::json::object_t parameter; + parameter["Name"] = "ResetType"; + parameter["Required"] = true; + parameter["DataType"] = "String"; + nlohmann::json::array_t allowed; + allowed.emplace_back(resource::ResetType::ForceOff); + allowed.emplace_back(resource::ResetType::PowerCycle); + allowed.emplace_back(resource::ResetType::Nmi); + allowed.emplace_back(resource::ResetType::On); + allowed.emplace_back(resource::ResetType::ForceOn); + allowed.emplace_back(resource::ResetType::GracefulShutdown); + allowed.emplace_back(resource::ResetType::GracefulRestart); + allowed.emplace_back(resource::ResetType::ForceRestart); + parameter["AllowableValues"] = std::move(allowed); + parameters.emplace_back(std::move(parameter)); + + EXPECT_EQ(response->res.jsonValue["Parameters"], parameters); +} + +} // namespace +} // namespace redfish -- cgit v1.2.3