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 #include <dlfcn.h>
17 #include "plugin_mgr.h"
18 #include "res_type.h"
19 #include "plugin_mgr_test.h"
20 #include "socperf_plugin.h"
21 #include "mock_plugin_mgr.h"
22 #include "res_data.h"
23 #include "res_type.h"
24 
25 using namespace std;
26 using namespace testing::ext;
27 
28 namespace OHOS {
29 namespace ResourceSchedule {
30 namespace {
31     const string LIB_NAME = "libunittest_plugin.z.so";
32 }
33 
34 #ifdef RESOURCE_SCHEDULE_SERVICE_WITH_FFRT_ENABLE
35 atomic<bool> PluginMgrTest::isBlocked = false;
36 #endif
37 
SetUpTestCase()38 void PluginMgrTest::SetUpTestCase() {}
39 
TearDownTestCase()40 void PluginMgrTest::TearDownTestCase() {}
41 
SetUp()42 void PluginMgrTest::SetUp()
43 {
44     /**
45      * @tc.setup: initialize the member variable pluginMgr_
46      */
47     pluginMgr_ = make_shared<MockPluginMgr>();
48 }
49 
TearDown()50 void PluginMgrTest::TearDown()
51 {
52     /**
53      * @tc.teardown: clear pluginMgr_
54      */
55     pluginMgr_ = nullptr;
56 }
57 
GetSubItemValue(std::string PluginName, std::string configName)58 std::string PluginMgrTest::GetSubItemValue(std::string PluginName, std::string configName)
59 {
60     std::string subItemValue;
61     PluginConfig config = pluginMgr_->GetConfig(PluginName, configName);
62     if (config.itemList.size() <= 0) {
63         return "";
64     }
65     for (auto item : config.itemList) {
66         for (auto subItem : item.subItemList) {
67             if (subItem.name == "tag") {
68                 subItemValue = subItem.value;
69             }
70         }
71     }
72     return subItemValue;
73 }
74 
75 #ifdef RESOURCE_SCHEDULE_SERVICE_WITH_FFRT_ENABLE
GetTestPlugin()76 std::shared_ptr<PluginLib> PluginMgrTest::GetTestPlugin()
77 {
78     PluginLib libInfo;
79     libInfo.onDispatchResourceFunc_ = [](const std::shared_ptr<ResData>& data) {
80         while (PluginMgrTest::isBlocked.load()) {}
81     };
82     return  make_shared<PluginLib>(libInfo);
83 }
84 
LoadTestPlugin()85 void PluginMgrTest::LoadTestPlugin()
86 {
87     auto plugin = GetTestPlugin();
88     PluginMgr::GetInstance().pluginLibMap_.emplace(LIB_NAME, *plugin);
89     PluginMgr::GetInstance().SubscribeResource(LIB_NAME, ResType::RES_TYPE_SLIDE_RECOGNIZE);
90     auto callback = [pluginName = LIB_NAME, time = PluginMgr::GetInstance().pluginBlockTime]() {
91         PluginMgr::GetInstance().HandlePluginTimeout(pluginName);
92         ffrt::submit([pluginName]() {
93             PluginMgr::GetInstance().EnablePluginIfResume(pluginName);
94             }, {}, {}, ffrt::task_attr().delay(time));
95     };
96     PluginMgr::GetInstance().dispatchers_.emplace(LIB_NAME, std::make_shared<ffrt::queue>(LIB_NAME.c_str(),
97         ffrt::queue_attr().timeout(PluginMgr::GetInstance().pluginBlockTime).callback(callback)));
98 }
99 #endif
100 
101 /**
102  * @tc.name: Plugin mgr test Init 001
103  * @tc.desc: Verify if can init success.
104  * @tc.type: FUNC
105  * @tc.require: issueI798UT
106  * @tc.author:xukuan
107  */
HWTEST_F(PluginMgrTest, Init001, TestSize.Level1)108 HWTEST_F(PluginMgrTest, Init001, TestSize.Level1)
109 {
110     pluginMgr_->Init();
111     EXPECT_TRUE(pluginMgr_->initStatus == pluginMgr_->INIT_SUCCESS);
112     EXPECT_EQ(pluginMgr_->pluginLibMap_.size(), 0);
113 }
114 
115 /**
116  * @tc.name: Plugin mgr test Init 002
117  * @tc.desc: Verify if can init fault.
118  * @tc.type: FUNC
119  * @tc.require: issueI8VZVN
120  * @tc.author:z30053169
121  */
HWTEST_F(PluginMgrTest, Init002, TestSize.Level1)122 HWTEST_F(PluginMgrTest, Init002, TestSize.Level1)
123 {
124     PluginMgr::GetInstance().pluginSwitch_ = nullptr;
125     pluginMgr_->Init();
126     SUCCEED();
127 }
128 
129 /**
130  * @tc.name: Plugin mgr test GetPluginSwitch 001
131  * @tc.desc: Verify if can get pluginSwitch
132  * @tc.type: FUNC
133  * @tc.require: issuesIA7P80
134  * @tc.author:xiaoshun
135  */
HWTEST_F(PluginMgrTest, GetPluginSwitch001, TestSize.Level0)136 HWTEST_F(PluginMgrTest, GetPluginSwitch001, TestSize.Level0)
137 {
138     pluginMgr_->Init();
139     auto pluginInfoList = pluginMgr_->pluginSwitch_->GetPluginSwitch();
140     bool result;
141     for (auto pluginInfo : pluginInfoList) {
142         if (pluginInfo.libPath == "libapp_preload_plugin.z.so") {
143             EXPECT_TRUE(pluginInfo.switchOn);
144         } else if (pluginInfo.libPath == "libapp_preload_plugin2.z.so" ||
145             pluginInfo.libPath == "libapp_preload_plugin3.z.so" ||
146             pluginInfo.libPath == "libapp_preload_plugin4.z.so") {
147             EXPECT_TRUE(!pluginInfo.switchOn);
148         }
149     }
150 }
151 
152 /**
153  * @tc.name: Plugin mgr test Stop 001
154  * @tc.desc: Verify if can stop success.
155  * @tc.type: FUNC
156  * @tc.require: issueI798UT
157  * @tc.author:xukuan
158  */
HWTEST_F(PluginMgrTest, Stop001, TestSize.Level1)159 HWTEST_F(PluginMgrTest, Stop001, TestSize.Level1)
160 {
161     pluginMgr_->Stop();
162     EXPECT_EQ(pluginMgr_->pluginLibMap_.size(), 0);
163     EXPECT_EQ(pluginMgr_->resTypeLibMap_.size(), 0);
164     EXPECT_TRUE(pluginMgr_->configReader_ == nullptr);
165 }
166 
167 /**
168  * @tc.name: Plugin mgr test GetConfig 001
169  * @tc.desc: Verify if can get config with wrong env.
170  * @tc.type: FUNC
171  * @tc.require: issueI5WWV3
172  * @tc.author:lice
173  */
HWTEST_F(PluginMgrTest, GetConfig001, TestSize.Level1)174 HWTEST_F(PluginMgrTest, GetConfig001, TestSize.Level1)
175 {
176     PluginConfig config = pluginMgr_->GetConfig("", "");
177     EXPECT_TRUE(config.itemList.empty());
178 }
179 
180 /**
181  * @tc.name: Plugin mgr test GetConfig 002
182  * @tc.desc: Verify if can get config with wrong env.
183  * @tc.type: FUNC
184  * @tc.require: issuesIA7P80
185  * @tc.author:lice
186  */
HWTEST_F(PluginMgrTest, GetConfig002, TestSize.Level1)187 HWTEST_F(PluginMgrTest, GetConfig002, TestSize.Level1)
188 {
189     pluginMgr_->Init();
190     std::string subItemValue = GetSubItemValue("demo2", "sample");
191     bool ret = !subItemValue.empty() && subItemValue == "test_sys_prod";
192     EXPECT_TRUE(ret);
193     subItemValue = GetSubItemValue("demo3", "sample");
194     ret = !subItemValue.empty() && subItemValue == "test_sys_prod";
195     EXPECT_TRUE(ret);
196     subItemValue = GetSubItemValue("demo4", "sample");
197     ret = !subItemValue.empty() && subItemValue == "test_system";
198     EXPECT_TRUE(ret);
199 }
200 
201 /**
202  * @tc.name: Plugin mgr test GetConfig 003
203  * @tc.desc: Verify if can get config with wrong env.
204  * @tc.type: FUNC
205  * @tc.require: issueI8VZVN
206  * @tc.author:z30053169
207  */
HWTEST_F(PluginMgrTest, GetConfig003, TestSize.Level1)208 HWTEST_F(PluginMgrTest, GetConfig003, TestSize.Level1)
209 {
210     PluginMgr::GetInstance().configReader_ = nullptr;
211     PluginConfig config = pluginMgr_->GetConfig("", "");
212     EXPECT_EQ(config.itemList.size(), 0);
213 }
214 
215 /**
216  * @tc.name: Plugin mgr test SubscribeResource 002
217  * @tc.desc: Verify if can SubscribeResource
218  * @tc.type: FUNC
219  * @tc.require: issueI8VZVN
220  * @tc.author:z30053169
221  */
HWTEST_F(PluginMgrTest, SubscribeResource002, TestSize.Level1)222 HWTEST_F(PluginMgrTest, SubscribeResource002, TestSize.Level1)
223 {
224     PluginMgr::GetInstance().SubscribeResource("", 0);
225     SUCCEED();
226     PluginMgr::GetInstance().SubscribeResource("test", 1);
227     SUCCEED();
228     PluginMgr::GetInstance().UnSubscribeResource("test", 1);
229     EXPECT_EQ(PluginMgr::GetInstance().resTypeLibMap_.size(), 0);
230 }
231 
232 /**
233  * @tc.name: Plugin mgr test UnSubscribeResource 003
234  * @tc.desc: Verify if can SubscribeResource
235  * @tc.type: FUNC
236  * @tc.require: issueI8VZVN
237  * @tc.author:z30053169
238  */
HWTEST_F(PluginMgrTest, UnSubscribeResource003, TestSize.Level1)239 HWTEST_F(PluginMgrTest, UnSubscribeResource003, TestSize.Level1)
240 {
241     PluginMgr::GetInstance().UnSubscribeResource("", 0);
242     SUCCEED();
243     PluginMgr::GetInstance().UnSubscribeResource("test", 0);
244     SUCCEED();
245     PluginMgr::GetInstance().SubscribeResource("test1", 1);
246     PluginMgr::GetInstance().SubscribeResource("test2", 1);
247     PluginMgr::GetInstance().UnSubscribeResource("test1", 1);
248     SUCCEED();
249     PluginMgr::GetInstance().UnSubscribeResource("test2", 1);
250     EXPECT_EQ(PluginMgr::GetInstance().resTypeLibMap_.size(), 0);
251 }
252 
253 /**
254  * @tc.name: Plugin mgr test DispatchResource 001
255  * @tc.desc: Verify if can DispatchResource
256  * @tc.type: FUNC
257  * @tc.require: issueI8VZVN
258  * @tc.author:z30053169
259  */
HWTEST_F(PluginMgrTest, DispatchResource001, TestSize.Level1)260 HWTEST_F(PluginMgrTest, DispatchResource001, TestSize.Level1)
261 {
262     pluginMgr_->Init();
263 #ifndef RESOURCE_SCHEDULE_SERVICE_WITH_FFRT_ENABLE
264     if (pluginMgr_->dispatcher_ == nullptr) {
265         pluginMgr_->dispatcher_ = std::make_shared<AppExecFwk::EventHandler>(
266             AppExecFwk::EventRunner::Create("rssDispatcher"));
267     }
268 #endif
269     nlohmann::json payload;
270     auto data = std::make_shared<ResData>(ResType::RES_TYPE_APP_ABILITY_START,
271         ResType::AppStartType::APP_COLD_START, payload);
272     pluginMgr_->DispatchResource(data);
273     pluginMgr_->DispatchResource(nullptr);
274     SUCCEED();
275 }
276 
277 /**
278  * @tc.name: Plugin mgr test DispatchResource 002
279  * @tc.desc: Verify if can DispatchResource
280  * @tc.type: FUNC
281  * @tc.require: issueI8VZVN
282  * @tc.author:z30053169
283  */
HWTEST_F(PluginMgrTest, DispatchResource002, TestSize.Level1)284 HWTEST_F(PluginMgrTest, DispatchResource002, TestSize.Level1)
285 {
286 #ifndef RESOURCE_SCHEDULE_SERVICE_WITH_FFRT_ENABLE
287     if (PluginMgr::GetInstance().dispatcher_ == nullptr) {
288         PluginMgr::GetInstance().dispatcher_ = std::make_shared<AppExecFwk::EventHandler>(
289             AppExecFwk::EventRunner::Create("rssDispatcher"));
290     }
291 #endif
292     nlohmann::json payload;
293     auto data = std::make_shared<ResData>(ResType::RES_TYPE_APP_ABILITY_START,
294         ResType::AppStartType::APP_COLD_START, payload);
295     PluginMgr::GetInstance().SubscribeResource("", 0);
296     SUCCEED();
297     PluginMgr::GetInstance().SubscribeResource("test", ResType::RES_TYPE_APP_ABILITY_START);
298     SUCCEED();
299     PluginMgr::GetInstance().DispatchResource(data);
300     PluginMgr::GetInstance().UnSubscribeResource("", 0);
301     SUCCEED();
302 }
303 
304 /**
305  * @tc.name: Plugin mgr test SubscribeResource 001
306  * @tc.desc: Verify if can stop success.
307  * @tc.type: FUNC
308  * @tc.require: issueI798UT
309  * @tc.author:xukuan
310  */
HWTEST_F(PluginMgrTest, SubscribeResource001, TestSize.Level1)311 HWTEST_F(PluginMgrTest, SubscribeResource001, TestSize.Level1)
312 {
313     pluginMgr_->Init();
314     pluginMgr_->SubscribeResource(LIB_NAME, ResType::RES_TYPE_SCREEN_STATUS);
315     auto iter = pluginMgr_->resTypeLibMap_.find(ResType::RES_TYPE_SCREEN_STATUS);
316     string libName = iter->second.back();
317     EXPECT_EQ(libName.compare(LIB_NAME), 0);
318 }
319 
320 /**
321  * @tc.name: Plugin mgr test SubscribeSyncResource 001
322  * @tc.desc: Verify if can stop success.
323  * @tc.type: FUNC
324  */
HWTEST_F(PluginMgrTest, SubscribeSyncResource001, TestSize.Level1)325 HWTEST_F(PluginMgrTest, SubscribeSyncResource001, TestSize.Level1)
326 {
327     pluginMgr_->Init();
328     pluginMgr_->SubscribeSyncResource(LIB_NAME, ResType::RES_TYPE_SCREEN_STATUS);
329     auto iter = pluginMgr_->resTypeLibSyncMap_.find(ResType::RES_TYPE_SCREEN_STATUS);
330     string libName = iter->second;
331     EXPECT_EQ(libName.compare(LIB_NAME), 0);
332 }
333 
334 /**
335  * @tc.name: Plugin mgr test UnSubscribeSyncResource 001
336  * @tc.desc: Verify if can stop success.
337  * @tc.type: FUNC
338  */
HWTEST_F(PluginMgrTest, UnSubscribeSyncResource001, TestSize.Level1)339 HWTEST_F(PluginMgrTest, UnSubscribeSyncResource001, TestSize.Level1)
340 {
341     pluginMgr_->Init();
342     pluginMgr_->SubscribeSyncResource(LIB_NAME, ResType::RES_TYPE_SCREEN_STATUS);
343     pluginMgr_->UnSubscribeSyncResource(LIB_NAME, ResType::RES_TYPE_SCREEN_STATUS);
344     auto iter = pluginMgr_->resTypeLibSyncMap_.find(ResType::RES_TYPE_SCREEN_STATUS);
345     EXPECT_TRUE(iter == pluginMgr_->resTypeLibSyncMap_.end());
346 }
347 
348 /**
349  * @tc.name: Plugin mgr test DeliverResource 001
350  * @tc.desc: Verify if can DeliverResource
351  * @tc.type: FUNC
352  */
HWTEST_F(PluginMgrTest, DeliverResource001, TestSize.Level1)353 HWTEST_F(PluginMgrTest, DeliverResource001, TestSize.Level1)
354 {
355     pluginMgr_->Init();
356     nlohmann::json payload;
357     nlohmann::json reply;
358     auto data = std::make_shared<ResData>(ResType::RES_TYPE_APP_ABILITY_START,
359         ResType::AppStartType::APP_COLD_START, payload, reply);
360     pluginMgr_->DeliverResource(data);
361     pluginMgr_->DeliverResource(nullptr);
362     SUCCEED();
363 }
364 
365 /**
366  * @tc.name: Plugin mgr test Dump 001
367  * @tc.desc: Verify if dump commands is success.
368  * @tc.type: FUNC
369  * @tc.require: issueI5WWV3
370  * @tc.author:lice
371  */
HWTEST_F(PluginMgrTest, Dump001, TestSize.Level1)372 HWTEST_F(PluginMgrTest, Dump001, TestSize.Level1)
373 {
374     std::string res;
375     pluginMgr_->Init();
376     pluginMgr_->DumpAllPlugin(res);
377     EXPECT_TRUE(!res.empty());
378     res = "";
379 
380     pluginMgr_->LoadPlugin();
381     pluginMgr_->DumpHelpFromPlugin(res);
382     EXPECT_TRUE(res.empty());
383     res = "";
384 
385     std::vector<std::string> args;
386     pluginMgr_->DumpOnePlugin(res, LIB_NAME, args);
387     EXPECT_TRUE(!res.empty());
388     res = "";
389 
390     args.emplace_back("-h");
391     pluginMgr_->DumpOnePlugin(res, LIB_NAME, args);
392     EXPECT_TRUE(!res.empty());
393     res = "";
394     pluginMgr_->DumpAllPluginConfig(res);
395     EXPECT_TRUE(!res.empty());
396 }
397 
398 /**
399  * @tc.name: Plugin mgr test RepairPlugin 001
400  * @tc.desc: Verify if RepairPlugin is success.
401  * @tc.type: FUNC
402  * @tc.require: issueI5WWV3
403  * @tc.author:lice
404  */
HWTEST_F(PluginMgrTest, RepairPlugin001, TestSize.Level1)405 HWTEST_F(PluginMgrTest, RepairPlugin001, TestSize.Level1)
406 {
407     PluginLib libInfo = pluginMgr_->pluginLibMap_.find(LIB_NAME)->second;
408     pluginMgr_->RepairPlugin(Clock::now(), LIB_NAME, libInfo);
409     EXPECT_TRUE(true);
410 }
411 
412 /**
413  * @tc.name: Plugin mgr test UnSubscribeResource 001
414  * @tc.desc: Verify if can stop success.
415  * @tc.type: FUNC
416  * @tc.require: issueI798UT
417  * @tc.author:xukuan
418  */
HWTEST_F(PluginMgrTest, UnSubscribeResource001, TestSize.Level1)419 HWTEST_F(PluginMgrTest, UnSubscribeResource001, TestSize.Level1)
420 {
421     pluginMgr_->UnSubscribeResource(LIB_NAME, ResType::RES_TYPE_SCREEN_STATUS);
422     auto iter = pluginMgr_->resTypeLibMap_.find(ResType::RES_TYPE_SCREEN_STATUS);
423     EXPECT_TRUE(iter == pluginMgr_->resTypeLibMap_.end());
424 }
425 
426 /*
427  * @tc.name: SocPerfSubTest_DispatchResource_001
428  * @tc.desc: DispatchResource Plugin
429  * @tc.type FUNC
430  * @tc.author:zoujie
431  * @tc.require: issueI5VWUI
432  */
HWTEST_F(PluginMgrTest, PluginMgrTest_DispatchResource_001, TestSize.Level1)433 HWTEST_F(PluginMgrTest, PluginMgrTest_DispatchResource_001, TestSize.Level1)
434 {
435     nlohmann::json payload;
436     auto data = std::make_shared<ResData>(ResType::RES_TYPE_APP_ABILITY_START,
437         ResType::AppStartType::APP_COLD_START, payload);
438     /* Init */
439     SocPerfPlugin::GetInstance().Init();
440     /* HandleAppAbilityStart */
441     SocPerfPlugin::GetInstance().DispatchResource(data);
442 
443     data->value = ResType::AppStartType::APP_WARM_START;
444     SocPerfPlugin::GetInstance().DispatchResource(data);
445 
446     /* HandleWindowFocus */
447     data->resType = ResType::RES_TYPE_WINDOW_FOCUS;
448     data->value = ResType::WindowFocusStatus::WINDOW_FOCUS;
449     SocPerfPlugin::GetInstance().DispatchResource(data);
450 
451     /* HandleEventClick */
452     data->resType = ResType::RES_TYPE_CLICK_RECOGNIZE;
453     data->value = ResType::ClickEventType::TOUCH_EVENT_DOWN;
454     SocPerfPlugin::GetInstance().DispatchResource(data);
455     data->value = ResType::ClickEventType::TOUCH_EVENT_UP;
456     SocPerfPlugin::GetInstance().DispatchResource(data);
457     data->value = ResType::ClickEventType::CLICK_EVENT;
458     SocPerfPlugin::GetInstance().DispatchResource(data);
459 
460     /* HandlePushPage */
461     data->resType = ResType::RES_TYPE_PUSH_PAGE;
462     data->value = ResType::PushPageType::PUSH_PAGE_START;
463     SocPerfPlugin::GetInstance().DispatchResource(data);
464     data->value = ResType::PushPageType::PUSH_PAGE_COMPLETE;
465     SocPerfPlugin::GetInstance().DispatchResource(data);
466 
467     /* HandlePopPage */
468     data->resType = ResType::RES_TYPE_POP_PAGE;
469     data->value = 0;
470     SocPerfPlugin::GetInstance().DispatchResource(data);
471 
472     /* HandleEventSlide */
473     data->resType = ResType::RES_TYPE_SLIDE_RECOGNIZE;
474     data->value = ResType::SlideEventStatus::SLIDE_EVENT_ON;
475     SocPerfPlugin::GetInstance().DispatchResource(data);
476     data->value = ResType::SlideEventStatus::SLIDE_EVENT_OFF;
477     SocPerfPlugin::GetInstance().DispatchResource(data);
478 
479     /* HandleEventWebGesture */
480     data->resType = ResType::RES_TYPE_WEB_GESTURE;
481     data->value = 0;
482     SocPerfPlugin::GetInstance().DispatchResource(data);
483 
484     /* HandleResizeWindow */
485     data->resType = ResType::RES_TYPE_RESIZE_WINDOW;
486     data->value = ResType::WindowResizeType::WINDOW_RESIZING;
487     SocPerfPlugin::GetInstance().DispatchResource(data);
488     data->value = ResType::WindowResizeType::WINDOW_RESIZE_STOP;
489     SocPerfPlugin::GetInstance().DispatchResource(data);
490 
491     /* HandleMoveWindow */
492     data->resType = ResType::RES_TYPE_MOVE_WINDOW;
493     data->value = ResType::WindowMoveType::WINDOW_MOVING;
494     SocPerfPlugin::GetInstance().DispatchResource(data);
495     data->value = ResType::WindowMoveType::WINDOW_MOVE_STOP;
496     SocPerfPlugin::GetInstance().DispatchResource(data);
497 
498     /* DeInit */
499     SocPerfPlugin::GetInstance().Disable();
500     SUCCEED();
501 }
502 
503 /*
504  * @tc.name: SocPerfSubTest_DispatchResource_002
505  * @tc.desc: DispatchResource Plugin
506  * @tc.type FUNC
507  * @tc.author:qiunaiguang
508  * @tc.require: issueI6I9QS
509  */
HWTEST_F(PluginMgrTest, PluginMgrTest_DispatchResource_002, Function | MediumTest | Level0)510 HWTEST_F(PluginMgrTest, PluginMgrTest_DispatchResource_002, Function | MediumTest | Level0)
511 {
512     /* Init */
513     SocPerfPlugin::GetInstance().Init();
514 
515     nlohmann::json payload;
516     std::shared_ptr<ResData> resData =
517         std::make_shared<ResData>(ResType::RES_TYPE_LOAD_PAGE, ResType::LoadPageType::LOAD_PAGE_START, payload);
518     SocPerfPlugin::GetInstance().HandleLoadPage(resData);
519     resData->value = ResType::LoadPageType::LOAD_PAGE_COMPLETE;
520     SocPerfPlugin::GetInstance().HandleLoadPage(resData);
521     /* DeInit */
522     SocPerfPlugin::GetInstance().Disable();
523     SUCCEED();
524 }
525 
526 /*
527  * @tc.name: SocPerfSubTest_DispatchResource_003
528  * @tc.desc: DispatchResource Plugin
529  * @tc.type FUNC
530  * @tc.author:qiunaiguang
531  * @tc.require: issueI6I9QS
532  */
HWTEST_F(PluginMgrTest, PluginMgrTest_DispatchResource_003, Function | MediumTest | Level0)533 HWTEST_F(PluginMgrTest, PluginMgrTest_DispatchResource_003, Function | MediumTest | Level0)
534 {
535     /* Init */
536     SocPerfPlugin::GetInstance().Init();
537     nlohmann::json payload;
538     std::shared_ptr<ResData> resData =
539         std::make_shared<ResData>(ResType::RES_TYPE_SHOW_REMOTE_ANIMATION,
540         ResType::ShowRemoteAnimationStatus::ANIMATION_BEGIN, payload);
541     SocPerfPlugin::GetInstance().HandleRemoteAnimation(resData);
542 
543     resData->value = ResType::ShowRemoteAnimationStatus::ANIMATION_END;
544     SocPerfPlugin::GetInstance().HandleRemoteAnimation(resData);
545     /* DeInit */
546     SocPerfPlugin::GetInstance().Disable();
547     SUCCEED();
548 }
549 
550 /*
551  * @tc.name: SocPerfSubTest_DispatchResource_004
552  * @tc.desc: DispatchResource Plugin
553  * @tc.type FUNC
554  * @tc.author:qiunaiguang
555  * @tc.require: issueI6I9QS
556  */
HWTEST_F(PluginMgrTest, PluginMgrTest_DispatchResource_004, Function | MediumTest | Level0)557 HWTEST_F(PluginMgrTest, PluginMgrTest_DispatchResource_004, Function | MediumTest | Level0)
558 {
559     /* Init */
560     SocPerfPlugin::GetInstance().Init();
561     SocPerfPlugin::GetInstance().InitFeatureSwitch("socperf_on_demand");
562     SocPerfPlugin::GetInstance().InitFeatureSwitch("test");
563     /* DeInit */
564     SocPerfPlugin::GetInstance().Disable();
565     SUCCEED();
566 }
567 
568 /*
569  * @tc.name: SocPerfSubTest_DispatchResource_005
570  * @tc.desc: DispatchResource Plugin
571  * @tc.type FUNC
572  * @tc.author:fangdinggeng
573  * @tc.require: issueI5VWUI
574  */
HWTEST_F(PluginMgrTest, PluginMgrTest_DispatchResource_005, TestSize.Level1)575 HWTEST_F(PluginMgrTest, PluginMgrTest_DispatchResource_005, TestSize.Level1)
576 {
577     nlohmann::json payload;
578     auto data = std::make_shared<ResData>(ResType::RES_TYPE_DEVICE_MODE_STATUS,
579         ResType::DeviceModeStatus::MODE_ENTER, payload);
580     /* Init */
581     SocPerfPlugin::GetInstance().Init();
582 
583     /* HandleDeviceModeStatusChange */
584     data->payload["deviceMode"] = "test";
585     SocPerfPlugin::GetInstance().DispatchResource(data);
586     data->value = ResType::DeviceModeStatus::MODE_QUIT;
587     SocPerfPlugin::GetInstance().DispatchResource(data);
588 
589     /* DeInit */
590     SocPerfPlugin::GetInstance().Disable();
591     SUCCEED();
592 }
593 
594 /**
595  * @tc.name: Plugin mgr test DumPluginInfoAppend_001
596  * @tc.desc: test the interface DumpluginInfoAppend
597  * @tc.type: FUNC
598  * @tc.require: issueI8VZVN
599  * @tc.author:z30053169
600  */
HWTEST_F(PluginMgrTest, DumPluginInfoAppend_001, TestSize.Level1)601 HWTEST_F(PluginMgrTest, DumPluginInfoAppend_001, TestSize.Level1)
602 {
603     string result;
604     PluginInfo info;
605     info.switchOn = false;
606     PluginMgr::GetInstance().DumpPluginInfoAppend(result, info);
607     EXPECT_FALSE(result.empty());
608 }
609 
610 /**
611  * @tc.name: Plugin mgr test DispatchResource 003
612  * @tc.desc: test the interface DispatchResource
613  * @tc.type: FUNC
614  * @tc.require: issueI8VZVN
615  * @tc.author:z30053169
616  */
HWTEST_F(PluginMgrTest, DispatchResource003, TestSize.Level1)617 HWTEST_F(PluginMgrTest, DispatchResource003, TestSize.Level1)
618 {
619     nlohmann::json payload;
620 #ifndef RESOURCE_SCHEDULE_SERVICE_WITH_FFRT_ENABLE
621     PluginMgr::GetInstance().dispatcher_ = nullptr;
622 #endif
623     auto data = std::make_shared<ResData>(ResType::RES_TYPE_APP_ABILITY_START,
624         ResType::AppStartType::APP_COLD_START, payload);
625     PluginMgr::GetInstance().UnSubscribeResource("test", ResType::RES_TYPE_APP_ABILITY_START);
626     PluginMgr::GetInstance().DispatchResource(data);
627     SUCCEED();
628 }
629 
630 /**
631  * @tc.name: Plugin mgr test DispatchResource 004
632  * @tc.desc: Verify if can DispatchResource
633  * @tc.type: FUNC
634  * @tc.require: issueI91HSR
635  * @tc.author:baiheng
636  */
HWTEST_F(PluginMgrTest, DispatchResource004, TestSize.Level1)637 HWTEST_F(PluginMgrTest, DispatchResource004, TestSize.Level1)
638 {
639     nlohmann::json payload;
640     auto dataNoExtType = std::make_shared<ResData>(ResType::RES_TYPE_KEY_PERF_SCENE,
641         ResType::KeyPerfStatus::ENTER_SCENE, payload);
642     PluginMgr::GetInstance().SubscribeResource("test", 10000);
643     SUCCEED();
644     PluginMgr::GetInstance().DispatchResource(dataNoExtType);
645     SUCCEED();
646 }
647 
648 /**
649  * @tc.name: Plugin mgr test DispatchResource 005
650  * @tc.desc: Verify if can DispatchResource
651  * @tc.type: FUNC
652  * @tc.require: issueI91HSR
653  * @tc.author:baiheng
654  */
HWTEST_F(PluginMgrTest, DispatchResource005, TestSize.Level1)655 HWTEST_F(PluginMgrTest, DispatchResource005, TestSize.Level1)
656 {
657     nlohmann::json payload;
658     payload["extType"] = "10000";
659     auto dataWithExtType = std::make_shared<ResData>(ResType::RES_TYPE_KEY_PERF_SCENE,
660         ResType::KeyPerfStatus::ENTER_SCENE, payload);
661     PluginMgr::GetInstance().SubscribeResource("test", 10000);
662     SUCCEED();
663     PluginMgr::GetInstance().DispatchResource(dataWithExtType);
664     SUCCEED();
665 }
666 
667 /**
668  * @tc.name: Plugin mgr test GetPluginLib 001
669  * @tc.desc: Verify if can get pluginlib with wrong env.
670  * @tc.type: FUNC
671  * @tc.require: issueI9C9JN
672  * @tc.author:xiaoshun
673  */
HWTEST_F(PluginMgrTest, GetPluginLib001, TestSize.Level0)674 HWTEST_F(PluginMgrTest, GetPluginLib001, TestSize.Level0)
675 {
676     std::shared_ptr<PluginLib> libInfoPtr = pluginMgr_->GetPluginLib("test");
677     EXPECT_TRUE(libInfoPtr == nullptr);
678 }
679 
680 /**
681  * @tc.name: Plugin mgr test GetPluginLib 002
682  * @tc.desc: Verify if can get pluginlib
683  * @tc.type: FUNC
684  * @tc.require: issueI9C9JN
685  * @tc.author:xiaoshun
686  */
HWTEST_F(PluginMgrTest, GetPluginLib002, TestSize.Level0)687 HWTEST_F(PluginMgrTest, GetPluginLib002, TestSize.Level0)
688 {
689     std::shared_ptr<PluginLib> libInfoPtr = pluginMgr_->GetPluginLib("libapp_preload_plugin.z.so");
690     EXPECT_TRUE(pluginMgr_->pluginLibMap_.find("libapp_preload_plugin.z.so") == pluginMgr_->pluginLibMap_.end() ?
691         libInfoPtr == nullptr : libInfoPtr != nullptr);
692 }
693 
694 /**
695  * @tc.name: Plugin mgr test InnerTimeUtil 001
696  * @tc.desc: InnerTimeUtil
697  * @tc.type: FUNC
698  * @tc.require: issueI9C9JN
699  * @tc.author:luolu
700  */
HWTEST_F(PluginMgrTest, InnerTimeUtil001, TestSize.Level0)701 HWTEST_F(PluginMgrTest, InnerTimeUtil001, TestSize.Level0)
702 {
703     PluginMgr::InnerTimeUtil innerTimeUtil("test1", "test2");
704     EXPECT_EQ(innerTimeUtil.functionName_, "test1");
705     EXPECT_EQ(innerTimeUtil.pluginName_, "test2");
706 }
707 
708 /**
709  * @tc.name: Plugin mgr test LoadPlugin 001
710  * @tc.desc: LoadPlugin
711  * @tc.type: FUNC
712  * @tc.require: issueI9C9JN
713  * @tc.author:luolu
714  */
HWTEST_F(PluginMgrTest, LoadPlugin001, TestSize.Level0)715 HWTEST_F(PluginMgrTest, LoadPlugin001, TestSize.Level0)
716 {
717     PluginMgr::GetInstance().LoadPlugin();
718     EXPECT_EQ(PluginMgr::GetInstance().pluginLibMap_.size(), 0);
719 }
720 
721 /**
722  * @tc.name: Plugin mgr test SubscribeSyncResource 002
723  * @tc.desc: SubscribeSyncResource
724  * @tc.type: FUNC
725  * @tc.require: issueI9C9JN
726  * @tc.author:luolu
727  */
HWTEST_F(PluginMgrTest, SubscribeSyncResource002, TestSize.Level0)728 HWTEST_F(PluginMgrTest, SubscribeSyncResource002, TestSize.Level0)
729 {
730     std::string pluginLib;
731     uint32_t resType = 0;
732     PluginMgr::GetInstance().SubscribeSyncResource(pluginLib, resType);
733     EXPECT_EQ(PluginMgr::GetInstance().resTypeLibSyncMap_.size(), 0);
734     PluginMgr::GetInstance().UnSubscribeSyncResource(pluginLib, resType);
735 }
736 
737 /**
738  * @tc.name: Plugin mgr test GetConfigReaderStr 001
739  * @tc.desc: Verify if can get ConfigReaderStr.
740  * @tc.type: FUNC
741  */
HWTEST_F(PluginMgrTest, GetConfigReaderStr001, TestSize.Level0)742 HWTEST_F(PluginMgrTest, GetConfigReaderStr001, TestSize.Level0)
743 {
744     auto configStr = pluginMgr_->GetConfigReaderStr();
745     EXPECT_TRUE(!configStr.empty());
746 }
747 
748 /**
749  * @tc.name: Plugin mgr test GetPluginSwitchStr 001
750  * @tc.desc: Verify if can get PluginSwitchStr.
751  * @tc.type: FUNC
752  */
HWTEST_F(PluginMgrTest, GetPluginSwitchStr001, TestSize.Level0)753 HWTEST_F(PluginMgrTest, GetPluginSwitchStr001, TestSize.Level0)
754 {
755     auto switchStr = pluginMgr_->GetPluginSwitchStr();
756     EXPECT_TRUE(!switchStr.empty());
757 }
758 
759 /**
760  * @tc.name: Plugin mgr test ParseConfigReader 001
761  * @tc.desc: Verify if can Parse ConfigReader.
762  * @tc.type: FUNC
763  */
HWTEST_F(PluginMgrTest, ParseConfigReader001, TestSize.Level0)764 HWTEST_F(PluginMgrTest, ParseConfigReader001, TestSize.Level0)
765 {
766     pluginMgr_->Init();
767     auto configStrs = pluginMgr_->GetConfigReaderStr();
768     pluginMgr_->ParseConfigReader(configStrs);
769     SUCCEED();
770 }
771 
772 /**
773  * @tc.name: Plugin mgr test ParsePluginSwitch 001
774  * @tc.desc: Verify if can Parse PluginSwitch.
775  * @tc.type: FUNC
776  */
HWTEST_F(PluginMgrTest, ParsePluginSwitchr001, TestSize.Level0)777 HWTEST_F(PluginMgrTest, ParsePluginSwitchr001, TestSize.Level0)
778 {
779     pluginMgr_->Init();
780     auto switchStrs = pluginMgr_->GetPluginSwitchStr();
781     pluginMgr_->ParsePluginSwitch(switchStrs);
782     SUCCEED();
783 }
784 } // namespace ResourceSchedule
785 } // namespace OHOS
786