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