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