diff options
author | Andrew Geissler <geissonator@yahoo.com> | 2024-02-27 06:10:16 +0300 |
---|---|---|
committer | Ed Tanous <ed@tanous.net> | 2024-03-04 21:20:07 +0300 |
commit | 33e1f122b740c5de679dc0350b5f41e8d975499f (patch) | |
tree | a47a7d601147363a0c72b5b70e378df1d49eb873 /test | |
parent | 12878e7374d1bbe85e14e0cb82b70fcc2c8cf6ff (diff) | |
download | bmcweb-33e1f122b740c5de679dc0350b5f41e8d975499f.tar.xz |
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 <geissonator@yahoo.com>
Signed-off-by: Gunnar Mills <gmills@us.ibm.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/redfish-core/lib/system_test.cpp | 132 |
1 files changed, 132 insertions, 0 deletions
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 <boost/beast/core/string_type.hpp> +#include <boost/beast/http/message.hpp> +#include <boost/system/error_code.hpp> +#include <nlohmann/json.hpp> + +#include <memory> +#include <string> +#include <system_error> +#include <vector> + +#include <gtest/gtest.h> + +namespace redfish +{ +namespace +{ + +TEST(GetAllowedHostTransition, UnexpectedError) +{ + auto response = std::make_shared<bmcweb::AsyncResp>(); + boost::system::error_code ec = boost::asio::error::invalid_argument; + std::vector<std::string> 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<bmcweb::AsyncResp>(); + boost::system::error_code ec = + boost::system::linux_error::bad_request_descriptor; + std::vector<std::string> 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<bmcweb::AsyncResp>(); + boost::system::error_code ec; + + std::vector<std::string> 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<bmcweb::AsyncResp>(); + boost::system::error_code ec; + + std::vector<std::string> 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 |