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