1 /* 2 * Copyright (c) 2022-2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include <gtest/gtest.h> 17 #include <string> 18 #include <vector> 19 #include "array_string_serializer.h" 20 #include "user_policy_manager.h" 21 #include "utils.h" 22 23 using namespace testing::ext; 24 25 namespace OHOS { 26 namespace EDM { 27 namespace TEST { 28 const std::string TEST_ADMIN_NAME = "com.edm.test.demo"; 29 const std::string TEST_ADMIN_NAME1 = "com.edm.test.demo1"; 30 const std::string TEST_BOOL_POLICY_NAME = "testBoolPolicy"; 31 const std::string TEST_STRING_POLICY_NAME = "testStringPolicy"; 32 const std::string TEST_ADMIN_POLICY_VALUE = "adminPolicy"; 33 const std::string TEST_MERAGE_POLICY_VALUE = "mergedValue"; 34 const std::string TEST_MERAGE_POLICY_VALUE_ONE = "mergedValue1"; 35 constexpr int HUGE_POLICY_SIZE = 65537; 36 constexpr int32_t DEFAULT_USER_ID = 100; 37 38 class UserPolicyManagerTest : public testing::Test { 39 public: SetUp()40 void SetUp() override 41 { 42 if (!userPolicyMgr_) { 43 userPolicyMgr_ = std::make_shared<UserPolicyManager>(DEFAULT_USER_ID); 44 } 45 userPolicyMgr_->Init(); 46 } 47 TearDown()48 void TearDown() override 49 { 50 userPolicyMgr_ = nullptr; 51 } 52 53 std::shared_ptr<UserPolicyManager> userPolicyMgr_; 54 }; 55 56 /** 57 * @tc.name: TestSetPolicy 58 * @tc.desc: Test UserPolicyManager SetPolicy func. 59 * @tc.type: FUNC 60 */ 61 HWTEST_F(UserPolicyManagerTest, TestSetPolicy, TestSize.Level1) 62 { 63 ErrCode res; 64 std::string adminPolicy; 65 std::string mergedPolicy; 66 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME, TEST_BOOL_POLICY_NAME, "false", "true"); 67 ASSERT_TRUE(res == ERR_OK); 68 69 std::string policyValue; 70 res = userPolicyMgr_->GetPolicy(TEST_ADMIN_NAME, TEST_BOOL_POLICY_NAME, policyValue); 71 ASSERT_TRUE(res == ERR_OK); 72 ASSERT_TRUE(policyValue == "false"); 73 res = userPolicyMgr_->GetPolicy("", TEST_BOOL_POLICY_NAME, policyValue); 74 ASSERT_TRUE(res == ERR_OK); 75 ASSERT_TRUE(policyValue == "true"); 76 77 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME1, TEST_BOOL_POLICY_NAME, "true", "true"); 78 ASSERT_TRUE(res == ERR_OK); 79 res = userPolicyMgr_->GetPolicy(TEST_ADMIN_NAME1, TEST_BOOL_POLICY_NAME, policyValue); 80 ASSERT_TRUE(res == ERR_OK); 81 ASSERT_TRUE(policyValue == "true"); 82 res = userPolicyMgr_->GetPolicy("", TEST_BOOL_POLICY_NAME, policyValue); 83 ASSERT_TRUE(res == ERR_OK); 84 ASSERT_TRUE(policyValue == "true"); 85 86 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME, TEST_BOOL_POLICY_NAME, "", ""); 87 ASSERT_TRUE(res == ERR_OK); 88 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME1, TEST_BOOL_POLICY_NAME, "", ""); 89 ASSERT_TRUE(res == ERR_OK); 90 userPolicyMgr_->DumpAdminPolicy(); 91 userPolicyMgr_->DumpAdminList(); 92 } 93 94 /** 95 * @tc.name: TestGetPolicy 96 * @tc.desc: Test UserPolicyManager GetPolicy func. 97 * @tc.type: FUNC 98 */ 99 HWTEST_F(UserPolicyManagerTest, TestGetPolicy, TestSize.Level1) 100 { 101 ErrCode res; 102 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME, TEST_STRING_POLICY_NAME, TEST_ADMIN_POLICY_VALUE, 103 TEST_MERAGE_POLICY_VALUE); 104 ASSERT_TRUE(res == ERR_OK); 105 106 std::string policyValue; 107 res = userPolicyMgr_->GetPolicy(TEST_ADMIN_NAME, TEST_STRING_POLICY_NAME, policyValue); 108 ASSERT_TRUE(res == ERR_OK); 109 ASSERT_TRUE(policyValue == TEST_ADMIN_POLICY_VALUE); 110 res = userPolicyMgr_->GetPolicy("", TEST_STRING_POLICY_NAME, policyValue); 111 ASSERT_TRUE(res == ERR_OK); 112 ASSERT_TRUE(policyValue == TEST_MERAGE_POLICY_VALUE); 113 114 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME1, TEST_STRING_POLICY_NAME, "", TEST_MERAGE_POLICY_VALUE_ONE); 115 ASSERT_TRUE(res == ERR_OK); 116 117 policyValue = ""; 118 res = userPolicyMgr_->GetPolicy(TEST_ADMIN_NAME1, TEST_STRING_POLICY_NAME, policyValue); 119 ASSERT_TRUE(res == ERR_EDM_POLICY_NOT_FIND); 120 ASSERT_TRUE(policyValue.empty()); 121 res = userPolicyMgr_->GetPolicy("", TEST_STRING_POLICY_NAME, policyValue); 122 ASSERT_TRUE(res == ERR_OK); 123 ASSERT_TRUE(policyValue == TEST_MERAGE_POLICY_VALUE_ONE); 124 125 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME, TEST_STRING_POLICY_NAME, "", ""); 126 ASSERT_TRUE(res == ERR_OK); 127 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME1, TEST_STRING_POLICY_NAME, "", ""); 128 ASSERT_TRUE(res == ERR_OK); 129 } 130 131 /** 132 * @tc.name: GetAllPolicyByAdmin 133 * @tc.desc: Test PolicyManager GetAllPolicyByAdmin func. 134 * @tc.type: FUNC 135 */ 136 HWTEST_F(UserPolicyManagerTest, TestGetAdminAllPolicy, TestSize.Level1) 137 { 138 ErrCode res; 139 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME, TEST_STRING_POLICY_NAME, TEST_ADMIN_POLICY_VALUE, 140 TEST_MERAGE_POLICY_VALUE); 141 ASSERT_TRUE(res == ERR_OK); 142 userPolicyMgr_->DumpCombinedPolicy(); 143 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME, TEST_BOOL_POLICY_NAME, "true", "true"); 144 ASSERT_TRUE(res == ERR_OK); 145 146 std::unordered_map<std::string, std::string> allPolicyValue; 147 res = userPolicyMgr_->GetAllPolicyByAdmin(TEST_ADMIN_NAME, allPolicyValue); 148 ASSERT_TRUE(res == ERR_OK); 149 ASSERT_TRUE(allPolicyValue.size() == 2); 150 auto stringEntry = allPolicyValue.find(TEST_STRING_POLICY_NAME); 151 ASSERT_TRUE(stringEntry != allPolicyValue.end() && stringEntry->second == TEST_ADMIN_POLICY_VALUE); 152 auto boolEntry = allPolicyValue.find(TEST_BOOL_POLICY_NAME); 153 ASSERT_TRUE(boolEntry != allPolicyValue.end() && boolEntry->second == "true"); 154 155 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME, TEST_BOOL_POLICY_NAME, "", ""); 156 ASSERT_TRUE(res == ERR_OK); 157 } 158 159 /** 160 * @tc.name: TestGetAdminByPolicyName 161 * @tc.desc: Test UserPolicyManager GetAdminByPolicyName func. 162 * @tc.type: FUNC 163 */ 164 HWTEST_F(UserPolicyManagerTest, TestGetAdminByPolicyName, TestSize.Level1) 165 { 166 ErrCode res; 167 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME, TEST_BOOL_POLICY_NAME, "false", "true"); 168 ASSERT_TRUE(res == ERR_OK); 169 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME1, TEST_BOOL_POLICY_NAME, "true", "true"); 170 ASSERT_TRUE(res == ERR_OK); 171 172 std::unordered_map<std::string, std::string> adminPolicyValue; 173 res = userPolicyMgr_->GetAdminByPolicyName(TEST_BOOL_POLICY_NAME, adminPolicyValue); 174 ASSERT_TRUE(res == ERR_OK); 175 ASSERT_TRUE(adminPolicyValue.size() == 2); 176 auto adminEntry = adminPolicyValue.find(TEST_ADMIN_NAME); 177 ASSERT_TRUE(adminEntry != adminPolicyValue.end() && adminEntry->second == "false"); 178 auto adminEntry1 = adminPolicyValue.find(TEST_ADMIN_NAME1); 179 ASSERT_TRUE(adminEntry1 != adminPolicyValue.end() && adminEntry1->second == "true"); 180 181 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME, TEST_BOOL_POLICY_NAME, "", ""); 182 ASSERT_TRUE(res == ERR_OK); 183 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME1, TEST_BOOL_POLICY_NAME, "", ""); 184 ASSERT_TRUE(res == ERR_OK); 185 } 186 187 /** 188 * @tc.name: TestSetPolicyHuge 189 * @tc.desc: Test UserPolicyManager SetPolicy func. 190 * @tc.type: FUNC 191 */ 192 HWTEST_F(UserPolicyManagerTest, TestSetPolicyHuge, TestSize.Level1) 193 { 194 std::vector<std::string> hugeArrayPolicy; 195 for (int i = 0; i < HUGE_POLICY_SIZE; ++i) { 196 std::string s1 = "hugeArrayPolicyValue:" + std::to_string(i); 197 hugeArrayPolicy.emplace_back(s1); 198 } 199 ErrCode res; 200 std::string policyValue; 201 ASSERT_TRUE(ArrayStringSerializer::GetInstance()->Serialize(hugeArrayPolicy, policyValue)); 202 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME, TEST_STRING_POLICY_NAME, policyValue, policyValue); 203 ASSERT_TRUE(res == ERR_OK); 204 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME1, TEST_STRING_POLICY_NAME, policyValue, policyValue); 205 ASSERT_TRUE(res == ERR_OK); 206 207 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME, TEST_STRING_POLICY_NAME, "", ""); 208 ASSERT_TRUE(res == ERR_OK); 209 res = userPolicyMgr_->SetPolicy(TEST_ADMIN_NAME1, TEST_STRING_POLICY_NAME, "", ""); 210 ASSERT_TRUE(res == ERR_OK); 211 } 212 } // namespace TEST 213 } // namespace EDM 214 } // namespace OHOS 215