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