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