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