summaryrefslogtreecommitdiff
path: root/test/redfish-core/lib/system_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/redfish-core/lib/system_test.cpp')
-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