xref: /openbmc/bmcweb/test/redfish-core/lib/system_test.cpp (revision 40e9b92ec19acffb46f83a6e55b18974da5d708e)
1 // SPDX-License-Identifier: Apache-2.0
2 // SPDX-FileCopyrightText: Copyright OpenBMC Authors
3 #include "async_resp.hpp"
4 #include "generated/enums/resource.hpp"
5 #include "http_response.hpp"
6 #include "systems.hpp"
7 
8 #include <boost/asio/error.hpp>
9 #include <boost/beast/http/status.hpp>
10 #include <boost/system/linux_error.hpp>
11 #include <nlohmann/json.hpp>
12 
13 #include <memory>
14 #include <string>
15 #include <utility>
16 #include <vector>
17 
18 #include <gtest/gtest.h>
19 
20 namespace redfish
21 {
22 namespace
23 {
24 
TEST(GetAllowedHostTransition,UnexpectedError)25 TEST(GetAllowedHostTransition, UnexpectedError)
26 {
27     auto response = std::make_shared<bmcweb::AsyncResp>();
28     boost::system::error_code ec = boost::asio::error::invalid_argument;
29     std::vector<std::string> allowedHostTransitions;
30 
31     afterGetAllowedHostTransitions(response, ec, allowedHostTransitions);
32 
33     EXPECT_EQ(response->res.result(),
34               boost::beast::http::status::internal_server_error);
35 }
36 
TEST(GetAllowedHostTransition,NoPropOnDbus)37 TEST(GetAllowedHostTransition, NoPropOnDbus)
38 {
39     auto response = std::make_shared<bmcweb::AsyncResp>();
40     boost::system::error_code ec =
41         boost::system::linux_error::bad_request_descriptor;
42     std::vector<std::string> allowedHostTransitions;
43 
44     afterGetAllowedHostTransitions(response, ec, allowedHostTransitions);
45 
46     nlohmann::json::array_t parameters;
47     nlohmann::json::object_t parameter;
48     parameter["Name"] = "ResetType";
49     parameter["Required"] = true;
50     parameter["DataType"] = "String";
51     nlohmann::json::array_t allowed;
52     allowed.emplace_back(resource::ResetType::ForceOff);
53     allowed.emplace_back(resource::ResetType::PowerCycle);
54     allowed.emplace_back(resource::ResetType::Nmi);
55     allowed.emplace_back(resource::ResetType::On);
56     allowed.emplace_back(resource::ResetType::ForceOn);
57     allowed.emplace_back(resource::ResetType::ForceRestart);
58     allowed.emplace_back(resource::ResetType::GracefulRestart);
59     allowed.emplace_back(resource::ResetType::GracefulShutdown);
60     parameter["AllowableValues"] = std::move(allowed);
61     parameters.emplace_back(std::move(parameter));
62 
63     EXPECT_EQ(response->res.jsonValue["Parameters"], parameters);
64 }
65 
TEST(GetAllowedHostTransition,NoForceRestart)66 TEST(GetAllowedHostTransition, NoForceRestart)
67 {
68     auto response = std::make_shared<bmcweb::AsyncResp>();
69     boost::system::error_code ec;
70 
71     std::vector<std::string> allowedHostTransitions = {
72         "xyz.openbmc_project.State.Host.Transition.On",
73         "xyz.openbmc_project.State.Host.Transition.Off",
74         "xyz.openbmc_project.State.Host.Transition.GracefulWarmReboot",
75     };
76 
77     afterGetAllowedHostTransitions(response, ec, allowedHostTransitions);
78 
79     nlohmann::json::array_t parameters;
80     nlohmann::json::object_t parameter;
81     parameter["Name"] = "ResetType";
82     parameter["Required"] = true;
83     parameter["DataType"] = "String";
84     nlohmann::json::array_t allowed;
85     allowed.emplace_back(resource::ResetType::ForceOff);
86     allowed.emplace_back(resource::ResetType::PowerCycle);
87     allowed.emplace_back(resource::ResetType::Nmi);
88     allowed.emplace_back(resource::ResetType::On);
89     allowed.emplace_back(resource::ResetType::ForceOn);
90     allowed.emplace_back(resource::ResetType::GracefulShutdown);
91     allowed.emplace_back(resource::ResetType::GracefulRestart);
92     parameter["AllowableValues"] = std::move(allowed);
93     parameters.emplace_back(std::move(parameter));
94 
95     EXPECT_EQ(response->res.jsonValue["Parameters"], parameters);
96 }
97 
TEST(GetAllowedHostTransition,AllSupported)98 TEST(GetAllowedHostTransition, AllSupported)
99 {
100     auto response = std::make_shared<bmcweb::AsyncResp>();
101     boost::system::error_code ec;
102 
103     std::vector<std::string> allowedHostTransitions = {
104         "xyz.openbmc_project.State.Host.Transition.On",
105         "xyz.openbmc_project.State.Host.Transition.Off",
106         "xyz.openbmc_project.State.Host.Transition.GracefulWarmReboot",
107         "xyz.openbmc_project.State.Host.Transition.ForceWarmReboot",
108     };
109 
110     afterGetAllowedHostTransitions(response, ec, allowedHostTransitions);
111 
112     nlohmann::json::array_t parameters;
113     nlohmann::json::object_t parameter;
114     parameter["Name"] = "ResetType";
115     parameter["Required"] = true;
116     parameter["DataType"] = "String";
117     nlohmann::json::array_t allowed;
118     allowed.emplace_back(resource::ResetType::ForceOff);
119     allowed.emplace_back(resource::ResetType::PowerCycle);
120     allowed.emplace_back(resource::ResetType::Nmi);
121     allowed.emplace_back(resource::ResetType::On);
122     allowed.emplace_back(resource::ResetType::ForceOn);
123     allowed.emplace_back(resource::ResetType::GracefulShutdown);
124     allowed.emplace_back(resource::ResetType::GracefulRestart);
125     allowed.emplace_back(resource::ResetType::ForceRestart);
126     parameter["AllowableValues"] = std::move(allowed);
127     parameters.emplace_back(std::move(parameter));
128 
129     EXPECT_EQ(response->res.jsonValue["Parameters"], parameters);
130 }
131 
132 } // namespace
133 } // namespace redfish
134