• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2024 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 #ifndef EDM_UNIT_TEST_IPLUGIN_TEMPLATE_TEST_H
17 #define EDM_UNIT_TEST_IPLUGIN_TEMPLATE_TEST_H
18 
19 #include <gtest/gtest.h>
20 
21 #include <map>
22 #include <string>
23 #include <vector>
24 
25 #include "array_string_serializer.h"
26 #include "bool_serializer.h"
27 #include "func_code_utils.h"
28 #include "iplugin.h"
29 #include "cjson_serializer.h"
30 #include "map_string_serializer.h"
31 #include "plugin_manager.h"
32 #include "plugin_singleton.h"
33 #include "string_serializer.h"
34 
35 namespace OHOS {
36 namespace EDM {
37 namespace TEST {
38 static bool g_visit = false;
39 namespace PLUGIN {
40 
41 #ifndef CJSON_TEST_SERIALIZER
42 #define CJSON_TEST_SERIALIZER
43 
44 class CjsonTestSerializer : public IPolicySerializer<cJSON*>, public DelayedSingleton<CjsonTestSerializer> {
45 public:
Deserialize(const std::string & jsonString,cJSON * & dataObj)46     bool Deserialize(const std::string &jsonString, cJSON* &dataObj)
47     {
48         if (jsonString.empty()) {
49             return true;
50         }
51         dataObj = cJSON_Parse(jsonString.c_str());
52         return dataObj != nullptr;
53     }
54 
Serialize(cJSON * const & dataObj,std::string & jsonString)55     bool Serialize(cJSON *const &dataObj, std::string &jsonString)
56     {
57         if (dataObj == nullptr) {
58             jsonString = "";
59             return true;
60         }
61         char *cJsonStr = cJSON_Print(dataObj);
62         if (cJsonStr != nullptr) {
63             jsonString = std::string(cJsonStr);
64             cJSON_free(cJsonStr);
65         }
66         return !jsonString.empty();
67     }
68 
GetPolicy(MessageParcel & data,cJSON * & result)69     bool GetPolicy(MessageParcel &data, cJSON* &result)
70     {
71         std::string jsonString = data.ReadString();
72         return Deserialize(jsonString, result);
73     }
74 
WritePolicy(MessageParcel & reply,cJSON * & result)75     bool WritePolicy(MessageParcel &reply, cJSON* &result)
76     {
77         std::string jsonString;
78         if (!Serialize(result, jsonString)) {
79             return false;
80         }
81         return reply.WriteString(jsonString);
82     }
83 
MergePolicy(std::vector<cJSON * > & data,cJSON * & result)84     bool MergePolicy(std::vector<cJSON*> &data, cJSON* &result)
85     {
86         return true;
87     }
88 };
89 
90 #endif // CJSON_TEST_SERIALIZER
91 
92 #ifndef ARRAY_TEST_PLUGIN
93 #define ARRAY_TEST_PLUGIN
94 
95 class ArrayTestPlugin : public PluginSingleton<ArrayTestPlugin, std::vector<std::string>> {
96 public:
InitPlugin(std::shared_ptr<IPluginTemplate<ArrayTestPlugin,std::vector<std::string>>> ptr)97     void InitPlugin(std::shared_ptr<IPluginTemplate<ArrayTestPlugin, std::vector<std::string>>> ptr) override
98     {
99         int policyCode = 10;
100         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
101             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
102         ptr->InitAttribute(policyCode, "ArrayTestPlugin", config);
103         ptr->SetSerializer(ArrayStringSerializer::GetInstance());
104     }
105 };
106 
107 #endif // ARRAY_TEST_PLUGIN
108 
109 #ifndef BOOL_TEST_PLUGIN
110 #define BOOL_TEST_PLUGIN
111 
112 class BoolTestPlugin : public PluginSingleton<BoolTestPlugin, bool> {
113 public:
InitPlugin(std::shared_ptr<IPluginTemplate<BoolTestPlugin,bool>> ptr)114     void InitPlugin(std::shared_ptr<IPluginTemplate<BoolTestPlugin, bool>> ptr) override
115     {
116         int policyCode = 11;
117         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
118             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
119         ptr->InitAttribute(policyCode, "BoolTestPlugin", config);
120         ptr->SetSerializer(BoolSerializer::GetInstance());
121     }
122 };
123 
124 #endif // BOOL_TEST_PLUGIN
125 
126 #ifndef MAP_TEST_PLUGIN
127 #define MAP_TEST_PLUGIN
128 
129 class MapTestPlugin : public PluginSingleton<MapTestPlugin, std::map<std::string, std::string>> {
130 public:
InitPlugin(std::shared_ptr<IPluginTemplate<MapTestPlugin,std::map<std::string,std::string>>> ptr)131     void InitPlugin(std::shared_ptr<IPluginTemplate<MapTestPlugin, std::map<std::string, std::string>>> ptr) override
132     {
133         int policyCode = 12;
134         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
135             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
136         ptr->InitAttribute(policyCode, "MapTestPlugin", config);
137         ptr->SetSerializer(MapStringSerializer::GetInstance());
138     }
139 };
140 
141 #endif // MAP_TEST_PLUGIN
142 
143 #ifndef JSON_TEST_PLUGIN
144 #define JSON_TEST_PLUGIN
145 
146 class JsonTestPlugin : public PluginSingleton<JsonTestPlugin, cJSON*> {
147 public:
InitPlugin(std::shared_ptr<IPluginTemplate<JsonTestPlugin,cJSON * >> ptr)148     void InitPlugin(std::shared_ptr<IPluginTemplate<JsonTestPlugin, cJSON*>> ptr) override
149     {
150         int policyCode = 14;
151         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
152             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
153         ptr->InitAttribute(policyCode, "JsonTestPlugin", config);
154         ptr->SetSerializer(CjsonSerializer::GetInstance());
155     }
156 };
157 
158 #endif // JSON_TEST_PLUGIN
159 
160 #ifndef STRING_TEST_PLUGIN
161 #define STRING_TEST_PLUGIN
162 
163 class StringTestPlugin : public PluginSingleton<StringTestPlugin, std::string> {
164 public:
InitPlugin(std::shared_ptr<IPluginTemplate<StringTestPlugin,std::string>> ptr)165     void InitPlugin(std::shared_ptr<IPluginTemplate<StringTestPlugin, std::string>> ptr) override
166     {
167         int policyCode = 15;
168         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
169             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
170         ptr->InitAttribute(policyCode, "StringTestPlugin", config);
171         ptr->SetSerializer(StringSerializer::GetInstance());
172     }
173 };
174 
175 #endif // STRING_TEST_PLUGIN
176 
177 class InitAttributePlg : public PluginSingleton<InitAttributePlg, cJSON*> {
178 public:
InitPlugin(std::shared_ptr<IPluginTemplate<InitAttributePlg,cJSON * >> ptr)179     void InitPlugin(std::shared_ptr<IPluginTemplate<InitAttributePlg, cJSON*>> ptr) override
180     {
181         int policyCode = 20;
182         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
183             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
184         ptr->InitAttribute(policyCode, "InitAttributePlg", config);
185     }
186 };
187 
188 class HandlePolicySupplierPlg : public PluginSingleton<HandlePolicySupplierPlg, cJSON*> {
189 public:
SetSupplier()190     ErrCode SetSupplier()
191     {
192         g_visit = true;
193         return ERR_EDM_PARAM_ERROR;
194     }
195 
RemoveSupplier()196     ErrCode RemoveSupplier()
197     {
198         g_visit = true;
199         return ERR_EDM_PARAM_ERROR;
200     }
201 
InitPlugin(std::shared_ptr<IPluginTemplate<HandlePolicySupplierPlg,cJSON * >> ptr)202     void InitPlugin(std::shared_ptr<IPluginTemplate<HandlePolicySupplierPlg, cJSON*>> ptr) override
203     {
204         int policyCode = 21;
205         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
206             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
207         ptr->InitAttribute(policyCode, "HandlePolicySupplierPlg", config);
208         ptr->SetSerializer(CjsonTestSerializer::GetInstance());
209         ptr->SetOnHandlePolicyListener(&HandlePolicySupplierPlg::SetSupplier, FuncOperateType::SET);
210         ptr->SetOnHandlePolicyListener(&HandlePolicySupplierPlg::RemoveSupplier, FuncOperateType::REMOVE);
211     }
212 };
213 
214 class HandlePolicyFunctionPlg : public PluginSingleton<HandlePolicyFunctionPlg, std::string> {
215 public:
SetFunction(std::string & policyValue)216     ErrCode SetFunction(std::string &policyValue)
217     {
218         if (policyValue.empty()) {
219             policyValue = "testValue";
220         } else {
221             policyValue = "newTestValue";
222         }
223         return ERR_OK;
224     }
225 
RemoveFunction(std::string & policyValue)226     ErrCode RemoveFunction(std::string &policyValue)
227     {
228         policyValue = "";
229         return ERR_OK;
230     }
231 
InitPlugin(std::shared_ptr<IPluginTemplate<HandlePolicyFunctionPlg,std::string>> ptr)232     void InitPlugin(std::shared_ptr<IPluginTemplate<HandlePolicyFunctionPlg, std::string>> ptr) override
233     {
234         int policyCode = 22;
235         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
236             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
237         ptr->InitAttribute(policyCode, "HandlePolicyFunctionPlg", config);
238         ptr->SetSerializer(StringSerializer::GetInstance());
239         ptr->SetOnHandlePolicyListener(&HandlePolicyFunctionPlg::SetFunction, FuncOperateType::SET);
240         ptr->SetOnHandlePolicyListener(&HandlePolicyFunctionPlg::RemoveFunction, FuncOperateType::REMOVE);
241     }
242 };
243 
244 class HandlePolicyBiFunctionPlg : public PluginSingleton<HandlePolicyBiFunctionPlg, std::string> {
245 public:
SetFunction(std::string & data,std::string & currentData,std::string & mergeData,int32_t userId)246     ErrCode SetFunction(std::string &data, std::string &currentData, std::string &mergeData, int32_t userId)
247     {
248         std::string errStr{"ErrorData"};
249         if (data == errStr) {
250             return ERR_EDM_OPERATE_JSON;
251         }
252         currentData = data;
253         return ERR_OK;
254     }
255 
RemoveFunction(std::string & data,std::string & currentData,std::string & mergeData,int32_t userId)256     ErrCode RemoveFunction(std::string &data, std::string &currentData, std::string &mergeData, int32_t userId)
257     {
258         currentData = "";
259         return ERR_OK;
260     }
261 
InitPlugin(std::shared_ptr<IPluginTemplate<HandlePolicyBiFunctionPlg,std::string>> ptr)262     void InitPlugin(std::shared_ptr<IPluginTemplate<HandlePolicyBiFunctionPlg, std::string>> ptr) override
263     {
264         int policyCode = 23;
265         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
266             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
267         ptr->InitAttribute(policyCode, "HandlePolicyBiFunctionPlg", config);
268         ptr->SetSerializer(StringSerializer::GetInstance());
269         ptr->SetOnHandlePolicyListener(&HandlePolicyBiFunctionPlg::SetFunction, FuncOperateType::SET);
270         ptr->SetOnHandlePolicyListener(&HandlePolicyBiFunctionPlg::RemoveFunction, FuncOperateType::REMOVE);
271     }
272 };
273 
274 class HandleDoneBoolConsumerPlg : public PluginSingleton<HandleDoneBoolConsumerPlg, std::string> {
275 public:
SetDone(bool isGlobalChanged)276     void SetDone(bool isGlobalChanged) { g_visit = true; }
277 
RemoveDone(bool isGlobalChanged)278     void RemoveDone(bool isGlobalChanged) { g_visit = true; }
279 
InitPlugin(std::shared_ptr<IPluginTemplate<HandleDoneBoolConsumerPlg,std::string>> ptr)280     void InitPlugin(std::shared_ptr<IPluginTemplate<HandleDoneBoolConsumerPlg, std::string>> ptr) override
281     {
282         int policyCode = 24;
283         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
284             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
285         ptr->InitAttribute(policyCode, "HandleDoneBoolConsumerPlg", config);
286         ptr->SetSerializer(StringSerializer::GetInstance());
287         ptr->SetOnHandlePolicyDoneListener(&HandleDoneBoolConsumerPlg::SetDone, FuncOperateType::SET);
288         ptr->SetOnHandlePolicyDoneListener(&HandleDoneBoolConsumerPlg::RemoveDone, FuncOperateType::REMOVE);
289     }
290 };
291 
292 class HandleDoneBiBoolConsumerPlg : public PluginSingleton<HandleDoneBiBoolConsumerPlg, std::string> {
293 public:
SetDone(std::string & data,bool isGlobalChanged,int32_t userId)294     void SetDone(std::string &data, bool isGlobalChanged, int32_t userId) { g_visit = true; }
295 
RemoveDone(std::string & data,bool isGlobalChanged,int32_t userId)296     void RemoveDone(std::string &data, bool isGlobalChanged, int32_t userId) { g_visit = true; }
297 
InitPlugin(std::shared_ptr<IPluginTemplate<HandleDoneBiBoolConsumerPlg,std::string>> ptr)298     void InitPlugin(std::shared_ptr<IPluginTemplate<HandleDoneBiBoolConsumerPlg, std::string>> ptr) override
299     {
300         int policyCode = 25;
301         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
302             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
303         ptr->InitAttribute(policyCode, "HandleDoneBiBoolConsumerPlg", config);
304         ptr->SetSerializer(StringSerializer::GetInstance());
305         ptr->SetOnHandlePolicyDoneListener(&HandleDoneBiBoolConsumerPlg::SetDone, FuncOperateType::SET);
306         ptr->SetOnHandlePolicyDoneListener(&HandleDoneBiBoolConsumerPlg::RemoveDone, FuncOperateType::REMOVE);
307     }
308 };
309 
310 class AdminRemoveSupplierPlg : public PluginSingleton<AdminRemoveSupplierPlg, std::string> {
311 public:
RemoveAdmin()312     ErrCode RemoveAdmin()
313     {
314         g_visit = true;
315         return ERR_OK;
316     }
317 
InitPlugin(std::shared_ptr<IPluginTemplate<AdminRemoveSupplierPlg,std::string>> ptr)318     void InitPlugin(std::shared_ptr<IPluginTemplate<AdminRemoveSupplierPlg, std::string>> ptr) override
319     {
320         int policyCode = 26;
321         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
322             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
323         ptr->InitAttribute(policyCode, "AdminRemoveSupplierPlg", config);
324         ptr->SetSerializer(StringSerializer::GetInstance());
325         ptr->SetOnAdminRemoveListener(&AdminRemoveSupplierPlg::RemoveAdmin);
326     }
327 };
328 
329 class AdminRemoveBiFunctionPlg : public PluginSingleton<AdminRemoveBiFunctionPlg, std::string> {
330 public:
RemoveAdmin(const std::string & adminName,std::string & data,std::string & mergeData,int32_t userId)331     ErrCode RemoveAdmin(const std::string &adminName, std::string &data, std::string &mergeData, int32_t userId)
332     {
333         g_visit = true;
334         return ERR_OK;
335     }
336 
InitPlugin(std::shared_ptr<IPluginTemplate<AdminRemoveBiFunctionPlg,std::string>> ptr)337     void InitPlugin(std::shared_ptr<IPluginTemplate<AdminRemoveBiFunctionPlg, std::string>> ptr) override
338     {
339         int policyCode = 27;
340         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
341             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
342         ptr->InitAttribute(policyCode, "AdminRemoveBiFunctionPlg", config);
343         ptr->SetSerializer(StringSerializer::GetInstance());
344         ptr->SetOnAdminRemoveListener(&AdminRemoveBiFunctionPlg::RemoveAdmin);
345     }
346 };
347 
348 class AdminRemoveDoneRunnerPlg : public PluginSingleton<AdminRemoveDoneRunnerPlg, std::string> {
349 public:
RemoveAdminDone()350     void RemoveAdminDone() { g_visit = true; }
351 
InitPlugin(std::shared_ptr<IPluginTemplate<AdminRemoveDoneRunnerPlg,std::string>> ptr)352     void InitPlugin(std::shared_ptr<IPluginTemplate<AdminRemoveDoneRunnerPlg, std::string>> ptr) override
353     {
354         int policyCode = 28;
355         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
356             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
357         ptr->InitAttribute(policyCode, "AdminRemoveDoneRunnerPlg", config);
358         ptr->SetSerializer(StringSerializer::GetInstance());
359         ptr->SetOnAdminRemoveDoneListener(&AdminRemoveDoneRunnerPlg::RemoveAdminDone);
360     }
361 };
362 
363 class AdminRemoveDoneBiBiConsumerPlg : public PluginSingleton<AdminRemoveDoneBiBiConsumerPlg, std::string> {
364 public:
RemoveAdminDone(const std::string & adminName,std::string & data,int32_t userId)365     void RemoveAdminDone(const std::string &adminName, std::string &data, int32_t userId) { g_visit = true; }
366 
InitPlugin(std::shared_ptr<IPluginTemplate<AdminRemoveDoneBiBiConsumerPlg,std::string>> ptr)367     void InitPlugin(std::shared_ptr<IPluginTemplate<AdminRemoveDoneBiBiConsumerPlg, std::string>> ptr) override
368     {
369         int policyCode = 29;
370         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
371             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
372         ptr->InitAttribute(policyCode, "AdminRemoveDoneBiBiConsumerPlg", config);
373         ptr->SetSerializer(StringSerializer::GetInstance());
374         ptr->SetOnAdminRemoveDoneListener(&AdminRemoveDoneBiBiConsumerPlg::RemoveAdminDone);
375     }
376 };
377 
378 class HandlePolicyJsonBiFunctionPlg : public PluginSingleton<HandlePolicyJsonBiFunctionPlg, cJSON*> {
379 public:
SetFunction(cJSON * & data,cJSON * & currentData,cJSON * & mergeData,int32_t userId)380     ErrCode SetFunction(cJSON*& data, cJSON*& currentData, cJSON*& mergeData, int32_t userId)
381     {
382         if (currentData != nullptr) {
383             cJSON_Delete(currentData);
384         }
385         currentData = cJSON_Duplicate(data, true);
386         return ERR_OK;
387     }
388 
RemoveFunction(cJSON * & data,cJSON * & currentData,cJSON * & mergeData,int32_t userId)389     ErrCode RemoveFunction(cJSON*& data, cJSON*& currentData, cJSON*& mergeData, int32_t userId)
390     {
391         if (currentData != nullptr) {
392             cJSON_Delete(currentData);
393         }
394         currentData = cJSON_CreateNull();
395         return ERR_OK;
396     }
397 
InitPlugin(std::shared_ptr<IPluginTemplate<HandlePolicyJsonBiFunctionPlg,cJSON * >> ptr)398     void InitPlugin(std::shared_ptr<IPluginTemplate<HandlePolicyJsonBiFunctionPlg, cJSON*>> ptr) override
399     {
400         int policyCode = 30;
401         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
402             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
403         ptr->InitAttribute(policyCode, "HandlePolicyJsonBiFunctionPlg", config);
404 
405         ptr->SetSerializer(CjsonTestSerializer::GetInstance());
406 
407         // 注册回调函数
408         ptr->SetOnHandlePolicyListener(&HandlePolicyJsonBiFunctionPlg::SetFunction, FuncOperateType::SET);
409         ptr->SetOnHandlePolicyListener(&HandlePolicyJsonBiFunctionPlg::RemoveFunction, FuncOperateType::REMOVE);
410     }
411 };
412 
413 class HandlePolicyBiFunctionUnsavePlg : public PluginSingleton<HandlePolicyBiFunctionUnsavePlg, cJSON*> {
414 public:
SetFunction(cJSON * & data,cJSON * & currentData,cJSON * & mergeData,int32_t userId)415     ErrCode SetFunction(cJSON*& data, cJSON*& currentData, cJSON*& mergeData, int32_t userId)
416     {
417         if (currentData) {
418             cJSON_Delete(currentData);
419         }
420         currentData = cJSON_Duplicate(data, true);
421         return ERR_OK;
422     }
423 
RemoveFunction(cJSON * & data,cJSON * & currentData,cJSON * & mergeData,int32_t userId)424     ErrCode RemoveFunction(cJSON*& data, cJSON*& currentData, cJSON*& mergeData, int32_t userId)
425     {
426         if (currentData) {
427             cJSON_Delete(currentData);
428         }
429         currentData = cJSON_CreateNull();
430         return ERR_OK;
431     }
432 
InitPlugin(std::shared_ptr<IPluginTemplate<HandlePolicyBiFunctionUnsavePlg,cJSON * >> ptr)433     void InitPlugin(std::shared_ptr<IPluginTemplate<HandlePolicyBiFunctionUnsavePlg, cJSON*>> ptr) override
434     {
435         int policyCode = 31;
436         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
437             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
438         ptr->InitAttribute(policyCode, "HandlePolicyBiFunctionUnsavePlg", config, false, true);
439 
440         ptr->SetSerializer(CjsonTestSerializer::GetInstance());
441         ptr->SetOnHandlePolicyListener(&HandlePolicyBiFunctionUnsavePlg::SetFunction, FuncOperateType::SET);
442         ptr->SetOnHandlePolicyListener(&HandlePolicyBiFunctionUnsavePlg::RemoveFunction, FuncOperateType::REMOVE);
443     }
444 };
445 
446 class HandlePolicyReplyFunctionPlg : public PluginSingleton<HandlePolicyReplyFunctionPlg, std::string> {
447 public:
SetFunction(std::string & data,MessageParcel & reply)448     ErrCode SetFunction(std::string &data, MessageParcel &reply)
449     {
450         g_visit = true;
451         return ERR_OK;
452     }
453 
RemoveFunction(std::string & data,MessageParcel & reply)454     ErrCode RemoveFunction(std::string &data, MessageParcel &reply)
455     {
456         g_visit = true;
457         return ERR_OK;
458     }
459 
InitPlugin(std::shared_ptr<IPluginTemplate<HandlePolicyReplyFunctionPlg,std::string>> ptr)460     void InitPlugin(std::shared_ptr<IPluginTemplate<HandlePolicyReplyFunctionPlg, std::string>> ptr) override
461     {
462         int policyCode = 32;
463         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
464             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
465         ptr->InitAttribute(policyCode, "HandlePolicyReplyFunctionPlg", config, false, true);
466         ptr->SetSerializer(StringSerializer::GetInstance());
467         ptr->SetOnHandlePolicyListener(&HandlePolicyReplyFunctionPlg::SetFunction, FuncOperateType::SET);
468         ptr->SetOnHandlePolicyListener(&HandlePolicyReplyFunctionPlg::RemoveFunction, FuncOperateType::REMOVE);
469     }
470 };
471 
472 class OtherServiceStartRunnerPlg : public PluginSingleton<OtherServiceStartRunnerPlg, std::string> {
473 public:
OtherServiceStart(int32_t systemAbilityId)474     void OtherServiceStart(int32_t systemAbilityId) { g_visit = true; }
475 
InitPlugin(std::shared_ptr<IPluginTemplate<OtherServiceStartRunnerPlg,std::string>> ptr)476     void InitPlugin(std::shared_ptr<IPluginTemplate<OtherServiceStartRunnerPlg, std::string>> ptr) override
477     {
478         int policyCode = 33;
479         IPlugin::PolicyPermissionConfig config = IPlugin::PolicyPermissionConfig("ohos.permission.EDM_TEST_PERMISSION",
480             IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
481         ptr->InitAttribute(policyCode, "OtherServiceStartRunnerPlg", config);
482         ptr->SetSerializer(StringSerializer::GetInstance());
483         ptr->SetOtherServiceStartListener(&OtherServiceStartRunnerPlg::OtherServiceStart);
484     }
485 };
486 } // namespace PLUGIN
487 
488 class PluginTemplateTest : public testing::Test {
489 protected:
490     void SetUp() override;
491     void TearDown() override;
492 
493 private:
494     std::shared_ptr<IPolicyManager> policyManager_;
495 };
496 } // namespace TEST
497 } // namespace EDM
498 } // namespace OHOS
499 #endif // EDM_UNIT_TEST_IPLUGIN_TEMPLATE_TEST_H
500