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