|  | #include "bmcweb_config.h" | 
|  |  | 
|  | #include "async_resp.hpp" | 
|  | #include "http_response.hpp" | 
|  | #include "nlohmann/json.hpp" | 
|  | #include "service_root.hpp" | 
|  |  | 
|  | #include <memory> | 
|  | #include <vector> | 
|  |  | 
|  | #include <gmock/gmock.h> // IWYU pragma: keep | 
|  | #include <gtest/gtest.h> // IWYU pragma: keep | 
|  |  | 
|  | // IWYU pragma: no_include <gtest/gtest-message.h> | 
|  | // IWYU pragma: no_include <gtest/gtest-test-part.h> | 
|  | // IWYU pragma: no_include "gtest/gtest_pred_impl.h" | 
|  | // IWYU pragma: no_include <gmock/gmock-matchers.h> | 
|  | // IWYU pragma: no_include <gtest/gtest-matchers.h> | 
|  |  | 
|  | namespace redfish | 
|  | { | 
|  | namespace | 
|  | { | 
|  |  | 
|  | void assertServiceRootGet(crow::Response& res) | 
|  | { | 
|  | nlohmann::json& json = res.jsonValue; | 
|  | EXPECT_EQ(json["@odata.id"], "/redfish/v1"); | 
|  | EXPECT_EQ(json["@odata.type"], "#ServiceRoot.v1_15_0.ServiceRoot"); | 
|  |  | 
|  | EXPECT_EQ(json["AccountService"]["@odata.id"], | 
|  | "/redfish/v1/AccountService"); | 
|  | EXPECT_EQ(json["AccountService"].size(), 1); | 
|  |  | 
|  | EXPECT_EQ(json["CertificateService"]["@odata.id"], | 
|  | "/redfish/v1/CertificateService"); | 
|  | EXPECT_EQ(json["CertificateService"].size(), 1); | 
|  |  | 
|  | EXPECT_EQ(json["Chassis"]["@odata.id"], "/redfish/v1/Chassis"); | 
|  | EXPECT_EQ(json["Chassis"].size(), 1); | 
|  |  | 
|  | EXPECT_EQ(json["EventService"]["@odata.id"], "/redfish/v1/EventService"); | 
|  | EXPECT_EQ(json["EventService"].size(), 1); | 
|  |  | 
|  | EXPECT_EQ(json["Id"], "RootService"); | 
|  | EXPECT_EQ(json["Links"]["Sessions"]["@odata.id"], | 
|  | "/redfish/v1/SessionService/Sessions"); | 
|  | EXPECT_EQ(json["Links"].size(), 2); | 
|  | EXPECT_EQ(json["Links"]["Sessions"].size(), 1); | 
|  | EXPECT_EQ(json["Links"]["ManagerProvidingService"].size(), 1); | 
|  | EXPECT_EQ(json["Links"]["ManagerProvidingService"]["@odata.id"], | 
|  | "/redfish/v1/Managers/bmc"); | 
|  |  | 
|  | EXPECT_EQ(json["Managers"]["@odata.id"], "/redfish/v1/Managers"); | 
|  | EXPECT_EQ(json["Managers"].size(), 1); | 
|  |  | 
|  | EXPECT_EQ(json["Name"], "Root Service"); | 
|  | EXPECT_EQ(json["RedfishVersion"], "1.9.0"); | 
|  |  | 
|  | EXPECT_EQ(json["Registries"]["@odata.id"], "/redfish/v1/Registries"); | 
|  | EXPECT_EQ(json["Registries"].size(), 1); | 
|  |  | 
|  | EXPECT_EQ(json["SessionService"]["@odata.id"], | 
|  | "/redfish/v1/SessionService"); | 
|  | EXPECT_EQ(json["SessionService"].size(), 1); | 
|  |  | 
|  | EXPECT_EQ(json["Storage"]["@odata.id"], "/redfish/v1/Storage"); | 
|  | EXPECT_EQ(json["Storage"].size(), 1); | 
|  |  | 
|  | EXPECT_EQ(json["Systems"]["@odata.id"], "/redfish/v1/Systems"); | 
|  | EXPECT_EQ(json["Systems"].size(), 1); | 
|  |  | 
|  | EXPECT_EQ(json["Tasks"]["@odata.id"], "/redfish/v1/TaskService"); | 
|  | EXPECT_EQ(json["Tasks"].size(), 1); | 
|  |  | 
|  | EXPECT_EQ(json["TelemetryService"]["@odata.id"], | 
|  | "/redfish/v1/TelemetryService"); | 
|  | EXPECT_EQ(json["TelemetryService"].size(), 1); | 
|  |  | 
|  | EXPECT_EQ(json["UpdateService"]["@odata.id"], "/redfish/v1/UpdateService"); | 
|  |  | 
|  | EXPECT_EQ(json["ProtocolFeaturesSupported"].size(), 7); | 
|  | EXPECT_FALSE(json["ProtocolFeaturesSupported"]["ExcerptQuery"]); | 
|  | EXPECT_EQ(json["ProtocolFeaturesSupported"]["ExpandQuery"]["ExpandAll"], | 
|  | bmcwebInsecureEnableQueryParams); | 
|  | EXPECT_EQ(json["ProtocolFeaturesSupported"]["ExpandQuery"]["Levels"], | 
|  | bmcwebInsecureEnableQueryParams); | 
|  | EXPECT_EQ(json["ProtocolFeaturesSupported"]["ExpandQuery"]["Links"], | 
|  | bmcwebInsecureEnableQueryParams); | 
|  | EXPECT_EQ(json["ProtocolFeaturesSupported"]["ExpandQuery"]["NoLinks"], | 
|  | bmcwebInsecureEnableQueryParams); | 
|  | if (bmcwebInsecureEnableQueryParams) | 
|  | { | 
|  | EXPECT_EQ(json["ProtocolFeaturesSupported"]["ExpandQuery"].size(), 5); | 
|  | EXPECT_EQ(json["ProtocolFeaturesSupported"]["ExpandQuery"]["MaxLevels"], | 
|  | 6); | 
|  | } | 
|  | else | 
|  | { | 
|  | EXPECT_EQ(json["ProtocolFeaturesSupported"]["ExpandQuery"].size(), 4); | 
|  | } | 
|  | EXPECT_TRUE(json["ProtocolFeaturesSupported"]["FilterQuery"]); | 
|  | EXPECT_TRUE(json["ProtocolFeaturesSupported"]["OnlyMemberQuery"]); | 
|  | EXPECT_TRUE(json["ProtocolFeaturesSupported"]["SelectQuery"]); | 
|  | EXPECT_TRUE(json["ProtocolFeaturesSupported"]["TopSkipQuery"]); | 
|  | EXPECT_FALSE( | 
|  | json["ProtocolFeaturesSupported"]["DeepOperations"]["DeepPOST"]); | 
|  | EXPECT_FALSE( | 
|  | json["ProtocolFeaturesSupported"]["DeepOperations"]["DeepPATCH"]); | 
|  | EXPECT_EQ(json["ProtocolFeaturesSupported"]["DeepOperations"].size(), 2); | 
|  | EXPECT_EQ(json.size(), 22); | 
|  | } | 
|  |  | 
|  | TEST(HandleServiceRootGet, ServiceRootStaticAttributesAreExpected) | 
|  | { | 
|  | auto shareAsyncResp = std::make_shared<bmcweb::AsyncResp>(); | 
|  |  | 
|  | shareAsyncResp->res.setCompleteRequestHandler(assertServiceRootGet); | 
|  |  | 
|  | redfish::handleServiceRootGetImpl(shareAsyncResp); | 
|  | } | 
|  |  | 
|  | } // namespace | 
|  | } // namespace redfish |