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