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 #define protected public
17 #include "iplugin_template_test.h"
18 #undef protected
19
20 #include "policy_manager.h"
21 using namespace testing::ext;
22
23 namespace OHOS {
24 namespace EDM {
25 namespace TEST {
26 /**
27 * @tc.name: TestTemplate
28 * @tc.desc: Test PluginTemplate init.
29 * @tc.type: FUNC
30 */
31 HWTEST_F(PluginTemplateTest, TestTemplate, TestSize.Level1)
32 {
33 PluginManager::GetInstance()->AddPlugin(PLUGIN::ArrayTestPlugin::GetPlugin());
34 PluginManager::GetInstance()->AddPlugin(PLUGIN::BoolTestPlugin::GetPlugin());
35 PluginManager::GetInstance()->AddPlugin(PLUGIN::MapTestPlugin::GetPlugin());
36 PluginManager::GetInstance()->AddPlugin(PLUGIN::ArrayMapTestPlugin::GetPlugin());
37 PluginManager::GetInstance()->AddPlugin(PLUGIN::JsonTestPlugin::GetPlugin());
38 PluginManager::GetInstance()->AddPlugin(PLUGIN::StringTestPlugin::GetPlugin());
39
40 std::vector<std::uint32_t> policyCodes = {10, 11, 12, 13, 14, 15};
41 for (auto policyCode : policyCodes) {
42 uint32_t funcCode = POLICY_FUNC_CODE((uint32_t)FuncOperateType::SET, policyCode);
43 std::shared_ptr<IPlugin> plugin = PluginManager::GetInstance()->GetPluginByFuncCode(funcCode);
44 ASSERT_TRUE(plugin != nullptr);
45 ASSERT_TRUE(plugin->GetCode() == policyCode);
46 }
47 }
48
49 /**
50 * @tc.name: TestInitAttribute
51 * @tc.desc: Test PluginTemplate InitAttribute func.
52 * @tc.type: FUNC
53 */
54 HWTEST_F(PluginTemplateTest, TestInitAttribute, TestSize.Level1)
55 {
56 int policyCode = 20;
57 PluginManager::GetInstance()->AddPlugin(PLUGIN::InitAttributePlg::GetPlugin());
58 uint32_t funcCode = POLICY_FUNC_CODE((uint32_t)FuncOperateType::SET, policyCode);
59 std::shared_ptr<IPlugin> plugin = PluginManager::GetInstance()->GetPluginByFuncCode(funcCode);
60 ASSERT_TRUE(plugin != nullptr);
61 ASSERT_TRUE(plugin->GetPermission(FuncOperateType::GET) == "ohos.permission.EDM_TEST_PERMISSION");
62 ASSERT_TRUE(plugin->GetPolicyName() == "InitAttributePlg");
63 ASSERT_TRUE(plugin->GetCode() == 20);
64 }
65
66 /**
67 * @tc.name: TestHandlePolicySupplier
68 * @tc.desc: Test PluginTemplate HandlePolicySupplier func.
69 * @tc.type: FUNC
70 */
71 HWTEST_F(PluginTemplateTest, TestHandlePolicySupplier, TestSize.Level1)
72 {
73 int policyCode = 21;
74 ErrCode res;
75 MessageParcel data;
76 MessageParcel reply;
77 uint32_t funcCode;
78 std::shared_ptr<IPlugin> plugin;
79 std::string setPolicyValue;
80 std::string policyValue;
81 bool isChange;
82 PluginManager::GetInstance()->AddPlugin(PLUGIN::HandlePolicySupplierPlg::GetPlugin());
83 funcCode = POLICY_FUNC_CODE((uint32_t)FuncOperateType::SET, policyCode);
84 plugin = PluginManager::GetInstance()->GetPluginByFuncCode(funcCode);
85 ASSERT_TRUE(plugin != nullptr);
86
87 setPolicyValue = R"({"k1":"v1","k2":"v2","k3":3})";
88 policyValue = "";
89 isChange = false;
90 data.WriteString(setPolicyValue);
91 g_visit = false;
92 res = plugin->OnHandlePolicy(funcCode, data, reply, policyValue, isChange, DEFAULT_USER_ID);
93 ASSERT_TRUE(res != ERR_OK);
94 ASSERT_TRUE(policyValue.empty());
95 ASSERT_TRUE(g_visit);
96
97 setPolicyValue = R"({"k1":"v1","k2":"v2","k3":3})";
98 policyValue = "";
99 isChange = false;
100 data.WriteString(setPolicyValue);
101 g_visit = false;
102 funcCode = POLICY_FUNC_CODE((uint32_t)FuncOperateType::REMOVE, policyCode);
103 res = plugin->OnHandlePolicy(funcCode, data, reply, policyValue, isChange, DEFAULT_USER_ID);
104 ASSERT_TRUE(res != ERR_OK);
105 ASSERT_TRUE(policyValue.empty());
106 ASSERT_TRUE(g_visit);
107 }
108
109 /**
110 * @tc.name: TestHandlePolicyFunction
111 * @tc.desc: Test PluginTemplate HandlePolicyFunction func.
112 * @tc.type: FUNC
113 */
114 HWTEST_F(PluginTemplateTest, TestHandlePolicyFunction, TestSize.Level1)
115 {
116 int policyCode = 22;
117 ErrCode res;
118 MessageParcel data;
119 MessageParcel reply;
120 uint32_t funcCode;
121 std::shared_ptr<IPlugin> plugin;
122 std::string setPolicyValue;
123 std::string policyValue;
124 bool isChange;
125 PluginManager::GetInstance()->AddPlugin(PLUGIN::HandlePolicyFunctionPlg::GetPlugin());
126
127 funcCode = POLICY_FUNC_CODE((uint32_t)FuncOperateType::SET, policyCode);
128 plugin = PluginManager::GetInstance()->GetPluginByFuncCode(funcCode);
129 ASSERT_TRUE(plugin != nullptr);
130 setPolicyValue = "testValue";
131 policyValue = "";
132 isChange = false;
133 data.WriteString(setPolicyValue);
134 res = plugin->OnHandlePolicy(funcCode, data, reply, policyValue, isChange, DEFAULT_USER_ID);
135 ASSERT_TRUE(res == ERR_OK);
136 ASSERT_TRUE(policyValue == "newTestValue");
137 ASSERT_TRUE(isChange);
138
139 setPolicyValue = "";
140 policyValue = "";
141 isChange = false;
142 data.WriteString(setPolicyValue);
143 res = plugin->OnHandlePolicy(funcCode, data, reply, policyValue, isChange, DEFAULT_USER_ID);
144 ASSERT_TRUE(res == ERR_OK);
145 ASSERT_TRUE(policyValue == "testValue");
146 ASSERT_TRUE(isChange);
147
148 funcCode = POLICY_FUNC_CODE((uint32_t)FuncOperateType::REMOVE, policyCode);
149 plugin = PluginManager::GetInstance()->GetPluginByFuncCode(funcCode);
150 ASSERT_TRUE(plugin != nullptr);
151 setPolicyValue = "";
152 policyValue = "testValue";
153 isChange = false;
154 data.WriteString(setPolicyValue);
155 res = plugin->OnHandlePolicy(funcCode, data, reply, policyValue, isChange, DEFAULT_USER_ID);
156 ASSERT_TRUE(res == ERR_OK);
157 ASSERT_TRUE(policyValue.empty());
158 ASSERT_TRUE(isChange);
159 }
160
161 /**
162 * @tc.name: TestHandlePolicyBiFunction
163 * @tc.desc: Test PluginTemplate HandlePolicyBiFunction func.
164 * @tc.type: FUNC
165 */
166 HWTEST_F(PluginTemplateTest, TestHandlePolicyBiFunction, TestSize.Level1)
167 {
168 int policyCode = 23;
169 ErrCode res;
170 MessageParcel data;
171 MessageParcel reply;
172 uint32_t funcCode;
173 std::shared_ptr<IPlugin> plugin;
174 std::string setPolicyValue;
175 std::string policyValue;
176 bool isChange;
177 PluginManager::GetInstance()->AddPlugin(PLUGIN::HandlePolicyBiFunctionPlg::GetPlugin());
178
179 funcCode = POLICY_FUNC_CODE((uint32_t)FuncOperateType::SET, policyCode);
180 plugin = PluginManager::GetInstance()->GetPluginByFuncCode(funcCode);
181 ASSERT_TRUE(plugin != nullptr);
182 setPolicyValue = "testValue";
183 policyValue = "";
184 isChange = false;
185 data.WriteString(setPolicyValue);
186 res = plugin->OnHandlePolicy(funcCode, data, reply, policyValue, isChange, DEFAULT_USER_ID);
187 ASSERT_TRUE(res == ERR_OK);
188 ASSERT_TRUE(policyValue == "testValue");
189 ASSERT_TRUE(isChange);
190
191 setPolicyValue = "testValue";
192 policyValue = "testValue";
193 isChange = false;
194 data.WriteString(setPolicyValue);
195 res = plugin->OnHandlePolicy(funcCode, data, reply, policyValue, isChange, DEFAULT_USER_ID);
196 ASSERT_TRUE(res == ERR_OK);
197 ASSERT_TRUE(policyValue == "testValue");
198 ASSERT_TRUE(!isChange);
199
200 setPolicyValue = "";
201 policyValue = "testValue";
202 isChange = false;
203 data.WriteString(setPolicyValue);
204 res = plugin->OnHandlePolicy(funcCode, data, reply, policyValue, isChange, DEFAULT_USER_ID);
205 ASSERT_TRUE(res == ERR_OK);
206 ASSERT_TRUE(policyValue.empty());
207 ASSERT_TRUE(isChange);
208
209 funcCode = POLICY_FUNC_CODE((uint32_t)FuncOperateType::REMOVE, policyCode);
210 plugin = PluginManager::GetInstance()->GetPluginByFuncCode(funcCode);
211 ASSERT_TRUE(plugin != nullptr);
212 setPolicyValue = "";
213 policyValue = "testValue";
214 isChange = false;
215 data.WriteString(setPolicyValue);
216 res = plugin->OnHandlePolicy(funcCode, data, reply, policyValue, isChange, DEFAULT_USER_ID);
217 ASSERT_TRUE(res == ERR_OK);
218 ASSERT_TRUE(policyValue.empty());
219 ASSERT_TRUE(isChange);
220 }
221
222 /**
223 * @tc.name: TestHandlePolicyDone
224 * @tc.desc: Test PluginTemplate HandlePolicyDone func.
225 * @tc.type: FUNC
226 */
227 HWTEST_F(PluginTemplateTest, TestHandlePolicyDone, TestSize.Level1)
228 {
229 std::vector<int> policyCodes = {24, 25};
230 MessageParcel data;
231 uint32_t funcCode;
232 std::shared_ptr<IPlugin> plugin;
233 std::string adminName;
234 PluginManager::GetInstance()->AddPlugin(PLUGIN::HandleDoneBoolConsumerPlg::GetPlugin());
235 PluginManager::GetInstance()->AddPlugin(PLUGIN::HandleDoneBiBoolConsumerPlg::GetPlugin());
236
237 for (int policyCode : policyCodes) {
238 funcCode = POLICY_FUNC_CODE((uint32_t)FuncOperateType::SET, policyCode);
239 plugin = PluginManager::GetInstance()->GetPluginByFuncCode(funcCode);
240 ASSERT_TRUE(plugin != nullptr);
241 adminName = "com.edm.test.demo";
242 g_visit = false;
243 plugin->OnHandlePolicyDone(funcCode, adminName, true, DEFAULT_USER_ID);
244 ASSERT_TRUE(g_visit);
245
246 g_visit = false;
247 funcCode = POLICY_FUNC_CODE((uint32_t)FuncOperateType::REMOVE, policyCode);
248 plugin->OnHandlePolicyDone(funcCode, adminName, false, DEFAULT_USER_ID);
249 ASSERT_TRUE(g_visit);
250 }
251 }
252
253 /**
254 * @tc.name: TestAdminRemove
255 * @tc.desc: Test PluginTemplate AdminRemove func.
256 * @tc.type: FUNC
257 */
258 HWTEST_F(PluginTemplateTest, TestAdminRemove, TestSize.Level1)
259 {
260 std::vector<int> policyCodes = {26, 27};
261 MessageParcel data;
262 uint32_t funcCode;
263 std::shared_ptr<IPlugin> plugin;
264 std::string adminName;
265 std::string policyValue;
266 PluginManager::GetInstance()->AddPlugin(PLUGIN::AdminRemoveSupplierPlg::GetPlugin());
267 PluginManager::GetInstance()->AddPlugin(PLUGIN::AdminRemoveBiFunctionPlg::GetPlugin());
268
269 for (int policyCode : policyCodes) {
270 funcCode = POLICY_FUNC_CODE((uint32_t)FuncOperateType::SET, policyCode);
271 plugin = PluginManager::GetInstance()->GetPluginByFuncCode(funcCode);
272
273 adminName = "com.edm.test.demo";
274 policyValue = "testValue";
275 g_visit = false;
276 plugin->OnAdminRemove(adminName, policyValue, DEFAULT_USER_ID);
277 ASSERT_TRUE(g_visit);
278 }
279 }
280
281 /**
282 * @tc.name: TestAdminRemove
283 * @tc.desc: Test PluginTemplate AdminRemoveDone func.
284 * @tc.type: FUNC
285 */
286 HWTEST_F(PluginTemplateTest, TestAdminRemoveDone, TestSize.Level1)
287 {
288 std::vector<int> policyCodes = {28, 29};
289 MessageParcel data;
290 uint32_t funcCode;
291 std::shared_ptr<IPlugin> plugin;
292 std::string adminName;
293 std::string policyValue;
294 PluginManager::GetInstance()->AddPlugin(PLUGIN::AdminRemoveDoneRunnerPlg::GetPlugin());
295 PluginManager::GetInstance()->AddPlugin(PLUGIN::AdminRemoveDoneBiBiConsumerPlg::GetPlugin());
296
297 for (int policyCode : policyCodes) {
298 funcCode = POLICY_FUNC_CODE((uint32_t)FuncOperateType::SET, policyCode);
299 plugin = PluginManager::GetInstance()->GetPluginByFuncCode(funcCode);
300
301 adminName = "com.edm.test.demo";
302 policyValue = "testValue";
303 g_visit = false;
304 plugin->OnAdminRemoveDone(adminName, policyValue, DEFAULT_USER_ID);
305 ASSERT_TRUE(g_visit);
306 }
307 }
308
309 /**
310 * @tc.name: TestOnGetPolicy
311 * @tc.desc: Test PluginTemplate OnGetPolicy func.
312 * @tc.type: FUNC
313 */
314 HWTEST_F(PluginTemplateTest, TestOnGetPolicy, TestSize.Level1)
315 {
316 int policyCode = 30;
317 MessageParcel reply;
318 MessageParcel data;
319 PluginManager::GetInstance()->AddPlugin(PLUGIN::HandlePolicyJsonBiFunctionPlg::GetPlugin());
320 uint32_t funcCode = POLICY_FUNC_CODE((uint32_t)FuncOperateType::GET, policyCode);
321 std::shared_ptr<IPlugin> plugin = PluginManager::GetInstance()->GetPluginByFuncCode(funcCode);
322 std::string policyData{"TestData"};
323 ErrCode ret = plugin->OnGetPolicy(policyData, data, reply, DEFAULT_USER_ID);
324 ASSERT_TRUE(ret == ERR_OK);
325 }
326
327 /**
328 * @tc.name: TestWritePolicyToParcel
329 * @tc.desc: Test PluginTemplate WritePolicyToParcel func.
330 * @tc.type: FUNC
331 */
332 HWTEST_F(PluginTemplateTest, TestWritePolicyToParcel, TestSize.Level1)
333 {
334 int policyCode = 22;
335 MessageParcel reply;
336 PluginManager::GetInstance()->AddPlugin(PLUGIN::HandlePolicyFunctionPlg::GetPlugin());
337 uint32_t funcCode = POLICY_FUNC_CODE((uint32_t)FuncOperateType::GET, policyCode);
338 std::shared_ptr<IPlugin> plugin = PluginManager::GetInstance()->GetPluginByFuncCode(funcCode);
339 std::string policyData = "testValue";
340 ErrCode ret = plugin->WritePolicyToParcel(policyData, reply);
341 ASSERT_TRUE(ret == ERR_OK);
342 std::string temp;
343 reply.ReadString(temp);
344 ASSERT_TRUE(temp == policyData);
345 }
346
347 /**
348 * @tc.name: TestHandlePolicyReplyFunctionPlg
349 * @tc.desc: Test PluginTemplate TestHandlePolicyReplyFunctionPlg func.
350 * @tc.type: FUNC
351 */
352 HWTEST_F(PluginTemplateTest, TestHandlePolicyReplyFunctionPlg, TestSize.Level1)
353 {
354 int policyCode = 32;
355 PluginManager::GetInstance()->AddPlugin(PLUGIN::HandlePolicyReplyFunctionPlg::GetPlugin());
356 uint32_t funcCode = POLICY_FUNC_CODE((uint32_t)FuncOperateType::SET, policyCode);
357 std::shared_ptr<IPlugin> plugin = PluginManager::GetInstance()->GetPluginByFuncCode(funcCode);
358 ASSERT_TRUE(plugin != nullptr);
359 std::string setPolicyValue = "testValue";
360 std::string policyValue;
361 bool isChange = false;
362 MessageParcel data;
363 data.WriteString(setPolicyValue);
364 MessageParcel reply;
365 ErrCode res = plugin->OnHandlePolicy(funcCode, data, reply, policyValue, isChange, DEFAULT_USER_ID);
366 ASSERT_TRUE(res == ERR_OK);
367 ASSERT_TRUE(policyValue == "testValue");
368 ASSERT_TRUE(isChange);
369 }
370
371 /**
372 * @tc.name: TestDestroyPlugin
373 * @tc.desc: Test PluginTemplate DestroyPlugin func.
374 * @tc.type: FUNC
375 */
376 HWTEST_F(PluginTemplateTest, TestDestroyPlugin, TestSize.Level1)
377 {
378 MessageParcel reply;
379 PLUGIN::HandlePolicyJsonBiFunctionPlg::GetPlugin();
380 ASSERT_TRUE(PLUGIN::HandlePolicyJsonBiFunctionPlg::pluginInstance_ != nullptr);
381 PLUGIN::HandlePolicyJsonBiFunctionPlg::DestroyPlugin();
382 ASSERT_TRUE(PLUGIN::HandlePolicyJsonBiFunctionPlg::pluginInstance_ == nullptr);
383 }
384
SetUp()385 void PluginTemplateTest::SetUp()
386 {
387 IPolicyManager::policyManagerInstance_ = new (std::nothrow) PolicyManager(DEFAULT_USER_ID);
388 }
389
TearDown()390 void PluginTemplateTest::TearDown()
391 {
392 PluginManager::GetInstance().reset();
393 }
394 } // namespace TEST
395 } // namespace EDM
396 } // namespace OHOS