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