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