• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 #include <gtest/gtest.h>
17 
18 #define private public
19 #include "app_recovery.h"
20 #undef private
21 #include "ability.h"
22 #include "ability_info.h"
23 #include "event_handler.h"
24 #include "mock_ability_token.h"
25 #include "recovery_param.h"
26 
27 using namespace testing::ext;
28 namespace OHOS {
29 namespace AppExecFwk {
30 class AppRecoveryUnitTest : public testing::Test {
31 public:
32     static void SetUpTestCase();
33     static void TearDownTestCase();
34     void SetUp();
35     void TearDown();
36     std::shared_ptr<AppExecFwk::Ability> ability_ = std::make_shared<Ability>();
37     std::shared_ptr<AppExecFwk::AbilityInfo> abilityInfo_ = std::make_shared<AbilityInfo>();
38     std::shared_ptr<AppExecFwk::ApplicationInfo> applicationInfo_ = std::make_shared<ApplicationInfo>();
39     std::shared_ptr<AppExecFwk::EventHandler> testHandler_ = std::make_shared<EventHandler>();
40     sptr<IRemoteObject> token_ = new MockAbilityToken();
41 };
42 
SetUpTestCase()43 void AppRecoveryUnitTest::SetUpTestCase()
44 {
45 }
46 
TearDownTestCase()47 void AppRecoveryUnitTest::TearDownTestCase()
48 {}
49 
SetUp()50 void AppRecoveryUnitTest::SetUp()
51 {
52     AppRecovery::GetInstance().isEnable_ = false;
53     AppRecovery::GetInstance().restartFlag_ = 0;
54     AppRecovery::GetInstance().saveOccasion_ = 0;
55     AppRecovery::GetInstance().saveMode_ = 0;
56     AppRecovery::GetInstance().abilityRecoverys_.clear();
57     AppRecovery::GetInstance().mainHandler_ = testHandler_;
58     AppRecovery::GetInstance().applicationInfo_ = applicationInfo_;
59 }
60 
TearDown()61 void AppRecoveryUnitTest::TearDown()
62 {
63 }
64 
65 /**
66  * @tc.name: GetRestartFlag_001
67  * @tc.desc: Test GetRestartFlag
68  * @tc.type: FUNC
69  * @tc.require: I5UL6H
70  */
71 HWTEST_F(AppRecoveryUnitTest, GetRestartFlag_001, TestSize.Level1)
72 {
73     EXPECT_EQ(AppRecovery::GetInstance().GetRestartFlag(), 0);
74     AppRecovery::GetInstance().restartFlag_ = RestartFlag::ALWAYS_RESTART;
75     EXPECT_EQ(AppRecovery::GetInstance().GetRestartFlag(), RestartFlag::ALWAYS_RESTART);
76 }
77 
78 /**
79  * @tc.name: GetSaveOccasionFlag_001
80  * @tc.desc: Test GetSaveOccasionFlag
81  * @tc.type: FUNC
82  * @tc.require: I5UL6H
83  */
84 HWTEST_F(AppRecoveryUnitTest, GetSaveOccasionFlag_001, TestSize.Level1)
85 {
86     EXPECT_EQ(AppRecovery::GetInstance().GetSaveOccasionFlag(), 0);
87     AppRecovery::GetInstance().saveOccasion_ = SaveOccasionFlag::SAVE_WHEN_ERROR;
88     EXPECT_EQ(AppRecovery::GetInstance().GetSaveOccasionFlag(), SaveOccasionFlag::SAVE_WHEN_ERROR);
89 }
90 /**
91  * @tc.name: GetSaveModeFlag_001
92  * @tc.desc: Test GetSaveModeFlag
93  * @tc.type: FUNC
94  * @tc.require: I5UL6H
95  */
96 HWTEST_F(AppRecoveryUnitTest, GetSaveModeFlag_001, TestSize.Level1)
97 {
98     EXPECT_EQ(AppRecovery::GetInstance().GetSaveModeFlag(), 0);
99     AppRecovery::GetInstance().saveMode_ = SaveModeFlag::SAVE_WITH_FILE;
100     EXPECT_EQ(AppRecovery::GetInstance().GetSaveModeFlag(), SaveModeFlag::SAVE_WITH_FILE);
101 }
102 
103 /**
104  * @tc.name: InitApplicationInfo_001
105  * @tc.desc: Test InitApplicationInfo
106  * @tc.type: FUNC
107  * @tc.require: I5UL6H
108  */
109 HWTEST_F(AppRecoveryUnitTest, InitApplicationInfo_001, TestSize.Level1)
110 {
111     EXPECT_TRUE(AppRecovery::GetInstance().InitApplicationInfo(testHandler_, applicationInfo_));
112 }
113 
114 /**
115  * @tc.name: EnableAppRecovery_001
116  * @tc.desc: EnableAppRecovery with config, check the enable flag is set as expected.
117  * @tc.type: FUNC
118  * @tc.require: I5UL6H
119  */
120 HWTEST_F(AppRecoveryUnitTest, EnableAppRecovery_001, TestSize.Level1)
121 {
122     EXPECT_FALSE(AppRecovery::GetInstance().IsEnabled());
123     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
124                                   SaveModeFlag::SAVE_WITH_FILE);
125     EXPECT_TRUE(AppRecovery::GetInstance().IsEnabled());
126 }
127 
128 /**
129  * @tc.name: EnableAppRecovery_002
130  * @tc.desc: EnableAppRecovery with config, check the config is set as expected.
131  * @tc.type: FUNC
132  * @tc.require: I5UL6H
133  */
134 HWTEST_F(AppRecoveryUnitTest, EnableAppRecovery_002, TestSize.Level1)
135 {
136     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
137                                   SaveModeFlag::SAVE_WITH_FILE);
138     EXPECT_EQ(RestartFlag::ALWAYS_RESTART, AppRecovery::GetInstance().GetRestartFlag());
139     EXPECT_EQ(SaveOccasionFlag::SAVE_WHEN_ERROR, AppRecovery::GetInstance().GetSaveOccasionFlag());
140     EXPECT_EQ(SaveModeFlag::SAVE_WITH_FILE, AppRecovery::GetInstance().GetSaveModeFlag());
141 }
142 
143 /**
144  * @tc.name: EnableAppRecovery_003
145  * @tc.desc: EnableAppRecovery with config, check the config is set as expected.
146  * @tc.type: FUNC
147  * @tc.require: I5UL6H
148  */
149 HWTEST_F(AppRecoveryUnitTest, EnableAppRecovery_003, TestSize.Level1)
150 {
151     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::NO_RESTART, SaveOccasionFlag::SAVE_ALL,
152                                   SaveModeFlag::SAVE_WITH_SHARED_MEMORY);
153     EXPECT_EQ(RestartFlag::NO_RESTART, AppRecovery::GetInstance().GetRestartFlag());
154     EXPECT_EQ(SaveOccasionFlag::SAVE_ALL, AppRecovery::GetInstance().GetSaveOccasionFlag());
155     EXPECT_EQ(SaveModeFlag::SAVE_WITH_SHARED_MEMORY, AppRecovery::GetInstance().GetSaveModeFlag());
156 }
157 
158 /**
159  * @tc.name:  AddAbility_001
160  * @tc.desc: AddAbility when enable flag is false.
161  * @tc.type: FUNC
162  * @tc.require: I5UL6H
163  */
164 HWTEST_F(AppRecoveryUnitTest, AddAbility_001, TestSize.Level1)
165 {
166     AppRecovery::GetInstance().isEnable_ = false;
167     bool ret = AppRecovery::GetInstance().AddAbility(ability_, abilityInfo_, token_);
168     EXPECT_FALSE(ret);
169 }
170 
171 /**
172  * @tc.name:  AddAbility_002
173  * @tc.desc: AddAbility when abilityRecoverys_ is not empty.
174  * @tc.type: FUNC
175  * @tc.require: I5UL6H
176  */
177 HWTEST_F(AppRecoveryUnitTest, AddAbility_002, TestSize.Level1)
178 {
179     AppRecovery::GetInstance().isEnable_ = true;
180     auto abilityRecovery = std::make_shared<AbilityRecovery>();
181     AppRecovery::GetInstance().abilityRecoverys_.push_back(abilityRecovery);
182     bool ret = AppRecovery::GetInstance().AddAbility(ability_, abilityInfo_, token_);
183     EXPECT_FALSE(ret);
184 }
185 
186 /**
187  * @tc.name:  AddAbility_003
188  * @tc.desc: AddAbility check the ret as expected.
189  * @tc.type: FUNC
190  * @tc.require: I5UL6H
191  */
192 HWTEST_F(AppRecoveryUnitTest, AddAbility_003, TestSize.Level1)
193 {
194     AppRecovery::GetInstance().isEnable_ = true;
195     bool ret = AppRecovery::GetInstance().AddAbility(ability_, abilityInfo_, token_);
196     EXPECT_TRUE(ret);
197 }
198 
199 /**
200  * @tc.name:  ShouldSaveAppState_001
201  * @tc.desc:  ShouldSaveAppState when state is support save.
202  * @tc.type: FUNC
203  * @tc.require: I5UL6H
204  */
205 HWTEST_F(AppRecoveryUnitTest, ShouldSaveAppState_001, TestSize.Level1)
206 {
207     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
208                                   SaveModeFlag::SAVE_WITH_FILE);
209     bool ret = AppRecovery::GetInstance().ShouldSaveAppState(StateReason::DEVELOPER_REQUEST);
210     EXPECT_TRUE(ret);
211 }
212 
213 /**
214  * @tc.name:  ShouldSaveAppState_002
215  * @tc.desc:  ShouldSaveAppState when state is not support save.
216  * @tc.type: FUNC
217  * @tc.require: I5UL6H
218  */
219 HWTEST_F(AppRecoveryUnitTest, ShouldSaveAppState_002, TestSize.Level1)
220 {
221     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
222                                   SaveModeFlag::SAVE_WITH_FILE);
223     bool ret = AppRecovery::GetInstance().ShouldSaveAppState(StateReason::LIFECYCLE);
224     EXPECT_FALSE(ret);
225 }
226 
227 /**
228  * @tc.name:  ShouldSaveAppState_003
229  * @tc.desc:  ShouldSaveAppState when state is not support save.
230  * @tc.type: FUNC
231  * @tc.require: I5UL6H
232  */
233 HWTEST_F(AppRecoveryUnitTest, ShouldSaveAppState_003, TestSize.Level1)
234 {
235     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_BACKGROUND,
236                                   SaveModeFlag::SAVE_WITH_FILE);
237     bool ret = AppRecovery::GetInstance().ShouldSaveAppState(StateReason::CPP_CRASH);
238     EXPECT_FALSE(ret);
239     ret = AppRecovery::GetInstance().ShouldSaveAppState(StateReason::JS_ERROR);
240     EXPECT_FALSE(ret);
241     ret = AppRecovery::GetInstance().ShouldSaveAppState(StateReason::APP_FREEZE);
242     EXPECT_FALSE(ret);
243 }
244 
245 /**
246  * @tc.name:  ScheduleSaveAppState_001
247  * @tc.desc:  ScheduleSaveAppState when enable flag is false.
248  * @tc.type: FUNC
249  * @tc.require: I5UL6H
250  */
251 HWTEST_F(AppRecoveryUnitTest, ScheduleSaveAppState_001, TestSize.Level1)
252 {
253     bool ret = AppRecovery::GetInstance().ScheduleSaveAppState(StateReason::DEVELOPER_REQUEST);
254     EXPECT_FALSE(ret);
255 }
256 
257 /**
258  * @tc.name:  ScheduleSaveAppState_002
259  * @tc.desc:  ScheduleSaveAppState when state is not support save.
260  * @tc.type: FUNC
261  * @tc.require: I5UL6H
262  */
263 HWTEST_F(AppRecoveryUnitTest, ScheduleSaveAppState_002, TestSize.Level1)
264 {
265     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
266                                   SaveModeFlag::SAVE_WITH_FILE);
267     bool ret = AppRecovery::GetInstance().ScheduleSaveAppState(StateReason::LIFECYCLE);
268     EXPECT_FALSE(ret);
269 }
270 
271 /**
272  * @tc.name:  ScheduleSaveAppState_003
273  * @tc.desc:  ScheduleSaveAppState when reason == StateReason::APP_FREEZE.
274  * @tc.type: FUNC
275  * @tc.require: I5UL6H
276  */
277 HWTEST_F(AppRecoveryUnitTest, ScheduleSaveAppState_003, TestSize.Level1)
278 {
279     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
280                                   SaveModeFlag::SAVE_WITH_FILE);
281     bool ret = AppRecovery::GetInstance().ScheduleSaveAppState(StateReason::APP_FREEZE);
282     EXPECT_FALSE(ret);
283 }
284 
285 /**
286  * @tc.name:  ScheduleSaveAppState_004
287  * @tc.desc:  ScheduleSaveAppState when handler is nullptr.
288  * @tc.type: FUNC
289  * @tc.require: I5UL6H
290  */
291 HWTEST_F(AppRecoveryUnitTest, ScheduleSaveAppState_004, TestSize.Level1)
292 {
293     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
294                                   SaveModeFlag::SAVE_WITH_FILE);
295     AppRecovery::GetInstance().mainHandler_.reset();
296     bool ret = AppRecovery::GetInstance().ScheduleSaveAppState(StateReason::DEVELOPER_REQUEST);
297     EXPECT_FALSE(ret);
298 }
299 
300 /**
301  * @tc.name:  ScheduleSaveAppState_005
302  * @tc.desc:  ScheduleSaveAppState should be return false.
303  * @tc.type: FUNC
304  * @tc.require: I5UL6H
305  */
306 HWTEST_F(AppRecoveryUnitTest, ScheduleSaveAppState_005, TestSize.Level1)
307 {
308     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
309                                   SaveModeFlag::SAVE_WITH_FILE);
310     bool ret = AppRecovery::GetInstance().ScheduleSaveAppState(StateReason::CPP_CRASH);
311     EXPECT_FALSE(ret);
312 }
313 
314 /**
315  * @tc.name:  ShouldRecoverApp_001
316  * @tc.desc:  ShouldRecoverApp when state is not support save,RestartFlag = NO_RESTART.
317  * @tc.type: FUNC
318  * @tc.require: I5UL6H
319  */
320 HWTEST_F(AppRecoveryUnitTest, ShouldRecoverApp_001, TestSize.Level1)
321 {
322     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::NO_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
323                                   SaveModeFlag::SAVE_WITH_FILE);
324     bool ret = AppRecovery::GetInstance().ShouldRecoverApp(StateReason::DEVELOPER_REQUEST);
325     EXPECT_FALSE(ret);
326 }
327 
328 /**
329  * @tc.name:  ShouldRecoverApp_002
330  * @tc.desc:  ShouldRecoverApp when state is not support save.
331  * @tc.type: FUNC
332  * @tc.require: I5UL6H
333  */
334 HWTEST_F(AppRecoveryUnitTest, ShouldRecoverApp_002, TestSize.Level1)
335 {
336     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
337                                   SaveModeFlag::SAVE_WITH_FILE);
338     bool ret = AppRecovery::GetInstance().ShouldRecoverApp(StateReason::LIFECYCLE);
339     EXPECT_FALSE(ret);
340     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
341         SaveModeFlag::SAVE_WITH_FILE);
342     ret = AppRecovery::GetInstance().ShouldRecoverApp(StateReason::CPP_CRASH);
343     EXPECT_FALSE(ret);
344 }
345 
346 /**
347  * @tc.name:  ShouldRecoverApp_003
348  * @tc.desc:  ShouldRecoverApp when state is support save.
349  * @tc.type: FUNC
350  * @tc.require: I5UL6H
351  */
352 HWTEST_F(AppRecoveryUnitTest, ShouldRecoverApp_003, TestSize.Level1)
353 {
354     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
355                                   SaveModeFlag::SAVE_WITH_FILE);
356     bool ret = AppRecovery::GetInstance().ShouldRecoverApp(StateReason::DEVELOPER_REQUEST);
357     EXPECT_TRUE(ret);
358     ret = AppRecovery::GetInstance().ShouldRecoverApp(StateReason::APP_FREEZE);
359     EXPECT_TRUE(ret);
360     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::RESTART_WHEN_JS_CRASH, SaveOccasionFlag::SAVE_WHEN_ERROR,
361         SaveModeFlag::SAVE_WITH_FILE);
362     ret = AppRecovery::GetInstance().ShouldRecoverApp(StateReason::JS_ERROR);
363     EXPECT_TRUE(ret);
364     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::RESTART_WHEN_APP_FREEZE,
365         SaveOccasionFlag::SAVE_WHEN_ERROR, SaveModeFlag::SAVE_WITH_FILE);
366     ret = AppRecovery::GetInstance().ShouldRecoverApp(StateReason::APP_FREEZE);
367     EXPECT_TRUE(ret);
368 }
369 
370 /**
371  * @tc.name:  ScheduleRecoverApp_001
372  * @tc.desc:  ScheduleRecoverApp when enable flag is false.
373  * @tc.type: FUNC
374  * @tc.require: I5UL6H
375  */
376 HWTEST_F(AppRecoveryUnitTest, ScheduleRecoverApp_001, TestSize.Level1)
377 {
378     bool ret = AppRecovery::GetInstance().ScheduleRecoverApp(StateReason::DEVELOPER_REQUEST);
379     EXPECT_FALSE(ret);
380 }
381 
382 /**
383  * @tc.name:  ScheduleRecoverApp_002
384  * @tc.desc:  ScheduleRecoverApp when state is not support save.
385  * @tc.type: FUNC
386  * @tc.require: I5UL6H
387  */
388 HWTEST_F(AppRecoveryUnitTest, ScheduleRecoverApp_002, TestSize.Level1)
389 {
390     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::NO_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
391                                   SaveModeFlag::SAVE_WITH_FILE);
392     bool ret = AppRecovery::GetInstance().ScheduleRecoverApp(StateReason::DEVELOPER_REQUEST);
393     EXPECT_FALSE(ret);
394 }
395 
396 /**
397  * @tc.name:  ScheduleRecoverApp_003
398  * @tc.desc:  ScheduleRecoverApp when abilityRecoverys is empty.
399  * @tc.type: FUNC
400  * @tc.require: I5UL6H
401  */
402 HWTEST_F(AppRecoveryUnitTest, ScheduleRecoverApp_003, TestSize.Level1)
403 {
404     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
405                                   SaveModeFlag::SAVE_WITH_FILE);
406     bool ret = AppRecovery::GetInstance().ScheduleRecoverApp(StateReason::DEVELOPER_REQUEST);
407     EXPECT_FALSE(ret);
408 }
409 
410 /**
411  * @tc.name:  ScheduleRecoverApp_004
412  * @tc.desc:  ScheduleRecoverApp should be return true,reason == StateReason::APP_FREEZE.
413  * @tc.type: FUNC
414  * @tc.require: I5UL6H
415  */
416 HWTEST_F(AppRecoveryUnitTest, ScheduleRecoverApp_004, TestSize.Level1)
417 {
418     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
419                                   SaveModeFlag::SAVE_WITH_FILE);
420     auto caseAbilityInfo = std::make_shared<AbilityInfo>();
421     auto ability = std::make_shared<Ability>();
422     sptr<IRemoteObject> token = new MockAbilityToken();
423     EXPECT_TRUE(AppRecovery::GetInstance().AddAbility(ability_, abilityInfo_, token_));
424     bool ret = AppRecovery::GetInstance().ScheduleRecoverApp(StateReason::APP_FREEZE);
425     EXPECT_TRUE(ret);
426 }
427 
428 /**
429  * @tc.name:  ScheduleRecoverApp_005
430  * @tc.desc:  ScheduleRecoverApp when handler is nullptr.
431  * @tc.type: FUNC
432  * @tc.require: I5UL6H
433  */
434 HWTEST_F(AppRecoveryUnitTest, ScheduleRecoverApp_005, TestSize.Level1)
435 {
436     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
437                                   SaveModeFlag::SAVE_WITH_FILE);
438     auto caseAbilityInfo = std::make_shared<AbilityInfo>();
439     auto ability = std::make_shared<Ability>();
440     sptr<IRemoteObject> token = new MockAbilityToken();
441     EXPECT_TRUE(AppRecovery::GetInstance().AddAbility(ability_, abilityInfo_, token_));
442     AppRecovery::GetInstance().mainHandler_.reset();
443     bool ret = AppRecovery::GetInstance().ScheduleRecoverApp(StateReason::DEVELOPER_REQUEST);
444     EXPECT_FALSE(ret);
445 }
446 
447 /**
448  * @tc.name:  ScheduleRecoverApp_006
449  * @tc.desc:  ScheduleRecoverApp should be retuen true.
450  * @tc.type: FUNC
451  * @tc.require: I5UL6H
452  */
453 HWTEST_F(AppRecoveryUnitTest, ScheduleRecoverApp_006, TestSize.Level1)
454 {
455     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
456                                   SaveModeFlag::SAVE_WITH_FILE);
457     auto caseAbilityInfo = std::make_shared<AbilityInfo>();
458     auto ability = std::make_shared<Ability>();
459     sptr<IRemoteObject> token = new MockAbilityToken();
460     EXPECT_TRUE(AppRecovery::GetInstance().AddAbility(ability_, abilityInfo_, token_));
461     bool ret = AppRecovery::GetInstance().ScheduleRecoverApp(StateReason::DEVELOPER_REQUEST);
462     EXPECT_TRUE(ret);
463 }
464 
465 /**
466  * @tc.name:  TryRecoverApp_001
467  * @tc.desc:  TryRecoverApp when enable flag is false.
468  * @tc.type: FUNC
469  * @tc.require: I5UL6H
470  */
471 HWTEST_F(AppRecoveryUnitTest, TryRecoverApp_001, TestSize.Level1)
472 {
473     bool ret = AppRecovery::GetInstance().TryRecoverApp(StateReason::DEVELOPER_REQUEST);
474     EXPECT_FALSE(ret);
475 }
476 
477 /**
478  * @tc.name:  TryRecoverApp_002
479  * @tc.desc:  TryRecoverApp should be return true.
480  * @tc.type: FUNC
481  * @tc.require: I5UL6H
482  */
483 HWTEST_F(AppRecoveryUnitTest, TryRecoverApp_002, TestSize.Level1)
484 {
485     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
486                                   SaveModeFlag::SAVE_WITH_FILE);
487     auto caseAbilityInfo = std::make_shared<AbilityInfo>();
488     auto ability = std::make_shared<Ability>();
489     sptr<IRemoteObject> token = new MockAbilityToken();
490     EXPECT_TRUE(AppRecovery::GetInstance().AddAbility(ability_, abilityInfo_, token_));
491     bool ret = AppRecovery::GetInstance().TryRecoverApp(StateReason::APP_FREEZE);
492     EXPECT_TRUE(ret);
493 }
494 
495 /**
496  * @tc.name:  PersistAppState_001
497  * @tc.desc:  Test PersistAppState when saveMode_ == SaveModeFlag::SAVE_WITH_FILE.
498  * @tc.type: FUNC
499  * @tc.require: I5Z7LE
500  */
501 HWTEST_F(AppRecoveryUnitTest, PersistAppState_001, TestSize.Level1)
502 {
503     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
504                                   SaveModeFlag::SAVE_WITH_FILE);
505     EXPECT_TRUE(AppRecovery::GetInstance().PersistAppState());
506 }
507 
508 /**
509  * @tc.name:  PersistAppState_002
510  * @tc.desc:  Test PersistAppState when abilityRecoverys is empty.
511  * @tc.type: FUNC
512  * @tc.require: I5Z7LE
513  */
514 HWTEST_F(AppRecoveryUnitTest, PersistAppState_002, TestSize.Level1)
515 {
516     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
517                                   SaveModeFlag::SAVE_WITH_SHARED_MEMORY);
518     EXPECT_TRUE(AppRecovery::GetInstance().PersistAppState());
519 }
520 
521 /**
522  * @tc.name:  PersistAppState_003
523  * @tc.desc:  Test PersistAppState when abilityRecoverys is not empty.
524  * @tc.type: FUNC
525  * @tc.require: I5Z7LE
526  */
527 HWTEST_F(AppRecoveryUnitTest, PersistAppState_003, TestSize.Level1)
528 {
529     AppRecovery::GetInstance().EnableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR,
530                                   SaveModeFlag::SAVE_WITH_SHARED_MEMORY);
531     AppRecovery::GetInstance().AddAbility(ability_, abilityInfo_, token_);
532     EXPECT_TRUE(AppRecovery::GetInstance().PersistAppState());
533 }
534 }  // namespace AppExecFwk
535 }  // namespace OHOS
536