summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAndrew Geissler <geissonator@yahoo.com>2024-02-27 06:10:16 +0300
committerEd Tanous <ed@tanous.net>2024-03-04 21:20:07 +0300
commit33e1f122b740c5de679dc0350b5f41e8d975499f (patch)
treea47a7d601147363a0c72b5b70e378df1d49eb873 /test
parent12878e7374d1bbe85e14e0cb82b70fcc2c8cf6ff (diff)
downloadbmcweb-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.cpp132
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