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, AbilityBehaviorAnalysis_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 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
1621 EXPECT_TRUE(appRecord != nullptr);
1622
1623 auto abilityRecord = appRecord->GetAbilityRunningRecordByToken(token);
1624 EXPECT_TRUE(abilityRecord != nullptr);
1625 EXPECT_EQ(0, abilityRecord->GetVisibility());
1626 EXPECT_EQ(0, abilityRecord->GetPerceptibility());
1627 EXPECT_EQ(0, abilityRecord->GetConnectionState());
1628
1629 EXPECT_TRUE(serviceInner_);
1630 serviceInner_->AbilityBehaviorAnalysis(token, nullptr, 1, 1, 1);
1631
1632 auto abilityRecordAfter = appRecord->GetAbilityRunningRecordByToken(token);
1633 EXPECT_TRUE(abilityRecordAfter != nullptr);
1634 EXPECT_EQ(1, abilityRecordAfter->GetVisibility());
1635 EXPECT_EQ(1, abilityRecordAfter->GetPerceptibility());
1636 EXPECT_EQ(1, abilityRecordAfter->GetConnectionState());
1637 }
1638
1639 /*
1640 * Feature: AMS
1641 * Function: AppLifeCycle
1642 * SubFunction: UnsuspendApplication
1643 * FunctionPoints: UnsuspendApplication
1644 * CaseDescription: test application state is APP_STATE_BACKGROUND(apprecord is nullptr)
1645 */
1646 HWTEST_F(AmsAppLifeCycleTest, AbilityBehaviorAnalysis_002, TestSize.Level1)
1647 {
1648 const pid_t NEW_PID = 1234;
1649 auto abilityInfo = GetAbilityInfoByIndex("110");
1650 auto appInfo = GetApplication();
1651 sptr<IRemoteObject> token = GetMockToken();
1652
1653 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
1654 EXPECT_TRUE(appRecord != nullptr);
1655
1656 auto abilityRecord = appRecord->GetAbilityRunningRecordByToken(token);
1657 EXPECT_TRUE(abilityRecord != nullptr);
1658 EXPECT_EQ(0, abilityRecord->GetVisibility());
1659 EXPECT_EQ(0, abilityRecord->GetPerceptibility());
1660 EXPECT_EQ(0, abilityRecord->GetConnectionState());
1661
1662 EXPECT_TRUE(serviceInner_);
1663 serviceInner_->AbilityBehaviorAnalysis(nullptr, nullptr, 1, 1, 1);
1664
1665 auto abilityRecordAfter = appRecord->GetAbilityRunningRecordByToken(token);
1666 EXPECT_TRUE(abilityRecordAfter != nullptr);
1667 EXPECT_NE(1, abilityRecordAfter->GetVisibility());
1668 EXPECT_NE(1, abilityRecordAfter->GetPerceptibility());
1669 EXPECT_NE(1, abilityRecordAfter->GetConnectionState());
1670 }
1671
1672 /*
1673 * Feature: AMS
1674 * Function: AppLifeCycle
1675 * SubFunction: UnsuspendApplication
1676 * FunctionPoints: UnsuspendApplication
1677 * CaseDescription: test application state is APP_STATE_BACKGROUND(apprecord is nullptr)
1678 */
1679 HWTEST_F(AmsAppLifeCycleTest, ClearUpApplicationData_001, TestSize.Level1)
1680 {
1681 const pid_t NEW_PID = 1234;
1682 auto abilityInfo = GetAbilityInfoByIndex("110");
1683 auto appInfo = GetApplication();
1684 sptr<IRemoteObject> token = GetMockToken();
1685
1686 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
1687
1688 // pid < 0
1689 appRecord->SetUid(101);
1690 EXPECT_CALL(*mockBundleMgr, CleanBundleDataFiles(_, _, _)).Times(0);
1691 serviceInner_->ClearUpApplicationData(appRecord->GetBundleName(), appRecord->GetUid(), 0, 0);
1692
1693 // uid < 0
1694 EXPECT_CALL(*mockBundleMgr, CleanBundleDataFiles(_, _, _)).Times(0);
1695 serviceInner_->ClearUpApplicationData(appRecord->GetBundleName(), -1, NEW_PID, 0);
1696
1697 EXPECT_CALL(*mockBundleMgr, CleanBundleDataFiles(_, _, _)).Times(1).WillOnce(Return(101));
1698
1699 sptr<MockAppScheduler> mockAppScheduler = new MockAppScheduler();
1700 sptr<IAppScheduler> client = iface_cast<IAppScheduler>(mockAppScheduler.GetRefPtr());
1701 appRecord->SetApplicationClient(client);
1702
1703 serviceInner_->ClearUpApplicationData(appRecord->GetBundleName(), appRecord->GetUid(), NEW_PID, 0);
1704 }
1705
1706 /*
1707 * Feature: AMS
1708 * Function: AppLifeCycle
1709 * SubFunction: ClearUpApplicationData
1710 * FunctionPoints: ClearUpApplicationData
1711 * CaseDescription: clear the application data.
1712 */
1713 HWTEST_F(AmsAppLifeCycleTest, ClearUpApplicationData_002, TestSize.Level1)
1714 {
1715 const pid_t NEW_PID = 1234;
1716 auto abilityInfo = GetAbilityInfoByIndex("110");
1717 auto appInfo = GetApplication();
1718 sptr<IRemoteObject> token = GetMockToken();
1719
1720 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
1721 appRecord->SetUid(101);
1722
1723 EXPECT_CALL(*mockBundleMgr, CleanBundleDataFiles(_, _, _)).Times(1).WillOnce(Return(101));
1724 EXPECT_CALL(*mockBundleMgr, GetUidByBundleName(_, _, _)).Times(1);
1725
1726 sptr<MockAppScheduler> mockAppScheduler = new MockAppScheduler();
1727 sptr<IAppScheduler> client = iface_cast<IAppScheduler>(mockAppScheduler.GetRefPtr());
1728 appRecord->SetApplicationClient(client);
1729
1730 serviceInner_->ClearUpApplicationData(appRecord->GetBundleName(), appRecord->GetUid(), NEW_PID, 0);
1731 }
1732
1733 /*
1734 * Feature: AMS
1735 * Function: AppLifeCycle
1736 * SubFunction: ClearUpApplicationData
1737 * FunctionPoints: ClearUpApplicationData
1738 * CaseDescription: clear the application data.
1739 */
1740 HWTEST_F(AmsAppLifeCycleTest, ClearUpApplicationData_003, TestSize.Level1)
1741 {
1742 const pid_t NEW_PID = 1234;
1743 auto abilityInfo = GetAbilityInfoByIndex("110");
1744 auto appInfo = GetApplication();
1745 sptr<IRemoteObject> token = GetMockToken();
1746
1747 auto appRecord = StartProcessAndLoadAbility(token, nullptr, abilityInfo, appInfo, NEW_PID);
1748 appRecord->SetUid(101);
1749
1750 EXPECT_CALL(*mockBundleMgr, CleanBundleDataFiles(_, _, _)).Times(1).WillOnce(Return(0));
1751 EXPECT_CALL(*mockBundleMgr, GetUidByBundleName(_, _, _)).Times(0);
1752
1753 sptr<MockAppScheduler> mockAppScheduler = new MockAppScheduler();
1754 sptr<IAppScheduler> client = iface_cast<IAppScheduler>(mockAppScheduler.GetRefPtr());
1755 appRecord->SetApplicationClient(client);
1756
1757 serviceInner_->ClearUpApplicationData(appRecord->GetBundleName(), appRecord->GetUid(), NEW_PID, 0);
1758 }
1759
1760 /*
1761 * Feature: AMS
1762 * Function: AppLifeCycle::CreateAppRunningRecord
1763 * SubFunction: bundleMgr CheckPermission
1764 * FunctionPoints: UnsuspendApplication
1765 * CaseDescription: Check if there is background operation permission
1766 */
1767 HWTEST_F(AmsAppLifeCycleTest, CreateAppRunningRecord_001, TestSize.Level1)
1768 {
1769 auto abilityInfo = GetAbilityInfoByIndex("0");
1770 auto appInfo = GetApplication();
1771 sptr<IRemoteObject> token = GetMockToken();
1772
1773 HapModuleInfo hapModuleInfo;
1774 hapModuleInfo.moduleName = "module789";
1775 BundleInfo bundleInfo;
1776 bundleInfo.appId = "com.ohos.test.helloworld_code123";
1777
1778 std::shared_ptr<AppRunningRecord> appRecord = serviceInner_->CreateAppRunningRecord(
1779 nullptr, nullptr, appInfo, abilityInfo, "test_app", bundleInfo, hapModuleInfo, nullptr, 0);
1780 EXPECT_TRUE(appRecord);
1781 appRecord = serviceInner_->CreateAppRunningRecord(
1782 token, nullptr, nullptr, abilityInfo, "test_app", bundleInfo, hapModuleInfo, nullptr, 0);
1783 EXPECT_FALSE(appRecord);
1784 appRecord = serviceInner_->CreateAppRunningRecord(token, nullptr, appInfo, nullptr, "test_app", bundleInfo,
1785 hapModuleInfo, nullptr, 0);
1786 EXPECT_TRUE(appRecord);
1787 appRecord = serviceInner_->CreateAppRunningRecord(token, nullptr, appInfo, abilityInfo, "", bundleInfo,
1788 hapModuleInfo, nullptr, 0);
1789 EXPECT_FALSE(appRecord);
1790 }
1791
1792 /*
1793 * Feature: AMS
1794 * Function: AppLifeCycle::CreateAppRunningRecord
1795 * SubFunction: bundleMgr CheckPermission
1796 * FunctionPoints: UnsuspendApplication
1797 * CaseDescription: Check if there is background operation permission
1798 */
1799 HWTEST_F(AmsAppLifeCycleTest, CheckAppRunningRecordIsExist_001, TestSize.Level1)
1800 {
1801 auto abilityInfo = GetAbilityInfoByIndex("0");
1802 auto appInfo = GetApplication();
1803 sptr<IRemoteObject> token = GetMockToken();
1804
1805 HapModuleInfo hapModuleInfo;
1806 hapModuleInfo.moduleName = "module789";
1807 BundleInfo bundleInfo;
1808 bundleInfo.appId = "com.ohos.test.helloworld_code123";
1809
1810 std::shared_ptr<AppRunningRecord> appRecord = serviceInner_->CreateAppRunningRecord(
1811 token, nullptr, appInfo, abilityInfo, appInfo->name, bundleInfo, hapModuleInfo, nullptr, 0);
1812 EXPECT_TRUE(appRecord);
1813
1814 auto appRecordProc = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(
1815 appInfo->name, appInfo->name, abilityInfo->applicationInfo.uid, bundleInfo);
1816 EXPECT_TRUE(appRecordProc);
1817
1818 EXPECT_EQ(appRecord->GetRecordId(), appRecordProc->GetRecordId());
1819 EXPECT_TRUE(appRecord->GetName() == appRecordProc->GetName());
1820 EXPECT_TRUE(appRecord->GetUid() == appRecordProc->GetUid());
1821 EXPECT_TRUE(appRecord->GetProcessName() == appRecordProc->GetProcessName());
1822
1823 appRecord->SetState(ApplicationState::APP_STATE_FOREGROUND);
1824 EXPECT_EQ(ApplicationState::APP_STATE_FOREGROUND, appRecordProc->GetState());
1825 }
1826
1827 /*
1828 * Feature: AMS
1829 * Function: AppLifeCycle::StartResidentProcess
1830 * SubFunction: NA
1831 * FunctionPoints: start resident process
1832 * CaseDescription: try to start a resident process
1833 */
1834 HWTEST_F(AmsAppLifeCycleTest, StartResidentProcess_001, TestSize.Level1)
1835 {
1836 pid_t pid = 123;
1837 sptr<IRemoteObject> token = GetMockToken();
1838 std::string appName = "KeepAliveApp";
1839 std::string proc = "KeepAliveApplication";
1840 int uid = 2100;
1841
1842 HapModuleInfo hapModuleInfo;
1843 hapModuleInfo.moduleName = "KeepAliveApplication";
1844
1845 std::vector<BundleInfo> infos;
1846 BundleInfo info;
1847 info.name = proc;
1848 info.uid = uid;
1849 info.hapModuleInfos.push_back(hapModuleInfo);
1850
1851 ApplicationInfo appInfo;
1852 appInfo.name = "KeepAliveApp";
1853 appInfo.bundleName = "KeepAliveApplication";
1854 appInfo.uid = 2100;
1855 info.applicationInfo = appInfo;
1856 infos.push_back(info);
1857 BundleInfo bundleInfo;
1858 bundleInfo.appId = "com.ohos.test.helloworld_code123";
1859
1860 auto appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
1861 EXPECT_FALSE(appRecord);
1862
1863 MockAppSpawnClient* mockClientPtrT = new (std::nothrow) MockAppSpawnClient();
1864 EXPECT_TRUE(mockClientPtrT);
1865 EXPECT_CALL(*mockClientPtrT, StartProcess(_, _)).Times(1).WillOnce(DoAll(SetArgReferee<1>(pid), Return(ERR_OK)));
1866
1867 serviceInner_->SetAppSpawnClient(std::unique_ptr<MockAppSpawnClient>(mockClientPtrT));
1868
1869 serviceInner_->StartResidentProcess(infos, -1);
1870
1871 appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
1872 EXPECT_TRUE(appRecord);
1873 pid_t newPid = appRecord->GetPriorityObject()->GetPid();
1874 EXPECT_TRUE(newPid == pid);
1875 }
1876
1877 /*
1878 * Feature: AMS
1879 * Function: AppLifeCycle::StartResidentProcess
1880 * SubFunction: NA
1881 * FunctionPoints: start resident process
1882 * CaseDescription: try to start a resident process
1883 */
1884 HWTEST_F(AmsAppLifeCycleTest, StartResidentProcess_002, TestSize.Level1)
1885 {
1886 pid_t pid = 123;
1887 sptr<IRemoteObject> token = GetMockToken();
1888 std::string appName = "KeepAliveApp";
1889 std::string proc = "KeepAliveApplication";
1890 int uid = 2100;
1891
1892 HapModuleInfo hapModuleInfo;
1893 hapModuleInfo.moduleName = "KeepAliveApplication";
1894 std::vector<BundleInfo> infos;
1895 BundleInfo info;
1896 info.name = proc;
1897 info.uid = uid;
1898 info.hapModuleInfos.push_back(hapModuleInfo);
1899
1900 ApplicationInfo appInfo;
1901 appInfo.name = "KeepAliveApp";
1902 appInfo.bundleName = "KeepAliveApplication";
1903 appInfo.uid = 2100;
1904 info.applicationInfo = appInfo;
1905 infos.push_back(info);
1906 BundleInfo bundleInfo;
1907 bundleInfo.appId = "com.ohos.test.helloworld_code123";
1908
1909 auto appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
1910 EXPECT_FALSE(appRecord);
1911
1912 MockAppSpawnClient* mockClientPtrT = new (std::nothrow) MockAppSpawnClient();
1913 EXPECT_TRUE(mockClientPtrT);
1914 EXPECT_CALL(*mockClientPtrT, StartProcess(_, _)).Times(1).WillOnce(DoAll(SetArgReferee<1>(pid), Return(ERR_OK)));
1915
1916 serviceInner_->SetAppSpawnClient(std::unique_ptr<MockAppSpawnClient>(mockClientPtrT));
1917
1918 serviceInner_->StartResidentProcess(infos, -1);
1919
1920 appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
1921 EXPECT_TRUE(appRecord);
1922 int recordId = appRecord->GetRecordId();
1923
1924 // start agin
1925 serviceInner_->StartResidentProcess(infos, -1);
1926
1927 auto other = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
1928 EXPECT_TRUE(other);
1929 int id = other->GetRecordId();
1930 EXPECT_TRUE(recordId == id);
1931 }
1932
1933 /*
1934 * Feature: AMS
1935 * Function: AppLifeCycle::StartResidentProcess
1936 * SubFunction: NA
1937 * FunctionPoints: start resident process
1938 * CaseDescription: try to start resident process
1939 */
1940 HWTEST_F(AmsAppLifeCycleTest, StartResidentProcess_003, TestSize.Level1)
1941 {
1942 std::vector<BundleInfo> infos;
1943 serviceInner_->appRunningManager_->ClearAppRunningRecordMap();
1944
1945 // EMPTY VECTOR
1946 serviceInner_->StartResidentProcess(infos, -1);
1947
1948 EXPECT_TRUE(serviceInner_->appRunningManager_->GetAppRunningRecordMap().empty());
1949 }
1950 /*
1951 * Feature: AMS
1952 * Function: AppLifeCycle::RestartResidentProcess
1953 * SubFunction: NA
1954 * FunctionPoints: Guaranteed to re-pull
1955 * CaseDescription: Restart the abnormal resident process
1956 */
1957 HWTEST_F(AmsAppLifeCycleTest, RestartResidentProcess_001, TestSize.Level1)
1958 {
1959 sptr<IRemoteObject> token = GetMockToken();
1960 std::string appName = "KeepAliveApp";
1961 std::string proc = "KeepAliveApplication";
1962 int uid = 2100;
1963
1964 HapModuleInfo hapModuleInfo;
1965 hapModuleInfo.moduleName = "KeepAliveApplication";
1966 std::vector<BundleInfo> infos;
1967 BundleInfo info;
1968 info.name = proc;
1969 info.uid = uid;
1970 info.hapModuleInfos.push_back(hapModuleInfo);
1971
1972 ApplicationInfo appInfo;
1973 appInfo.name = "KeepAliveApp";
1974 appInfo.bundleName = "KeepAliveApplication";
1975 appInfo.uid = 2100;
1976 info.applicationInfo = appInfo;
1977 infos.push_back(info);
1978 BundleInfo bundleInfo;
1979 bundleInfo.appId = "com.ohos.test.helloworld_code123";
1980
1981 auto appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
1982 EXPECT_FALSE(appRecord);
1983
1984 int recordId = 156;
1985 auto app = std::make_shared<ApplicationInfo>(appInfo);
1986 auto record = std::make_shared<AppRunningRecord>(app, recordId, proc);
1987 serviceInner_->RestartResidentProcess(record);
1988
1989 appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
1990 EXPECT_FALSE(appRecord);
1991 }
1992
1993 /*
1994 * Feature: AMS
1995 * Function: AppLifeCycle::RestartResidentProcess
1996 * SubFunction: NA
1997 * FunctionPoints: Guaranteed to re-pull
1998 * CaseDescription: Restart the abnormal resident process
1999 */
2000 HWTEST_F(AmsAppLifeCycleTest, RestartResidentProcess_002, TestSize.Level1)
2001 {
2002 pid_t pid = 123;
2003 sptr<IRemoteObject> token = GetMockToken();
2004 std::string appName = "KeepAliveApp";
2005 std::string proc = "KeepAliveApplication";
2006 int uid = 2100;
2007
2008 HapModuleInfo hapModuleInfo;
2009 hapModuleInfo.moduleName = "KeepAliveApplication";
2010 std::vector<BundleInfo> infos;
2011 BundleInfo info;
2012 info.name = proc;
2013 info.uid = uid;
2014 info.hapModuleInfos.push_back(hapModuleInfo);
2015
2016 ApplicationInfo appInfo;
2017 appInfo.name = "KeepAliveApp";
2018 appInfo.bundleName = "KeepAliveApplication";
2019 appInfo.uid = 2100;
2020 info.applicationInfo = appInfo;
2021 infos.push_back(info);
2022 BundleInfo bundleInfo;
2023 bundleInfo.appId = "com.ohos.test.helloworld_code123";
2024
2025 auto appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
2026 EXPECT_FALSE(appRecord);
2027
2028 MockAppSpawnClient* mockClientPtrT = new (std::nothrow) MockAppSpawnClient();
2029 EXPECT_TRUE(mockClientPtrT);
2030 EXPECT_CALL(*mockClientPtrT, StartProcess(_, _)).Times(1).WillOnce(DoAll(SetArgReferee<1>(pid), Return(ERR_OK)));
2031
2032 serviceInner_->SetAppSpawnClient(std::unique_ptr<MockAppSpawnClient>(mockClientPtrT));
2033
2034 serviceInner_->StartResidentProcess(infos, -1);
2035
2036 appRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
2037 EXPECT_TRUE(appRecord);
2038
2039 // Restart the existing application when there is no abnormality
2040 serviceInner_->RestartResidentProcess(appRecord);
2041
2042 auto newAppRecord = serviceInner_->appRunningManager_->CheckAppRunningRecordIsExist(appName, proc, uid, bundleInfo);
2043 EXPECT_TRUE(newAppRecord);
2044 EXPECT_TRUE(appRecord == newAppRecord);
2045 EXPECT_TRUE(appRecord->GetRecordId() == newAppRecord->GetRecordId());
2046 }
2047
2048 /*
2049 * Feature: AMS
2050 * Function: AppLifeCycle::UpdateConfiguration
2051 * SubFunction: NA
2052 * FunctionPoints: Environmental Change Notification
2053 * CaseDescription: Determine the default value
2054 */
2055 HWTEST_F(AmsAppLifeCycleTest, UpdateConfiguration_001, TestSize.Level1)
2056 {
2057 serviceInner_->Init();
2058 auto configMgr = serviceInner_->GetConfiguration();
2059 EXPECT_TRUE(configMgr);
2060 auto language = configMgr->GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
2061 // has default value
2062 EXPECT_TRUE(!language.empty());
2063 }
2064
2065 /*
2066 * Feature: AMS
2067 * Function: AppLifeCycle::UpdateConfiguration
2068 * SubFunction: NA
2069 * FunctionPoints: Environmental Change Notification
2070 * CaseDescription: Trigger an environment change notification
2071 */
2072 HWTEST_F(AmsAppLifeCycleTest, UpdateConfiguration_002, TestSize.Level1)
2073 {
2074 auto testLanguge = "ch-zh";
__anon318be0480102(const Configuration& config) 2075 auto configUpdate = [testLanguge](const Configuration& config) {
2076 auto l = config.GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
2077 EXPECT_TRUE(testLanguge == l);
2078 };
2079
2080 auto testAppPreRecord =
2081 CreateTestApplicationRecord(AbilityState::ABILITY_STATE_FOREGROUND, ApplicationState::APP_STATE_FOREGROUND);
2082
2083 EXPECT_CALL(*(testAppPreRecord.mockAppScheduler_), ScheduleConfigurationUpdated(_))
2084 .Times(1)
2085 .WillOnce(testing::Invoke(configUpdate));
2086
2087 Configuration config;
2088 config.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, testLanguge);
2089 serviceInner_->UpdateConfiguration(config);
2090 }
2091
2092 /*
2093 * Feature: AMS
2094 * Function: AppLifeCycle::UpdateConfiguration
2095 * SubFunction: NA
2096 * FunctionPoints: Environmental Change Notification
2097 * CaseDescription: Trigger an environment change notification
2098 */
2099 HWTEST_F(AmsAppLifeCycleTest, UpdateConfiguration_003, TestSize.Level1)
2100 {
2101 auto testLanguge = "ch-zh";
__anon318be0480202(const Configuration& config) 2102 auto configUpdate = [testLanguge](const Configuration& config) {
2103 auto l = config.GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
2104 EXPECT_TRUE(testLanguge == l);
2105 };
2106
2107 auto testAppPreRecord =
2108 CreateTestApplicationRecord(AbilityState::ABILITY_STATE_FOREGROUND, ApplicationState::APP_STATE_FOREGROUND);
2109
2110 EXPECT_CALL(*(testAppPreRecord.mockAppScheduler_), ScheduleConfigurationUpdated(_))
2111 .Times(1)
2112 .WillOnce(testing::Invoke(configUpdate));
2113
2114 Configuration config;
2115 config.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, testLanguge);
2116 serviceInner_->UpdateConfiguration(config);
2117 serviceInner_->UpdateConfiguration(config);
2118 }
2119
2120 /*
2121 * Feature: AMS
2122 * Function: AppLifeCycle::InitGlobalConfiguration
2123 * SubFunction: initialization
2124 * FunctionPoints: NA
2125 * CaseDescription: Initialize a persistent environment variable object
2126 */
2127 HWTEST_F(AmsAppLifeCycleTest, InitGlobalConfiguration_001, TestSize.Level1)
2128 {
2129 auto configMgr = serviceInner_->GetConfiguration();
2130 EXPECT_TRUE(configMgr);
2131
2132 auto language = configMgr->GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
2133 EXPECT_TRUE(language.empty());
2134
2135 serviceInner_->InitGlobalConfiguration();
2136 language = configMgr->GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
2137 EXPECT_TRUE(!language.empty());
2138 }
2139 } // namespace AppExecFwk
2140 } // namespace OHOS
2141