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