1 /*
2 * Copyright (c) 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 <functional>
17 #include <gtest/gtest.h>
18 #define private public
19 #include "work_scheduler_service.h"
20 #include "work_status.h"
21 #include "work_bundle_group_change_callback.h"
22 #include "work_scheduler_connection.h"
23 #include "work_queue_event_handler.h"
24 #include "work_event_handler.h"
25 #include "conditions/battery_level_listener.h"
26 #include "common_event_manager.h"
27 #include "common_event_support.h"
28 #include "battery_info.h"
29 #include "conditions/battery_status_listener.h"
30 #include "conditions/charger_listener.h"
31 #include "event_publisher.h"
32
33 #ifdef DEVICE_USAGE_STATISTICS_ENABLE
34 #include "bundle_active_client.h"
35 #endif
36 #ifdef DEVICE_STANDBY_ENABLE
37 #include "standby_service_client.h"
38 #include "allow_type.h"
39 #endif
40 #ifdef RESOURCESCHEDULE_BGTASKMGR_ENABLE
41 #include "scheduler_bg_task_subscriber.h"
42 #include "background_task_mgr_helper.h"
43 #include "resource_type.h"
44 #endif
45 #include "work_sched_errors.h"
46 #include "work_sched_hilog.h"
47
48 #ifdef DEVICE_STANDBY_ENABLE
49 namespace OHOS {
50 namespace DevStandbyMgr {
SubscribeStandbyCallback(const sptr<IStandbyServiceSubscriber>& subscriber)51 ErrCode StandbyServiceClient::SubscribeStandbyCallback(const sptr<IStandbyServiceSubscriber>& subscriber)
52 {
53 return ERR_OK;
54 }
55 }
56 }
57 #endif
58
59 #ifdef RESOURCESCHEDULE_BGTASKMGR_ENABLE
60 namespace OHOS {
61 namespace BackgroundTaskMgr {
SubscribeBackgroundTask(const BackgroundTaskSubscriber &subscriber)62 ErrCode BackgroundTaskMgrHelper::SubscribeBackgroundTask(const BackgroundTaskSubscriber &subscriber)
63 {
64 return ERR_OK;
65 }
66 }
67 }
68 #endif
69
70 #ifdef DEVICE_USAGE_STATISTICS_ENABLE
71 namespace OHOS {
72 namespace DeviceUsageStats {
RegisterAppGroupCallBack(const sptr<IAppGroupCallback> &observer)73 ErrCode BundleActiveClient::RegisterAppGroupCallBack(const sptr<IAppGroupCallback> &observer)
74 {
75 return ERR_OK;
76 }
77 }
78 }
79 #endif
80
81 namespace OHOS {
82 namespace WorkScheduler {
IsBaseAbilityReady()83 bool WorkSchedulerService::IsBaseAbilityReady()
84 {
85 return true;
86 }
87 }
88 }
89
DecStrongRef(void const* obj)90 void OHOS::RefBase::DecStrongRef(void const* obj) {}
91
92 using namespace testing::ext;
93 namespace OHOS {
94 namespace WorkScheduler {
95 class WorkSchedulerServiceTest : public testing::Test {
96 public:
SetUpTestCase()97 static void SetUpTestCase() {}
TearDownTestCase()98 static void TearDownTestCase() {}
SetUp()99 void SetUp() {}
TearDown()100 void TearDown() {}
101 static std::shared_ptr<WorkSchedulerService> workSchedulerService_;
102 };
103
104 std::shared_ptr<WorkSchedulerService> WorkSchedulerServiceTest::workSchedulerService_ =
105 DelayedSingleton<WorkSchedulerService>::GetInstance();
106
107 class MyWorkSchedulerService : public WorkSchedServiceStub {
StartWork(WorkInfo& workInfo)108 int32_t StartWork(WorkInfo& workInfo) { return 0; }
StopWork(WorkInfo& workInfo)109 int32_t StopWork(WorkInfo& workInfo) { return 0; };
StopAndCancelWork(WorkInfo& workInfo)110 int32_t StopAndCancelWork(WorkInfo& workInfo) { return 0; }
StopAndClearWorks()111 int32_t StopAndClearWorks() { return 0; }
IsLastWorkTimeout(int32_t workId, bool &result)112 int32_t IsLastWorkTimeout(int32_t workId, bool &result) { return 0; }
ObtainAllWorks(std::list<std::shared_ptr<WorkInfo>>& workInfos)113 int32_t ObtainAllWorks(std::list<std::shared_ptr<WorkInfo>>& workInfos) { return 0; }
GetWorkStatus(int32_t &workId, std::shared_ptr<WorkInfo>& workInfo)114 int32_t GetWorkStatus(int32_t &workId, std::shared_ptr<WorkInfo>& workInfo) { return 0; }
GetAllRunningWorks(std::list<std::shared_ptr<WorkInfo>>& workInfos)115 int32_t GetAllRunningWorks(std::list<std::shared_ptr<WorkInfo>>& workInfos) { return 0; }
PauseRunningWorks(int32_t uid)116 int32_t PauseRunningWorks(int32_t uid) {return 0; }
ResumePausedWorks(int32_t uid)117 int32_t ResumePausedWorks(int32_t uid) {return 0; }
118 };
119 /**
120 * @tc.name: onStart_001
121 * @tc.desc: Test WorkSchedulerService OnStart.
122 * @tc.type: FUNC
123 * @tc.require: I8ZDJI
124 */
HWTEST_F(WorkSchedulerServiceTest, onStart_001, TestSize.Level1)125 HWTEST_F(WorkSchedulerServiceTest, onStart_001, TestSize.Level1)
126 {
127 workSchedulerService_->OnStart();
128 EXPECT_NE(workSchedulerService_, nullptr);
129 }
130
131 /**
132 * @tc.name: startWork_001
133 * @tc.desc: Test WorkSchedulerService startWork.
134 * @tc.type: FUNC
135 * @tc.require: I8F08T
136 */
HWTEST_F(WorkSchedulerServiceTest, startWork_001, TestSize.Level1)137 HWTEST_F(WorkSchedulerServiceTest, startWork_001, TestSize.Level1)
138 {
139 int32_t ret;
140
141 workSchedulerService_->ready_ = false;
142 WorkInfo workinfo = WorkInfo();
143 ret = workSchedulerService_->StartWork(workinfo);
144 EXPECT_EQ(ret, E_SERVICE_NOT_READY);
145
146 workSchedulerService_->ready_ = true;
147 ret = workSchedulerService_->StartWork(workinfo);
148 EXPECT_EQ(ret, E_CHECK_WORKINFO_FAILED);
149
150 workSchedulerService_->checkBundle_ = false;
151 ret = workSchedulerService_->StartWork(workinfo);
152 EXPECT_EQ(ret, E_REPEAT_CYCLE_TIME_ERR);
153
154 workinfo.RequestStorageLevel(WorkCondition::Storage::STORAGE_LEVEL_LOW_OR_OKAY);
155 ret = workSchedulerService_->StartWork(workinfo);
156 EXPECT_EQ(ret, 0);
157 ret = workSchedulerService_->StartWork(workinfo);
158 EXPECT_EQ(ret, E_ADD_REPEAT_WORK_ERR);
159 }
160
161 /**
162 * @tc.name: stopWork_001
163 * @tc.desc: Test WorkSchedulerService stopWork.
164 * @tc.type: FUNC
165 * @tc.require: I8F08T
166 */
HWTEST_F(WorkSchedulerServiceTest, stopWork_001, TestSize.Level1)167 HWTEST_F(WorkSchedulerServiceTest, stopWork_001, TestSize.Level1)
168 {
169 int32_t ret;
170
171 WS_HILOGI("WorkSchedulerServiceTest.stopWork_001 begin");
172 workSchedulerService_->ready_ = false;
173 workSchedulerService_->checkBundle_ = true;
174 WorkInfo workinfo = WorkInfo();
175 ret = workSchedulerService_->StopWork(workinfo);
176 EXPECT_EQ(ret, E_SERVICE_NOT_READY);
177
178 workSchedulerService_->ready_ = true;
179 ret = workSchedulerService_->StopWork(workinfo);
180 EXPECT_EQ(ret, E_CHECK_WORKINFO_FAILED);
181
182 workSchedulerService_->checkBundle_ = false;
183 ret = workSchedulerService_->StopWork(workinfo);
184 EXPECT_EQ(ret, 0);
185 WS_HILOGI("WorkSchedulerServiceTest.stopWork_001 end");
186 }
187
188 /**
189 * @tc.name: StopAndCancelWork_001
190 * @tc.desc: Test WorkSchedulerService StopAndCancelWork.
191 * @tc.type: FUNC
192 * @tc.require: I8F08T
193 */
HWTEST_F(WorkSchedulerServiceTest, StopAndCancelWork_001, TestSize.Level1)194 HWTEST_F(WorkSchedulerServiceTest, StopAndCancelWork_001, TestSize.Level1)
195 {
196 int32_t ret;
197
198 WS_HILOGI("WorkSchedulerServiceTest.StopAndCancelWork_001 begin");
199 workSchedulerService_->ready_ = false;
200 workSchedulerService_->checkBundle_ = true;
201 WorkInfo workinfo = WorkInfo();
202 ret = workSchedulerService_->StopAndCancelWork(workinfo);
203 EXPECT_EQ(ret, E_SERVICE_NOT_READY);
204
205 workSchedulerService_->ready_ = true;
206 ret = workSchedulerService_->StopAndCancelWork(workinfo);
207 EXPECT_EQ(ret, E_CHECK_WORKINFO_FAILED);
208
209 workSchedulerService_->checkBundle_ = false;
210 ret = workSchedulerService_->StopAndCancelWork(workinfo);
211 EXPECT_EQ(ret, 0);
212 WS_HILOGI("WorkSchedulerServiceTest.StopAndCancelWork_001 end");
213 }
214
215 /**
216 * @tc.name: StopAndClearWorks_001
217 * @tc.desc: Test WorkSchedulerService StopAndClearWorks.
218 * @tc.type: FUNC
219 * @tc.require: I8F08T
220 */
HWTEST_F(WorkSchedulerServiceTest, StopAndClearWorks_001, TestSize.Level1)221 HWTEST_F(WorkSchedulerServiceTest, StopAndClearWorks_001, TestSize.Level1)
222 {
223 int32_t ret;
224
225 WS_HILOGI("WorkSchedulerServiceTest.StopAndClearWorks_001 begin");
226 workSchedulerService_->ready_ = false;
227 workSchedulerService_->checkBundle_ = true;
228 ret = workSchedulerService_->StopAndClearWorks();
229 EXPECT_EQ(ret, E_SERVICE_NOT_READY);
230
231 workSchedulerService_->ready_ = true;
232 ret = workSchedulerService_->StopAndClearWorks();
233 EXPECT_EQ(ret, 0);
234 WS_HILOGI("WorkSchedulerServiceTest.StopAndClearWorks_001 end");
235 }
236
237 /**
238 * @tc.name: IsLastWorkTimeout_001
239 * @tc.desc: Test WorkSchedulerService IsLastWorkTimeout.
240 * @tc.type: FUNC
241 * @tc.require: I8F08T
242 */
HWTEST_F(WorkSchedulerServiceTest, IsLastWorkTimeout_001, TestSize.Level1)243 HWTEST_F(WorkSchedulerServiceTest, IsLastWorkTimeout_001, TestSize.Level1)
244 {
245 bool result;
246 auto ret = workSchedulerService_->IsLastWorkTimeout(1, result);
247 EXPECT_EQ(ret, E_WORK_NOT_EXIST_FAILED);
248 }
249
250 /**
251 * @tc.name: ObtainAllWorks_001
252 * @tc.desc: Test WorkSchedulerService ObtainAllWorks.
253 * @tc.type: FUNC
254 * @tc.require: IA4HTC
255 */
HWTEST_F(WorkSchedulerServiceTest, ObtainAllWorks_001, TestSize.Level1)256 HWTEST_F(WorkSchedulerServiceTest, ObtainAllWorks_001, TestSize.Level1)
257 {
258 std::list<std::shared_ptr<WorkInfo>> workInfos;
259 auto ret = workSchedulerService_->ObtainAllWorks(workInfos);
260 EXPECT_EQ(ret, 0);
261 }
262
263 /**
264 * @tc.name: GetWorkStatus_001
265 * @tc.desc: Test WorkSchedulerService GetWorkStatus.
266 * @tc.type: FUNC
267 * @tc.require: IA4HTC
268 */
HWTEST_F(WorkSchedulerServiceTest, GetWorkStatus_001, TestSize.Level1)269 HWTEST_F(WorkSchedulerServiceTest, GetWorkStatus_001, TestSize.Level1)
270 {
271 std::shared_ptr<WorkInfo> workInfo = std::make_shared<WorkInfo>();
272 int32_t workId;
273 auto ret = workSchedulerService_->GetWorkStatus(workId, workInfo);
274 EXPECT_EQ(ret, 0);
275 }
276
277 /**
278 * @tc.name: GetAllRunningWorks_001
279 * @tc.desc: Test WorkSchedulerService GetAllRunningWorks.
280 * @tc.type: FUNC
281 * @tc.require: I8F08T
282 */
HWTEST_F(WorkSchedulerServiceTest, GetAllRunningWorks_001, TestSize.Level1)283 HWTEST_F(WorkSchedulerServiceTest, GetAllRunningWorks_001, TestSize.Level1)
284 {
285 std::list<std::shared_ptr<WorkInfo>> workInfos;
286
287 auto ret = workSchedulerService_->GetAllRunningWorks(workInfos);
288 EXPECT_EQ(ret, E_INVALID_PROCESS_NAME);
289 }
290
291 /**
292 * @tc.name: Datashare_001
293 * @tc.desc: Test Datashare
294 * @tc.type: FUNC
295 * @tc.require: I8ZDJI
296 */
HWTEST_F(WorkSchedulerServiceTest, Datashare_001, TestSize.Level1)297 HWTEST_F(WorkSchedulerServiceTest, Datashare_001, TestSize.Level1)
298 {
299 WS_HILOGI("====== test begin ====== ");
300 std::vector<std::string> argsInStr;
301 argsInStr.push_back("-k");
302 argsInStr.push_back("settings.power.suspend_sources");
303 std::string result;
304 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
305 WS_HILOGI("%{public}s", result.c_str());
306 EXPECT_EQ(result.empty(), 0);
307 WS_HILOGI("====== test end ====== ");
308 }
309
HWTEST_F(WorkSchedulerServiceTest, ListenerStart_001, TestSize.Level1)310 HWTEST_F(WorkSchedulerServiceTest, ListenerStart_001, TestSize.Level1)
311 {
312 WS_HILOGI("====== ListenerStart_001 begin====== ");
313 for (auto pair : workSchedulerService_->workQueueManager_->listenerMap_)
314 {
315 pair.second->Start();
316 }
317 std::vector<std::pair<string, string>> infos = {
318 {"event", "info"},
319 {"network", "wifi"},
320 {"network", "disconnect"},
321 {"network", "invalid"},
322 {"charging", "usb"},
323 {"charging", "ac"},
324 {"charging", "wireless"},
325 {"charging", "none"},
326 {"charging", "invalid"},
327 {"storage", "low"},
328 {"storage", "ok"},
329 {"storage", "invalid"},
330 {"batteryStatus", "low"},
331 {"batteryStatus", "ok"},
332 {"batteryStatus", "invalid"},
333 };
334 EventPublisher eventPublisher;
335 for (auto it : infos) {
336 std::string result;
337 std::string eventType = it.first;
338 std::string eventValue = it.second;
339 eventPublisher.Dump(result, eventType, eventValue);
340 WS_HILOGI("%{public}s", result.c_str());
341 EXPECT_EQ(!result.empty(), true);
342 }
343 WS_HILOGI("====== ListenerStart_001 end ====== ");
344 }
345
HWTEST_F(WorkSchedulerServiceTest, Dump_001, TestSize.Level1)346 HWTEST_F(WorkSchedulerServiceTest, Dump_001, TestSize.Level1)
347 {
348 WS_HILOGI("====== WorkSchedulerServiceTest.Dump_001 begin ====== ");
349 std::vector<std::string> argsInStr;
350 std::string result;
351 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
352 WS_HILOGI("%{public}s", result.c_str());
353
354 argsInStr.clear();
355 result.clear();
356 argsInStr.push_back("-h");
357 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
358 WS_HILOGI("%{public}s", result.c_str());
359
360 result.clear();
361 argsInStr.clear();
362 argsInStr.push_back("-a");
363 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
364 WS_HILOGI("%{public}s", result.c_str());
365
366 result.clear();
367 argsInStr.clear();
368 argsInStr.push_back("-x");
369 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
370 WS_HILOGI("%{public}s", result.c_str());
371
372 result.clear();
373 argsInStr.clear();
374 argsInStr.push_back("-memory");
375 argsInStr.push_back("100");
376 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
377 WS_HILOGI("%{public}s", result.c_str());
378
379 result.clear();
380 argsInStr.clear();
381 argsInStr.push_back("-watchdog_time");
382 argsInStr.push_back("100");
383 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
384 EXPECT_FALSE(result.empty());
385 WS_HILOGI("%{public}s", result.c_str());
386 WS_HILOGI("====== WorkSchedulerServiceTest.Dump_001 end ====== ");
387 }
388
HWTEST_F(WorkSchedulerServiceTest, Dump_002, TestSize.Level1)389 HWTEST_F(WorkSchedulerServiceTest, Dump_002, TestSize.Level1)
390 {
391 WS_HILOGI("====== WorkSchedulerServiceTest.Dump_002 begin ====== ");
392 std::vector<std::string> argsInStr;
393 std::string result;
394 argsInStr.push_back("-repeat_time_min");
395 argsInStr.push_back("100");
396 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
397 WS_HILOGI("%{public}s", result.c_str());
398
399 result.clear();
400 argsInStr.clear();
401 argsInStr.push_back("-min_interval");
402 argsInStr.push_back("100");
403 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
404 WS_HILOGI("%{public}s", result.c_str());
405
406 result.clear();
407 argsInStr.clear();
408 argsInStr.push_back("-test");
409 argsInStr.push_back("100");
410 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
411 WS_HILOGI("%{public}s", result.c_str());
412 EXPECT_EQ(result.empty(), false);
413 WS_HILOGI("====== WorkSchedulerServiceTest.Dump_002 end ====== ");
414 }
415
HWTEST_F(WorkSchedulerServiceTest, Dump_003, TestSize.Level1)416 HWTEST_F(WorkSchedulerServiceTest, Dump_003, TestSize.Level1)
417 {
418 WS_HILOGI("====== WorkSchedulerServiceTest.Dump_003 begin ====== ");
419 std::vector<std::string> argsInStr;
420 std::string result;
421
422 argsInStr.clear();
423 result.clear();
424 argsInStr.push_back("-d");
425 argsInStr.push_back("storage");
426 argsInStr.push_back("ok");
427 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
428 WS_HILOGI("%{public}s", result.c_str());
429
430 argsInStr.clear();
431 result.clear();
432 argsInStr.push_back("-t");
433 argsInStr.push_back("bundlename");
434 argsInStr.push_back("abilityname");
435 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
436 WS_HILOGI("%{public}s", result.c_str());
437
438 WorkInfo workinfo = WorkInfo();
439 result.clear();
440 workinfo.RequestStorageLevel(WorkCondition::Storage::STORAGE_LEVEL_LOW_OR_OKAY);
441 workinfo.RefreshUid(2);
442 workinfo.SetElement("bundlename", "abilityname");
443 workSchedulerService_->AddWorkInner(workinfo);
444 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
445 EXPECT_TRUE(result.empty());
446 WS_HILOGI("%{public}s", result.c_str());
447 WS_HILOGI("====== WorkSchedulerServiceTest.Dump_003 end ====== ");
448 }
449
HWTEST_F(WorkSchedulerServiceTest, Dump_004, TestSize.Level1)450 HWTEST_F(WorkSchedulerServiceTest, Dump_004, TestSize.Level1)
451 {
452 WS_HILOGI("====== WorkSchedulerServiceTest.Dump_004 begin ====== ");
453 std::vector<std::string> argsInStr;
454 std::string result;
455 argsInStr.push_back("-d");
456 argsInStr.push_back("storage");
457 argsInStr.push_back("ok");
458 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
459 WS_HILOGI("%{public}s", result.c_str());
460
461 argsInStr.clear();
462 argsInStr.push_back("arg0");
463 argsInStr.push_back("arg1");
464 argsInStr.push_back("arg2");
465 argsInStr.push_back("arg3");
466 argsInStr.push_back("arg4");
467 result.clear();
468 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
469 WS_HILOGI("%{public}s", result.c_str());
470 EXPECT_EQ(result.empty(), false);
471 WS_HILOGI("====== WorkSchedulerServiceTest.Dump_004 end ====== ");
472 }
473
474 /**
475 * @tc.name: Dump_005
476 * @tc.desc: Test WorkSchedulerService Dump.
477 * @tc.type: FUNC
478 * @tc.require: I9RYLE
479 */
HWTEST_F(WorkSchedulerServiceTest, Dump_005, TestSize.Level1)480 HWTEST_F(WorkSchedulerServiceTest, Dump_005, TestSize.Level1)
481 {
482 WS_HILOGI("====== WorkSchedulerServiceTest.Dump_005 begin ====== ");
483 std::vector<std::string> argsInStr;
484 std::string result;
485 argsInStr.push_back("-count");
486 argsInStr.push_back("1");
487 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
488 WS_HILOGI("%{public}s", result.c_str());
489 EXPECT_EQ(result.empty(), false);
490 WS_HILOGI("====== WorkSchedulerServiceTest.Dump_005 end ====== ");
491 }
492
493 /**
494 * @tc.name: Dump_006
495 * @tc.desc: Test WorkSchedulerService Dump.
496 * @tc.type: FUNC
497 * @tc.require: IAHY0B
498 */
HWTEST_F(WorkSchedulerServiceTest, Dump_006, TestSize.Level1)499 HWTEST_F(WorkSchedulerServiceTest, Dump_006, TestSize.Level1)
500 {
501 WS_HILOGI("====== WorkSchedulerServiceTest.Dump_006 begin ====== ");
502 std::vector<std::string> argsInStr;
503 std::string result;
504 argsInStr.push_back("-s");
505 argsInStr.push_back("1");
506 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
507 WS_HILOGI("%{public}s", result.c_str());
508 EXPECT_EQ(result.empty(), false);
509
510 argsInStr.clear();
511 result.clear();
512 argsInStr.push_back("-s");
513 argsInStr.push_back("1");
514 argsInStr.push_back("1");
515 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
516 WS_HILOGI("%{public}s", result.c_str());
517 EXPECT_EQ(result.empty(), false);
518
519 argsInStr.clear();
520 result.clear();
521 argsInStr.push_back("-s");
522 argsInStr.push_back("1");
523 argsInStr.push_back("true");
524 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
525 WS_HILOGI("%{public}s", result.c_str());
526 EXPECT_EQ(result.empty(), true);
527
528 argsInStr.clear();
529 result.clear();
530 argsInStr.push_back("-s");
531 argsInStr.push_back("1");
532 argsInStr.push_back("false");
533 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
534 WS_HILOGI("%{public}s", result.c_str());
535 EXPECT_EQ(result.empty(), true);
536 WS_HILOGI("====== WorkSchedulerServiceTest.Dump_006 end ====== ");
537 }
538
539 /**
540 * @tc.name: Dump_007
541 * @tc.desc: Test WorkSchedulerService Dump.
542 * @tc.type: FUNC
543 * @tc.require: IAJSVG
544 */
HWTEST_F(WorkSchedulerServiceTest, Dump_007, TestSize.Level1)545 HWTEST_F(WorkSchedulerServiceTest, Dump_007, TestSize.Level1)
546 {
547 WS_HILOGI("====== WorkSchedulerServiceTest.Dump_007 begin ====== ");
548 std::vector<std::string> argsInStr;
549 std::string result;
550 argsInStr.push_back("-x");
551 argsInStr.push_back("1");
552 argsInStr.push_back("1");
553 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
554 WS_HILOGI("%{public}s", result.c_str());
555 EXPECT_EQ(result.empty(), false);
556
557 argsInStr.clear();
558 result.clear();
559 argsInStr.push_back("-x");
560 argsInStr.push_back("1");
561 argsInStr.push_back("p");
562 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
563 WS_HILOGI("%{public}s", result.c_str());
564 EXPECT_EQ(result.empty(), false);
565
566 argsInStr.clear();
567 result.clear();
568 argsInStr.push_back("-x");
569 argsInStr.push_back("1");
570 argsInStr.push_back("r");
571 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
572 WS_HILOGI("%{public}s", result.c_str());
573 EXPECT_EQ(result.empty(), false);
574
575 argsInStr.clear();
576 result.clear();
577 argsInStr.push_back("-cpu");
578 argsInStr.push_back("1");
579 workSchedulerService_->DumpProcessForEngMode(argsInStr, result);
580 WS_HILOGI("%{public}s", result.c_str());
581 EXPECT_EQ(result.empty(), false);
582 WS_HILOGI("====== WorkSchedulerServiceTest.Dump_007 end ====== ");
583 }
584
585 /**
586 * @tc.name: Dump_008
587 * @tc.desc: Test WorkSchedulerService Dump.
588 * @tc.type: FUNC
589 * @tc.require: IAJSVG
590 */
HWTEST_F(WorkSchedulerServiceTest, Dump_008, TestSize.Level1)591 HWTEST_F(WorkSchedulerServiceTest, Dump_008, TestSize.Level1)
592 {
593 WS_HILOGI("====== WorkSchedulerServiceTest.Dump_008 begin ====== ");
594 std::vector<std::string> argsInStr;
595 std::string result;
596 argsInStr.push_back("-t");
597 argsInStr.push_back("bundlename");
598 argsInStr.push_back("abilityname");
599 workSchedulerService_->DumpProcessForUserMode(argsInStr, result);
600 EXPECT_EQ(result.empty(), true);
601 WS_HILOGI("====== WorkSchedulerServiceTest.Dump_008 end ====== ");
602 }
603
HWTEST_F(WorkSchedulerServiceTest, WorkStandbyStateChangeCallbackTest_001, TestSize.Level1)604 HWTEST_F(WorkSchedulerServiceTest, WorkStandbyStateChangeCallbackTest_001, TestSize.Level1)
605 {
606 WS_HILOGI("====== WorkSchedulerServiceTest.WorkStandbyStateChangeCallbackTest_001 begin ====== ");
607 workSchedulerService_->standbyStateObserver_->OnDeviceIdleMode(true, false);
608 workSchedulerService_->standbyStateObserver_->OnDeviceIdleMode(true, true);
609 workSchedulerService_->standbyStateObserver_->OnDeviceIdleMode(false, true);
610 workSchedulerService_->standbyStateObserver_->OnAllowListChanged(0, "bundlename", 0, true);
611 EXPECT_NE(workSchedulerService_, nullptr);
612 WS_HILOGI("====== WorkSchedulerServiceTest.WorkStandbyStateChangeCallbackTest_001 end ====== ");
613 }
614
HWTEST_F(WorkSchedulerServiceTest, WorkBundleGroupChangeCallback_001, TestSize.Level1)615 HWTEST_F(WorkSchedulerServiceTest, WorkBundleGroupChangeCallback_001, TestSize.Level1)
616 {
617 WS_HILOGI("====== WorkSchedulerServiceTest.WorkBundleGroupChangeCallback_001 begin ====== ");
618 OHOS::DeviceUsageStats::AppGroupCallbackInfo appGroupCallbackInfo1(0, 1, 2, 0, "bundlename");
619 workSchedulerService_->groupObserver_->OnAppGroupChanged(appGroupCallbackInfo1);
620 OHOS::DeviceUsageStats::AppGroupCallbackInfo appGroupCallbackInfo2(0, 2, 1, 0, "bundlename");
621 workSchedulerService_->groupObserver_->OnAppGroupChanged(appGroupCallbackInfo2);
622 EXPECT_NE(workSchedulerService_, nullptr);
623 WS_HILOGI("====== WorkSchedulerServiceTest.WorkBundleGroupChangeCallback_001 end ====== ");
624 }
625
HWTEST_F(WorkSchedulerServiceTest, WorkSchedulerConnection_001, TestSize.Level1)626 HWTEST_F(WorkSchedulerServiceTest, WorkSchedulerConnection_001, TestSize.Level1)
627 {
628 WS_HILOGI("====== WorkSchedulerServiceTest.WorkSchedulerConnection_001 begin ====== ");
629 auto workinfo = std::make_shared<WorkInfo>();
630 WorkSchedulerConnection conection(workinfo);
631 AppExecFwk::ElementName element;
632 conection.StopWork();
633 conection.OnAbilityDisconnectDone(element, 0);
634 EXPECT_EQ(conection.proxy_, nullptr);
635 WS_HILOGI("====== WorkSchedulerServiceTest.WorkSchedulerConnection_001 end ====== ");
636 }
637
HWTEST_F(WorkSchedulerServiceTest, SchedulerBgTaskSubscriber_001, TestSize.Level1)638 HWTEST_F(WorkSchedulerServiceTest, SchedulerBgTaskSubscriber_001, TestSize.Level1)
639 {
640 WS_HILOGI("====== WorkSchedulerServiceTest.SchedulerBgTaskSubscriber_001 begin ====== ");
641 SchedulerBgTaskSubscriber subscriber;
642 subscriber.OnProcEfficiencyResourcesApply(nullptr);
643 subscriber.OnProcEfficiencyResourcesReset(nullptr);
644 subscriber.OnAppEfficiencyResourcesApply(nullptr);
645 subscriber.OnAppEfficiencyResourcesReset(nullptr);
646
647 auto resourceInfo = std::make_shared<BackgroundTaskMgr::ResourceCallbackInfo>(0, 0, 0xFFFF, "name");
648 subscriber.OnProcEfficiencyResourcesApply(resourceInfo);
649 subscriber.OnProcEfficiencyResourcesReset(resourceInfo);
650 subscriber.OnAppEfficiencyResourcesApply(resourceInfo);
651 subscriber.OnAppEfficiencyResourcesReset(resourceInfo);
652 WS_HILOGI("====== WorkSchedulerServiceTest.SchedulerBgTaskSubscriber_001 end ====== ");
653 }
654
HWTEST_F(WorkSchedulerServiceTest, WorkQueueEventHandler_001, TestSize.Level1)655 HWTEST_F(WorkSchedulerServiceTest, WorkQueueEventHandler_001, TestSize.Level1)
656 {
657 WS_HILOGI("====== WorkSchedulerServiceTest.WorkQueueEventHandler_001 begin ====== ");
658 WorkQueueEventHandler handler(nullptr, nullptr);
659 AppExecFwk::InnerEvent::Pointer event = AppExecFwk::InnerEvent::Get(0);
660 handler.ProcessEvent(event);
661 event = AppExecFwk::InnerEvent::Get(1);
662 handler.ProcessEvent(event);
663 event = AppExecFwk::InnerEvent::Get(2);
664 handler.ProcessEvent(event);
665 WS_HILOGI("====== WorkSchedulerServiceTest.WorkQueueEventHandler_001 end ====== ");
666 }
667
HWTEST_F(WorkSchedulerServiceTest, WorkEventHandler_001, TestSize.Level1)668 HWTEST_F(WorkSchedulerServiceTest, WorkEventHandler_001, TestSize.Level1)
669 {
670 WS_HILOGI("====== WorkSchedulerServiceTest.WorkEventHandler_001 begin ====== ");
671 WorkEventHandler handler(workSchedulerService_->eventRunner_, workSchedulerService_);
672 AppExecFwk::InnerEvent::Pointer event = AppExecFwk::InnerEvent::Get(0);
673 handler.ProcessEvent(event);
674 event = AppExecFwk::InnerEvent::Get(1);
675 handler.ProcessEvent(event);
676 event = AppExecFwk::InnerEvent::Get(2);
677 handler.ProcessEvent(event);
678 event = AppExecFwk::InnerEvent::Get(3);
679 handler.ProcessEvent(event);
680 event = AppExecFwk::InnerEvent::Get(4);
681 handler.ProcessEvent(event);
682 event = AppExecFwk::InnerEvent::Get(5);
683 handler.ProcessEvent(event);
684 EXPECT_TRUE(workSchedulerService_->eventRunner_ != nullptr);
685 WS_HILOGI("====== WorkSchedulerServiceTest.WorkEventHandler_001 end ====== ");
686 }
687
HWTEST_F(WorkSchedulerServiceTest, BatteryLevelListener_001, TestSize.Level1)688 HWTEST_F(WorkSchedulerServiceTest, BatteryLevelListener_001, TestSize.Level1)
689 {
690 WS_HILOGI("====== WorkSchedulerServiceTest.BatteryLevelListener_001 begin ====== ");
691
692 BatteryLevelListener batteryLevelListener(workSchedulerService_->workQueueManager_, workSchedulerService_);
693
694 batteryLevelListener.Start();
695 EXPECT_NE(batteryLevelListener.commonEventSubscriber, nullptr);
696
697 EventFwk::CommonEventData data;
698 batteryLevelListener.commonEventSubscriber->OnReceiveEvent(data);
699
700 EventFwk::Want want;
701 want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_BATTERY_CHANGED);
702 data.SetWant(want);
703 batteryLevelListener.commonEventSubscriber->OnReceiveEvent(data);
704
705 want.SetParam(PowerMgr::BatteryInfo::COMMON_EVENT_KEY_CAPACITY, 20);
706 data.SetWant(want);
707 batteryLevelListener.commonEventSubscriber->OnReceiveEvent(data);
708 batteryLevelListener.Stop();
709
710 WS_HILOGI("====== WorkSchedulerServiceTest.BatteryLevelListener_001 end ====== ");
711 }
712
HWTEST_F(WorkSchedulerServiceTest, BatteryStatusListener_001, TestSize.Level1)713 HWTEST_F(WorkSchedulerServiceTest, BatteryStatusListener_001, TestSize.Level1)
714 {
715 WS_HILOGI("====== WorkSchedulerServiceTest.BatteryStatusListener_001 begin ====== ");
716 BatteryStatusListener batteryStatusListener(workSchedulerService_->workQueueManager_);
717
718 batteryStatusListener.Start();
719 EXPECT_NE(batteryStatusListener.commonEventSubscriber, nullptr);
720
721 EventFwk::CommonEventData data;
722 batteryStatusListener.commonEventSubscriber->OnReceiveEvent(data);
723
724 EventFwk::Want want;
725 want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_BATTERY_LOW);
726 data.SetWant(want);
727 batteryStatusListener.commonEventSubscriber->OnReceiveEvent(data);
728
729 want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_BATTERY_OKAY);
730 data.SetWant(want);
731 batteryStatusListener.commonEventSubscriber->OnReceiveEvent(data);
732 batteryStatusListener.Stop();
733
734 WS_HILOGI("====== WorkSchedulerServiceTest.BatteryStatusListener_001 end ====== ");
735 }
736
HWTEST_F(WorkSchedulerServiceTest, ChargerListener_001, TestSize.Level1)737 HWTEST_F(WorkSchedulerServiceTest, ChargerListener_001, TestSize.Level1)
738 {
739 WS_HILOGI("====== WorkSchedulerServiceTest.ChargerListener_001 begin ====== ");
740 ChargerListener chargerListener(workSchedulerService_->workQueueManager_);
741
742 chargerListener.Start();
743 EXPECT_NE(chargerListener.commonEventSubscriber, nullptr);
744
745 EventFwk::CommonEventData data;
746 chargerListener.commonEventSubscriber->OnReceiveEvent(data);
747
748 EventFwk::Want want;
749 want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_POWER_CONNECTED);
750 data.SetWant(want);
751 data.SetCode(static_cast<uint32_t>(PowerMgr::BatteryPluggedType::PLUGGED_TYPE_AC));
752 chargerListener.commonEventSubscriber->OnReceiveEvent(data);
753
754 data.SetCode(static_cast<uint32_t>(PowerMgr::BatteryPluggedType::PLUGGED_TYPE_USB));
755 chargerListener.commonEventSubscriber->OnReceiveEvent(data);
756
757
758 data.SetCode(static_cast<uint32_t>(PowerMgr::BatteryPluggedType::PLUGGED_TYPE_WIRELESS));
759 chargerListener.commonEventSubscriber->OnReceiveEvent(data);
760
761 want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_POWER_DISCONNECTED);
762 data.SetWant(want);
763 data.SetCode(static_cast<uint32_t>(PowerMgr::BatteryPluggedType::PLUGGED_TYPE_NONE));
764 chargerListener.commonEventSubscriber->OnReceiveEvent(data);
765 chargerListener.Stop();
766
767 WS_HILOGI("====== WorkSchedulerServiceTest.ChargerListener_001 end ====== ");
768 }
769
HWTEST_F(WorkSchedulerServiceTest, ListenerStop_001, TestSize.Level1)770 HWTEST_F(WorkSchedulerServiceTest, ListenerStop_001, TestSize.Level1)
771 {
772 WS_HILOGI("====== ListenerStop_001 begin====== ");
773 for (auto pair : workSchedulerService_->workQueueManager_->listenerMap_)
774 {
775 pair.second->Stop();
776 }
777 WS_HILOGI("====== ListenerStop_001 end ====== ");
778 }
779
HWTEST_F(WorkSchedulerServiceTest, WorkSchedServiceStub_001, TestSize.Level1)780 HWTEST_F(WorkSchedulerServiceTest, WorkSchedServiceStub_001, TestSize.Level1)
781 {
782 MyWorkSchedulerService s;
783 MessageParcel data, reply;
784 MessageOption option;
785 const int size = 11;
786 for (int i = 0; i < size; i++) {
787 s.HandleRequest(i, data, reply, option);
788 WorkInfo info;
789 info.Marshalling(data);
790 s.HandleRequest(i, data, reply, option);
791 }
792 s.OnRemoteRequest(0, data, reply, option);
793 }
794
795 /**
796 * @tc.name: SendEvent_001
797 * @tc.desc: Test WorkSchedulerService SendEvent.
798 * @tc.type: FUNC
799 * @tc.require: I9J0A7
800 */
HWTEST_F(WorkSchedulerServiceTest, SendEvent_001, TestSize.Level1)801 HWTEST_F(WorkSchedulerServiceTest, SendEvent_001, TestSize.Level1)
802 {
803 int32_t initDelay = 2 * 1000;
804 workSchedulerService_->GetHandler()->
805 SendEvent(AppExecFwk::InnerEvent::Get(WorkEventHandler::SERVICE_INIT_MSG, 0), initDelay);
806 EXPECT_TRUE(workSchedulerService_->ready_);
807 }
808
809 /**
810 * @tc.name: GetAppIndexAndBundleNameByUid_001
811 * @tc.desc: Test WorkSchedulerService GetAppIndexAndBundleNameByUid.
812 * @tc.type: FUNC
813 * @tc.require: I9TL53
814 */
HWTEST_F(WorkSchedulerServiceTest, GetAppIndexAndBundleNameByUid_001, TestSize.Level1)815 HWTEST_F(WorkSchedulerServiceTest, GetAppIndexAndBundleNameByUid_001, TestSize.Level1)
816 {
817 int32_t appIndex;
818 std::string bundleName;
819 int32_t uid = 1;
820 bool ret = workSchedulerService_->GetAppIndexAndBundleNameByUid(uid, appIndex, bundleName);
821 EXPECT_FALSE(ret);
822 }
823
824 /**
825 * @tc.name: LoadSa_001
826 * @tc.desc: Test WorkSchedulerService LoadSa.
827 * @tc.type: FUNC
828 * @tc.require: IAHY0B
829 */
HWTEST_F(WorkSchedulerServiceTest, LoadSa_001, TestSize.Level1)830 HWTEST_F(WorkSchedulerServiceTest, LoadSa_001, TestSize.Level1)
831 {
832 workSchedulerService_->ready_ = false;
833 workSchedulerService_->LoadSa();
834
835 workSchedulerService_->ready_ = true;
836 workSchedulerService_->saMap_.clear();
837 workSchedulerService_->LoadSa();
838
839 int32_t saId1 = 401;
840 workSchedulerService_->saMap_.emplace(saId1, true);
841 workSchedulerService_->LoadSa();
842
843 workSchedulerService_->saMap_.emplace(saId1, false);
844 workSchedulerService_->LoadSa();
845
846 int32_t saId2 = 5300;
847 workSchedulerService_->saMap_.emplace(saId2, true);
848 workSchedulerService_->LoadSa();
849
850 workSchedulerService_->saMap_.emplace(saId2, false);
851 workSchedulerService_->LoadSa();
852 EXPECT_FALSE(workSchedulerService_->saMap_.empty());
853 }
854
855 /**
856 * @tc.name: CheckExtensionInfos_001
857 * @tc.desc: Test WorkSchedulerService CheckExtensionInfos.
858 * @tc.type: FUNC
859 * @tc.require: IAJVZG
860 */
HWTEST_F(WorkSchedulerServiceTest, CheckExtensionInfos_001, TestSize.Level1)861 HWTEST_F(WorkSchedulerServiceTest, CheckExtensionInfos_001, TestSize.Level1)
862 {
863 int32_t uid = 1;
864 WorkInfo workInfo = WorkInfo();
865 workInfo.SetWorkId(1);
866 workInfo.SetElement("bundleName", "abilityName");
867 bool ret = workSchedulerService_->CheckExtensionInfos(workInfo, uid);
868 EXPECT_TRUE(ret);
869 }
870
871 /**
872 * @tc.name: InitBgTaskSubscriber_001
873 * @tc.desc: Test WorkSchedulerService InitBgTaskSubscriber.
874 * @tc.type: FUNC
875 * @tc.require: IAJSVG
876 */
HWTEST_F(WorkSchedulerServiceTest, InitBgTaskSubscriber_001, TestSize.Level1)877 HWTEST_F(WorkSchedulerServiceTest, InitBgTaskSubscriber_001, TestSize.Level1)
878 {
879 bool ret = workSchedulerService_->InitBgTaskSubscriber();
880 EXPECT_TRUE(ret);
881 }
882
883 /**
884 * @tc.name: AllowDump_001
885 * @tc.desc: Test WorkSchedulerService AllowDump.
886 * @tc.type: FUNC
887 * @tc.require: IAJSVG
888 */
HWTEST_F(WorkSchedulerServiceTest, AllowDump_001, TestSize.Level1)889 HWTEST_F(WorkSchedulerServiceTest, AllowDump_001, TestSize.Level1)
890 {
891 bool ret = workSchedulerService_->AllowDump();
892 EXPECT_FALSE(ret);
893 }
894
895 /**
896 * @tc.name: UpdateWorkBeforeRealStart_001
897 * @tc.desc: Test WorkSchedulerService UpdateWorkBeforeRealStart.
898 * @tc.type: FUNC
899 * @tc.require: IAJSVG
900 */
HWTEST_F(WorkSchedulerServiceTest, UpdateWorkBeforeRealStart_001, TestSize.Level1)901 HWTEST_F(WorkSchedulerServiceTest, UpdateWorkBeforeRealStart_001, TestSize.Level1)
902 {
903 std::shared_ptr<WorkStatus> workStatus = nullptr;
904 workSchedulerService_->UpdateWorkBeforeRealStart(workStatus);
905
906 WorkInfo workInfo = WorkInfo();
907 workStatus = std::make_shared<WorkStatus>(workInfo, 1);
908 workStatus->conditionMap_.clear();
909 workSchedulerService_->UpdateWorkBeforeRealStart(workStatus);
910
911 std::shared_ptr<Condition> repeatCycle = std::make_shared<Condition>();
912 repeatCycle->boolVal = true;
913 workStatus->conditionMap_.emplace(WorkCondition::Type::TIMER, repeatCycle);
914 workSchedulerService_->UpdateWorkBeforeRealStart(workStatus);
915 EXPECT_TRUE(repeatCycle->intVal == 0);
916 }
917
918 /**
919 * @tc.name: CheckEffiResApplyInfo_001
920 * @tc.desc: Test WorkSchedulerService CheckEffiResApplyInfo.
921 * @tc.type: FUNC
922 * @tc.require: IAJSVG
923 */
HWTEST_F(WorkSchedulerServiceTest, CheckEffiResApplyInfo_001, TestSize.Level1)924 HWTEST_F(WorkSchedulerServiceTest, CheckEffiResApplyInfo_001, TestSize.Level1)
925 {
926 bool ret = workSchedulerService_->CheckEffiResApplyInfo(1);
927 EXPECT_FALSE(ret);
928 }
929
930 /**
931 * @tc.name: PauseRunningWorks_001
932 * @tc.desc: Test WorkSchedulerService PauseRunningWorks.
933 * @tc.type: FUNC
934 * @tc.require: IAJSVG
935 */
HWTEST_F(WorkSchedulerServiceTest, PauseRunningWorks_001, TestSize.Level1)936 HWTEST_F(WorkSchedulerServiceTest, PauseRunningWorks_001, TestSize.Level1)
937 {
938 workSchedulerService_->TriggerWorkIfConditionReady();
939 workSchedulerService_->PauseRunningWorks(1);
940 workSchedulerService_->ResumePausedWorks(1);
941 }
942
943 /**
944 * @tc.name: OnAddSystemAbility_001
945 * @tc.desc: Test WorkSchedulerService OnAddSystemAbility.
946 * @tc.type: FUNC
947 * @tc.require: IAJSVG
948 */
HWTEST_F(WorkSchedulerServiceTest, OnAddSystemAbility_001, TestSize.Level1)949 HWTEST_F(WorkSchedulerServiceTest, OnAddSystemAbility_001, TestSize.Level1)
950 {
951 std::string deviceId;
952 int32_t DEVICE_STANDBY_SERVICE_SYSTEM_ABILITY_ID = 1914;
953 int32_t DEVICE_USAGE_STATISTICS_SYS_ABILITY_ID = 1907;
954 workSchedulerService_->OnAddSystemAbility(DEVICE_USAGE_STATISTICS_SYS_ABILITY_ID, deviceId);
955 workSchedulerService_->OnRemoveSystemAbility(DEVICE_USAGE_STATISTICS_SYS_ABILITY_ID, deviceId);
956
957 workSchedulerService_->OnAddSystemAbility(DEVICE_STANDBY_SERVICE_SYSTEM_ABILITY_ID, deviceId);
958 workSchedulerService_->OnRemoveSystemAbility(DEVICE_STANDBY_SERVICE_SYSTEM_ABILITY_ID, deviceId);
959 }
960
961 /**
962 * @tc.name: IsDebugApp_001
963 * @tc.desc: Test WorkSchedulerService IsDebugApp.
964 * @tc.type: FUNC
965 * @tc.require: IAJSVG
966 */
HWTEST_F(WorkSchedulerServiceTest, IsDebugApp_001, TestSize.Level1)967 HWTEST_F(WorkSchedulerServiceTest, IsDebugApp_001, TestSize.Level1)
968 {
969 bool ret = workSchedulerService_->IsDebugApp("bundleName");
970 EXPECT_FALSE(ret);
971 }
972 }
973 }