1 /*
2  * Copyright (c) 2022 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 #include "workinfo_test.h"
16 #include <message_parcel.h>
17 
18 #include "work_info.h"
19 #include "work_sched_common.h"
20 #include "work_sched_utils.h"
21 #include "string_wrapper.h"
22 
23 using namespace std;
24 using namespace testing::ext;
25 
26 namespace OHOS {
27 namespace WorkScheduler {
28 const int32_t INVALID_VALUE = -1;
SetUpTestCase(void)29 void WorkInfoTest::SetUpTestCase(void)
30 {
31 }
32 
TearDownTestCase(void)33 void WorkInfoTest::TearDownTestCase(void)
34 {
35 }
36 
SetUp()37 void WorkInfoTest::SetUp()
38 {
39 }
40 
TearDown()41 void WorkInfoTest::TearDown()
42 {
43 }
44 
45 /**
46  * @tc.name WorkInfoTest001
47  * @tc.desc Set WorkId to WorkInfo
48  * @tc.type FUNC
49  * @tc.require: SR000GGTN6 AR000GH896 AR000GH897 AR000GH898
50  */
51 HWTEST_F (WorkInfoTest, WorkInfoTest001, Function | MediumTest | Level0)
52 {
53     WorkInfo workInfo = WorkInfo();
54     workInfo.SetWorkId(1);
55     EXPECT_EQ(workInfo.GetWorkId(), 1);
56 }
57 
58 /**
59  * @tc.name WorkInfoTest002
60  * @tc.desc Set bundleName and abilityName to WorkInfo
61  * @tc.type FUNC
62  * @tc.require: SR000GGTN6 AR000GH896 AR000GH897 AR000GH898
63  */
64 HWTEST_F (WorkInfoTest, WorkInfoTest002, Function | MediumTest | Level0)
65 {
66     WorkInfo workInfo = WorkInfo();
67     workInfo.SetElement("bundle_name", "ability_name");
68     EXPECT_EQ(workInfo.GetBundleName(), "bundle_name");
69     EXPECT_EQ(workInfo.GetAbilityName(), "ability_name");
70 }
71 
72 /**
73  * @tc.name WorkInfoTest003
74  * @tc.desc Set workInfo persisted
75  * @tc.type FUNC
76  * @tc.require: SR000GGTN6 AR000GH896 AR000GH897 AR000GH898
77  */
78 HWTEST_F (WorkInfoTest, WorkInfoTest003, Function | MediumTest | Level0)
79 {
80     WorkInfo workInfo = WorkInfo();
81     workInfo.RequestPersisted(true);
82     EXPECT_EQ(workInfo.IsPersisted(), true);
83     workInfo.RequestPersisted(false);
84     EXPECT_EQ(workInfo.IsPersisted(), false);
85 }
86 
87 /**
88  * @tc.name WorkInfoTest004
89  * @tc.desc Set workInfo charger condition charging
90  * @tc.type FUNC
91  * @tc.require: SR000GGTN6 AR000GH896 AR000GH897 AR000GH898
92  */
93 HWTEST_F (WorkInfoTest, WorkInfoTest004, Function | MediumTest | Level0)
94 {
95     WorkInfo workInfo = WorkInfo();
96     EXPECT_EQ(workInfo.GetChargerType(), WorkCondition::Charger::CHARGING_UNKNOWN);
97     workInfo.RequestChargerType(true, WorkCondition::Charger::CHARGING_PLUGGED_ANY);
98     EXPECT_EQ(workInfo.GetChargerType(), WorkCondition::Charger::CHARGING_PLUGGED_ANY);
99 }
100 
101 /**
102  * @tc.name WorkInfoTest005
103  * @tc.desc Set workInfo charger condiiton discharging
104  * @tc.type FUNC
105  * @tc.require: SR000GGTN6 AR000GH896 AR000GH897 AR000GH898
106  */
107 HWTEST_F (WorkInfoTest, WorkInfoTest005, Function | MediumTest | Level0)
108 {
109     WorkInfo workInfo = WorkInfo();
110     workInfo.RequestChargerType(false, WorkCondition::Charger::CHARGING_UNPLUGGED);
111     EXPECT_EQ(workInfo.GetChargerType(), WorkCondition::Charger::CHARGING_UNPLUGGED);
112 }
113 
114 /**
115  * @tc.name WorkInfoTest006
116  * @tc.desc Set workInfo battery condition battery changed
117  * @tc.type FUNC
118  * @tc.require: SR000GGTN6 AR000GH896 AR000GH897 AR000GH898
119  */
120 HWTEST_F (WorkInfoTest, WorkInfoTest006, Function | MediumTest | Level0)
121 {
122     WorkInfo workInfo = WorkInfo();
123     workInfo.RequestBatteryStatus(WorkCondition::BatteryStatus::BATTERY_STATUS_LOW_OR_OKAY);
124     EXPECT_EQ(workInfo.GetBatteryStatus(), WorkCondition::BatteryStatus::BATTERY_STATUS_LOW_OR_OKAY);
125 }
126 
127 /**
128  * @tc.name WorkInfoTest007
129  * @tc.desc Set workInfo battery condition battery low
130  * @tc.type FUNC
131  * @tc.require: SR000GGTN6 AR000GH896 AR000GH897 AR000GH898
132  */
133 HWTEST_F (WorkInfoTest, WorkInfoTest007, Function | MediumTest | Level0)
134 {
135     WorkInfo workInfo = WorkInfo();
136     workInfo.RequestBatteryStatus(WorkCondition::BatteryStatus::BATTERY_STATUS_LOW);
137     EXPECT_EQ(workInfo.GetBatteryStatus(), WorkCondition::BatteryStatus::BATTERY_STATUS_LOW);
138 }
139 
140 /**
141  * @tc.name WorkInfoTest008
142  * @tc.desc Set workInfo battery condition battery okey
143  * @tc.type FUNC
144  * @tc.require: SR000GGTN6 AR000GH896 AR000GH897 AR000GH898
145  */
146 HWTEST_F (WorkInfoTest, WorkInfoTest008, Function | MediumTest | Level0)
147 {
148     WorkInfo workInfo = WorkInfo();
149     EXPECT_EQ(workInfo.GetBatteryStatus(), WorkCondition::BatteryStatus::BATTERY_UNKNOWN);
150     workInfo.RequestBatteryStatus(WorkCondition::BatteryStatus::BATTERY_STATUS_OKAY);
151     EXPECT_EQ(workInfo.GetBatteryStatus(), WorkCondition::BatteryStatus::BATTERY_STATUS_OKAY);
152 }
153 
154 /**
155  * @tc.name WorkInfoTest009
156  * @tc.desc Set workInfo storage condition storage change
157  * @tc.type FUNC
158  * @tc.require: SR000GGTN9 AR000GH89M
159  */
160 HWTEST_F (WorkInfoTest, WorkInfoTest009, Function | MediumTest | Level0)
161 {
162     WorkInfo workInfo = WorkInfo();
163     EXPECT_EQ(workInfo.GetStorageLevel(), WorkCondition::Storage::STORAGE_UNKNOWN);
164     workInfo.RequestStorageLevel(WorkCondition::Storage::STORAGE_LEVEL_LOW_OR_OKAY);
165     EXPECT_EQ(workInfo.GetStorageLevel(), WorkCondition::Storage::STORAGE_LEVEL_LOW_OR_OKAY);
166 }
167 
168 /**
169  * @tc.name WorkInfoTest010
170  * @tc.desc Set workInfo storage condition storage low
171  * @tc.type FUNC
172  * @tc.require: SR000GGTN8 AR000GH89J AR000GH89K AR000GH89L
173  */
174 HWTEST_F (WorkInfoTest, WorkInfoTest010, Function | MediumTest | Level0)
175 {
176     WorkInfo workInfo = WorkInfo();
177     workInfo.RequestStorageLevel(WorkCondition::Storage::STORAGE_LEVEL_LOW);
178     EXPECT_EQ(workInfo.GetStorageLevel(), WorkCondition::Storage::STORAGE_LEVEL_LOW);
179 }
180 
181 /**
182  * @tc.name WorkInfoTest011
183  * @tc.desc Set workInfo storage condition storage ok
184  * @tc.type FUNC
185  * @tc.require: SR000GGTNB AR000GH89Q
186  */
187 HWTEST_F (WorkInfoTest, WorkInfoTest011, Function | MediumTest | Level0)
188 {
189     WorkInfo workInfo = WorkInfo();
190     workInfo.RequestStorageLevel(WorkCondition::Storage::STORAGE_LEVEL_OKAY);
191     EXPECT_EQ(workInfo.GetStorageLevel(), WorkCondition::Storage::STORAGE_LEVEL_OKAY);
192 }
193 
194 /**
195  * @tc.name WorkInfoTest012
196  * @tc.desc Set workInfo network condition
197  * @tc.type FUNC
198  * @tc.require: SR000GGTNA AR000GH89P AR000GH89N AR000GH89O
199  */
200 HWTEST_F (WorkInfoTest, WorkInfoTest012, Function | MediumTest | Level0)
201 {
202     WorkInfo workInfo = WorkInfo();
203     EXPECT_EQ(workInfo.GetNetworkType(), WorkCondition::Network::NETWORK_UNKNOWN);
204     workInfo.RequestNetworkType(WorkCondition::Network::NETWORK_TYPE_ANY);
205     EXPECT_EQ(workInfo.GetNetworkType(), WorkCondition::Network::NETWORK_TYPE_ANY);
206 }
207 
208 /**
209  * @tc.name WorkInfoTest013
210  * @tc.desc Set workInfo repeat time condition repeat count 3
211  * @tc.type FUNC
212  * @tc.require: SR000GGTNA AR000GH89P AR000GH89N AR000GH89O
213  */
214 HWTEST_F (WorkInfoTest, WorkInfoTest013, Function | MediumTest | Level0)
215 {
216     uint32_t timeInterval = 120;
217     WorkInfo workInfo = WorkInfo();
218     EXPECT_EQ(workInfo.GetTimeInterval(), 0);
219     EXPECT_EQ(workInfo.GetCycleCount(), INVALID_VALUE);
220     workInfo.RequestRepeatCycle(timeInterval, 3);
221     EXPECT_EQ(workInfo.GetTimeInterval(), timeInterval);
222     EXPECT_EQ(workInfo.IsRepeat(), false);
223     EXPECT_EQ(workInfo.GetCycleCount(), 3);
224 }
225 
226 /**
227  * @tc.name WorkInfoTest014
228  * @tc.desc Set workInfo repeat time condition repeat
229  * @tc.type FUNC
230  * @tc.require: SR000GGTNA AR000GH89P AR000GH89N AR000GH89O
231  */
232 HWTEST_F (WorkInfoTest, WorkInfoTest014, Function | MediumTest | Level0)
233 {
234     uint32_t timeInterval = 120;
235     WorkInfo workInfo = WorkInfo();
236     EXPECT_EQ(workInfo.IsRepeat(), false);
237     workInfo.RequestRepeatCycle(timeInterval);
238     EXPECT_EQ(workInfo.GetTimeInterval(), timeInterval);
239     EXPECT_EQ(workInfo.IsRepeat(), true);
240     EXPECT_EQ(workInfo.GetCycleCount(), INVALID_VALUE);
241 }
242 
243 /**
244  * @tc.name WorkInfoTest015
245  * @tc.desc Set workInfo battery level
246  * @tc.type FUNC
247  * @tc.require: issueI5Y6YK
248  */
249 HWTEST_F (WorkInfoTest, WorkInfoTest015, Function | MediumTest | Level0)
250 {
251     WorkInfo workInfo = WorkInfo();
252     EXPECT_EQ(workInfo.GetBatteryLevel(), INVALID_VALUE);
253     workInfo.RequestBatteryLevel(1);
254     EXPECT_EQ(workInfo.GetBatteryLevel(), 1);
255 }
256 
257 /**
258  * @tc.name WorkInfoTest016
259  * @tc.desc Set workInfo RefreshUid
260  * @tc.type FUNC
261  * @tc.require: issueI5Y6YK
262  */
263 HWTEST_F (WorkInfoTest, WorkInfoTest016, Function | MediumTest | Level0)
264 {
265     WorkInfo workInfo = WorkInfo();
266     workInfo.RefreshUid(0);
267     EXPECT_EQ(workInfo.GetUid(), 0);
268 }
269 
270 /**
271  * @tc.name WorkInfoTest017
272  * @tc.desc Set workInfo extras
273  * @tc.type FUNC
274  * @tc.require: issueI5Y6YK
275  */
276 HWTEST_F (WorkInfoTest, WorkInfoTest017, Function | MediumTest | Level0)
277 {
278     WorkInfo workInfo = WorkInfo();
279     AAFwk::WantParams extras;
280     workInfo.RequestExtras(extras);
281     auto extrasRead = workInfo.GetExtras();
282     if (extras == *extrasRead.get()) {
283         EXPECT_TRUE(true);
284     } else {
285         EXPECT_FALSE(true);
286     }
287 }
288 
289 /**
290  * @tc.name WorkInfoTest018
291  * @tc.desc Set workInfo GetConditionMap
292  * @tc.type FUNC
293  * @tc.require: issueI5Y6YK
294  */
295 HWTEST_F (WorkInfoTest, WorkInfoTest018, Function | MediumTest | Level0)
296 {
297     WorkInfo workInfo = WorkInfo();
298     workInfo.GetConditionMap();
299     std::string result;
300     workInfo.Dump(result);
301     EXPECT_NE(result, "");
302 }
303 
304 /**
305  * @tc.name WorkInfoTestJson001
306  * @tc.desc Set workInfo json func
307  * @tc.type FUNC
308  * @tc.require: issueI5Y6YK
309  */
310 HWTEST_F (WorkInfoTest, WorkInfoTestJson001, Function | MediumTest | Level0)
311 {
312     WorkInfo workInfo = WorkInfo();
313     std::string res = workInfo.ParseToJsonStr();
314 
315     workInfo.RequestBatteryStatus(WorkCondition::BatteryStatus::BATTERY_STATUS_OKAY);
316     workInfo.RequestChargerType(true, WorkCondition::Charger::CHARGING_PLUGGED_ANY);
317     workInfo.RequestStorageLevel(WorkCondition::Storage::STORAGE_LEVEL_LOW);
318     workInfo.RequestNetworkType(WorkCondition::Network::NETWORK_TYPE_ANY);
319     workInfo.RequestBatteryLevel(1);
320     uint32_t timeInterval = 120;
321     workInfo.RequestRepeatCycle(timeInterval);
322     res = workInfo.ParseToJsonStr();
323 
324     workInfo.RefreshUid(1);
325     workInfo.RequestRepeatCycle(timeInterval, 3);
326     AAFwk::WantParams extras;
327     extras.SetParam("key1", OHOS::AAFwk::String::Box("value1"));
328     workInfo.RequestExtras(extras);
329     res = workInfo.ParseToJsonStr();
330 
331     std::shared_ptr<Condition> condUnknown = std::make_shared<Condition>();
332     condUnknown->boolVal = true;
333     workInfo.conditionMap_.emplace(WorkCondition::Type::UNKNOWN, condUnknown);
334     res = workInfo.ParseToJsonStr();
335     EXPECT_NE(res, "");
336 }
337 
338 /**
339  * @tc.name WorkInfoTestJson002
340  * @tc.desc Set workInfo json func
341  * @tc.type FUNC
342  * @tc.require: issueI5Y6YK
343  */
344 HWTEST_F (WorkInfoTest, WorkInfoTestJson002, Function | MediumTest | Level0)
345 {
346     using namespace OHOS::WorkScheduler;
347     WorkInfo workInfo = WorkInfo();
348     Json::Value root;
349     bool res = workInfo.ParseFromJson(root);
350     EXPECT_FALSE(res);
351 
352     root["workId"] = 1;
353     res = workInfo.ParseFromJson(root);
354     EXPECT_FALSE(res);
355 
356     root.clear();
357     root["bundleName"] = "bundleName";
358     res = workInfo.ParseFromJson(root);
359     EXPECT_FALSE(res);
360 
361     root.clear();
362     root["abilityName"] = "abilityName";
363     res = workInfo.ParseFromJson(root);
364     EXPECT_FALSE(res);
365 
366     root.clear();
367     root["workId"] = 1;
368     root["bundleName"] = "bundleName";
369     res = workInfo.ParseFromJson(root);
370     EXPECT_FALSE(res);
371 
372     root.clear();
373     root["workId"] = 1;
374     root["abilityName"] = "abilityName";
375     res = workInfo.ParseFromJson(root);
376     EXPECT_FALSE(res);
377 
378     root.clear();
379     root["bundleName"] = "bundleName";
380     root["abilityName"] = "abilityName";
381     res = workInfo.ParseFromJson(root);
382     EXPECT_FALSE(res);
383 
384     root.clear();
385     root["workId"] = 1;
386     root["bundleName"] = "bundleName";
387     root["abilityName"] = "abilityName";
388     root["persisted"] = false;
389     root["uriKey"] = "uriKey";
390     root["callBySystemApp"] = false;
391     res = workInfo.ParseFromJson(root);
392     EXPECT_TRUE(res);
393 }
394 
395 /**
396  * @tc.name WorkInfoTestJson003
397  * @tc.desc Set workInfo json func
398  * @tc.type FUNC
399  * @tc.require: issueI5Y6YK
400  */
401 HWTEST_F (WorkInfoTest, WorkInfoTestJson003, Function | MediumTest | Level0)
402 {
403     WorkInfo workInfo = WorkInfo();
404     Json::Value root;
405     root["workId"] = 1;
406     root["bundleName"] = "bundleName";
407     root["abilityName"] = "abilityName";
408     root["uid"] = 1;
409     Json::Value conditions;
410     conditions["network"] = 0;
411     conditions["isCharging"] = true;
412     conditions["batteryLevel"] = 0;
413     conditions["batteryStatus"] = 0;
414     conditions["storage"] = 0;
415     conditions["timer"] = 0;
416     root["conditions"] = conditions;
417     bool res = workInfo.ParseFromJson(root);
418     EXPECT_TRUE(res);
419 
420     conditions.clear();
421     conditions["chargerType"] = 0;
422     conditions["repeat"] = true;
423     root["conditions"] = conditions;
424     res = workInfo.ParseFromJson(root);
425     EXPECT_TRUE(res);
426 
427     conditions.clear();
428     conditions["isCharging"] = true;
429     conditions["chargerType"] = 0;
430     conditions["timer"] = 0;
431     conditions["repeat"] = true;
432     conditions["cycle"] = 0;
433     root["conditions"] = conditions;
434     res = workInfo.ParseFromJson(root);
435     EXPECT_TRUE(res);
436 
437     conditions.clear();
438     conditions["timer"] = 0;
439     conditions["repeat"] = true;
440     root["conditions"] = conditions;
441     res = workInfo.ParseFromJson(root);
442     EXPECT_TRUE(res);
443 
444     conditions.clear();
445     conditions["timer"] = 0;
446     conditions["repeat"] = false;
447     root["conditions"] = conditions;
448     res = workInfo.ParseFromJson(root);
449     EXPECT_TRUE(res);
450 }
451 
452 /**
453  * @tc.name WorkInfoTestJson004
454  * @tc.desc Set workInfo json func
455  * @tc.type FUNC
456  * @tc.require: issueI5Y6YK
457  */
458 HWTEST_F (WorkInfoTest, WorkInfoTestJson004, Function | MediumTest | Level0)
459 {
460     WorkInfo workInfo = WorkInfo();
461     Json::Value root;
462     root["workId"] = 1;
463     root["bundleName"] = "bundleName";
464     root["abilityName"] = "abilityName";
465     root["uid"] = 1;
466     Json::Value extrasJson;
467     extrasJson["key1"] = "value1";
468     extrasJson["key2"] = "value2";
469     root["parameters"] = extrasJson;
470     Json::Value extrasType;
471     extrasType["key1"] = 9;
472     extrasType["key2"] = -1;
473     root["parametersType"] = extrasType;
474     bool res = workInfo.ParseFromJson(root);
475     EXPECT_TRUE(res);
476 }
477 
478 /**
479  * @tc.name WorkInfoTestJson005
480  * @tc.desc Set workInfo json func
481  * @tc.type FUNC
482  * @tc.require: issueI5Y6YK
483  */
484 HWTEST_F (WorkInfoTest, WorkInfoTestJson005, Function | MediumTest | Level0)
485 {
486     using namespace OHOS::WorkScheduler;
487     WorkInfo workInfo = WorkInfo();
488     Json::Value root;
489     root.clear();
490     root["workId"] = "1";
491     bool res = workInfo.ParseFromJson(root);
492     EXPECT_FALSE(res);
493 
494     root.clear();
495     root["bundleName"] = 1;
496     res = workInfo.ParseFromJson(root);
497     EXPECT_FALSE(res);
498 
499     root.clear();
500     root["abilityName"] = 1;
501     res = workInfo.ParseFromJson(root);
502     EXPECT_FALSE(res);
503 }
504 
505 /**
506  * @tc.name WorkInfoTest019
507  * @tc.desc Set workInfo Marshalling and Unmarshalling
508  * @tc.type FUNC
509  * @tc.require: issueI5Y6YK
510  */
511 HWTEST_F (WorkInfoTest, WorkInfoTest019, Function | MediumTest | Level0)
512 {
513     WorkInfo workInfo = WorkInfo();
514     workInfo.SetElement("bundle_name", "ability_name");
515     workInfo.RequestBatteryStatus(WorkCondition::BatteryStatus::BATTERY_STATUS_OKAY);
516     MessageParcel data;
517     WRITE_PARCEL_WITHOUT_RET(data, Parcelable, &workInfo);
518     sptr<WorkInfo> workInfoRead = data.ReadStrongParcelable<WorkInfo>();
519     EXPECT_EQ(workInfo.GetBatteryStatus(), workInfoRead->GetBatteryStatus());
520 
521     workInfo.RequestChargerType(true, WorkCondition::Charger::CHARGING_PLUGGED_ANY);
522     WRITE_PARCEL_WITHOUT_RET(data, Parcelable, &workInfo);
523     workInfoRead = data.ReadStrongParcelable<WorkInfo>();
524     EXPECT_EQ(workInfo.GetChargerType(), workInfoRead->GetChargerType());
525 
526     workInfo.RequestStorageLevel(WorkCondition::Storage::STORAGE_LEVEL_LOW);
527     WRITE_PARCEL_WITHOUT_RET(data, Parcelable, &workInfo);
528     workInfoRead = data.ReadStrongParcelable<WorkInfo>();
529     EXPECT_EQ(workInfo.GetStorageLevel(), workInfoRead->GetStorageLevel());
530 
531     workInfo.RequestNetworkType(WorkCondition::Network::NETWORK_TYPE_ANY);
532     WRITE_PARCEL_WITHOUT_RET(data, Parcelable, &workInfo);
533     workInfoRead = data.ReadStrongParcelable<WorkInfo>();
534     EXPECT_EQ(workInfo.GetNetworkType(), workInfoRead->GetNetworkType());
535 
536     workInfo.RequestBatteryLevel(1);
537     WRITE_PARCEL_WITHOUT_RET(data, Parcelable, &workInfo);
538     workInfoRead = data.ReadStrongParcelable<WorkInfo>();
539     EXPECT_EQ(workInfo.GetBatteryLevel(), workInfoRead->GetBatteryLevel());
540 
541     uint32_t timeInterval = 120;
542     workInfo.RequestRepeatCycle(timeInterval);
543     WRITE_PARCEL_WITHOUT_RET(data, Parcelable, &workInfo);
544     workInfoRead = data.ReadStrongParcelable<WorkInfo>();
545     EXPECT_EQ(workInfo.GetTimeInterval(), workInfoRead->GetTimeInterval());
546 
547     workInfo.RequestRepeatCycle(timeInterval, 3);
548     WRITE_PARCEL_WITHOUT_RET(data, Parcelable, &workInfo);
549     workInfoRead = data.ReadStrongParcelable<WorkInfo>();
550     EXPECT_EQ(workInfo.GetTimeInterval(), workInfoRead->GetTimeInterval());
551 }
552 
553 /**
554  * @tc.name WorkInfoTest020
555  * @tc.desc Set workInfo Marshalling and Unmarshalling with extras.
556  * @tc.type FUNC
557  * @tc.require: issueI5Y6YK
558  */
559 HWTEST_F (WorkInfoTest, WorkInfoTest020, Function | MediumTest | Level0)
560 {
561     WorkInfo workInfo = WorkInfo();
562     workInfo.SetElement("bundle_name", "ability_name");
563     workInfo.RequestBatteryStatus(WorkCondition::BatteryStatus::BATTERY_STATUS_OKAY);
564     MessageParcel data;
565     AAFwk::WantParams extras;
566     workInfo.RequestExtras(extras);
567     WRITE_PARCEL_WITHOUT_RET(data, Parcelable, &workInfo);
568     sptr<WorkInfo> workInfoRead = data.ReadStrongParcelable<WorkInfo>();
569     EXPECT_EQ(workInfo.GetBundleName(), workInfoRead->GetBundleName());
570 
571     extras.SetParam("key1", OHOS::AAFwk::String::Box("value1"));
572     workInfo.RequestExtras(extras);
573     WRITE_PARCEL_WITHOUT_RET(data, Parcelable, &workInfo);
574     workInfoRead = data.ReadStrongParcelable<WorkInfo>();
575     std::string valueRead = workInfoRead->GetExtras()->GetStringParam("key1");
576     EXPECT_EQ(valueRead, "value1");
577 
578     std::shared_ptr<Condition> condNetWork = std::make_shared<Condition>();
579     condNetWork->enumVal = WorkCondition::Network::NETWORK_TYPE_ANY;
580     workInfo.conditionMap_.emplace(WorkCondition::Type::NETWORK, condNetWork);
581     WRITE_PARCEL_WITHOUT_RET(data, Parcelable, &workInfo);
582     workInfoRead = data.ReadStrongParcelable<WorkInfo>();
583     auto condRead = workInfoRead->GetConditionMap();
584     EXPECT_EQ(workInfoRead->GetConditionMap()->size(), 2);
585 }
586 /**
587  * @tc.name WorkInfoTest021
588  * @tc.desc test SetCallBySystemApp.
589  * @tc.type FUNC
590  * @tc.require: issueI5Y6YK
591  */
592 HWTEST_F (WorkInfoTest, WorkInfoTest021, Function | MediumTest | Level0)
593 {
594     WorkInfo workInfo = WorkInfo();
595     workInfo.SetCallBySystemApp(true);
596     EXPECT_TRUE(workInfo.IsCallBySystemApp());
597 }
598 
599 /**
600  * @tc.name WorkInfoTest022
601  * @tc.desc test SetCallBySystemApp.
602  * @tc.type FUNC
603  * @tc.require: issueI5Y6YK
604  */
605 HWTEST_F (WorkInfoTest, WorkInfoTest022, Function | MediumTest | Level0)
606 {
607     WorkInfo workInfo = WorkInfo();
608     time_t result;
609     time(&result);
610     workInfo.RequestRepeatCycle(20000);
611     workInfo.RequestBaseTimeAndCycle(result, 20);
612     EXPECT_TRUE(workInfo.IsRepeat());
613 }
614 
615 /**
616  * @tc.name WorkSchedUtils001
617  * @tc.desc test GetCurrentAccountId
618  * @tc.type FUNC
619  * @tc.require: issueI5Y6YK
620  */
621 HWTEST_F (WorkInfoTest, WorkSchedUtils001, Function | MediumTest | Level0)
622 {
623     int32_t res = WorkSchedUtils::GetCurrentAccountId();
624     EXPECT_NE(res, -1000);
625 }
626 
627 /**
628  * @tc.name WorkSchedUtils002
629  * @tc.desc test IsIdActive
630  * @tc.type FUNC
631  * @tc.require: issueI5Y6YK
632  */
633 HWTEST_F (WorkInfoTest, WorkSchedUtils002, Function | MediumTest | Level0)
634 {
635     bool res = WorkSchedUtils::IsIdActive(0);
636     EXPECT_FALSE(res);
637 }
638 
639 /**
640  * @tc.name WorkSchedUtils003
641  * @tc.desc test GetUserIdByUid
642  * @tc.type FUNC
643  * @tc.require: issueI5Y6YK
644  */
645 HWTEST_F (WorkInfoTest, WorkSchedUtils003, Function | MediumTest | Level0)
646 {
647     int32_t res = WorkSchedUtils::GetUserIdByUid(1);
648     EXPECT_EQ(res, 0);
649     res = WorkSchedUtils::GetUserIdByUid(INVALID_VALUE);
650     EXPECT_EQ(res, INVALID_VALUE);
651 }
652 
653 /**
654  * @tc.name WorkSchedUtils004
655  * @tc.desc test ConvertFullPath
656  * @tc.type FUNC
657  * @tc.require: issueI5Y6YK
658  */
659 HWTEST_F (WorkInfoTest, WorkSchedUtils004, Function | MediumTest | Level0)
660 {
661     std::string partialPath;
662     std::string fullPath;
663     bool res = WorkSchedUtils::ConvertFullPath(partialPath, fullPath);
664     EXPECT_FALSE(res);
665 
666     std::string partialPathLong(4097, 'c');
667     res = WorkSchedUtils::ConvertFullPath(partialPathLong, fullPath);
668     EXPECT_FALSE(res);
669 
670     partialPath = "partialPath";
671     res = WorkSchedUtils::ConvertFullPath(partialPath, fullPath);
672     EXPECT_FALSE(res);
673 
674     partialPath = "/data";
675     res = WorkSchedUtils::ConvertFullPath(partialPath, fullPath);
676     EXPECT_TRUE(res);
677 }
678 
679 /**
680  * @tc.name WorkSchedUtils006
681  * @tc.desc test IsSystemApp
682  * @tc.type FUNC
683  * @tc.require: issueI5Y6YK
684  */
685 HWTEST_F (WorkInfoTest, WorkSchedUtils006, Function | MediumTest | Level0)
686 {
687     bool res = WorkSchedUtils::IsSystemApp();
688     EXPECT_EQ(res, false);
689 }
690 
691 /**
692  * @tc.name GetSaId001
693  * @tc.desc test GetSaId and IsResidentSa
694  * @tc.type FUNC
695  * @tc.require: issueIAHY0B
696  */
697 HWTEST_F (WorkInfoTest, GetSaId001, Function | MediumTest | Level0)
698 {
699     int32_t saId = 5300;
700     WorkInfo workInfo = WorkInfo();
701     workInfo.RefreshSaId(saId);
702     int32_t id = workInfo.GetSaId();
703     EXPECT_EQ(id, saId);
704 
705     bool residentSa = workInfo.IsResidentSa();
706     EXPECT_FALSE(residentSa);
707 }
708 } // namespace WorkScheduler
709 } // namespace OHOS