1 // SPDX-License-Identifier: Apache-2.0 2 // SPDX-FileCopyrightText: Copyright OpenBMC Authors 3 #include "privileges.hpp" 4 5 #include <boost/beast/http/verb.hpp> 6 7 #include <array> 8 9 #include <gmock/gmock.h> 10 #include <gtest/gtest.h> 11 12 namespace redfish 13 { 14 namespace 15 { 16 17 using ::testing::IsEmpty; 18 using ::testing::UnorderedElementsAre; 19 20 TEST(PrivilegeTest, PrivilegeConstructor) 21 { 22 Privileges privileges{"Login", "ConfigureManager"}; 23 24 EXPECT_THAT(privileges.getActivePrivilegeNames(PrivilegeType::BASE), 25 UnorderedElementsAre("Login", "ConfigureManager")); 26 } 27 28 TEST(PrivilegeTest, PrivilegeCheckForNoPrivilegesRequired) 29 { 30 Privileges userPrivileges{"Login"}; 31 32 OperationMap entityPrivileges{{boost::beast::http::verb::get, {{"Login"}}}}; 33 34 EXPECT_TRUE(isMethodAllowedWithPrivileges( 35 boost::beast::http::verb::get, entityPrivileges, userPrivileges)); 36 } 37 38 TEST(PrivilegeTest, PrivilegeCheckForSingleCaseSuccess) 39 { 40 auto userPrivileges = Privileges{"Login"}; 41 OperationMap entityPrivileges{{boost::beast::http::verb::get, {}}}; 42 43 EXPECT_TRUE(isMethodAllowedWithPrivileges( 44 boost::beast::http::verb::get, entityPrivileges, userPrivileges)); 45 } 46 47 TEST(PrivilegeTest, PrivilegeCheckForSingleCaseFailure) 48 { 49 auto userPrivileges = Privileges{"Login"}; 50 OperationMap entityPrivileges{ 51 {boost::beast::http::verb::get, {{"ConfigureManager"}}}}; 52 53 EXPECT_FALSE(isMethodAllowedWithPrivileges( 54 boost::beast::http::verb::get, entityPrivileges, userPrivileges)); 55 } 56 57 TEST(PrivilegeTest, PrivilegeCheckForANDCaseSuccess) 58 { 59 auto userPrivileges = 60 Privileges{"Login", "ConfigureManager", "ConfigureSelf"}; 61 OperationMap entityPrivileges{ 62 {boost::beast::http::verb::get, 63 {{"Login", "ConfigureManager", "ConfigureSelf"}}}}; 64 65 EXPECT_TRUE(isMethodAllowedWithPrivileges( 66 boost::beast::http::verb::get, entityPrivileges, userPrivileges)); 67 } 68 69 TEST(PrivilegeTest, PrivilegeCheckForANDCaseFailure) 70 { 71 auto userPrivileges = Privileges{"Login", "ConfigureManager"}; 72 OperationMap entityPrivileges{ 73 {boost::beast::http::verb::get, 74 {{"Login", "ConfigureManager", "ConfigureSelf"}}}}; 75 76 EXPECT_FALSE(isMethodAllowedWithPrivileges( 77 boost::beast::http::verb::get, entityPrivileges, userPrivileges)); 78 } 79 80 TEST(PrivilegeTest, PrivilegeCheckForORCaseSuccess) 81 { 82 auto userPrivileges = Privileges{"ConfigureManager"}; 83 OperationMap entityPrivileges{ 84 {boost::beast::http::verb::get, {{"Login"}, {"ConfigureManager"}}}}; 85 86 EXPECT_TRUE(isMethodAllowedWithPrivileges( 87 boost::beast::http::verb::get, entityPrivileges, userPrivileges)); 88 } 89 90 TEST(PrivilegeTest, PrivilegeCheckForORCaseFailure) 91 { 92 auto userPrivileges = Privileges{"ConfigureComponents"}; 93 OperationMap entityPrivileges = OperationMap( 94 {{boost::beast::http::verb::get, {{"Login"}, {"ConfigureManager"}}}}); 95 96 EXPECT_FALSE(isMethodAllowedWithPrivileges( 97 boost::beast::http::verb::get, entityPrivileges, userPrivileges)); 98 } 99 100 TEST(PrivilegeTest, DefaultPrivilegeBitsetsAreEmpty) 101 { 102 Privileges privileges; 103 104 EXPECT_THAT(privileges.getActivePrivilegeNames(PrivilegeType::BASE), 105 IsEmpty()); 106 107 EXPECT_THAT(privileges.getActivePrivilegeNames(PrivilegeType::OEM), 108 IsEmpty()); 109 } 110 111 TEST(PrivilegeTest, GetActivePrivilegeNames) 112 { 113 Privileges privileges; 114 115 EXPECT_THAT(privileges.getActivePrivilegeNames(PrivilegeType::BASE), 116 IsEmpty()); 117 118 std::array<const char*, 5> expectedPrivileges{ 119 "Login", "ConfigureManager", "ConfigureUsers", "ConfigureComponents", 120 "ConfigureSelf"}; 121 122 for (const auto& privilege : expectedPrivileges) 123 { 124 EXPECT_TRUE(privileges.setSinglePrivilege(privilege)); 125 } 126 127 EXPECT_THAT( 128 privileges.getActivePrivilegeNames(PrivilegeType::BASE), 129 UnorderedElementsAre(expectedPrivileges[0], expectedPrivileges[1], 130 expectedPrivileges[2], expectedPrivileges[3], 131 expectedPrivileges[4])); 132 } 133 134 TEST(PrivilegeTest, PrivilegeHostConsoleConstructor) 135 { 136 Privileges privileges{"OpenBMCHostConsole"}; 137 138 EXPECT_THAT(privileges.getActivePrivilegeNames(PrivilegeType::OEM), 139 UnorderedElementsAre("OpenBMCHostConsole")); 140 } 141 142 } // namespace 143 } // namespace redfish 144