1 /*
2 * Copyright (c) 2021-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 #define private public
16 #include "app_mgr_service_inner.h"
17 #undef private
18
19 #include <unistd.h>
20 #include <gtest/gtest.h>
21 #include "iremote_object.h"
22 #include "refbase.h"
23 #include "app_launch_data.h"
24 #include "mock_ability_token.h"
25 #include "mock_app_scheduler.h"
26 #include "mock_app_spawn_client.h"
27 #include "mock_app_spawn_socket.h"
28 #include "mock_iapp_state_callback.h"
29 #include "mock_bundle_manager.h"
30
31 using namespace testing::ext;
32 using testing::_;
33 using testing::Return;
34 using testing::SetArgReferee;
35 using ::testing::DoAll;
36
37 namespace OHOS {
38 namespace AppExecFwk {
39 struct TestApplicationPreRecord {
TestApplicationPreRecordOHOS::AppExecFwk::TestApplicationPreRecord40 TestApplicationPreRecord(const std::shared_ptr<AbilityRunningRecord> &firstAbilityRecord,
41 const std::shared_ptr<AppRunningRecord> &appRecord, const sptr<MockAppScheduler> &mockAppScheduler)
42 : firstAbilityRecord_(firstAbilityRecord), appRecord_(appRecord), mockAppScheduler_(mockAppScheduler)
43 {}
~TestApplicationPreRecordOHOS::AppExecFwk::TestApplicationPreRecord44 virtual ~TestApplicationPreRecord()
45 {}
46
47 std::shared_ptr<AbilityRunningRecord> firstAbilityRecord_;
48 std::shared_ptr<AppRunningRecord> appRecord_;
49 sptr<MockAppScheduler> mockAppScheduler_ = nullptr;
50 };
51 class AmsAppLifeCycleTest : public testing::Test {
52 public:
53 static void SetUpTestCase();
54 static void TearDownTestCase();
55 void SetUp();
56 void TearDown();
57
58 protected:
59 std::shared_ptr<AppRunningRecord> StartProcessAndLoadAbility(const sptr<IRemoteObject> &token,
60 const sptr<IRemoteObject> &preToken, const std::shared_ptr<AbilityInfo> &abilityInfo,
61 const std::shared_ptr<ApplicationInfo> &appInfo, const pid_t newPid) const;
62
63 std::shared_ptr<AppRunningRecord> LoadTestAbility(const sptr<IRemoteObject> &token,
64 const sptr<IRemoteObject> &preToken, const std::shared_ptr<AbilityInfo> &abilityInfo,
65 const std::shared_ptr<ApplicationInfo> &appInfo);
66
67 sptr<MockAbilityToken> GetMockToken() const;
68 std::shared_ptr<AbilityInfo> GetAbilityInfoByIndex(const std::string &index) const;
69 std::shared_ptr<ApplicationInfo> GetApplication() const;
70 TestApplicationPreRecord PrepareLoadTestAbilityAndApp(const ApplicationState currentAppState) const;
71 TestApplicationPreRecord CreateTestApplicationRecord(
72 const AbilityState abilityState, const ApplicationState appState) const;
73 std::shared_ptr<AppRunningRecord> CreateTestApplicationAndSetState(const ApplicationState appState) const;
74 sptr<MockAppScheduler> AddApplicationClient(const std::shared_ptr<AppRunningRecord> &appRecord) const;
75 void TestUpdateAbilityStateWhenAbilityIsUnLoaded(const AbilityState changingState) const;
76 void TestUpdateAbilityStateWhenAbilityIsCreate(
77 const AbilityState changingState, const ApplicationState curAppState) const;
78 void TestUpdateAbilityStateToBackgroundWhenAbilityIsReady(const ApplicationState curAppState) const;
79 void TestUpdateAbilityStateToBackgroundWhenAbilityIsBackground(const ApplicationState curAppState);
80 void TestTerminateAbilityWhenAbilityIsNotBackground(
81 const AbilityState curAbilityState, const ApplicationState curAppState) const;
82 std::shared_ptr<AbilityRunningRecord> AddNewAbility(
83 const std::shared_ptr<AppRunningRecord> &appRecord, const std::string &index) const;
84 std::shared_ptr<AbilityRunningRecord> AddNewAbility(
85 const std::shared_ptr<AppRunningRecord> &appRecord, const std::string &index, const int uid) const;
86
87 protected:
88 std::shared_ptr<AppMgrServiceInner> serviceInner_;
89 sptr<MockAbilityToken> mock_token_ = nullptr;
90 sptr<BundleMgrService> mockBundleMgr = nullptr;
91 std::shared_ptr<EventRunner> runner_ = nullptr;
92 std::shared_ptr<AMSEventHandler> handler_ = nullptr;
93 sptr<MockAppStateCallback> mockAppStateCallbackStub_ = nullptr;
94 };
95
SetUpTestCase()96 void AmsAppLifeCycleTest::SetUpTestCase()
97 {}
98
TearDownTestCase()99 void AmsAppLifeCycleTest::TearDownTestCase()
100 {}
101
SetUp()102 void AmsAppLifeCycleTest::SetUp()
103 {
104 serviceInner_.reset(new (std::nothrow) AppMgrServiceInner());
105 mock_token_ = new (std::nothrow) MockAbilityToken();
106 mockBundleMgr = new (std::nothrow) BundleMgrService();
107 serviceInner_->SetBundleManager(mockBundleMgr);
108
109 runner_ = EventRunner::Create("AmsAppLifeCycleTest");
110 handler_ = std::make_shared<AMSEventHandler>(runner_, serviceInner_);
111 serviceInner_->SetEventHandler(handler_);
112 }
113
TearDown()114 void AmsAppLifeCycleTest::TearDown()
115 {
116 serviceInner_ = nullptr;
117 handler_ = nullptr;
118 runner_.reset();
119 }
120
StartProcessAndLoadAbility(const sptr<IRemoteObject> & token,const sptr<IRemoteObject> & preToken,const std::shared_ptr<AbilityInfo> & abilityInfo,const std::shared_ptr<ApplicationInfo> & appInfo,const pid_t newPid) const121 std::shared_ptr<AppRunningRecord> AmsAppLifeCycleTest::StartProcessAndLoadAbility(const sptr<IRemoteObject> &token,
122 const sptr<IRemoteObject> &preToken, const std::shared_ptr<AbilityInfo> &abilityInfo,
123 const std::shared_ptr<ApplicationInfo> &appInfo, const pid_t newPid) const
124 {
125 std::shared_ptr<MockAppSpawnClient> mockClientPtr = std::make_shared<MockAppSpawnClient>();
126 EXPECT_CALL(*mockClientPtr, StartProcess(_, _)).Times(1).WillOnce(DoAll(SetArgReferee<1>(newPid), Return(ERR_OK)));
127
128 serviceInner_->SetAppSpawnClient(mockClientPtr);
129
130 serviceInner_->LoadAbility(token, preToken, abilityInfo, appInfo, nullptr);
131 BundleInfo bundleInfo;
132 bundleInfo.appId = "com.ohos.test.helloworld_code123";
133 auto record = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(
134 appInfo->name, abilityInfo->process, appInfo->uid, bundleInfo);
135 EXPECT_EQ(record->GetPriorityObject()->GetPid(), newPid);
136 return record;
137 }
138
GetMockToken() const139 sptr<MockAbilityToken> AmsAppLifeCycleTest::GetMockToken() const
140 {
141 return mock_token_;
142 }
143
GetAbilityInfoByIndex(const std::string & index) const144 std::shared_ptr<AbilityInfo> AmsAppLifeCycleTest::GetAbilityInfoByIndex(const std::string &index) const
145 {
146 auto abilityInfo = std::make_shared<AbilityInfo>();
147 abilityInfo->name = "test_ability" + index;
148 abilityInfo->applicationName = "com.ohos.test.helloworld";
149 abilityInfo->process = "com.ohos.test.helloworld";
150 abilityInfo->applicationInfo.bundleName = "com.ohos.test.helloworld";
151 return abilityInfo;
152 }
153
GetApplication() const154 std::shared_ptr<ApplicationInfo> AmsAppLifeCycleTest::GetApplication() const
155 {
156 auto appInfo = std::make_shared<ApplicationInfo>();
157 appInfo->name = "com.ohos.test.helloworld";
158 appInfo->bundleName = "com.ohos.test.helloworld";
159 return appInfo;
160 }
161
162 // load the first ability and create his parent app, then set app a state
PrepareLoadTestAbilityAndApp(const ApplicationState currentAppState) const163 TestApplicationPreRecord AmsAppLifeCycleTest::PrepareLoadTestAbilityAndApp(const ApplicationState currentAppState) const
164 {
165 const pid_t NEW_PID = 123;
166 auto abilityInfo = GetAbilityInfoByIndex("0");
167 auto appInfo = GetApplication();
168 sptr<IRemoteObject> token = GetMockToken();
169 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
170 EXPECT_NE(appRecord, nullptr);
171 auto abilityRecord = appRecord->GetAbilityRunningRecordByToken(token);
172 EXPECT_NE(abilityRecord, nullptr);
173 EXPECT_EQ(AbilityState::ABILITY_STATE_CREATE, abilityRecord->GetState());
174 appRecord->SetState(currentAppState);
175 sptr<MockAppScheduler> mockAppScheduler = new (std::nothrow) MockAppScheduler();
176 sptr<IAppScheduler> client = iface_cast<IAppScheduler>(mockAppScheduler.GetRefPtr());
177 appRecord->SetApplicationClient(client);
178 TestApplicationPreRecord testAppPreRecord(abilityRecord, appRecord, mockAppScheduler);
179 return testAppPreRecord;
180 }
181
182 // create one application that include one ability, and set state
CreateTestApplicationRecord(const AbilityState abilityState,const ApplicationState appState) const183 TestApplicationPreRecord AmsAppLifeCycleTest::CreateTestApplicationRecord(
184 const AbilityState abilityState, const ApplicationState appState) const
185 {
186 auto abilityInfo = GetAbilityInfoByIndex("0");
187 auto appInfo = GetApplication();
188 sptr<IRemoteObject> token = GetMockToken();
189
190 HapModuleInfo hapModuleInfo;
191 hapModuleInfo.moduleName = "module789";
192 BundleInfo bundleInfo;
193 bundleInfo.appId = "com.ohos.test.helloworld_code123";
194
195 std::shared_ptr<AppRunningRecord> appRecord = serviceInner_->CreateAppRunningRecord(
196 token, nullptr, appInfo, abilityInfo, "com.ohos.test.helloworld", bundleInfo, hapModuleInfo, nullptr);
197
198 appRecord->SetEventHandler(handler_);
199 EXPECT_NE(appRecord, nullptr);
200 auto abilityRecord = appRecord->GetAbilityRunningRecordByToken(GetMockToken());
201 EXPECT_NE(abilityRecord, nullptr);
202 abilityRecord->SetState(abilityState);
203 appRecord->SetState(appState);
204 sptr<MockAppScheduler> mockAppScheduler = AddApplicationClient(appRecord);
205
206 TestApplicationPreRecord testAppPreRecord(abilityRecord, appRecord, mockAppScheduler);
207 return testAppPreRecord;
208 }
209
CreateTestApplicationAndSetState(const ApplicationState appState) const210 std::shared_ptr<AppRunningRecord> AmsAppLifeCycleTest::CreateTestApplicationAndSetState(
211 const ApplicationState appState) const
212 {
213 auto abilityInfo = GetAbilityInfoByIndex("0");
214 auto appInfo = GetApplication();
215 sptr<IRemoteObject> token = GetMockToken();
216
217 HapModuleInfo hapModuleInfo;
218 hapModuleInfo.moduleName = "module789";
219 BundleInfo bundleInfo;
220 bundleInfo.appId = "com.ohos.test.helloworld_code123";
221
222 std::shared_ptr<AppRunningRecord> appRecord = serviceInner_->CreateAppRunningRecord(
223 token, nullptr, appInfo, abilityInfo, "AmsAppLifeCycleTest", bundleInfo, hapModuleInfo, nullptr);
224
225 EXPECT_NE(appRecord, nullptr);
226 appRecord->SetEventHandler(handler_);
227 appRecord->SetState(appState);
228 return appRecord;
229 }
230
AddApplicationClient(const std::shared_ptr<AppRunningRecord> & appRecord) const231 sptr<MockAppScheduler> AmsAppLifeCycleTest::AddApplicationClient(
232 const std::shared_ptr<AppRunningRecord> &appRecord) const
233 {
234 sptr<MockAppScheduler> mockAppScheduler = new MockAppScheduler();
235 sptr<IAppScheduler> client = iface_cast<IAppScheduler>(mockAppScheduler.GetRefPtr());
236 appRecord->SetApplicationClient(client);
237 return mockAppScheduler;
238 }
239
TestUpdateAbilityStateWhenAbilityIsUnLoaded(const AbilityState changingState) const240 void AmsAppLifeCycleTest::TestUpdateAbilityStateWhenAbilityIsUnLoaded(const AbilityState changingState) const
241 {
242 sptr<IRemoteObject> token = GetMockToken();
243 serviceInner_->UpdateAbilityState(token, changingState);
244 auto appRecord = serviceInner_->GetAppRunningRecordByAbilityToken(token);
245 EXPECT_EQ(appRecord, nullptr);
246 }
247
TestUpdateAbilityStateWhenAbilityIsCreate(const AbilityState changingState,const ApplicationState curAppState) const248 void AmsAppLifeCycleTest::TestUpdateAbilityStateWhenAbilityIsCreate(
249 const AbilityState changingState, const ApplicationState curAppState) const
250 {
251 auto testAppPreRecord = CreateTestApplicationRecord(AbilityState::ABILITY_STATE_CREATE, curAppState);
252 auto abilityState = testAppPreRecord.firstAbilityRecord_->GetState();
253
254 serviceInner_->UpdateAbilityState(GetMockToken(), changingState);
255 EXPECT_EQ(abilityState, testAppPreRecord.firstAbilityRecord_->GetState());
256 EXPECT_EQ(curAppState, testAppPreRecord.appRecord_->GetState());
257 }
258
TestUpdateAbilityStateToBackgroundWhenAbilityIsReady(const ApplicationState curAppState) const259 void AmsAppLifeCycleTest::TestUpdateAbilityStateToBackgroundWhenAbilityIsReady(const ApplicationState curAppState) const
260 {
261 auto testAppPreRecord = CreateTestApplicationRecord(AbilityState::ABILITY_STATE_READY, curAppState);
262
263 serviceInner_->UpdateAbilityState(GetMockToken(), AbilityState::ABILITY_STATE_BACKGROUND);
264 EXPECT_EQ(AbilityState::ABILITY_STATE_READY, testAppPreRecord.firstAbilityRecord_->GetState());
265 EXPECT_EQ(curAppState, testAppPreRecord.appRecord_->GetState());
266 }
267
TestUpdateAbilityStateToBackgroundWhenAbilityIsBackground(const ApplicationState curAppState)268 void AmsAppLifeCycleTest::TestUpdateAbilityStateToBackgroundWhenAbilityIsBackground(const ApplicationState curAppState)
269 {
270 auto testAppPreRecord = CreateTestApplicationRecord(AbilityState::ABILITY_STATE_BACKGROUND, curAppState);
271
272 serviceInner_->UpdateAbilityState(GetMockToken(), AbilityState::ABILITY_STATE_BACKGROUND);
273 EXPECT_EQ(AbilityState::ABILITY_STATE_BACKGROUND, testAppPreRecord.firstAbilityRecord_->GetState());
274 EXPECT_EQ(curAppState, testAppPreRecord.appRecord_->GetState());
275 }
276
TestTerminateAbilityWhenAbilityIsNotBackground(const AbilityState curAbilityState,const ApplicationState curAppState) const277 void AmsAppLifeCycleTest::TestTerminateAbilityWhenAbilityIsNotBackground(
278 const AbilityState curAbilityState, const ApplicationState curAppState) const
279 {
280 auto testAppPreRecord = CreateTestApplicationRecord(curAbilityState, curAppState);
281
282 serviceInner_->TerminateAbility(GetMockToken());
283 EXPECT_EQ(curAbilityState, testAppPreRecord.firstAbilityRecord_->GetState());
284 EXPECT_EQ(curAppState, testAppPreRecord.appRecord_->GetState());
285 }
286
AddNewAbility(const std::shared_ptr<AppRunningRecord> & appRecord,const std::string & index) const287 std::shared_ptr<AbilityRunningRecord> AmsAppLifeCycleTest::AddNewAbility(
288 const std::shared_ptr<AppRunningRecord> &appRecord, const std::string &index) const
289 {
290 auto newAbilityInfo = GetAbilityInfoByIndex(index);
291 sptr<IRemoteObject> newToken = new (std::nothrow) MockAbilityToken();
292 serviceInner_->LoadAbility(newToken, nullptr, newAbilityInfo, GetApplication(), nullptr);
293 auto newAbilityRecord = appRecord->GetAbilityRunningRecordByToken(newToken);
294 EXPECT_NE(newAbilityRecord, nullptr);
295 return newAbilityRecord;
296 }
297
AddNewAbility(const std::shared_ptr<AppRunningRecord> & appRecord,const std::string & index,const int uid) const298 std::shared_ptr<AbilityRunningRecord> AmsAppLifeCycleTest::AddNewAbility(
299 const std::shared_ptr<AppRunningRecord> &appRecord, const std::string &index, const int uid) const
300 {
301 auto newAbilityInfo = GetAbilityInfoByIndex(index);
302 newAbilityInfo->applicationInfo.uid = uid;
303 auto app = GetApplication();
304 app->uid = uid;
305 sptr<IRemoteObject> newToken = new (std::nothrow) MockAbilityToken();
306 serviceInner_->LoadAbility(newToken, nullptr, newAbilityInfo, app, nullptr);
307 auto newAbilityRecord = appRecord->GetAbilityRunningRecordByToken(newToken);
308 EXPECT_NE(newAbilityRecord, nullptr);
309 return newAbilityRecord;
310 }
311
312 /*
313 * Feature: AMS
314 * Function: AppLifeCycle::CreateAppRunningRecord
315 * SubFunction: bundleMgr CheckPermission
316 * FunctionPoints: UnsuspendApplication
317 * CaseDescription: Check if there is background operation permission
318 */
319 HWTEST_F(AmsAppLifeCycleTest, RemoveAppFromRecentList_001, TestSize.Level1)
320 {
321 RecordQueryResult result;
322 sptr<MockAppScheduler> mockAppScheduler = new MockAppScheduler();
323 sptr<IAppScheduler> client = iface_cast<IAppScheduler>(mockAppScheduler.GetRefPtr());
324
325 auto abilityInfo = GetAbilityInfoByIndex("0");
326 auto appInfo = GetApplication();
327 sptr<IRemoteObject> token = GetMockToken();
328 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, 100);
329 appRecord->SetApplicationClient(client);
330
331 EXPECT_TRUE(appRecord);
332 int size = serviceInner_->GetRecentAppList().size();
333 EXPECT_EQ(size, 1);
334 EXPECT_FALSE(result.appExists);
335
336 auto abilityInfo2 = std::make_shared<AbilityInfo>();
337 abilityInfo2->name = "test_ability_1";
338 abilityInfo2->applicationName = "com.ohos.test.special";
339 abilityInfo2->process = "com.ohos.test.special";
340 abilityInfo2->applicationInfo.bundleName = "com.ohos.test.special";
341
342 auto appInfo2 = std::make_shared<ApplicationInfo>();
343 appInfo2->name = "com.ohos.test.special";
344 appInfo2->bundleName = "com.ohos.test.special";
345 sptr<IRemoteObject> token2 = GetMockToken();
346
347 auto appRecord2 = StartProcessAndLoadAbility(token2, nullptr, abilityInfo2, appInfo2, 101);
348 appRecord2->SetApplicationClient(client);
349 EXPECT_TRUE(appRecord2);
350 size = serviceInner_->GetRecentAppList().size();
351 EXPECT_EQ(size, 2);
352 EXPECT_FALSE(result.appExists);
353
354 // remove the first
355 EXPECT_CALL(*mockAppScheduler, ScheduleProcessSecurityExit()).Times(1);
356 serviceInner_->RemoveAppFromRecentList(appRecord->GetName(), appRecord->GetName());
357 sleep(1);
358 size = serviceInner_->GetRecentAppList().size();
359 EXPECT_EQ(size, 1);
360
361 EXPECT_CALL(*mockAppScheduler, ScheduleProcessSecurityExit()).Times(1);
362 serviceInner_->RemoveAppFromRecentList(appRecord2->GetName(), appRecord2->GetName());
363 sleep(3);
364
365 auto list = serviceInner_->GetRecentAppList();
366 size = list.size();
367 EXPECT_EQ(size, 0);
368 }
369
370 /*
371 * Feature: AMS
372 * Function: AppLifeCycle
373 * SubFunction: Init
374 * FunctionPoints: Init
375 * CaseDescription: test application init process
376 */
377 HWTEST_F(AmsAppLifeCycleTest, Init_001, TestSize.Level1)
378 {
379 const pid_t NEW_PID = 123;
380 auto abilityInfo = GetAbilityInfoByIndex("0");
381 auto appInfo = GetApplication();
382 sptr<IRemoteObject> token = GetMockToken();
383 auto record = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
384
385 sptr<MockAppScheduler> mockAppScheduler = new MockAppScheduler();
386 sptr<IAppScheduler> client = iface_cast<IAppScheduler>(mockAppScheduler.GetRefPtr());
387 EXPECT_CALL(*mockAppScheduler, ScheduleLaunchApplication(_, _)).Times(1);
388 EXPECT_CALL(*mockAppScheduler, ScheduleLaunchAbility(_, _, _)).Times(1);
389
390 serviceInner_->AttachApplication(NEW_PID, client);
391 EXPECT_NE(record->GetApplicationClient(), nullptr);
392 EXPECT_EQ(ApplicationState::APP_STATE_READY, record->GetState());
393 }
394
395 /*
396 * Feature: AMS
397 * Function: AppLifeCycle
398 * SubFunction: Schedule
399 * FunctionPoints: LoadAbility
400 * CaseDescription: LoadAbility when ability is loaded.
401 */
402 HWTEST_F(AmsAppLifeCycleTest, Schedule_001, TestSize.Level1)
403 {
404 const pid_t NEW_PID = 123;
405 auto abilityInfo = GetAbilityInfoByIndex("0");
406 auto appInfo = GetApplication();
407 sptr<IRemoteObject> token = GetMockToken();
408 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
409 EXPECT_NE(appRecord, nullptr);
410 auto abilityRecord = appRecord->GetAbilityRunningRecordByToken(token);
411 EXPECT_NE(abilityRecord, nullptr);
412 AbilityState abilityState = abilityRecord->GetState();
413 ApplicationState appState = appRecord->GetState();
414
415 serviceInner_->LoadAbility(token, nullptr, abilityInfo, appInfo, nullptr);
416 EXPECT_EQ(abilityState, abilityRecord->GetState());
417 EXPECT_EQ(appState, appRecord->GetState());
418 }
419
420 /*
421 * Feature: AMS
422 * Function: AppLifeCycle
423 * SubFunction: Schedule
424 * FunctionPoints: LoadAbility
425 * CaseDescription: LoadAbility when ability and application is not created.
426 */
427 HWTEST_F(AmsAppLifeCycleTest, Schedule_002, TestSize.Level1)
428 {
429 const pid_t NEW_PID = 123;
430 auto abilityInfo = GetAbilityInfoByIndex("0");
431 auto appInfo = GetApplication();
432 sptr<IRemoteObject> token = GetMockToken();
433 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
434 EXPECT_NE(appRecord, nullptr);
435 auto abilityRecord = appRecord->GetAbilityRunningRecordByToken(token);
436 EXPECT_NE(abilityRecord, nullptr);
437 sptr<MockAppScheduler> mockAppScheduler = new MockAppScheduler();
438 sptr<IAppScheduler> client = iface_cast<IAppScheduler>(mockAppScheduler.GetRefPtr());
439
440 EXPECT_CALL(*mockAppScheduler, ScheduleLaunchApplication(_, _)).Times(1);
441 EXPECT_CALL(*mockAppScheduler, ScheduleLaunchAbility(_, _, _)).Times(1);
442
443 serviceInner_->AttachApplication(NEW_PID, client);
444 EXPECT_EQ(AbilityState::ABILITY_STATE_READY, abilityRecord->GetState());
445 EXPECT_EQ(ApplicationState::APP_STATE_READY, appRecord->GetState());
446 }
447
448 /*
449 * Feature: AMS
450 * Function: AppLifeCycle
451 * SubFunction: Schedule
452 * FunctionPoints: LoadAbility
453 * CaseDescription: Load ability when ability is not created but application is create.
454 */
455 HWTEST_F(AmsAppLifeCycleTest, Schedule_003, TestSize.Level1)
456 {
457 TestApplicationPreRecord testAppRecord = PrepareLoadTestAbilityAndApp(ApplicationState::APP_STATE_CREATE);
458
459 auto newAbilityRecord = AddNewAbility(testAppRecord.appRecord_, "1");
460 EXPECT_EQ(AbilityState::ABILITY_STATE_CREATE, newAbilityRecord->GetState());
461 EXPECT_EQ(ApplicationState::APP_STATE_CREATE, testAppRecord.appRecord_->GetState());
462 }
463
464 /*
465 * Feature: AMS
466 * Function: AppLifeCycle
467 * SubFunction: Schedule
468 * FunctionPoints: LoadAbility
469 * CaseDescription: Load ability when ability is not created but application is ready.
470 */
471 HWTEST_F(AmsAppLifeCycleTest, Schedule_004, TestSize.Level1)
472 {
473 TestApplicationPreRecord testAppRecord = PrepareLoadTestAbilityAndApp(ApplicationState::APP_STATE_READY);
474 testAppRecord.appRecord_->LaunchPendingAbilities();
475 EXPECT_CALL(*(testAppRecord.mockAppScheduler_), ScheduleLaunchAbility(_, _, _)).Times(1);
476 auto newAbilityRecord = AddNewAbility(testAppRecord.appRecord_, "1");
477 EXPECT_EQ(AbilityState::ABILITY_STATE_READY, newAbilityRecord->GetState());
478 EXPECT_EQ(ApplicationState::APP_STATE_READY, testAppRecord.appRecord_->GetState());
479 }
480
481 /*
482 * Feature: AMS
483 * Function: AppLifeCycle
484 * SubFunction: Schedule
485 * FunctionPoints: LoadAbility
486 * CaseDescription: Load ability when ability is not created but application is foreground.
487 */
488 HWTEST_F(AmsAppLifeCycleTest, Schedule_005, TestSize.Level1)
489 {
490 TestApplicationPreRecord testAppRecord = PrepareLoadTestAbilityAndApp(ApplicationState::APP_STATE_FOREGROUND);
491 testAppRecord.appRecord_->LaunchPendingAbilities();
492 EXPECT_CALL(*(testAppRecord.mockAppScheduler_), ScheduleLaunchAbility(_, _, _)).Times(1);
493 auto newAbilityRecord = AddNewAbility(testAppRecord.appRecord_, "1");
494 EXPECT_EQ(AbilityState::ABILITY_STATE_READY, newAbilityRecord->GetState());
495 EXPECT_EQ(ApplicationState::APP_STATE_FOREGROUND, testAppRecord.appRecord_->GetState());
496 }
497
498 /*
499 * Feature: AMS
500 * Function: AppLifeCycle
501 * SubFunction: Schedule
502 * FunctionPoints: LoadAbility
503 * CaseDescription: Load ability when ability is not created but application is background.
504 */
505 HWTEST_F(AmsAppLifeCycleTest, Schedule_006, TestSize.Level1)
506 {
507 TestApplicationPreRecord testAppRecord = PrepareLoadTestAbilityAndApp(ApplicationState::APP_STATE_BACKGROUND);
508 testAppRecord.appRecord_->LaunchPendingAbilities();
509 EXPECT_CALL(*(testAppRecord.mockAppScheduler_), ScheduleLaunchAbility(_, _, _)).Times(1);
510 auto newAbilityRecord = AddNewAbility(testAppRecord.appRecord_, "1");
511 EXPECT_EQ(AbilityState::ABILITY_STATE_READY, newAbilityRecord->GetState());
512 EXPECT_EQ(ApplicationState::APP_STATE_BACKGROUND, testAppRecord.appRecord_->GetState());
513 }
514
515 /*
516 * Feature: AMS
517 * Function: AppLifeCycle
518 * SubFunction: Schedule
519 * FunctionPoints: Update ability state to foreground
520 * CaseDescription: Update ability state to foreground when ability is not loaded.
521 */
522 HWTEST_F(AmsAppLifeCycleTest, Schedule_008, TestSize.Level1)
523 {
524 TestUpdateAbilityStateWhenAbilityIsUnLoaded(AbilityState::ABILITY_STATE_FOREGROUND);
525 }
526
527 /*
528 * Feature: AMS
529 * Function: AppLifeCycle
530 * SubFunction: Schedule
531 * FunctionPoints: Update ability state to foreground
532 * CaseDescription: Update ability state to foreground when ability and app is create.
533 */
534 HWTEST_F(AmsAppLifeCycleTest, Schedule_009, TestSize.Level1)
535 {
536 TestUpdateAbilityStateWhenAbilityIsCreate(
537 AbilityState::ABILITY_STATE_FOREGROUND, ApplicationState::APP_STATE_CREATE);
538 }
539
540 /*
541 * Feature: AMS
542 * Function: AppLifeCycle
543 * SubFunction: Schedule
544 * FunctionPoints: Update ability state to foreground
545 * CaseDescription: Update ability state to foreground when ability is create but app is ready.
546 */
547 HWTEST_F(AmsAppLifeCycleTest, Schedule_010, TestSize.Level1)
548 {
549 TestUpdateAbilityStateWhenAbilityIsCreate(
550 AbilityState::ABILITY_STATE_FOREGROUND, ApplicationState::APP_STATE_READY);
551 }
552
553 /*
554 * Feature: AMS
555 * Function: AppLifeCycle
556 * SubFunction: Schedule
557 * FunctionPoints: Update ability state to foreground
558 * CaseDescription: Update ability state to foreground when ability is create but app is foreground.
559 */
560 HWTEST_F(AmsAppLifeCycleTest, Schedule_011, TestSize.Level1)
561 {
562 TestUpdateAbilityStateWhenAbilityIsCreate(
563 AbilityState::ABILITY_STATE_FOREGROUND, ApplicationState::APP_STATE_FOREGROUND);
564 }
565
566 /*
567 * Feature: AMS
568 * Function: AppLifeCycle
569 * SubFunction: Schedule
570 * FunctionPoints: Update ability state to foreground
571 * CaseDescription: Update ability state to foreground when ability is create but app is background.
572 */
573 HWTEST_F(AmsAppLifeCycleTest, Schedule_012, TestSize.Level1)
574 {
575 TestUpdateAbilityStateWhenAbilityIsCreate(
576 AbilityState::ABILITY_STATE_FOREGROUND, ApplicationState::APP_STATE_BACKGROUND);
577 }
578
579 /*
580 * Feature: AMS
581 * Function: AppLifeCycle
582 * SubFunction: Schedule
583 * FunctionPoints: Update ability state to foreground
584 * CaseDescription: Update ability state to foreground when ability and app is ready.
585 */
586 HWTEST_F(AmsAppLifeCycleTest, Schedule_013, TestSize.Level1)
587 {
588 auto testAppPreRecord =
589 CreateTestApplicationRecord(AbilityState::ABILITY_STATE_READY, ApplicationState::APP_STATE_READY);
590
591 EXPECT_CALL(*(testAppPreRecord.mockAppScheduler_), ScheduleForegroundApplication()).Times(1);
592 serviceInner_->UpdateAbilityState(GetMockToken(), AbilityState::ABILITY_STATE_FOREGROUND);
593 serviceInner_->ApplicationForegrounded(testAppPreRecord.appRecord_->GetRecordId());
594 EXPECT_EQ(AbilityState::ABILITY_STATE_FOREGROUND, testAppPreRecord.firstAbilityRecord_->GetState());
595 EXPECT_EQ(ApplicationState::APP_STATE_FOREGROUND, testAppPreRecord.appRecord_->GetState());
596 }
597
598 /*
599 * Feature: AMS
600 * Function: AppLifeCycle
601 * SubFunction: Schedule
602 * FunctionPoints: Update ability state to foreground
603 * CaseDescription: Update ability state to foreground when ability is ready and app is foreground.
604 */
605 HWTEST_F(AmsAppLifeCycleTest, Schedule_014, TestSize.Level1)
606 {
607 auto testAppPreRecord =
608 CreateTestApplicationRecord(AbilityState::ABILITY_STATE_READY, ApplicationState::APP_STATE_FOREGROUND);
609
610 serviceInner_->UpdateAbilityState(GetMockToken(), AbilityState::ABILITY_STATE_FOREGROUND);
611 EXPECT_EQ(AbilityState::ABILITY_STATE_FOREGROUND, testAppPreRecord.firstAbilityRecord_->GetState());
612 EXPECT_EQ(ApplicationState::APP_STATE_FOREGROUND, testAppPreRecord.appRecord_->GetState());
613 }
614
615 /*
616 * Feature: AMS
617 * Function: AppLifeCycle
618 * SubFunction: Schedule
619 * FunctionPoints: Update ability state to foreground
620 * CaseDescription: Update ability state to foreground when ability is ready and app is background.
621 */
622 HWTEST_F(AmsAppLifeCycleTest, Schedule_015, TestSize.Level1)
623 {
624 auto testAppPreRecord =
625 CreateTestApplicationRecord(AbilityState::ABILITY_STATE_READY, ApplicationState::APP_STATE_BACKGROUND);
626
627 EXPECT_CALL(*(testAppPreRecord.mockAppScheduler_), ScheduleForegroundApplication()).Times(1);
628 serviceInner_->UpdateAbilityState(GetMockToken(), AbilityState::ABILITY_STATE_FOREGROUND);
629 serviceInner_->ApplicationForegrounded(testAppPreRecord.appRecord_->GetRecordId());
630 EXPECT_EQ(AbilityState::ABILITY_STATE_FOREGROUND, testAppPreRecord.firstAbilityRecord_->GetState());
631 EXPECT_EQ(ApplicationState::APP_STATE_FOREGROUND, testAppPreRecord.appRecord_->GetState());
632 }
633
634 /*
635 * Feature: AMS
636 * Function: AppLifeCycle
637 * SubFunction: Schedule
638 * FunctionPoints: Update ability state to foreground
639 * CaseDescription: Update ability state to foreground when ability and app is foreground.
640 */
641 HWTEST_F(AmsAppLifeCycleTest, Schedule_016, TestSize.Level1)
642 {
643 auto testAppPreRecord =
644 CreateTestApplicationRecord(AbilityState::ABILITY_STATE_FOREGROUND, ApplicationState::APP_STATE_FOREGROUND);
645
646 serviceInner_->UpdateAbilityState(GetMockToken(), AbilityState::ABILITY_STATE_FOREGROUND);
647 EXPECT_EQ(AbilityState::ABILITY_STATE_FOREGROUND, testAppPreRecord.firstAbilityRecord_->GetState());
648 EXPECT_EQ(ApplicationState::APP_STATE_FOREGROUND, testAppPreRecord.appRecord_->GetState());
649 }
650
651 /*
652 * Feature: AMS
653 * Function: AppLifeCycle
654 * SubFunction: Schedule
655 * FunctionPoints: Update ability state to foreground
656 * CaseDescription: Update ability state to foreground when ability is background and app is foreground.
657 */
658 HWTEST_F(AmsAppLifeCycleTest, Schedule_017, TestSize.Level1)
659 {
660 auto testAppPreRecord =
661 CreateTestApplicationRecord(AbilityState::ABILITY_STATE_BACKGROUND, ApplicationState::APP_STATE_FOREGROUND);
662
663 serviceInner_->UpdateAbilityState(GetMockToken(), AbilityState::ABILITY_STATE_FOREGROUND);
664 EXPECT_EQ(AbilityState::ABILITY_STATE_FOREGROUND, testAppPreRecord.firstAbilityRecord_->GetState());
665 EXPECT_EQ(ApplicationState::APP_STATE_FOREGROUND, testAppPreRecord.appRecord_->GetState());
666 }
667
668 /*
669 * Feature: AMS
670 * Function: AppLifeCycle
671 * SubFunction: Schedule
672 * FunctionPoints: Update ability state to foreground
673 * CaseDescription: Update ability state to foreground when ability and app is background.
674 */
675 HWTEST_F(AmsAppLifeCycleTest, Schedule_018, TestSize.Level1)
676 {
677 auto testAppPreRecord =
678 CreateTestApplicationRecord(AbilityState::ABILITY_STATE_BACKGROUND, ApplicationState::APP_STATE_BACKGROUND);
679
680 EXPECT_CALL(*(testAppPreRecord.mockAppScheduler_), ScheduleForegroundApplication()).Times(1);
681 serviceInner_->UpdateAbilityState(GetMockToken(), AbilityState::ABILITY_STATE_FOREGROUND);
682 serviceInner_->ApplicationForegrounded(testAppPreRecord.appRecord_->GetRecordId());
683 EXPECT_EQ(AbilityState::ABILITY_STATE_FOREGROUND, testAppPreRecord.firstAbilityRecord_->GetState());
684 EXPECT_EQ(ApplicationState::APP_STATE_FOREGROUND, testAppPreRecord.appRecord_->GetState());
685 }
686
687 /*
688 * Feature: AMS
689 * Function: AppLifeCycle
690 * SubFunction: Schedule
691 * FunctionPoints: Update ability state to background
692 * CaseDescription: Update ability state to background when ability is not loaded.
693 */
694 HWTEST_F(AmsAppLifeCycleTest, Schedule_020, TestSize.Level1)
695 {
696 TestUpdateAbilityStateWhenAbilityIsUnLoaded(AbilityState::ABILITY_STATE_BACKGROUND);
697 }
698
699 /*
700 * Feature: AMS
701 * Function: AppLifeCycle
702 * SubFunction: Schedule
703 * FunctionPoints: Update ability state to background
704 * CaseDescription: Update ability state to background when ability and app is create.
705 */
706 HWTEST_F(AmsAppLifeCycleTest, Schedule_021, TestSize.Level1)
707 {
708 TestUpdateAbilityStateWhenAbilityIsCreate(
709 AbilityState::ABILITY_STATE_BACKGROUND, ApplicationState::APP_STATE_CREATE);
710 }
711
712 /*
713 * Feature: AMS
714 * Function: AppLifeCycle
715 * SubFunction: Schedule
716 * FunctionPoints: Update ability state to background
717 * CaseDescription: Update ability state to background when ability is create but app is ready.
718 */
719 HWTEST_F(AmsAppLifeCycleTest, Schedule_022, TestSize.Level1)
720 {
721 TestUpdateAbilityStateWhenAbilityIsCreate(
722 AbilityState::ABILITY_STATE_BACKGROUND, ApplicationState::APP_STATE_READY);
723 }
724
725 /*
726 * Feature: AMS
727 * Function: AppLifeCycle
728 * SubFunction: Schedule
729 * FunctionPoints: Update ability state to background
730 * CaseDescription: Update ability state to background when ability is create but app is foreground.
731 */
732 HWTEST_F(AmsAppLifeCycleTest, Schedule_023, TestSize.Level1)
733 {
734 TestUpdateAbilityStateWhenAbilityIsCreate(
735 AbilityState::ABILITY_STATE_BACKGROUND, ApplicationState::APP_STATE_FOREGROUND);
736 }
737
738 /*
739 * Feature: AMS
740 * Function: AppLifeCycle
741 * SubFunction: Schedule
742 * FunctionPoints: Update ability state to background
743 * CaseDescription: Update ability state to background when ability is create but app is background.
744 */
745 HWTEST_F(AmsAppLifeCycleTest, Schedule_024, TestSize.Level1)
746 {
747 TestUpdateAbilityStateWhenAbilityIsCreate(
748 AbilityState::ABILITY_STATE_BACKGROUND, ApplicationState::APP_STATE_BACKGROUND);
749 }
750
751 /*
752 * Feature: AMS
753 * Function: AppLifeCycle
754 * SubFunction: Schedule
755 * FunctionPoints: Update ability state to background
756 * CaseDescription: Update ability state to background when ability and app is ready.
757 */
758 HWTEST_F(AmsAppLifeCycleTest, Schedule_025, TestSize.Level1)
759 {
760 TestUpdateAbilityStateToBackgroundWhenAbilityIsReady(ApplicationState::APP_STATE_READY);
761 }
762
763 /*
764 * Feature: AMS
765 * Function: AppLifeCycle
766 * SubFunction: Schedule
767 * FunctionPoints: Update ability state to background
768 * CaseDescription: Update ability state to background when ability is ready and app is foreground.
769 */
770 HWTEST_F(AmsAppLifeCycleTest, Schedule_026, TestSize.Level1)
771 {
772 TestUpdateAbilityStateToBackgroundWhenAbilityIsReady(ApplicationState::APP_STATE_FOREGROUND);
773 }
774
775 /*
776 * Feature: AMS
777 * Function: AppLifeCycle
778 * SubFunction: Schedule
779 * FunctionPoints: Update ability state to background
780 * CaseDescription: Update ability state to background when ability is ready and app is background.
781 */
782 HWTEST_F(AmsAppLifeCycleTest, Schedule_027, TestSize.Level1)
783 {
784 TestUpdateAbilityStateToBackgroundWhenAbilityIsReady(ApplicationState::APP_STATE_BACKGROUND);
785 }
786
787 /*
788 * Feature: AMS
789 * Function: AppLifeCycle
790 * SubFunction: Schedule
791 * FunctionPoints: Update ability state to background
792 * CaseDescription: Update ability state to background when ability and app is foreground.
793 */
794 HWTEST_F(AmsAppLifeCycleTest, Schedule_028, TestSize.Level1)
795 {
796 auto testAppPreRecord =
797 CreateTestApplicationRecord(AbilityState::ABILITY_STATE_FOREGROUND, ApplicationState::APP_STATE_FOREGROUND);
798
799 EXPECT_CALL(*(testAppPreRecord.mockAppScheduler_), ScheduleBackgroundApplication()).Times(1);
800 serviceInner_->UpdateAbilityState(GetMockToken(), AbilityState::ABILITY_STATE_BACKGROUND);
801 serviceInner_->ApplicationBackgrounded(testAppPreRecord.appRecord_->GetRecordId());
802 EXPECT_EQ(AbilityState::ABILITY_STATE_BACKGROUND, testAppPreRecord.firstAbilityRecord_->GetState());
803 EXPECT_EQ(ApplicationState::APP_STATE_BACKGROUND, testAppPreRecord.appRecord_->GetState());
804 }
805
806 /*
807 * Feature: AMS
808 * Function: AppLifeCycle
809 * SubFunction: Schedule
810 * FunctionPoints: Update ability state to background
811 * CaseDescription: Update ability state to background when multiple ability.
812 */
813 HWTEST_F(AmsAppLifeCycleTest, Schedule_029, TestSize.Level1)
814 {
815 auto testAppPreRecord =
816 CreateTestApplicationRecord(AbilityState::ABILITY_STATE_FOREGROUND, ApplicationState::APP_STATE_FOREGROUND);
817 auto newAbilityInfo = GetAbilityInfoByIndex("1");
818 sptr<IRemoteObject> newToken = new MockAbilityToken();
819
820 auto appInfo = GetApplication();
821 HapModuleInfo hapModuleInfo;
822 hapModuleInfo.moduleName = "module789";
823 testAppPreRecord.appRecord_->AddModule(appInfo, newAbilityInfo, newToken, hapModuleInfo, nullptr);
824 auto moduleRecord =
825 testAppPreRecord.appRecord_->GetModuleRecordByModuleName(appInfo->bundleName, hapModuleInfo.moduleName);
826 EXPECT_TRUE(moduleRecord);
827 auto newAbilityRecord = moduleRecord->GetAbilityRunningRecordByToken(newToken);
828 newAbilityRecord->SetState(AbilityState::ABILITY_STATE_FOREGROUND);
829 EXPECT_NE(newAbilityRecord, nullptr);
830
831 serviceInner_->UpdateAbilityState(GetMockToken(), AbilityState::ABILITY_STATE_BACKGROUND);
832 EXPECT_EQ(AbilityState::ABILITY_STATE_BACKGROUND, testAppPreRecord.firstAbilityRecord_->GetState());
833 EXPECT_EQ(ApplicationState::APP_STATE_FOREGROUND, testAppPreRecord.appRecord_->GetState());
834 }
835
836 /*
837 * Feature: AMS
838 * Function: AppLifeCycle
839 * SubFunction: Schedule
840 * FunctionPoints: Update ability state to background
841 * CaseDescription: Update ability state to background when ability is background and app is foreground.
842 */
843 HWTEST_F(AmsAppLifeCycleTest, Schedule_030, TestSize.Level1)
844 {
845 TestUpdateAbilityStateToBackgroundWhenAbilityIsBackground(ApplicationState::APP_STATE_FOREGROUND);
846 }
847
848 /*
849 * Feature: AMS
850 * Function: AppLifeCycle
851 * SubFunction: Schedule
852 * FunctionPoints: Update ability state to background
853 * CaseDescription: Update ability state to background when ability is background and app is background.
854 */
855 HWTEST_F(AmsAppLifeCycleTest, Schedule_031, TestSize.Level1)
856 {
857 TestUpdateAbilityStateToBackgroundWhenAbilityIsBackground(ApplicationState::APP_STATE_BACKGROUND);
858 }
859
860 /*
861 * Feature: AMS
862 * Function: AppLifeCycle
863 * SubFunction: Schedule
864 * FunctionPoints: Terminate ability
865 * CaseDescription: Terminate ability when ability is unload.
866 */
867 HWTEST_F(AmsAppLifeCycleTest, Schedule_033, TestSize.Level1)
868 {
869 serviceInner_->TerminateAbility(GetMockToken());
870 auto appRecord = serviceInner_->GetAppRunningRecordByAbilityToken(GetMockToken());
871 EXPECT_EQ(appRecord, nullptr);
872 }
873
874 /*
875 * Feature: AMS
876 * Function: AppLifeCycle
877 * SubFunction: Schedule
878 * FunctionPoints: Terminate ability
879 * CaseDescription: Terminate ability when ability and app is create.
880 */
881 HWTEST_F(AmsAppLifeCycleTest, Schedule_034, TestSize.Level1)
882 {
883 TestTerminateAbilityWhenAbilityIsNotBackground(
884 AbilityState::ABILITY_STATE_CREATE, ApplicationState::APP_STATE_CREATE);
885 }
886
887 /*
888 * Feature: AMS
889 * Function: AppLifeCycle
890 * SubFunction: Schedule
891 * FunctionPoints: Terminate ability
892 * CaseDescription: Terminate ability when ability is create and app is ready.
893 */
894 HWTEST_F(AmsAppLifeCycleTest, Schedule_035, TestSize.Level1)
895 {
896 TestTerminateAbilityWhenAbilityIsNotBackground(
897 AbilityState::ABILITY_STATE_CREATE, ApplicationState::APP_STATE_READY);
898 }
899
900 /*
901 * Feature: AMS
902 * Function: AppLifeCycle
903 * SubFunction: Schedule
904 * FunctionPoints: Terminate ability
905 * CaseDescription: Terminate ability when ability is create and app is foreground.
906 */
907 HWTEST_F(AmsAppLifeCycleTest, Schedule_036, TestSize.Level1)
908 {
909 TestTerminateAbilityWhenAbilityIsNotBackground(
910 AbilityState::ABILITY_STATE_CREATE, ApplicationState::APP_STATE_FOREGROUND);
911 }
912
913 /*
914 * Feature: AMS
915 * Function: AppLifeCycle
916 * SubFunction: Schedule
917 * FunctionPoints: Terminate ability
918 * CaseDescription: Terminate ability when ability is create and app is background.
919 */
920 HWTEST_F(AmsAppLifeCycleTest, Schedule_037, TestSize.Level1)
921 {
922 TestTerminateAbilityWhenAbilityIsNotBackground(
923 AbilityState::ABILITY_STATE_CREATE, ApplicationState::APP_STATE_BACKGROUND);
924 }
925
926 /*
927 * Feature: AMS
928 * Function: AppLifeCycle
929 * SubFunction: Schedule
930 * FunctionPoints: Terminate ability
931 * CaseDescription: Terminate ability when ability and app is ready.
932 */
933 HWTEST_F(AmsAppLifeCycleTest, Schedule_038, TestSize.Level1)
934 {
935 TestTerminateAbilityWhenAbilityIsNotBackground(
936 AbilityState::ABILITY_STATE_READY, ApplicationState::APP_STATE_READY);
937 }
938
939 /*
940 * Feature: AMS
941 * Function: AppLifeCycle
942 * SubFunction: Schedule
943 * FunctionPoints: Terminate ability
944 * CaseDescription: Terminate ability when ability is ready and app is foreground.
945 */
946 HWTEST_F(AmsAppLifeCycleTest, Schedule_039, TestSize.Level1)
947 {
948 TestTerminateAbilityWhenAbilityIsNotBackground(
949 AbilityState::ABILITY_STATE_READY, ApplicationState::APP_STATE_FOREGROUND);
950 }
951
952 /*
953 * Feature: AMS
954 * Function: AppLifeCycle
955 * SubFunction: Schedule
956 * FunctionPoints: Terminate ability
957 * CaseDescription: Terminate ability when ability is ready and app is background.
958 */
959 HWTEST_F(AmsAppLifeCycleTest, Schedule_040, TestSize.Level1)
960 {
961 TestTerminateAbilityWhenAbilityIsNotBackground(
962 AbilityState::ABILITY_STATE_READY, ApplicationState::APP_STATE_BACKGROUND);
963 }
964
965 /*
966 * Feature: AMS
967 * Function: AppLifeCycle
968 * SubFunction: Schedule
969 * FunctionPoints: Terminate ability
970 * CaseDescription: Terminate ability when ability and app is foreground.
971 */
972 HWTEST_F(AmsAppLifeCycleTest, Schedule_041, TestSize.Level1)
973 {
974 TestTerminateAbilityWhenAbilityIsNotBackground(
975 AbilityState::ABILITY_STATE_FOREGROUND, ApplicationState::APP_STATE_FOREGROUND);
976 }
977
978 /*
979 * Feature: AMS
980 * Function: AppLifeCycle
981 * SubFunction: Schedule
982 * FunctionPoints: Terminate ability
983 * CaseDescription: Terminate ability when ability is background and app is foreground.
984 */
985 HWTEST_F(AmsAppLifeCycleTest, Schedule_042, TestSize.Level1)
986 {
987 auto testAppRecord =
988 CreateTestApplicationRecord(AbilityState::ABILITY_STATE_FOREGROUND, ApplicationState::APP_STATE_FOREGROUND);
989 testAppRecord.appRecord_->LaunchPendingAbilities();
990 EXPECT_CALL(*(testAppRecord.mockAppScheduler_), ScheduleLaunchAbility(_, _, _)).Times(1);
991 auto newAbilityRecord = AddNewAbility(testAppRecord.appRecord_, "1", -1);
992 newAbilityRecord->SetState(AbilityState::ABILITY_STATE_BACKGROUND);
993
994 EXPECT_CALL(*(testAppRecord.mockAppScheduler_), ScheduleCleanAbility(_)).Times(1);
995 serviceInner_->TerminateAbility(newAbilityRecord->GetToken());
996 serviceInner_->AbilityTerminated(newAbilityRecord->GetToken());
997 auto abilityRecord = testAppRecord.appRecord_->GetAbilityRunningRecordByToken(newAbilityRecord->GetToken());
998 EXPECT_EQ(nullptr, abilityRecord);
999 EXPECT_EQ(ApplicationState::APP_STATE_FOREGROUND, testAppRecord.appRecord_->GetState());
1000 }
1001
1002 /*
1003 * Feature: AMS
1004 * Function: AppLifeCycle
1005 * SubFunction: Schedule
1006 * FunctionPoints: Terminate ability
1007 * CaseDescription: Terminate ability when ability and app is background.
1008 */
1009 HWTEST_F(AmsAppLifeCycleTest, Schedule_043, TestSize.Level1)
1010 {
1011 auto testAppRecord =
1012 CreateTestApplicationRecord(AbilityState::ABILITY_STATE_BACKGROUND, ApplicationState::APP_STATE_BACKGROUND);
1013 testAppRecord.appRecord_->LaunchPendingAbilities();
1014 EXPECT_CALL(*(testAppRecord.mockAppScheduler_), ScheduleCleanAbility(_)).Times(1);
1015 serviceInner_->TerminateAbility(GetMockToken());
1016 EXPECT_CALL(*(testAppRecord.mockAppScheduler_), ScheduleTerminateApplication()).Times(1);
1017 serviceInner_->AbilityTerminated(GetMockToken());
1018 auto abilityRecord = testAppRecord.appRecord_->GetAbilityRunningRecordByToken(GetMockToken());
1019 EXPECT_EQ(nullptr, abilityRecord);
1020
1021 serviceInner_->ApplicationTerminated(testAppRecord.appRecord_->GetRecordId());
1022 auto appInfo = GetApplication();
1023 BundleInfo bundleInfo;
1024 bundleInfo.appId = "com.ohos.test.helloworld_code123";
1025 auto appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(
1026 appInfo->name, appInfo->name, appInfo->uid, bundleInfo);
1027 EXPECT_EQ(nullptr, appRecord);
1028 }
1029
1030 /*
1031 * Feature: AMS
1032 * Function: AppLifeCycle
1033 * SubFunction: Schedule
1034 * FunctionPoints: Terminate ability
1035 * CaseDescription: Terminate ability when multiple abilities and app is background.
1036 */
1037 HWTEST_F(AmsAppLifeCycleTest, Schedule_044, TestSize.Level1)
1038 {
1039 auto testAppRecord =
1040 CreateTestApplicationRecord(AbilityState::ABILITY_STATE_BACKGROUND, ApplicationState::APP_STATE_BACKGROUND);
1041 testAppRecord.appRecord_->LaunchPendingAbilities();
1042 EXPECT_CALL(*(testAppRecord.mockAppScheduler_), ScheduleLaunchAbility(_, _, _)).Times(1);
1043 auto newAbilityRecord = AddNewAbility(testAppRecord.appRecord_, "1", -1);
1044 newAbilityRecord->SetState(AbilityState::ABILITY_STATE_BACKGROUND);
1045
1046 EXPECT_CALL(*(testAppRecord.mockAppScheduler_), ScheduleCleanAbility(_)).Times(1);
1047 serviceInner_->TerminateAbility(GetMockToken());
1048 serviceInner_->AbilityTerminated(GetMockToken());
1049 auto abilityRecord = testAppRecord.appRecord_->GetAbilityRunningRecordByToken(GetMockToken());
1050 EXPECT_EQ(nullptr, abilityRecord);
1051 EXPECT_EQ(ApplicationState::APP_STATE_BACKGROUND, testAppRecord.appRecord_->GetState());
1052 }
1053
1054 /*
1055 * Feature: AMS
1056 * Function: AppLifeCycle
1057 * SubFunction: Schedule
1058 * FunctionPoints: ApplicationForegrounded
1059 * CaseDescription: Verify application can not change to foreground if application is create.
1060 */
1061 HWTEST_F(AmsAppLifeCycleTest, Process_001, TestSize.Level1)
1062 {
1063 auto appRecord = CreateTestApplicationAndSetState(ApplicationState::APP_STATE_CREATE);
1064 int32_t appRecordId = appRecord->GetRecordId();
1065 EXPECT_TRUE(appRecordId > 0);
1066
1067 serviceInner_->ApplicationForegrounded(appRecordId);
1068 auto testAppRecord = serviceInner_->GetAppRunningRecordByAppRecordId(appRecordId);
1069 EXPECT_NE(nullptr, testAppRecord);
1070 EXPECT_EQ(ApplicationState::APP_STATE_CREATE, testAppRecord->GetState());
1071 }
1072
1073 /*
1074 * Feature: AMS
1075 * Function: AppLifeCycle
1076 * SubFunction: Schedule
1077 * FunctionPoints: ApplicationForegrounded
1078 * CaseDescription: Verify application can change to foreground if application is ready.
1079 */
1080 HWTEST_F(AmsAppLifeCycleTest, Process_002, TestSize.Level1)
1081 {
1082 auto appRecord = CreateTestApplicationAndSetState(ApplicationState::APP_STATE_READY);
1083 int32_t appRecordId = appRecord->GetRecordId();
1084 EXPECT_TRUE(appRecordId > 0);
1085
1086 serviceInner_->ApplicationForegrounded(appRecordId);
1087 auto testAppRecord = serviceInner_->GetAppRunningRecordByAppRecordId(appRecordId);
1088 EXPECT_NE(nullptr, testAppRecord);
1089 EXPECT_EQ(ApplicationState::APP_STATE_FOREGROUND, testAppRecord->GetState());
1090 }
1091
1092 /*
1093 * Feature: AMS
1094 * Function: AppLifeCycle
1095 * SubFunction: Schedule
1096 * FunctionPoints: ApplicationForegrounded
1097 * CaseDescription: Verify application can not change to foreground if application is foreground.
1098 */
1099 HWTEST_F(AmsAppLifeCycleTest, Process_003, TestSize.Level1)
1100 {
1101 auto appRecord = CreateTestApplicationAndSetState(ApplicationState::APP_STATE_FOREGROUND);
1102 int32_t appRecordId = appRecord->GetRecordId();
1103 EXPECT_TRUE(appRecordId > 0);
1104
1105 serviceInner_->ApplicationForegrounded(appRecordId);
1106 auto testAppRecord = serviceInner_->GetAppRunningRecordByAppRecordId(appRecordId);
1107 EXPECT_NE(nullptr, testAppRecord);
1108 EXPECT_EQ(ApplicationState::APP_STATE_FOREGROUND, testAppRecord->GetState());
1109 }
1110
1111 /*
1112 * Feature: AMS
1113 * Function: AppLifeCycle
1114 * SubFunction: Schedule
1115 * FunctionPoints: ApplicationForegrounded
1116 * CaseDescription: Verify application can change to foreground if application is background.
1117 */
1118 HWTEST_F(AmsAppLifeCycleTest, Process_004, TestSize.Level1)
1119 {
1120 auto appRecord = CreateTestApplicationAndSetState(ApplicationState::APP_STATE_BACKGROUND);
1121 int32_t appRecordId = appRecord->GetRecordId();
1122 EXPECT_TRUE(appRecordId > 0);
1123
1124 serviceInner_->ApplicationForegrounded(appRecordId);
1125 auto testAppRecord = serviceInner_->GetAppRunningRecordByAppRecordId(appRecordId);
1126 EXPECT_NE(nullptr, testAppRecord);
1127 EXPECT_EQ(ApplicationState::APP_STATE_FOREGROUND, testAppRecord->GetState());
1128 }
1129
1130 /*
1131 * Feature: AMS
1132 * Function: AppLifeCycle
1133 * SubFunction: Schedule
1134 * FunctionPoints: ApplicationForegrounded
1135 * CaseDescription: Verify application can change to foregrounded if application is not exist.
1136 */
1137 HWTEST_F(AmsAppLifeCycleTest, Process_005, TestSize.Level1)
1138 {
1139 int32_t appRecordId = AppRecordId::Create();
1140
1141 serviceInner_->ApplicationForegrounded(appRecordId);
1142 auto testAppRecord = serviceInner_->GetAppRunningRecordByAppRecordId(appRecordId);
1143 EXPECT_EQ(nullptr, testAppRecord);
1144 }
1145
1146 /*
1147 * Feature: AMS
1148 * Function: AppLifeCycle
1149 * SubFunction: Schedule
1150 * FunctionPoints: ApplicationBackgrounded
1151 * CaseDescription: Verify application can not change to background if application is create.
1152 */
1153 HWTEST_F(AmsAppLifeCycleTest, Process_006, TestSize.Level1)
1154 {
1155 auto appRecord = CreateTestApplicationAndSetState(ApplicationState::APP_STATE_CREATE);
1156 int32_t appRecordId = appRecord->GetRecordId();
1157 EXPECT_TRUE(appRecordId > 0);
1158
1159 serviceInner_->ApplicationBackgrounded(appRecordId);
1160 auto testAppRecord = serviceInner_->GetAppRunningRecordByAppRecordId(appRecordId);
1161 EXPECT_NE(nullptr, testAppRecord);
1162 EXPECT_EQ(ApplicationState::APP_STATE_CREATE, testAppRecord->GetState());
1163 }
1164
1165 /*
1166 * Feature: AMS
1167 * Function: AppLifeCycle
1168 * SubFunction: Schedule
1169 * FunctionPoints: ApplicationBackgrounded
1170 * CaseDescription: Verify application can change to background if application is foreground.
1171 */
1172 HWTEST_F(AmsAppLifeCycleTest, Process_007, TestSize.Level1)
1173 {
1174 auto appRecord = CreateTestApplicationAndSetState(ApplicationState::APP_STATE_FOREGROUND);
1175 int32_t appRecordId = appRecord->GetRecordId();
1176 EXPECT_TRUE(appRecordId > 0);
1177
1178 serviceInner_->ApplicationBackgrounded(appRecordId);
1179 auto testAppRecord = serviceInner_->GetAppRunningRecordByAppRecordId(appRecordId);
1180 EXPECT_NE(nullptr, testAppRecord);
1181 EXPECT_EQ(ApplicationState::APP_STATE_BACKGROUND, testAppRecord->GetState());
1182 }
1183
1184 /*
1185 * Feature: AMS
1186 * Function: AppLifeCycle
1187 * SubFunction: Schedule
1188 * FunctionPoints: ApplicationBackgrounded
1189 * CaseDescription: Verify application can not change to background if application is ready.
1190 */
1191 HWTEST_F(AmsAppLifeCycleTest, Process_008, TestSize.Level1)
1192 {
1193 auto appRecord = CreateTestApplicationAndSetState(ApplicationState::APP_STATE_READY);
1194 int32_t appRecordId = appRecord->GetRecordId();
1195 EXPECT_TRUE(appRecordId > 0);
1196
1197 serviceInner_->ApplicationBackgrounded(appRecord->GetRecordId());
1198 auto testAppRecord = serviceInner_->GetAppRunningRecordByAppRecordId(appRecord->GetRecordId());
1199 EXPECT_NE(nullptr, testAppRecord);
1200 EXPECT_EQ(ApplicationState::APP_STATE_READY, testAppRecord->GetState());
1201 }
1202
1203 /*
1204 * Feature: AMS
1205 * Function: AppLifeCycle
1206 * SubFunction: Schedule
1207 * FunctionPoints: ApplicationBackgrounded
1208 * CaseDescription: Verify application can not change to background if application is not exist.
1209 */
1210 HWTEST_F(AmsAppLifeCycleTest, Process_009, TestSize.Level1)
1211 {
1212 int32_t appRecordId = AppRecordId::Create();
1213
1214 serviceInner_->ApplicationBackgrounded(appRecordId);
1215 auto testAppRecord = serviceInner_->GetAppRunningRecordByAppRecordId(appRecordId);
1216 EXPECT_EQ(nullptr, testAppRecord);
1217 }
1218
1219 /*
1220 * Feature: AMS
1221 * Function: AppLifeCycle
1222 * SubFunction: Schedule
1223 * FunctionPoints: ApplicationTerminated
1224 * CaseDescription: Verify application can change to terminate if application is background.
1225 */
1226 HWTEST_F(AmsAppLifeCycleTest, Process_010, TestSize.Level1)
1227 {
1228 auto testAppRecord = PrepareLoadTestAbilityAndApp(ApplicationState::APP_STATE_BACKGROUND);
1229 serviceInner_->AbilityTerminated(GetMockToken());
1230 serviceInner_->ApplicationTerminated(testAppRecord.appRecord_->GetRecordId());
1231 auto appRecord = serviceInner_->GetAppRunningRecordByAppRecordId(testAppRecord.appRecord_->GetRecordId());
1232 if (appRecord) {
1233 EXPECT_FALSE(appRecord->IsLauncherApp());
1234 }
1235 }
1236
1237 /*
1238 * Feature: AMS
1239 * Function: AppLifeCycle
1240 * SubFunction: Schedule
1241 * FunctionPoints: ApplicationTerminated
1242 * CaseDescription: Verify application can not change to terminate if application is foreground.
1243 */
1244 HWTEST_F(AmsAppLifeCycleTest, Process_011, TestSize.Level1)
1245 {
1246 auto appRecord = CreateTestApplicationAndSetState(ApplicationState::APP_STATE_FOREGROUND);
1247 int32_t appRecordId = appRecord->GetRecordId();
1248 EXPECT_TRUE(appRecordId > 0);
1249
1250 serviceInner_->ApplicationTerminated(appRecordId);
1251 auto testAppRecord = serviceInner_->GetAppRunningRecordByAppRecordId(appRecordId);
1252 EXPECT_NE(nullptr, testAppRecord);
1253 EXPECT_EQ(ApplicationState::APP_STATE_FOREGROUND, testAppRecord->GetState());
1254 }
1255
1256 /*
1257 * Feature: AMS
1258 * Function: AppLifeCycle
1259 * SubFunction: Schedule
1260 * FunctionPoints: ApplicationTerminated
1261 * CaseDescription: Verify application can not change to foregrounded if application is not exist.
1262 */
1263 HWTEST_F(AmsAppLifeCycleTest, Process_012, TestSize.Level1)
1264 {
1265 int32_t appRecordId = AppRecordId::Create();
1266 serviceInner_->ApplicationTerminated(appRecordId);
1267 auto testAppRecord = serviceInner_->GetAppRunningRecordByAppRecordId(appRecordId);
1268 EXPECT_EQ(nullptr, testAppRecord);
1269 }
1270
1271 /*
1272 * Feature: AMS
1273 * Function: AppLifeCycle
1274 * SubFunction: Schedule
1275 * FunctionPoints: AppMgrService stop
1276 * CaseDescription: Verify if AppMgrService stop successfully.
1277 */
1278 HWTEST_F(AmsAppLifeCycleTest, Stop_001, TestSize.Level1)
1279 {
1280 const pid_t NEW_PID = 123;
1281 auto abilityInfo = GetAbilityInfoByIndex("0");
1282 auto appInfo = GetApplication();
1283 sptr<IRemoteObject> token = GetMockToken();
1284 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
1285 EXPECT_NE(appRecord, nullptr);
1286 auto abilityRecord = appRecord->GetAbilityRunningRecordByToken(token);
1287 EXPECT_NE(abilityRecord, nullptr);
1288 AbilityState abilityState = abilityRecord->GetState();
1289 ApplicationState appState = appRecord->GetState();
1290 serviceInner_->LoadAbility(token, nullptr, abilityInfo, appInfo, nullptr);
1291 EXPECT_EQ(abilityState, abilityRecord->GetState());
1292 EXPECT_EQ(appState, appRecord->GetState());
1293
1294 EXPECT_EQ(SpawnConnectionState::STATE_NOT_CONNECT, serviceInner_->QueryAppSpawnConnectionState());
1295 int32_t size = serviceInner_->appRunningManager_->GetAppRunningRecordMap().size();
1296 EXPECT_EQ(1, size);
1297 serviceInner_->OnStop();
1298 EXPECT_EQ(SpawnConnectionState::STATE_NOT_CONNECT, serviceInner_->QueryAppSpawnConnectionState());
1299 size = serviceInner_->appRunningManager_->GetAppRunningRecordMap().size();
1300 EXPECT_EQ(0, size);
1301 }
1302
1303 /*
1304 * Feature: AMS
1305 * Function: AppLifeCycle
1306 * SubFunction: Schedule
1307 * FunctionPoints: AppMgrService stop
1308 * CaseDescription: Verify if AppMgrService stop successfully.
1309 */
1310 HWTEST_F(AmsAppLifeCycleTest, Stop_002, TestSize.Level1)
1311 {
1312 std::shared_ptr<AppSpawnClient> appSpawnClient = std::make_shared<AppSpawnClient>();
1313 std::shared_ptr<MockAppSpawnSocket> socketMock = std::make_shared<MockAppSpawnSocket>();
1314 appSpawnClient->SetSocket(socketMock);
1315 EXPECT_EQ(SpawnConnectionState::STATE_NOT_CONNECT, appSpawnClient->QueryConnectionState());
1316 EXPECT_CALL(*socketMock, OpenAppSpawnConnection()).WillOnce(Return(ERR_OK));
1317 serviceInner_->SetAppSpawnClient(appSpawnClient);
1318 serviceInner_->OpenAppSpawnConnection();
1319 EXPECT_EQ(SpawnConnectionState::STATE_CONNECTED, serviceInner_->QueryAppSpawnConnectionState());
1320 int32_t size = serviceInner_->appRunningManager_->GetAppRunningRecordMap().size();
1321 EXPECT_EQ(0, size);
1322
1323 EXPECT_CALL(*socketMock, CloseAppSpawnConnection()).Times(1);
1324 serviceInner_->OnStop();
1325 EXPECT_EQ(SpawnConnectionState::STATE_NOT_CONNECT, serviceInner_->QueryAppSpawnConnectionState());
1326 size = serviceInner_->appRunningManager_->GetAppRunningRecordMap().size();
1327 EXPECT_EQ(0, size);
1328 }
1329
1330 /*
1331 * Feature: AMS
1332 * Function: AppLifeCycle
1333 * SubFunction: Schedule
1334 * FunctionPoints: AppMgrService stop
1335 * CaseDescription: Verify if AppMgrService stop successfully.
1336 */
1337 HWTEST_F(AmsAppLifeCycleTest, Stop_003, TestSize.Level1)
1338 {
1339 const pid_t NEW_PID = 123;
1340 auto abilityInfo = GetAbilityInfoByIndex("0");
1341 auto appInfo = GetApplication();
1342 sptr<IRemoteObject> token = GetMockToken();
1343 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
1344 EXPECT_NE(appRecord, nullptr);
1345 auto abilityRecord = appRecord->GetAbilityRunningRecordByToken(token);
1346 EXPECT_NE(abilityRecord, nullptr);
1347 AbilityState abilityState = abilityRecord->GetState();
1348 ApplicationState appState = appRecord->GetState();
1349 serviceInner_->LoadAbility(token, nullptr, abilityInfo, appInfo, nullptr);
1350 EXPECT_EQ(abilityState, abilityRecord->GetState());
1351 EXPECT_EQ(appState, appRecord->GetState());
1352
1353 std::shared_ptr<AppSpawnClient> appSpawnClient = std::make_shared<AppSpawnClient>();
1354 std::shared_ptr<MockAppSpawnSocket> socketMock = std::make_shared<MockAppSpawnSocket>();
1355 appSpawnClient->SetSocket(socketMock);
1356 EXPECT_EQ(SpawnConnectionState::STATE_NOT_CONNECT, appSpawnClient->QueryConnectionState());
1357 EXPECT_CALL(*socketMock, OpenAppSpawnConnection()).WillOnce(Return(ERR_OK));
1358 serviceInner_->SetAppSpawnClient(appSpawnClient);
1359 serviceInner_->OpenAppSpawnConnection();
1360 EXPECT_EQ(SpawnConnectionState::STATE_CONNECTED, serviceInner_->QueryAppSpawnConnectionState());
1361 int32_t size = serviceInner_->appRunningManager_->GetAppRunningRecordMap().size();
1362 EXPECT_EQ(1, size);
1363
1364 EXPECT_CALL(*socketMock, CloseAppSpawnConnection()).Times(1);
1365 serviceInner_->OnStop();
1366 EXPECT_EQ(SpawnConnectionState::STATE_NOT_CONNECT, serviceInner_->QueryAppSpawnConnectionState());
1367 size = serviceInner_->appRunningManager_->GetAppRunningRecordMap().size();
1368 EXPECT_EQ(0, size);
1369 }
1370
1371 /*
1372 * Feature: AMS
1373 * Function: AppLifeCycle
1374 * SubFunction: Schedule
1375 * FunctionPoints: Kill application
1376 * CaseDescription: Verify if AppMgrService Kill by appname fail.
1377 */
1378 HWTEST_F(AmsAppLifeCycleTest, KillApplication_001, TestSize.Level1)
1379 {
1380 int result = serviceInner_->KillApplication("hwei.ss.bb");
1381 EXPECT_EQ(ERR_OK, result);
1382 }
1383
1384 /*
1385 * Feature: AMS
1386 * Function: AppLifeCycle
1387 * SubFunction: Schedule
1388 * FunctionPoints: Kill application
1389 */
1390 HWTEST_F(AmsAppLifeCycleTest, KillApplication_002, TestSize.Level1)
1391 {
1392 const pid_t NEW_PID = 123;
1393 auto abilityInfo = GetAbilityInfoByIndex("0");
1394 auto appInfo = GetApplication();
1395 sptr<IRemoteObject> token = GetMockToken();
1396
1397 std::shared_ptr<MockAppSpawnClient> mockClientPtr = std::make_shared<MockAppSpawnClient>();
1398 EXPECT_CALL(*mockClientPtr, StartProcess(_, _)).Times(1).WillOnce(DoAll(SetArgReferee<1>(NEW_PID), Return(ERR_OK)));
1399
1400 serviceInner_->SetAppSpawnClient(mockClientPtr);
1401
1402 serviceInner_->LoadAbility(token, nullptr, abilityInfo, appInfo, nullptr);
1403 BundleInfo bundleInfo;
1404 bundleInfo.appId = "com.ohos.test.helloworld_code123";
1405 auto appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(
1406 appInfo->name, appInfo->name, appInfo->uid, bundleInfo);
1407 EXPECT_EQ(appRecord->GetPriorityObject()->GetPid(), NEW_PID);
1408
1409 pid_t pid = fork();
1410 if (pid > 0) {
1411 appRecord->GetPriorityObject()->SetPid(pid);
1412 }
1413
1414 sptr<MockAppScheduler> mockAppScheduler = new MockAppScheduler();
1415 sptr<IAppScheduler> client = iface_cast<IAppScheduler>(mockAppScheduler.GetRefPtr());
1416 appRecord->SetApplicationClient(client);
1417 EXPECT_CALL(*mockAppScheduler, ScheduleProcessSecurityExit()).Times(1);
1418
1419 int ret = serviceInner_->KillApplication(abilityInfo->applicationName);
1420 EXPECT_EQ(ERR_OK, ret);
1421 }
1422
1423 /*
1424 * Feature: AMS
1425 * Function: AppLifeCycle
1426 * SubFunction: Schedule
1427 * FunctionPoints: Kill application
1428 * CaseDescription: Verify if AppMgrService Kill by pid successfully.
1429 */
1430 HWTEST_F(AmsAppLifeCycleTest, KillProcessByPid001, TestSize.Level1)
1431 {
1432 pid_t pid = fork();
1433
1434 if (pid > 0) {
1435 int32_t ret = serviceInner_->KillProcessByPid(pid);
1436 EXPECT_EQ(ERR_OK, ret);
1437 }
1438
1439 if (pid == 0) {
1440 int32_t ret = serviceInner_->KillProcessByPid(pid);
1441 EXPECT_EQ(-1, ret);
1442 }
1443 }
1444
1445 /*
1446 * Feature: AMS
1447 * Function: AppLifeCycle
1448 * SubFunction: Schedule
1449 * FunctionPoints: Kill application
1450 * CaseDescription: Verify if AppMgrService Kill by pid fail.
1451 */
1452 HWTEST_F(AmsAppLifeCycleTest, KillProcessByPid002, TestSize.Level1)
1453 {
1454 int32_t ret = serviceInner_->KillProcessByPid(-1);
1455 EXPECT_EQ(-1, ret);
1456 }
1457
1458 /*
1459 * Feature: AMS
1460 * Function: AppLifeCycle
1461 * SubFunction: Schedule
1462 * FunctionPoints: Register App State Callback
1463 * CaseDescription: Verify if AppMgrService Register Callback.
1464 */
1465 HWTEST_F(AmsAppLifeCycleTest, Callback001, TestSize.Level1)
1466 {
1467 sptr<MockAppStateCallback> mockCallback(new MockAppStateCallback());
1468 sptr<IAppStateCallback> callback = iface_cast<IAppStateCallback>(mockCallback);
1469 serviceInner_->RegisterAppStateCallback(callback);
1470
1471 EXPECT_CALL(*mockCallback, OnAppStateChanged(_)).Times(2);
1472
1473 const pid_t NEW_PID = 123;
1474 auto abilityInfo = GetAbilityInfoByIndex("0");
1475 auto appInfo = GetApplication();
1476 sptr<IRemoteObject> token = GetMockToken();
1477 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
1478 EXPECT_NE(appRecord, nullptr);
1479 serviceInner_->OnAppStateChanged(appRecord, ApplicationState::APP_STATE_READY);
1480 }
1481
1482 /*
1483 * Feature: AMS
1484 * Function: AppLifeCycle
1485 * SubFunction: Schedule
1486 * FunctionPoints: Register App State Callback
1487 * CaseDescription: Verify if AppMgrService Register Callback.
1488 */
1489 HWTEST_F(AmsAppLifeCycleTest, Callback002, TestSize.Level1)
1490 {
1491 sptr<MockAppStateCallback> mockCallback(new MockAppStateCallback());
1492 sptr<IAppStateCallback> callback = iface_cast<IAppStateCallback>(mockCallback);
1493 serviceInner_->RegisterAppStateCallback(callback);
1494
1495 EXPECT_CALL(*mockCallback, OnAppStateChanged(_)).Times(0);
1496
1497 serviceInner_->OnAppStateChanged(nullptr, ApplicationState::APP_STATE_READY);
1498 }
1499
1500 /*
1501 * Feature: AMS
1502 * Function: AppLifeCycle
1503 * SubFunction: Schedule
1504 * FunctionPoints: Register Ability State Callback
1505 * CaseDescription: Verify if AppMgrService Register Callback.
1506 */
1507 HWTEST_F(AmsAppLifeCycleTest, Callback003, TestSize.Level1)
1508 {
1509 sptr<MockAppStateCallback> mockCallback(new MockAppStateCallback());
1510 sptr<IAppStateCallback> callback = iface_cast<IAppStateCallback>(mockCallback);
1511
1512 const pid_t NEW_PID = 123;
1513 auto abilityInfo = GetAbilityInfoByIndex("0");
1514 auto appInfo = GetApplication();
1515 sptr<IRemoteObject> token = GetMockToken();
1516 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
1517 EXPECT_NE(appRecord, nullptr);
1518 auto ability = appRecord->GetAbilityRunningRecordByToken(token);
1519 EXPECT_NE(ability, nullptr);
1520
1521 serviceInner_->RegisterAppStateCallback(callback);
1522 EXPECT_CALL(*mockCallback, OnAbilityRequestDone(_, _)).Times(1);
1523 serviceInner_->OnAbilityStateChanged(ability, AbilityState::ABILITY_STATE_READY);
1524 }
1525
1526 /*
1527 * Feature: AMS
1528 * Function: AppLifeCycle
1529 * SubFunction: Schedule
1530 * FunctionPoints: Register Ability State Callback
1531 * CaseDescription: Verify if AppMgrService Register Callback.
1532 */
1533 HWTEST_F(AmsAppLifeCycleTest, Callback004, TestSize.Level1)
1534 {
1535 sptr<MockAppStateCallback> mockCallback(new MockAppStateCallback());
1536 sptr<IAppStateCallback> callback = iface_cast<IAppStateCallback>(mockCallback);
1537 serviceInner_->RegisterAppStateCallback(callback);
1538 EXPECT_CALL(*mockCallback, OnAbilityRequestDone(_, _)).Times(0);
1539 serviceInner_->OnAbilityStateChanged(nullptr, AbilityState::ABILITY_STATE_READY);
1540 }
1541
1542 /*
1543 * Feature: AMS
1544 * Function: AppLifeCycle
1545 * SubFunction: Schedule
1546 * FunctionPoints: Register Ability State Changed
1547 * CaseDescription: Verify if AppMgrService Ability State Changed Callback.
1548 */
1549 HWTEST_F(AmsAppLifeCycleTest, AbilityStateChanged001, TestSize.Level1)
1550 {
1551 sptr<MockAppStateCallback> mockCallback(new MockAppStateCallback());
1552 sptr<IAppStateCallback> callback = iface_cast<IAppStateCallback>(mockCallback);
1553 const pid_t NEW_PID = 123;
1554 auto abilityInfo = GetAbilityInfoByIndex("0");
1555 auto appInfo = GetApplication();
1556 sptr<IRemoteObject> token = GetMockToken();
1557 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
1558 EXPECT_NE(appRecord, nullptr);
1559 auto ability = appRecord->GetAbilityRunningRecordByToken(token);
1560 EXPECT_NE(ability, nullptr);
1561 serviceInner_->RegisterAppStateCallback(callback);
1562 EXPECT_CALL(*mockCallback, OnAbilityRequestDone(_, _)).Times(1);
1563 serviceInner_->OnAbilityStateChanged(ability, AbilityState::ABILITY_STATE_BEGIN);
1564 EXPECT_CALL(*mockCallback, OnAbilityRequestDone(_, _)).Times(1);
1565 serviceInner_->OnAbilityStateChanged(ability, AbilityState::ABILITY_STATE_CREATE);
1566 EXPECT_CALL(*mockCallback, OnAbilityRequestDone(_, _)).Times(1);
1567 serviceInner_->OnAbilityStateChanged(ability, AbilityState::ABILITY_STATE_READY);
1568 EXPECT_CALL(*mockCallback, OnAbilityRequestDone(_, _)).Times(1);
1569 serviceInner_->OnAbilityStateChanged(ability, AbilityState::ABILITY_STATE_FOREGROUND);
1570 EXPECT_CALL(*mockCallback, OnAbilityRequestDone(_, _)).Times(1);
1571 serviceInner_->OnAbilityStateChanged(ability, AbilityState::ABILITY_STATE_BACKGROUND);
1572 EXPECT_CALL(*mockCallback, OnAbilityRequestDone(_, _)).Times(1);
1573 serviceInner_->OnAbilityStateChanged(ability, AbilityState::ABILITY_STATE_TERMINATED);
1574 EXPECT_CALL(*mockCallback, OnAbilityRequestDone(_, _)).Times(1);
1575 serviceInner_->OnAbilityStateChanged(ability, AbilityState::ABILITY_STATE_END);
1576 }
1577
1578 /*
1579 * Feature: AMS
1580 * Function: AppLifeCycle
1581 * SubFunction: Schedule
1582 * FunctionPoints: Register App State Changed
1583 * CaseDescription: Verify if AppMgrService App State Changed Callback.
1584 */
1585 HWTEST_F(AmsAppLifeCycleTest, AppStateChanged001, TestSize.Level1)
1586 {
1587 sptr<MockAppStateCallback> mockCallback(new MockAppStateCallback());
1588 sptr<IAppStateCallback> callback = iface_cast<IAppStateCallback>(mockCallback);
1589 const pid_t NEW_PID = 123;
1590 auto abilityInfo = GetAbilityInfoByIndex("0");
1591 auto appInfo = GetApplication();
1592 sptr<IRemoteObject> token = GetMockToken();
1593 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
1594 EXPECT_NE(appRecord, nullptr);
1595 serviceInner_->RegisterAppStateCallback(callback);
1596 EXPECT_CALL(*mockCallback, OnAppStateChanged(_)).Times(1);
1597 serviceInner_->OnAppStateChanged(appRecord, ApplicationState::APP_STATE_BEGIN);
1598 EXPECT_CALL(*mockCallback, OnAppStateChanged(_)).Times(1);
1599 serviceInner_->OnAppStateChanged(appRecord, ApplicationState::APP_STATE_CREATE);
1600 EXPECT_CALL(*mockCallback, OnAppStateChanged(_)).Times(1);
1601 serviceInner_->OnAppStateChanged(appRecord, ApplicationState::APP_STATE_READY);
1602 EXPECT_CALL(*mockCallback, OnAppStateChanged(_)).Times(1);
1603 serviceInner_->OnAppStateChanged(appRecord, ApplicationState::APP_STATE_FOREGROUND);
1604 EXPECT_CALL(*mockCallback, OnAppStateChanged(_)).Times(1);
1605 serviceInner_->OnAppStateChanged(appRecord, ApplicationState::APP_STATE_BACKGROUND);
1606 EXPECT_CALL(*mockCallback, OnAppStateChanged(_)).Times(1);
1607 serviceInner_->OnAppStateChanged(appRecord, ApplicationState::APP_STATE_TERMINATED);
1608 EXPECT_CALL(*mockCallback, OnAppStateChanged(_)).Times(1);
1609 serviceInner_->OnAppStateChanged(appRecord, ApplicationState::APP_STATE_END);
1610 }
1611
1612 /*
1613 * Feature: AMS
1614 * Function: AppLifeCycle
1615 * SubFunction: UnsuspendApplication
1616 * FunctionPoints: UnsuspendApplication
1617 * CaseDescription: test application state is APP_STATE_BACKGROUND(apprecord is nullptr)
1618 */
1619 HWTEST_F(AmsAppLifeCycleTest, AbilityBehaviorAnalysis_001, TestSize.Level1)
1620 {
1621 const pid_t NEW_PID = 1234;
1622 auto abilityInfo = GetAbilityInfoByIndex("110");
1623 auto appInfo = GetApplication();
1624 sptr<IRemoteObject> token = GetMockToken();
1625 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
1626 EXPECT_TRUE(appRecord != nullptr);
1627
1628 auto abilityRecord = appRecord->GetAbilityRunningRecordByToken(token);
1629 EXPECT_TRUE(abilityRecord != nullptr);
1630 EXPECT_EQ(0, abilityRecord->GetVisibility());
1631 EXPECT_EQ(0, abilityRecord->GetPerceptibility());
1632 EXPECT_EQ(0, abilityRecord->GetConnectionState());
1633
1634 EXPECT_TRUE(serviceInner_);
1635 serviceInner_->AbilityBehaviorAnalysis(token, nullptr, 1, 1, 1);
1636
1637 auto abilityRecordAfter = appRecord->GetAbilityRunningRecordByToken(token);
1638 EXPECT_TRUE(abilityRecordAfter != nullptr);
1639 EXPECT_EQ(1, abilityRecordAfter->GetVisibility());
1640 EXPECT_EQ(1, abilityRecordAfter->GetPerceptibility());
1641 EXPECT_EQ(1, abilityRecordAfter->GetConnectionState());
1642 }
1643
1644 /*
1645 * Feature: AMS
1646 * Function: AppLifeCycle
1647 * SubFunction: UnsuspendApplication
1648 * FunctionPoints: UnsuspendApplication
1649 * CaseDescription: test application state is APP_STATE_BACKGROUND(apprecord is nullptr)
1650 */
1651 HWTEST_F(AmsAppLifeCycleTest, AbilityBehaviorAnalysis_002, TestSize.Level1)
1652 {
1653 const pid_t NEW_PID = 1234;
1654 auto abilityInfo = GetAbilityInfoByIndex("110");
1655 auto appInfo = GetApplication();
1656 sptr<IRemoteObject> token = GetMockToken();
1657
1658 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
1659 EXPECT_TRUE(appRecord != nullptr);
1660
1661 auto abilityRecord = appRecord->GetAbilityRunningRecordByToken(token);
1662 EXPECT_TRUE(abilityRecord != nullptr);
1663 EXPECT_EQ(0, abilityRecord->GetVisibility());
1664 EXPECT_EQ(0, abilityRecord->GetPerceptibility());
1665 EXPECT_EQ(0, abilityRecord->GetConnectionState());
1666
1667 EXPECT_TRUE(serviceInner_);
1668 serviceInner_->AbilityBehaviorAnalysis(nullptr, nullptr, 1, 1, 1);
1669
1670 auto abilityRecordAfter = appRecord->GetAbilityRunningRecordByToken(token);
1671 EXPECT_TRUE(abilityRecordAfter != nullptr);
1672 EXPECT_NE(1, abilityRecordAfter->GetVisibility());
1673 EXPECT_NE(1, abilityRecordAfter->GetPerceptibility());
1674 EXPECT_NE(1, abilityRecordAfter->GetConnectionState());
1675 }
1676
1677 /*
1678 * Feature: AMS
1679 * Function: AppLifeCycle
1680 * SubFunction: UnsuspendApplication
1681 * FunctionPoints: UnsuspendApplication
1682 * CaseDescription: test application state is APP_STATE_BACKGROUND(apprecord is nullptr)
1683 */
1684 HWTEST_F(AmsAppLifeCycleTest, ClearUpApplicationData_001, TestSize.Level1)
1685 {
1686 const pid_t NEW_PID = 1234;
1687 auto abilityInfo = GetAbilityInfoByIndex("110");
1688 auto appInfo = GetApplication();
1689 sptr<IRemoteObject> token = GetMockToken();
1690
1691 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
1692
1693 // pid < 0
1694 appRecord->SetUid(101);
1695 EXPECT_CALL(*mockBundleMgr, CleanBundleDataFiles(_, _)).Times(0);
1696 serviceInner_->ClearUpApplicationData(appRecord->GetBundleName(), appRecord->GetUid(), 0);
1697
1698 // uid < 0
1699 EXPECT_CALL(*mockBundleMgr, CleanBundleDataFiles(_, _)).Times(0);
1700 serviceInner_->ClearUpApplicationData(appRecord->GetBundleName(), -1, NEW_PID);
1701
1702 EXPECT_CALL(*mockBundleMgr, CleanBundleDataFiles(_, _)).Times(1).WillOnce(Return(101));
1703
1704 sptr<MockAppScheduler> mockAppScheduler = new MockAppScheduler();
1705 sptr<IAppScheduler> client = iface_cast<IAppScheduler>(mockAppScheduler.GetRefPtr());
1706 appRecord->SetApplicationClient(client);
1707
1708 serviceInner_->ClearUpApplicationData(appRecord->GetBundleName(), appRecord->GetUid(), NEW_PID);
1709 }
1710
1711 /*
1712 * Feature: AMS
1713 * Function: AppLifeCycle
1714 * SubFunction: ClearUpApplicationData
1715 * FunctionPoints: ClearUpApplicationData
1716 * CaseDescription: clear the application data.
1717 */
1718 HWTEST_F(AmsAppLifeCycleTest, ClearUpApplicationData_002, TestSize.Level1)
1719 {
1720 const pid_t NEW_PID = 1234;
1721 auto abilityInfo = GetAbilityInfoByIndex("110");
1722 auto appInfo = GetApplication();
1723 sptr<IRemoteObject> token = GetMockToken();
1724
1725 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
1726 appRecord->SetUid(101);
1727
1728 EXPECT_CALL(*mockBundleMgr, CleanBundleDataFiles(_, _)).Times(1).WillOnce(Return(101));
1729 EXPECT_CALL(*mockBundleMgr, GetUidByBundleName(_, _)).Times(1);
1730
1731 sptr<MockAppScheduler> mockAppScheduler = new MockAppScheduler();
1732 sptr<IAppScheduler> client = iface_cast<IAppScheduler>(mockAppScheduler.GetRefPtr());
1733 appRecord->SetApplicationClient(client);
1734
1735 serviceInner_->ClearUpApplicationData(appRecord->GetBundleName(), appRecord->GetUid(), NEW_PID);
1736 }
1737
1738 /*
1739 * Feature: AMS
1740 * Function: AppLifeCycle
1741 * SubFunction: ClearUpApplicationData
1742 * FunctionPoints: ClearUpApplicationData
1743 * CaseDescription: clear the application data.
1744 */
1745 HWTEST_F(AmsAppLifeCycleTest, ClearUpApplicationData_003, TestSize.Level1)
1746 {
1747 const pid_t NEW_PID = 1234;
1748 auto abilityInfo = GetAbilityInfoByIndex("110");
1749 auto appInfo = GetApplication();
1750 sptr<IRemoteObject> token = GetMockToken();
1751
1752 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
1753 appRecord->SetUid(101);
1754
1755 EXPECT_CALL(*mockBundleMgr, CleanBundleDataFiles(_, _)).Times(1).WillOnce(Return(0));
1756 EXPECT_CALL(*mockBundleMgr, GetUidByBundleName(_, _)).Times(0);
1757
1758 sptr<MockAppScheduler> mockAppScheduler = new MockAppScheduler();
1759 sptr<IAppScheduler> client = iface_cast<IAppScheduler>(mockAppScheduler.GetRefPtr());
1760 appRecord->SetApplicationClient(client);
1761
1762 serviceInner_->ClearUpApplicationData(appRecord->GetBundleName(), appRecord->GetUid(), NEW_PID);
1763 }
1764
1765 /*
1766 * Feature: AMS
1767 * Function: AppLifeCycle::CreateAppRunningRecord
1768 * SubFunction: bundleMgr CheckPermission
1769 * FunctionPoints: UnsuspendApplication
1770 * CaseDescription: Check if there is background operation permission
1771 */
1772 HWTEST_F(AmsAppLifeCycleTest, CreateAppRunningRecord_001, TestSize.Level1)
1773 {
1774 auto abilityInfo = GetAbilityInfoByIndex("0");
1775 auto appInfo = GetApplication();
1776 sptr<IRemoteObject> token = GetMockToken();
1777
1778 HapModuleInfo hapModuleInfo;
1779 hapModuleInfo.moduleName = "module789";
1780 BundleInfo bundleInfo;
1781 bundleInfo.appId = "com.ohos.test.helloworld_code123";
1782
1783 std::shared_ptr<AppRunningRecord> appRecord = serviceInner_->CreateAppRunningRecord(
1784 nullptr, nullptr, appInfo, abilityInfo, "test_app", bundleInfo, hapModuleInfo, nullptr);
1785 EXPECT_TRUE(appRecord);
1786 appRecord = serviceInner_->CreateAppRunningRecord(
1787 token, nullptr, nullptr, abilityInfo, "test_app", bundleInfo, hapModuleInfo, nullptr);
1788 EXPECT_FALSE(appRecord);
1789 appRecord = serviceInner_->CreateAppRunningRecord(token, nullptr, appInfo, nullptr, "test_app", bundleInfo,
1790 hapModuleInfo, nullptr);
1791 EXPECT_TRUE(appRecord);
1792 appRecord = serviceInner_->CreateAppRunningRecord(token, nullptr, appInfo, abilityInfo, "", bundleInfo,
1793 hapModuleInfo, nullptr);
1794 EXPECT_FALSE(appRecord);
1795 }
1796
1797 /*
1798 * Feature: AMS
1799 * Function: AppLifeCycle::CreateAppRunningRecord
1800 * SubFunction: bundleMgr CheckPermission
1801 * FunctionPoints: UnsuspendApplication
1802 * CaseDescription: Check if there is background operation permission
1803 */
1804 HWTEST_F(AmsAppLifeCycleTest, CheckAppRunningRecordIsExist_001, TestSize.Level1)
1805 {
1806 auto abilityInfo = GetAbilityInfoByIndex("0");
1807 auto appInfo = GetApplication();
1808 sptr<IRemoteObject> token = GetMockToken();
1809
1810 HapModuleInfo hapModuleInfo;
1811 hapModuleInfo.moduleName = "module789";
1812 BundleInfo bundleInfo;
1813 bundleInfo.appId = "com.ohos.test.helloworld_code123";
1814
1815 std::shared_ptr<AppRunningRecord> appRecord = serviceInner_->CreateAppRunningRecord(
1816 token, nullptr, appInfo, abilityInfo, appInfo->name, bundleInfo, hapModuleInfo, nullptr);
1817 EXPECT_TRUE(appRecord);
1818
1819 auto appRecordProc = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(
1820 appInfo->name, appInfo->name, abilityInfo->applicationInfo.uid, bundleInfo);
1821 EXPECT_TRUE(appRecordProc);
1822
1823 EXPECT_EQ(appRecord->GetRecordId(), appRecordProc->GetRecordId());
1824 EXPECT_TRUE(appRecord->GetName() == appRecordProc->GetName());
1825 EXPECT_TRUE(appRecord->GetUid() == appRecordProc->GetUid());
1826 EXPECT_TRUE(appRecord->GetProcessName() == appRecordProc->GetProcessName());
1827
1828 appRecord->SetState(ApplicationState::APP_STATE_FOREGROUND);
1829 EXPECT_EQ(ApplicationState::APP_STATE_FOREGROUND, appRecordProc->GetState());
1830 }
1831
1832 /*
1833 * Feature: AMS
1834 * Function: AppLifeCycle::StartResidentProcess
1835 * SubFunction: NA
1836 * FunctionPoints: start resident process
1837 * CaseDescription: try to start a resident process
1838 */
1839 HWTEST_F(AmsAppLifeCycleTest, StartResidentProcess_001, TestSize.Level1)
1840 {
1841 pid_t pid = 123;
1842 sptr<IRemoteObject> token = GetMockToken();
1843 std::string appName = "KeepAliveApp";
1844 std::string proc = "KeepAliveApplication";
1845 int uid = 2100;
1846
1847 HapModuleInfo hapModuleInfo;
1848 hapModuleInfo.moduleName = "KeepAliveApplication";
1849
1850 std::vector<BundleInfo> infos;
1851 BundleInfo info;
1852 info.name = proc;
1853 info.uid = uid;
1854 info.hapModuleInfos.push_back(hapModuleInfo);
1855
1856 ApplicationInfo appInfo;
1857 appInfo.name = "KeepAliveApp";
1858 appInfo.bundleName = "KeepAliveApplication";
1859 appInfo.uid = 2100;
1860 info.applicationInfo = appInfo;
1861 infos.push_back(info);
1862 BundleInfo bundleInfo;
1863 bundleInfo.appId = "com.ohos.test.helloworld_code123";
1864
1865 auto appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
1866 EXPECT_FALSE(appRecord);
1867
1868 MockAppSpawnClient *mockClientPtrT = new (std::nothrow) MockAppSpawnClient();
1869 EXPECT_TRUE(mockClientPtrT);
1870 EXPECT_CALL(*mockClientPtrT, StartProcess(_, _)).Times(1).WillOnce(DoAll(SetArgReferee<1>(pid), Return(ERR_OK)));
1871
1872 serviceInner_->SetAppSpawnClient(std::unique_ptr<MockAppSpawnClient>(mockClientPtrT));
1873
1874 serviceInner_->StartResidentProcess(infos, -1);
1875
1876 appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
1877 EXPECT_TRUE(appRecord);
1878 pid_t newPid = appRecord->GetPriorityObject()->GetPid();
1879 EXPECT_TRUE(newPid == pid);
1880 }
1881
1882 /*
1883 * Feature: AMS
1884 * Function: AppLifeCycle::StartResidentProcess
1885 * SubFunction: NA
1886 * FunctionPoints: start resident process
1887 * CaseDescription: try to start a resident process
1888 */
1889 HWTEST_F(AmsAppLifeCycleTest, StartResidentProcess_002, TestSize.Level1)
1890 {
1891 pid_t pid = 123;
1892 sptr<IRemoteObject> token = GetMockToken();
1893 std::string appName = "KeepAliveApp";
1894 std::string proc = "KeepAliveApplication";
1895 int uid = 2100;
1896
1897 HapModuleInfo hapModuleInfo;
1898 hapModuleInfo.moduleName = "KeepAliveApplication";
1899 std::vector<BundleInfo> infos;
1900 BundleInfo info;
1901 info.name = proc;
1902 info.uid = uid;
1903 info.hapModuleInfos.push_back(hapModuleInfo);
1904
1905 ApplicationInfo appInfo;
1906 appInfo.name = "KeepAliveApp";
1907 appInfo.bundleName = "KeepAliveApplication";
1908 appInfo.uid = 2100;
1909 info.applicationInfo = appInfo;
1910 infos.push_back(info);
1911 BundleInfo bundleInfo;
1912 bundleInfo.appId = "com.ohos.test.helloworld_code123";
1913
1914 auto appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
1915 EXPECT_FALSE(appRecord);
1916
1917 MockAppSpawnClient *mockClientPtrT = new (std::nothrow) MockAppSpawnClient();
1918 EXPECT_TRUE(mockClientPtrT);
1919 EXPECT_CALL(*mockClientPtrT, StartProcess(_, _)).Times(1).WillOnce(DoAll(SetArgReferee<1>(pid), Return(ERR_OK)));
1920
1921 serviceInner_->SetAppSpawnClient(std::unique_ptr<MockAppSpawnClient>(mockClientPtrT));
1922
1923 serviceInner_->StartResidentProcess(infos, -1);
1924
1925 appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
1926 EXPECT_TRUE(appRecord);
1927 int recordId = appRecord->GetRecordId();
1928
1929 // start agin
1930 serviceInner_->StartResidentProcess(infos, -1);
1931
1932 auto other = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
1933 EXPECT_TRUE(other);
1934 int id = other->GetRecordId();
1935 EXPECT_TRUE(recordId == id);
1936 }
1937
1938 /*
1939 * Feature: AMS
1940 * Function: AppLifeCycle::StartResidentProcess
1941 * SubFunction: NA
1942 * FunctionPoints: start resident process
1943 * CaseDescription: try to start resident process
1944 */
1945 HWTEST_F(AmsAppLifeCycleTest, StartResidentProcess_003, TestSize.Level1)
1946 {
1947 std::vector<BundleInfo> infos;
1948 serviceInner_->appRunningManager_->ClearAppRunningRecordMap();
1949
1950 // EMPTY VECTOR
1951 serviceInner_->StartResidentProcess(infos, -1);
1952
1953 EXPECT_TRUE(serviceInner_->appRunningManager_->GetAppRunningRecordMap().empty());
1954 }
1955 /*
1956 * Feature: AMS
1957 * Function: AppLifeCycle::RestartResidentProcess
1958 * SubFunction: NA
1959 * FunctionPoints: Guaranteed to re-pull
1960 * CaseDescription: Restart the abnormal resident process
1961 */
1962 HWTEST_F(AmsAppLifeCycleTest, RestartResidentProcess_001, TestSize.Level1)
1963 {
1964 sptr<IRemoteObject> token = GetMockToken();
1965 std::string appName = "KeepAliveApp";
1966 std::string proc = "KeepAliveApplication";
1967 int uid = 2100;
1968
1969 HapModuleInfo hapModuleInfo;
1970 hapModuleInfo.moduleName = "KeepAliveApplication";
1971 std::vector<BundleInfo> infos;
1972 BundleInfo info;
1973 info.name = proc;
1974 info.uid = uid;
1975 info.hapModuleInfos.push_back(hapModuleInfo);
1976
1977 ApplicationInfo appInfo;
1978 appInfo.name = "KeepAliveApp";
1979 appInfo.bundleName = "KeepAliveApplication";
1980 appInfo.uid = 2100;
1981 info.applicationInfo = appInfo;
1982 infos.push_back(info);
1983 BundleInfo bundleInfo;
1984 bundleInfo.appId = "com.ohos.test.helloworld_code123";
1985
1986 auto appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
1987 EXPECT_FALSE(appRecord);
1988
1989 int recordId = 156;
1990 auto app = std::make_shared<ApplicationInfo>(appInfo);
1991 auto record = std::make_shared<AppRunningRecord>(app, recordId, proc);
1992 serviceInner_->RestartResidentProcess(record);
1993
1994 appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
1995 EXPECT_FALSE(appRecord);
1996 }
1997
1998 /*
1999 * Feature: AMS
2000 * Function: AppLifeCycle::RestartResidentProcess
2001 * SubFunction: NA
2002 * FunctionPoints: Guaranteed to re-pull
2003 * CaseDescription: Restart the abnormal resident process
2004 */
2005 HWTEST_F(AmsAppLifeCycleTest, RestartResidentProcess_002, TestSize.Level1)
2006 {
2007 pid_t pid = 123;
2008 sptr<IRemoteObject> token = GetMockToken();
2009 std::string appName = "KeepAliveApp";
2010 std::string proc = "KeepAliveApplication";
2011 int uid = 2100;
2012
2013 HapModuleInfo hapModuleInfo;
2014 hapModuleInfo.moduleName = "KeepAliveApplication";
2015 std::vector<BundleInfo> infos;
2016 BundleInfo info;
2017 info.name = proc;
2018 info.uid = uid;
2019 info.hapModuleInfos.push_back(hapModuleInfo);
2020
2021 ApplicationInfo appInfo;
2022 appInfo.name = "KeepAliveApp";
2023 appInfo.bundleName = "KeepAliveApplication";
2024 appInfo.uid = 2100;
2025 info.applicationInfo = appInfo;
2026 infos.push_back(info);
2027 BundleInfo bundleInfo;
2028 bundleInfo.appId = "com.ohos.test.helloworld_code123";
2029
2030 auto appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
2031 EXPECT_FALSE(appRecord);
2032
2033 MockAppSpawnClient *mockClientPtrT = new (std::nothrow) MockAppSpawnClient();
2034 EXPECT_TRUE(mockClientPtrT);
2035 EXPECT_CALL(*mockClientPtrT, StartProcess(_, _)).Times(1).WillOnce(DoAll(SetArgReferee<1>(pid), Return(ERR_OK)));
2036
2037 serviceInner_->SetAppSpawnClient(std::unique_ptr<MockAppSpawnClient>(mockClientPtrT));
2038
2039 serviceInner_->StartResidentProcess(infos, -1);
2040
2041 appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
2042 EXPECT_TRUE(appRecord);
2043
2044 // Restart the existing application when there is no abnormality
2045 serviceInner_->RestartResidentProcess(appRecord);
2046
2047 auto newAppRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
2048 EXPECT_TRUE(newAppRecord);
2049 EXPECT_TRUE(appRecord == newAppRecord);
2050 EXPECT_TRUE(appRecord->GetRecordId() == newAppRecord->GetRecordId());
2051 }
2052
2053 /*
2054 * Feature: AMS
2055 * Function: AppLifeCycle::UpdateConfiguration
2056 * SubFunction: NA
2057 * FunctionPoints: Environmental Change Notification
2058 * CaseDescription: Determine the default value
2059 */
2060 HWTEST_F(AmsAppLifeCycleTest, UpdateConfiguration_001, TestSize.Level1)
2061 {
2062 serviceInner_->Init();
2063 auto configMgr = serviceInner_->GetConfiguration();
2064 EXPECT_TRUE(configMgr);
2065 auto language = configMgr->GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
2066 // has default value
2067 EXPECT_TRUE(!language.empty());
2068 }
2069
2070 /*
2071 * Feature: AMS
2072 * Function: AppLifeCycle::UpdateConfiguration
2073 * SubFunction: NA
2074 * FunctionPoints: Environmental Change Notification
2075 * CaseDescription: Trigger an environment change notification
2076 */
2077 HWTEST_F(AmsAppLifeCycleTest, UpdateConfiguration_002, TestSize.Level1)
2078 {
2079 auto testLanguge = "ch-zh";
__anon455ddc860102(const Configuration &config) 2080 auto configUpdate = [testLanguge](const Configuration &config) {
2081 auto l = config.GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
2082 EXPECT_TRUE(testLanguge == l);
2083 };
2084
2085 auto testAppPreRecord =
2086 CreateTestApplicationRecord(AbilityState::ABILITY_STATE_FOREGROUND, ApplicationState::APP_STATE_FOREGROUND);
2087
2088 EXPECT_CALL(*(testAppPreRecord.mockAppScheduler_), ScheduleConfigurationUpdated(_))
2089 .Times(1)
2090 .WillOnce(testing::Invoke(configUpdate));
2091
2092 Configuration config;
2093 config.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, testLanguge);
2094 serviceInner_->UpdateConfiguration(config);
2095 }
2096
2097 /*
2098 * Feature: AMS
2099 * Function: AppLifeCycle::UpdateConfiguration
2100 * SubFunction: NA
2101 * FunctionPoints: Environmental Change Notification
2102 * CaseDescription: Trigger an environment change notification
2103 */
2104 HWTEST_F(AmsAppLifeCycleTest, UpdateConfiguration_003, TestSize.Level1)
2105 {
2106 auto testLanguge = "ch-zh";
__anon455ddc860202(const Configuration &config) 2107 auto configUpdate = [testLanguge](const Configuration &config) {
2108 auto l = config.GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
2109 EXPECT_TRUE(testLanguge == l);
2110 };
2111
2112 auto testAppPreRecord =
2113 CreateTestApplicationRecord(AbilityState::ABILITY_STATE_FOREGROUND, ApplicationState::APP_STATE_FOREGROUND);
2114
2115 EXPECT_CALL(*(testAppPreRecord.mockAppScheduler_), ScheduleConfigurationUpdated(_))
2116 .Times(1)
2117 .WillOnce(testing::Invoke(configUpdate));
2118
2119 Configuration config;
2120 config.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, testLanguge);
2121 serviceInner_->UpdateConfiguration(config);
2122 serviceInner_->UpdateConfiguration(config);
2123 }
2124
2125 /*
2126 * Feature: AMS
2127 * Function: AppLifeCycle::InitGlobalConfiguration
2128 * SubFunction: initialization
2129 * FunctionPoints: NA
2130 * CaseDescription: Initialize a persistent environment variable object
2131 */
2132 HWTEST_F(AmsAppLifeCycleTest, InitGlobalConfiguration_001, TestSize.Level1)
2133 {
2134 auto configMgr = serviceInner_->GetConfiguration();
2135 EXPECT_TRUE(configMgr);
2136
2137 auto language = configMgr->GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
2138 EXPECT_TRUE(language.empty());
2139
2140 serviceInner_->InitGlobalConfiguration();
2141 language = configMgr->GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
2142 EXPECT_TRUE(!language.empty());
2143 }
2144 } // namespace AppExecFwk
2145 } // namespace OHOS
2146