• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2023 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 
16 #include <climits>
17 #include <gtest/gtest.h>
18 
19 #include "ability_impl_factory.h"
20 #include "ability_loader.h"
21 #include "ability_local_record.h"
22 #include "context_deal.h"
23 #include "data_ability_helper.h"
24 #include "ability_manager_client.h"
25 #include "ability_manager_interface.h"
26 #include "demo_ability_test.h"
27 #include "fa_ability_thread.h"
28 #include "mock_ability_manager_service.h"
29 #include "mock_bundle_manager.h"
30 #include "ohos_application.h"
31 #include "sys_mgr_client.h"
32 #include "system_ability_definition.h"
33 
34 namespace OHOS {
35 namespace AppExecFwk {
36 using namespace testing::ext;
37 using namespace OHOS;
38 using namespace AAFwk;
39 using OHOS::AppExecFwk::ElementName;
40 using namespace OHOS::AppExecFwk;
41 /*
42  * Parameters:
43  * Action
44  * Entity
45  * Flag
46  * ElementName
47  */
48 const std::string ABILITY_NAME("DemoAbility");
49 class AbilityBaseTest : public testing::Test {
50 public:
51     static void SetUpTestCase(void);
52     static void TearDownTestCase(void);
53     void SetUp();
54     void TearDown();
55     OHOS::sptr<OHOS::IRemoteObject> abilityObject_;
56     static constexpr int TEST_WAIT_TIME = 500 * 1000;  // 500 ms
57     static const int RESULT_CODE = 1992;
58 };
59 
SetUpTestCase(void)60 void AbilityBaseTest::SetUpTestCase(void)
61 {}
62 
TearDownTestCase(void)63 void AbilityBaseTest::TearDownTestCase(void)
64 {}
65 
SetUp(void)66 void AbilityBaseTest::SetUp(void)
67 {
68     abilityObject_ = new MockAbilityManagerService();
69     auto sysMgr = OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance();
70     EXPECT_TRUE(sysMgr != nullptr);
71     sysMgr->RegisterSystemAbility(OHOS::ABILITY_MGR_SERVICE_ID, abilityObject_);
72     sysMgr->RegisterSystemAbility(OHOS::BUNDLE_MGR_SERVICE_SYS_ABILITY_ID, new BundleMgrService());
73 }
74 
TearDown(void)75 void AbilityBaseTest::TearDown(void)
76 {
77     abilityObject_ = nullptr;
78 }
79 
80 /**
81  * @tc.number: AaFwk_Ability_AbilityFwk_Start_Test_0100
82  * @tc.name: AbilityFwk Start
83  * @tc.desc: The first step of startability is the attach AMS.
84  */
85 HWTEST_F(AbilityBaseTest, AaFwk_Ability_AbilityFwk_Start_Test_0100, Function | MediumTest | Level1)
86 {
87     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
88 
89     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
90     EXPECT_NE(abilityToken, nullptr);
91     if (abilityToken != nullptr) {
92         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
93         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
94         abilityInfo->name = ABILITY_NAME;
95         abilityInfo->isNativeAbility = true;
96         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
97 
98         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
99         usleep(AbilityBaseTest::TEST_WAIT_TIME);
100     }
101 }
102 
103 /**
104  * @tc.number: AaFwk_Ability_AbilityFwk_Start_Test_0200
105  * @tc.name: AbilityFwk Start
106  * @tc.desc: When connecting AMS,the instance of application is empty.
107  */
108 HWTEST_F(AbilityBaseTest, AaFwk_Ability_AbilityFwk_Start_Test_0200, Function | MediumTest | Level1)
109 {
110     std::shared_ptr<OHOSApplication> application = nullptr;
111 
112     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
113     EXPECT_NE(abilityToken, nullptr);
114     if (abilityToken != nullptr) {
115         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
116         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
117         abilityInfo->name = ABILITY_NAME;
118         abilityInfo->isNativeAbility = true;
119         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
120 
121         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
122         usleep(AbilityBaseTest::TEST_WAIT_TIME);
123     }
124 }
125 
126 /**
127  * @tc.number: AaFwk_Ability_AbilityFwk_Start_Test_0300
128  * @tc.name: AbilityFwk Start
129  * @tc.desc: When connecting AMS,the instance of abilityRecord is empty
130  */
131 HWTEST_F(AbilityBaseTest, AaFwk_Ability_AbilityFwk_Start_Test_0300, Function | MediumTest | Level1)
132 {
133     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
134 
135     std::shared_ptr<AbilityLocalRecord> abilityRecord = nullptr;
136 
137     AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
138     EXPECT_NE(application, nullptr);
139     usleep(AbilityBaseTest::TEST_WAIT_TIME);
140 }
141 
142 /**
143  * @tc.number: AaFwk_Ability_AbilityFwk_Start_Test_0400
144  * @tc.name: AbilityFwk Start
145  * @tc.desc: The ability name is empty, so the ability instance cannot be created.
146  */
147 HWTEST_F(AbilityBaseTest, AaFwk_Ability_AbilityFwk_Start_Test_0400, Function | MediumTest | Level1)
148 {
149     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
150 
151     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
152     EXPECT_NE(abilityToken, nullptr);
153     if (abilityToken != nullptr) {
154         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
155         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
156         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
157 
158         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
159         usleep(AbilityBaseTest::TEST_WAIT_TIME);
160     }
161 }
162 
163 /**
164  * @tc.number: AaFwk_Ability_AbilityFwk_Start_Test_0500
165  * @tc.name: AbilityFwk Start
166  * @tc.desc: The ability type is unknown, so the AbilityImpl instance cannot be created.
167  */
168 HWTEST_F(AbilityBaseTest, AaFwk_Ability_AbilityFwk_Start_Test_0500, Function | MediumTest | Level1)
169 {
170     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
171 
172     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
173     EXPECT_NE(abilityToken, nullptr);
174     if (abilityToken != nullptr) {
175         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
176         abilityInfo->name = ABILITY_NAME;
177         abilityInfo->isNativeAbility = true;
178         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
179 
180         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
181         usleep(AbilityBaseTest::TEST_WAIT_TIME);
182     }
183 }
184 
185 /**
186  * @tc.number: AaFwk_Ability_AbilityFwk_Start_Test_0600
187  * @tc.name: AbilityFwk Start
188  * @tc.desc: The interface OnSaveAbilityState()/OnRestoreAbilityState() of demoability was called.
189  */
190 HWTEST_F(AbilityBaseTest, AaFwk_Ability_AbilityFwk_Start_Test_0600, Function | MediumTest | Level1)
191 {
192     std::shared_ptr<ContextDeal> contextDeal = std::make_shared<ContextDeal>();
193     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
194     std::shared_ptr<ApplicationInfo> appInfo = std::make_shared<ApplicationInfo>();
195     std::shared_ptr<ProcessInfo> processInfo = std::make_shared<ProcessInfo>();
196 
197     appInfo->codePath = "codePath";
198     appInfo->dataBaseDir = "dataBaseDir";
199     appInfo->dataDir = "dataDir";
200     appInfo->cacheDir = "cacheDir";
201     appInfo->bundleName = "bundleName";
202 
203     application->SetProcessInfo(processInfo);
204     contextDeal->SetApplicationInfo(appInfo);
205     contextDeal->SetApplicationContext(application);
206     application->AttachBaseContext(contextDeal);
207 
208     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
209     EXPECT_NE(abilityToken, nullptr);
210     if (abilityToken != nullptr) {
211         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
212         abilityInfo->codePath = "codePath";
213         abilityInfo->resourcePath = "resourcePath";
214 
215         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
216         abilityInfo->name = ABILITY_NAME;
217         abilityInfo->isNativeAbility = true;
218         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
219 
220         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
221 
222         sptr<IRemoteObject> remoteObject_ =
223             OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
224         sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
225         Want want;
226         sptr<IAbilityConnection> connect = nullptr;
227 
228         // Just to test two interfaces OnRestoreAbilityState/OnSaveAbilityState
229         abms->ConnectAbility(want, connect, abilityToken);
230         usleep(AbilityBaseTest::TEST_WAIT_TIME);
231     }
232 }
233 
234 /**
235  * @tc.number: AaFwk_Ability_Lifecycle_Test_0100
236  * @tc.name: Ability Lifecycle
237  * @tc.desc: The ability life cycle will change from initial state initial to inactive by calling the interface
238  * OnnStart(), and then to active by calling OnActive().
239  */
240 HWTEST_F(AbilityBaseTest, AaFwk_Ability_Lifecycle_Test_0100, Function | MediumTest | Level1)
241 {
242     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
243 
244     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
245     EXPECT_NE(abilityToken, nullptr);
246     if (abilityToken != nullptr) {
247         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
248         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
249         abilityInfo->name = ABILITY_NAME;
250         abilityInfo->isNativeAbility = true;
251         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
252 
253         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
254 
255         sptr<IRemoteObject> remoteObject_ =
256             OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
257         sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
258         Want want;
259         abms->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_ACTIVE);
260         usleep(AbilityBaseTest::TEST_WAIT_TIME);
261     }
262 }
263 
264 /**
265  * @tc.number: AaFwk_Ability_AbilityFwk_Lifecycle_Test_0200
266  * @tc.name: Ability Lifecycle
267  * @tc.desc: The ability life cycle will change from initial state initial to inactive by calling the interface
268  * OnnStart(), and then to active by calling OnNewWant()+OnActive().
269  */
270 HWTEST_F(AbilityBaseTest, AaFwk_Ability_AbilityFwk_Lifecycle_Test_0200, Function | MediumTest | Level1)
271 {
272     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
273 
274     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
275     EXPECT_NE(abilityToken, nullptr);
276     if (abilityToken != nullptr) {
277         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
278         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
279         abilityInfo->name = ABILITY_NAME;
280         abilityInfo->isNativeAbility = true;
281         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
282 
283         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
284 
285         sptr<IRemoteObject> remoteObject_ =
286             OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
287         sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
288 
289         abms->DisconnectAbility(nullptr);
290         usleep(AbilityBaseTest::TEST_WAIT_TIME);
291     }
292 }
293 
294 /**
295  * @tc.number: AaFwk_Ability_AbilityFwk_Lifecycle_Test_0300
296  * @tc.name: Ability Lifecycle
297  * @tc.desc: Ability life cycle changes: initial - > active - > background, the interface of demoability will be
298  called:
299  * OnStart()->OnActive()->OnInactive()->OnBackground().
300  */
301 HWTEST_F(AbilityBaseTest, AaFwk_Ability_AbilityFwk_Lifecycle_Test_0300, Function | MediumTest | Level1)
302 {
303     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
304 
305     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
306     EXPECT_NE(abilityToken, nullptr);
307     if (abilityToken != nullptr) {
308         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
309         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
310         abilityInfo->name = ABILITY_NAME;
311         abilityInfo->isNativeAbility = true;
312         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
313 
314         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
315 
316         sptr<IRemoteObject> remoteObject_ =
317             OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
318         sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
319         Want want;
320 
321         abms->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_ACTIVE);
322         usleep(AbilityBaseTest::TEST_WAIT_TIME);
323         abms->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_BACKGROUND);
324         usleep(AbilityBaseTest::TEST_WAIT_TIME);
325     }
326 }
327 
328 /**
329  * @tc.number: AaFwk_Ability_AbilityFwk_Lifecycle_Test_0400
330  * @tc.name: Ability Lifecycle
331  * @tc.desc: Ability life cycle changes: initial - > active - > inactive, the interface of demoability will be
332  called:
333  * OnStart()->OnActive()->OnInactive().
334  */
335 HWTEST_F(AbilityBaseTest, AaFwk_Ability_AbilityFwk_Lifecycle_Test_0400, Function | MediumTest | Level1)
336 {
337     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
338 
339     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
340     EXPECT_NE(abilityToken, nullptr);
341     if (abilityToken != nullptr) {
342         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
343         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
344         abilityInfo->name = ABILITY_NAME;
345         abilityInfo->isNativeAbility = true;
346         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
347 
348         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
349 
350         sptr<IRemoteObject> remoteObject_ =
351             OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
352         sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
353         Want want;
354 
355         abms->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_ACTIVE);
356         usleep(AbilityBaseTest::TEST_WAIT_TIME);
357         abms->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_INACTIVE);
358         usleep(AbilityBaseTest::TEST_WAIT_TIME);
359     }
360 }
361 
362 /**
363  * @tc.number: AaFwk_Ability_AbilityFwk_Lifecycle_Test_0500
364  * @tc.name: Ability Lifecycle
365  * @tc.desc: Ability life cycle changes: initial - > active , the interface of demoability will be called:
366  * OnStart()->OnActive()->OnInactive()->OnBackground()->OnForeground().
367  */
368 HWTEST_F(AbilityBaseTest, AaFwk_Ability_AbilityFwk_Lifecycle_Test_0500, Function | MediumTest | Level1)
369 {
370     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
371 
372     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
373     EXPECT_NE(abilityToken, nullptr);
374     if (abilityToken != nullptr) {
375         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
376         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
377         abilityInfo->name = ABILITY_NAME;
378         abilityInfo->isNativeAbility = true;
379         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
380 
381         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
382 
383         sptr<IRemoteObject> remoteObject_ =
384             OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
385         sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
386         Want want;
387 
388         abms->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_ACTIVE);
389         usleep(AbilityBaseTest::TEST_WAIT_TIME);
390         abms->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_BACKGROUND);
391         usleep(AbilityBaseTest::TEST_WAIT_TIME);
392         abms->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_INACTIVE);
393         usleep(AbilityBaseTest::TEST_WAIT_TIME);
394     }
395 }
396 
397 /**
398  * @tc.number: AaFwk_Ability_AbilityFwk_Lifecycle_Test_0600
399  * @tc.name: Ability Lifecycle
400  * @tc.desc: Ability life cycle changes: initial - > active , the interface of demoability will be called:
401  * OnStart()->OnActive()->OnInactive()->OnBackground()->OnStop().
402  */
403 HWTEST_F(AbilityBaseTest, AaFwk_Ability_AbilityFwk_Lifecycle_Test_0600, Function | MediumTest | Level1)
404 {
405     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
406 
407     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
408     EXPECT_NE(abilityToken, nullptr);
409     if (abilityToken != nullptr) {
410         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
411         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
412         abilityInfo->name = ABILITY_NAME;
413         abilityInfo->isNativeAbility = true;
414         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
415 
416         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
417 
418         sptr<IRemoteObject> remoteObject_ =
419             OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
420         sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
421         Want want;
422 
423         abms->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_ACTIVE);
424         usleep(AbilityBaseTest::TEST_WAIT_TIME);
425         abms->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_BACKGROUND);
426         usleep(AbilityBaseTest::TEST_WAIT_TIME);
427         abms->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_INITIAL);
428         usleep(AbilityBaseTest::TEST_WAIT_TIME);
429     }
430 }
431 
432 /**
433  * @tc.number: AaFwk_Ability_TerminateAbility_ForResult_Test_0100
434  * @tc.name: TerminateAbility_ForResult
435  * @tc.desc: 1. TerminateAbility with parameters
436  *           2. AMS returns parameters through sendresult
437  *           3. Compare the returned parameters with the passed in parameters.
438  */
439 HWTEST_F(AbilityBaseTest, AaFwk_Ability_TerminateAbility_ForResult_Test_0100, Function | MediumTest | Level1)
440 {
441     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
442 
443     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
444     EXPECT_NE(abilityToken, nullptr);
445     if (abilityToken != nullptr) {
446         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
447         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
448         abilityInfo->name = ABILITY_NAME;
449         abilityInfo->isNativeAbility = true;
450         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
451 
452         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
453 
454         sptr<IRemoteObject> remoteObject_ =
455             OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
456         sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
457         Want want;
458         sptr<IAbilityConnection> connect = nullptr;
459 
460         abms->TerminateAbility(nullptr, RESULT_CODE, &want);
461         usleep(AbilityBaseTest::TEST_WAIT_TIME);
462     }
463 }
464 
465 /*
466  * Parameters:
467  * Action
468  * Entity
469  * Flag
470  * ElementName
471  */
472 class AbilityTerminateTest : public testing::Test {
473 public:
474     static void SetUpTestCase(void);
475     static void TearDownTestCase(void);
476     void SetUp();
477     void TearDown();
478 
479 public:
480     OHOS::sptr<OHOS::IRemoteObject> abilityObject_;
481     static constexpr int TEST_WAIT_TIME = 500 * 1000;  // 500 ms
482     static const int RESULT_CODE = 1992;
483 };
484 
SetUpTestCase(void)485 void AbilityTerminateTest::SetUpTestCase(void)
486 {}
487 
TearDownTestCase(void)488 void AbilityTerminateTest::TearDownTestCase(void)
489 {}
490 
SetUp(void)491 void AbilityTerminateTest::SetUp(void)
492 {
493     abilityObject_ = new MockAbilityManagerService();
494     auto sysMgr = OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance();
495     EXPECT_TRUE(sysMgr != nullptr);
496     sysMgr->RegisterSystemAbility(OHOS::ABILITY_MGR_SERVICE_ID, abilityObject_);
497 }
498 
TearDown(void)499 void AbilityTerminateTest::TearDown(void)
500 {
501     abilityObject_ = nullptr;
502 }
503 
504 /**
505  * @tc.number: AaFwk_Ability_Terminate_test_0100
506  * @tc.name: TerminateAbility
507  * @tc.desc: When the ability state is inactive, the call to terminateability terminates.
508  */
509 HWTEST_F(AbilityTerminateTest, AaFwk_Ability_Terminate_test_0100, Function | MediumTest | Level1)
510 {
511     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
512     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
513     EXPECT_NE(abilityToken, nullptr);
514     if (abilityToken != nullptr) {
515         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
516         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
517         abilityInfo->name = ABILITY_NAME;
518         abilityInfo->isNativeAbility = true;
519         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
520 
521         GTEST_LOG_(INFO) << "AaFwk_Ability_Terminate_test_001 AbilityThreadMain";
522         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
523 
524         Want want;
525         MockAbilityManagerService* mockAMS = iface_cast<MockAbilityManagerService>(abilityObject_);
526         mockAMS->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_INACTIVE);
527         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
528 
529         auto ability = AbilityLoader::GetInstance().GetAbilityByName(abilityInfo->name);
530         EXPECT_NE(ability, nullptr);
531         if (ability != nullptr) {
532             ability->SetResult(RESULT_CODE, want);
533             ability->TerminateAbility();
534         }
535         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
536     }
537     GTEST_LOG_(INFO) << "AaFwk_Ability_Terminate_test_001 TerminateAbility";
538 }
539 
540 /**
541  * @tc.number: AaFwk_Ability_Terminate_test_0200
542  * @tc.name: TerminateAbility
543  * @tc.desc: When the ability state is active, the call to terminateability terminates.
544  */
545 HWTEST_F(AbilityTerminateTest, AaFwk_Ability_Terminate_test_0200, Function | MediumTest | Level1)
546 {
547     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
548     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
549     EXPECT_NE(abilityToken, nullptr);
550     if (abilityToken != nullptr) {
551         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
552         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
553         abilityInfo->name = ABILITY_NAME;
554         abilityInfo->isNativeAbility = true;
555         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
556 
557         GTEST_LOG_(INFO) << "AaFwk_Ability_Terminate_test_002 AbilityThreadMain";
558         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
559 
560         Want want;
561         MockAbilityManagerService* mockAMS = iface_cast<MockAbilityManagerService>(abilityObject_);
562         mockAMS->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_ACTIVE);
563         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
564 
565         auto ability = AbilityLoader::GetInstance().GetAbilityByName(abilityInfo->name);
566         EXPECT_NE(ability, nullptr);
567         if (ability != nullptr) {
568             ability->SetResult(RESULT_CODE, want);
569             ability->TerminateAbility();
570         }
571         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
572     }
573     GTEST_LOG_(INFO) << "AaFwk_Ability_Terminate_test_002 TerminateAbility";
574 }
575 
576 /**
577  * @tc.number: AaFwk_Ability_Terminate_test_0300
578  * @tc.name: TerminateAbility
579  * @tc.desc: When the ability state is BACKGROUND, the call to terminateability terminates.
580  */
581 HWTEST_F(AbilityTerminateTest, AaFwk_Ability_Terminate_test_0300, Function | MediumTest | Level1)
582 {
583     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
584     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
585     EXPECT_NE(abilityToken, nullptr);
586     if (abilityToken != nullptr) {
587         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
588         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
589         abilityInfo->name = ABILITY_NAME;
590         abilityInfo->isNativeAbility = true;
591         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
592 
593         GTEST_LOG_(INFO) << "AaFwk_Ability_Terminate_test_0300 AbilityThreadMain";
594         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
595 
596         Want want;
597         MockAbilityManagerService* mockAMS = iface_cast<MockAbilityManagerService>(abilityObject_);
598         mockAMS->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_BACKGROUND);
599         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
600 
601         auto ability = AbilityLoader::GetInstance().GetAbilityByName(abilityInfo->name);
602         EXPECT_NE(ability, nullptr);
603         if (ability != nullptr) {
604             ability->SetResult(RESULT_CODE, want);
605             ability->TerminateAbility();
606         }
607         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
608     }
609     GTEST_LOG_(INFO) << "AaFwk_Ability_Terminate_test_0300 TerminateAbility";
610 }
611 
612 /**
613  * @tc.number: AaFwk_Ability_Terminate_test_0400
614  * @tc.name: TerminateAbility
615  * @tc.desc: When the ability state is ABILITY_STATE_INITIAL, the call to terminateability terminates.
616  */
617 HWTEST_F(AbilityTerminateTest, AaFwk_Ability_Terminate_test_0400, Function | MediumTest | Level1)
618 {
619     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
620     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
621     EXPECT_NE(abilityToken, nullptr);
622     if (abilityToken != nullptr) {
623         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
624         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
625         abilityInfo->name = ABILITY_NAME;
626         abilityInfo->isNativeAbility = true;
627         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
628 
629         GTEST_LOG_(INFO) << "AaFwk_Ability_Terminate_test_0400 AbilityThreadMain";
630         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
631 
632         Want want;
633         MockAbilityManagerService* mockAMS = iface_cast<MockAbilityManagerService>(abilityObject_);
634         mockAMS->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_INITIAL);
635         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
636 
637         auto ability = AbilityLoader::GetInstance().GetAbilityByName(abilityInfo->name);
638         EXPECT_NE(ability, nullptr);
639         if (ability != nullptr) {
640             ability->SetResult(RESULT_CODE, want);
641             ability->TerminateAbility();
642         }
643         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
644     }
645     GTEST_LOG_(INFO) << "AaFwk_Ability_Terminate_test_0400 TerminateAbility";
646 }
647 
648 /**
649  * @tc.number: AaFwk_Ability_Terminate_test_0500
650  * @tc.name: TerminateAbility
651  * @tc.desc: When the ability state is inactive, the call to terminateability terminates.
652  */
653 HWTEST_F(AbilityTerminateTest, AaFwk_Ability_Terminate_test_0500, Function | MediumTest | Level1)
654 {
655     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
656     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
657     EXPECT_NE(abilityToken, nullptr);
658     if (abilityToken != nullptr) {
659         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
660         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
661         abilityInfo->name = ABILITY_NAME;
662         abilityInfo->isNativeAbility = true;
663         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
664 
665         GTEST_LOG_(INFO) << "AaFwk_Ability_Terminate_test_005 AbilityThreadMain";
666         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
667 
668         Want want;
669         MockAbilityManagerService* mockAMS = iface_cast<MockAbilityManagerService>(abilityObject_);
670         mockAMS->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_INACTIVE);
671         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
672 
673         mockAMS->TerminateAbility(nullptr, RESULT_CODE, &want);
674         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
675     }
676     GTEST_LOG_(INFO) << "AaFwk_Ability_Terminate_test_005 TerminateAbility";
677 }
678 
679 /**
680  * @tc.number: AaFwk_Ability_Terminate_test_0600
681  * @tc.name: TerminateAbility
682  * @tc.desc: When the ability state is active, the call to terminateability terminates.
683  */
684 HWTEST_F(AbilityTerminateTest, AaFwk_Ability_Terminate_test_0600, Function | MediumTest | Level1)
685 {
686     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
687     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
688     EXPECT_NE(abilityToken, nullptr);
689     if (abilityToken != nullptr) {
690         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
691         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
692         abilityInfo->name = ABILITY_NAME;
693         abilityInfo->isNativeAbility = true;
694         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
695 
696         GTEST_LOG_(INFO) << "AaFwk_Ability_Terminate_test_006 AbilityThreadMain";
697         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
698 
699         Want want;
700         MockAbilityManagerService* mockAMS = iface_cast<MockAbilityManagerService>(abilityObject_);
701         mockAMS->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_ACTIVE);
702         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
703 
704         mockAMS->TerminateAbility(nullptr, RESULT_CODE, &want);
705         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
706     }
707     GTEST_LOG_(INFO) << "AaFwk_Ability_Terminate_test_006 TerminateAbility";
708 }
709 
710 /**
711  * @tc.number: AaFwk_Ability_Terminate_test_0700
712  * @tc.name: TerminateAbility
713  * @tc.desc: When the ability state is background, the call to terminateability terminates.
714  */
715 HWTEST_F(AbilityTerminateTest, AaFwk_Ability_Terminate_test_0700, Function | MediumTest | Level1)
716 {
717     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
718     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
719     EXPECT_NE(abilityToken, nullptr);
720     if (abilityToken != nullptr) {
721         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
722         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
723         abilityInfo->name = ABILITY_NAME;
724         abilityInfo->isNativeAbility = true;
725         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
726 
727         GTEST_LOG_(INFO) << "AaFwk_Ability_Terminate_test_007 AbilityThreadMain";
728         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
729 
730         Want want;
731         MockAbilityManagerService* mockAMS = iface_cast<MockAbilityManagerService>(abilityObject_);
732         mockAMS->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_BACKGROUND);
733         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
734 
735         mockAMS->TerminateAbility(nullptr, RESULT_CODE, &want);
736         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
737     }
738     GTEST_LOG_(INFO) << "AaFwk_Ability_Terminate_test_007 TerminateAbility";
739 }
740 
741 /**
742  * @tc.number: AaFwk_Ability_Terminate_test_0800
743  * @tc.name: TerminateAbility
744  * @tc.desc: When the ability state is initial, the call to terminateability terminates.
745  */
746 HWTEST_F(AbilityTerminateTest, AaFwk_Ability_Terminate_test_0800, Function | MediumTest | Level1)
747 {
748     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
749     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
750     EXPECT_NE(abilityToken, nullptr);
751     if (abilityToken != nullptr) {
752         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
753         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
754         abilityInfo->name = ABILITY_NAME;
755         abilityInfo->isNativeAbility = true;
756         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
757 
758         GTEST_LOG_(INFO) << "AaFwk_Ability_Terminate_test_008 AbilityThreadMain";
759         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
760 
761         Want want;
762         MockAbilityManagerService* mockAMS = iface_cast<MockAbilityManagerService>(abilityObject_);
763         mockAMS->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_INITIAL);
764         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
765 
766         mockAMS->TerminateAbility(nullptr, RESULT_CODE, &want);
767         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
768     }
769     GTEST_LOG_(INFO) << "AaFwk_Ability_Terminate_test_008 TerminateAbility";
770 }
771 
772 /**
773  * @tc.number: AaFwk_WMS_window_test_0100
774  * @tc.name: WMS Link
775  * @tc.desc: Start pageability and call GetWindow to get the window handle.
776  */
777 HWTEST_F(AbilityTerminateTest, AaFwk_WMS_window_test_0100, Function | MediumTest | Level1)
778 {
779     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
780     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
781     EXPECT_NE(abilityToken, nullptr);
782     if (abilityToken != nullptr) {
783         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
784         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
785         abilityInfo->name = ABILITY_NAME;
786         abilityInfo->isNativeAbility = true;
787         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
788 
789         GTEST_LOG_(INFO) << "AaFwk_WMS_window_test_001 AbilityThreadMain";
790         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
791 
792         Want want;
793         MockAbilityManagerService* mockAMS = iface_cast<MockAbilityManagerService>(abilityObject_);
794         GTEST_LOG_(INFO) << "AaFwk_WMS_window_test_001 StartAbility";
795         mockAMS->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_ACTIVE);
796         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
797         mockAMS->TerminateAbility(nullptr, RESULT_CODE, &want);
798         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
799     }
800     GTEST_LOG_(INFO) << "AaFwk_WMS_window_test_001 TerminateAbility";
801 }
802 
803 /**
804  * @tc.number: AaFwk_WMS_window_test_0200
805  * @tc.name: WMS Link
806  * @tc.desc: Pageability switches to the foreground and calls Window.show.
807  *           Pageability switches to the background and calls Window.hide.
808  */
809 HWTEST_F(AbilityTerminateTest, AaFwk_WMS_window_test_0200, Function | MediumTest | Level1)
810 {
811     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
812     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
813     EXPECT_NE(abilityToken, nullptr);
814     if (abilityToken != nullptr) {
815         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
816         abilityInfo->type = AppExecFwk::AbilityType::PAGE;
817         abilityInfo->name = ABILITY_NAME;
818         abilityInfo->isNativeAbility = true;
819         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
820 
821         GTEST_LOG_(INFO) << "AaFwk_WMS_window_test_002 AbilityThreadMain";
822         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
823 
824         Want want;
825         MockAbilityManagerService* mockAMS = iface_cast<MockAbilityManagerService>(abilityObject_);
826         mockAMS->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_BACKGROUND);
827         GTEST_LOG_(INFO) << "AaFwk_WMS_window_test_002 BackGround";
828         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
829         mockAMS->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_ACTIVE);
830         GTEST_LOG_(INFO) << "AaFwk_WMS_window_test_002 Active";
831         usleep(AbilityTerminateTest::TEST_WAIT_TIME);
832 
833         mockAMS->TerminateAbility(nullptr, RESULT_CODE, &want);
834     }
835     GTEST_LOG_(INFO) << "AaFwk_WMS_window_test_002 TerminateAbility";
836 }
837 
838 /**
839  * @tc.number: AaFwk_DataAbility_Launch_0100
840  * @tc.name: DataAbilityHelper
841  * @tc.desc: The AbilityManager could receive the shelder of abilitythread for dataability when the dataability
842  * launched.
843  */
844 HWTEST_F(AbilityTerminateTest, AaFwk_DataAbility_Launch_0100, Function | MediumTest | Level1)
845 {
846     GTEST_LOG_(INFO) << "AaFwk_DataAbility_Launch_0100";
847 
848     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
849     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
850     EXPECT_NE(abilityToken, nullptr);
851     if (abilityToken != nullptr) {
852         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
853         abilityInfo->type = AppExecFwk::AbilityType::DATA;
854         abilityInfo->name = "DemoAbility";
855         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
856 
857         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
858 
859         sptr<IRemoteObject> remoteObject_ =
860             OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
861         sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
862 
863         Uri uri("testuri");
864         EXPECT_TRUE(abms->AcquireDataAbility(uri, false, nullptr) == nullptr);
865     }
866     GTEST_LOG_(INFO) << "AaFwk_DataAbility_Launch_0100";
867 }
868 
869 /**
870  * @tc.number: AaFwk_DataAbility_Start_0100
871  * @tc.name: DataAbilityHelper
872  * @tc.desc: The AbilityManager could receive the inactive state from abilitythread for dataability when the
873  dataability
874  * change its lifecycle state to inactive.
875  */
876 HWTEST_F(AbilityTerminateTest, AaFwk_DataAbility_Start_0100, Function | MediumTest | Level1)
877 {
878     GTEST_LOG_(INFO) << "AaFwk_DataAbility_Start_0100";
879 
880     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
881     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
882     EXPECT_NE(abilityToken, nullptr);
883     if (abilityToken != nullptr) {
884         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
885         abilityInfo->type = AppExecFwk::AbilityType::DATA;
886         abilityInfo->name = "DemoAbility";
887         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
888 
889         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
890 
891         sptr<IRemoteObject> remoteObject_ =
892             OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
893         sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
894         Want want;
895         abms->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_INACTIVE);
896 
897         usleep(AbilityBaseTest::TEST_WAIT_TIME);
898     }
899     GTEST_LOG_(INFO) << "AaFwk_DataAbility_Start_0100";
900 }
901 
902 /**
903  * @tc.number: AaFwk_DataAbility_Start_0200
904  * @tc.name: DataAbilityHelper
905  * @tc.desc: The AbilityManager could not receive the initial state from abilitythread for dataability.
906  *           And the OnStop coulde be called. When the dataability change its lifecycle state to initial.
907  */
908 HWTEST_F(AbilityTerminateTest, AaFwk_DataAbility_Start_0200, Function | MediumTest | Level1)
909 {
910     GTEST_LOG_(INFO) << "AaFwk_DataAbility_Start_0200";
911 
912     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
913     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
914     EXPECT_NE(abilityToken, nullptr);
915     if (abilityToken != nullptr) {
916         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
917         abilityInfo->type = AppExecFwk::AbilityType::DATA;
918         abilityInfo->name = "DemoAbility";
919         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
920 
921         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
922 
923         sptr<IRemoteObject> remoteObject_ =
924             OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
925         sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
926         Want want;
927         abms->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_INITIAL);
928 
929         usleep(AbilityBaseTest::TEST_WAIT_TIME);
930     }
931     GTEST_LOG_(INFO) << "AaFwk_DataAbility_Start_0200";
932 }
933 
934 /**
935  * @tc.number: AaFwk_DataAbility_Start_0300
936  * @tc.name: DataAbilityHelper
937  * @tc.desc: The AbilityManager could not receive the active state from abilitythread for dataability.
938  *           And the OnActive coulde be called. When the dataability change its lifecycle state to active.
939  */
940 HWTEST_F(AbilityTerminateTest, AaFwk_DataAbility_Start_0300, Function | MediumTest | Level1)
941 {
942     GTEST_LOG_(INFO) << "AaFwk_DataAbility_Start_0300";
943 
944     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
945     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
946     EXPECT_NE(abilityToken, nullptr);
947     if (abilityToken != nullptr) {
948         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
949         abilityInfo->type = AppExecFwk::AbilityType::DATA;
950         abilityInfo->name = "DemoAbility";
951         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
952 
953         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
954 
955         sptr<IRemoteObject> remoteObject_ =
956             OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
957         sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
958         Want want;
959         abms->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_ACTIVE);
960 
961         usleep(AbilityBaseTest::TEST_WAIT_TIME);
962     }
963     GTEST_LOG_(INFO) << "AaFwk_DataAbility_Start_0300";
964 }
965 
966 /**
967  * @tc.number: AaFwk_DataAbility_Start_0400
968  * @tc.name: DataAbilityHelper
969  * @tc.desc: The AbilityManager could not receive the background state from abilitythread for dataability.
970  *           And the OnBackground coulde be called. When the dataability change its lifecycle state to background.
971  */
972 HWTEST_F(AbilityTerminateTest, AaFwk_DataAbility_Start_0400, Function | MediumTest | Level1)
973 {
974     GTEST_LOG_(INFO) << "AaFwk_DataAbility_Start_0400";
975 
976     std::shared_ptr<OHOSApplication> application = std::make_shared<OHOSApplication>();
977     sptr<IRemoteObject> abilityToken = sptr<IRemoteObject>(new AbilityRuntime::FAAbilityThread());
978     EXPECT_NE(abilityToken, nullptr);
979     if (abilityToken != nullptr) {
980         std::shared_ptr<AbilityInfo> abilityInfo = std::make_shared<AbilityInfo>();
981         abilityInfo->type = AppExecFwk::AbilityType::DATA;
982         abilityInfo->name = "DemoAbility";
983         auto abilityRecord = std::make_shared<AbilityLocalRecord>(abilityInfo, abilityToken, nullptr, 0);
984 
985         AbilityThread::AbilityThreadMain(application, abilityRecord, nullptr);
986 
987         sptr<IRemoteObject> remoteObject_ =
988             OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
989         sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
990         Want want;
991         abms->StartAbility(want, AbilityLifeCycleState::ABILITY_STATE_BACKGROUND);
992 
993         usleep(AbilityBaseTest::TEST_WAIT_TIME);
994     }
995     GTEST_LOG_(INFO) << "AaFwk_DataAbility_Start_0400";
996 }
997 
998 /**
999  * @tc.number: AaFwk_IAbilityManager_StartAbilityAsCaller_0100
1000  * @tc.name: StartAbilityAsCaller
1001  * @tc.desc: test StartAbilityAsCaller function
1002  */
1003 HWTEST_F(AbilityTerminateTest, AaFwk_IAbilityManager_StartAbilityAsCaller_0100, Function | MediumTest | Level1)
1004 {
1005     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_StartAbilityAsCaller_0100";
1006     sptr<IRemoteObject> remoteObject_ =
1007         OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
1008     sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
1009     EXPECT_NE(abms, nullptr);
1010     Want want;
1011     EXPECT_EQ(0, abms->StartAbilityAsCaller(want, nullptr, nullptr));
1012     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_StartAbilityAsCaller_0100";
1013 }
1014 
1015 /**
1016  * @tc.number: AaFwk_IAbilityManager_StartAbilityAsCaller_0200
1017  * @tc.name: StartAbilityAsCaller
1018  * @tc.desc: test StartAbilityAsCaller function
1019  */
1020 HWTEST_F(AbilityTerminateTest, AaFwk_IAbilityManager_StartAbilityAsCaller_0200, Function | MediumTest | Level1)
1021 {
1022     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_StartAbilityAsCaller_0200";
1023     sptr<IRemoteObject> remoteObject_ =
1024         OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
1025     sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
1026     EXPECT_NE(abms, nullptr);
1027     Want want;
1028     StartOptions startOptions;
1029     EXPECT_EQ(0, abms->StartAbilityAsCaller(want, startOptions, nullptr, nullptr));
1030     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_StartAbilityAsCaller_0200";
1031 }
1032 
1033 /**
1034  * @tc.number: AaFwk_IAbilityManager_StartUIExtensionAbility_0100
1035  * @tc.name: StartUIExtensionAbility
1036  * @tc.desc: test StartUIExtensionAbility function
1037  */
1038 HWTEST_F(AbilityTerminateTest, AaFwk_IAbilityManager_StartUIExtensionAbility_0100, Function | MediumTest | Level1)
1039 {
1040     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_StartUIExtensionAbility_0100";
1041     sptr<IRemoteObject> remoteObject_ =
1042         OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
1043     sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
1044     EXPECT_NE(abms, nullptr);
1045     Want want;
1046     EXPECT_EQ(0, abms->StartAbilityAsCaller(want, nullptr, nullptr));
1047     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_StartUIExtensionAbility_0100";
1048 }
1049 
1050 /**
1051  * @tc.number: AaFwk_IAbilityManager_TerminateUIExtensionAbility_0100
1052  * @tc.name: TerminateUIExtensionAbility
1053  * @tc.desc: test TerminateUIExtensionAbility function
1054  */
1055 HWTEST_F(AbilityTerminateTest, AaFwk_IAbilityManager_TerminateUIExtensionAbility_0100, Function | MediumTest | Level1)
1056 {
1057     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_TerminateUIExtensionAbility_0100";
1058     sptr<IRemoteObject> remoteObject_ =
1059         OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
1060     sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
1061     EXPECT_NE(abms, nullptr);
1062     int resultCode = 1;
1063     EXPECT_EQ(0, abms->TerminateUIExtensionAbility(nullptr, resultCode));
1064     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_TerminateUIExtensionAbility_0100";
1065 }
1066 
1067 /**
1068  * @tc.number: AaFwk_IAbilityManager_SendResultToAbility_0100
1069  * @tc.name: SendResultToAbility
1070  * @tc.desc: test SendResultToAbility function
1071  */
1072 HWTEST_F(AbilityTerminateTest, AaFwk_IAbilityManager_SendResultToAbility_0100, Function | MediumTest | Level1)
1073 {
1074     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_SendResultToAbility_0100";
1075     sptr<IRemoteObject> remoteObject_ =
1076         OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
1077     sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
1078     EXPECT_NE(abms, nullptr);
1079     int requestCode = 1;
1080     int resultCode = 2;
1081     Want resultWant;
1082     EXPECT_EQ(0, abms->SendResultToAbility(requestCode, resultCode, resultWant));
1083     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_SendResultToAbility_0100";
1084 }
1085 
1086 /**
1087  * @tc.number: AaFwk_IAbilityManager_MinimizeUIExtensionAbility_0100
1088  * @tc.name: MinimizeUIExtensionAbility
1089  * @tc.desc: test MinimizeUIExtensionAbility function
1090  */
1091 HWTEST_F(AbilityTerminateTest, AaFwk_IAbilityManager_MinimizeUIExtensionAbility_0100, Function | MediumTest | Level1)
1092 {
1093     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_MinimizeUIExtensionAbility_0100";
1094     sptr<IRemoteObject> remoteObject_ =
1095         OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
1096     sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
1097     EXPECT_NE(abms, nullptr);
1098     EXPECT_EQ(0, abms->MinimizeUIExtensionAbility(nullptr));
1099     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_MinimizeUIExtensionAbility_0100";
1100 }
1101 
1102 /**
1103  * @tc.number: AaFwk_IAbilityManager_CallRequestDone_0100
1104  * @tc.name: CallRequestDone
1105  * @tc.desc: test CallRequestDone function
1106  */
1107 HWTEST_F(AbilityTerminateTest, AaFwk_IAbilityManager_CallRequestDone_0100, Function | MediumTest | Level1)
1108 {
1109     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_CallRequestDone_0100";
1110     sptr<IRemoteObject> remoteObject_ =
1111         OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
1112     sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
1113     EXPECT_NE(abms, nullptr);
1114     abms->CallRequestDone(nullptr, nullptr);
1115     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_CallRequestDone_0100";
1116 }
1117 
1118 /**
1119  * @tc.number: AaFwk_IAbilityManager_AddFreeInstallObserver_0100
1120  * @tc.name: AddFreeInstallObserver
1121  * @tc.desc: test AddFreeInstallObserver function
1122  */
1123 HWTEST_F(AbilityTerminateTest, AaFwk_IAbilityManager_AddFreeInstallObserver_0100, Function | MediumTest | Level1)
1124 {
1125     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_AddFreeInstallObserver_0100";
1126     sptr<IRemoteObject> remoteObject_ =
1127         OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
1128     sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
1129     EXPECT_NE(abms, nullptr);
1130     EXPECT_EQ(0, abms->AddFreeInstallObserver(nullptr, nullptr));
1131     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_AddFreeInstallObserver_0100";
1132 }
1133 
1134 /**
1135  * @tc.number: AaFwk_IAbilityManager_EnableRecoverAbility_0100
1136  * @tc.name: EnableRecoverAbility
1137  * @tc.desc: test EnableRecoverAbility function
1138  */
1139 HWTEST_F(AbilityTerminateTest, AaFwk_IAbilityManager_EnableRecoverAbility_0100, Function | MediumTest | Level1)
1140 {
1141     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_EnableRecoverAbility_0100";
1142     sptr<IRemoteObject> remoteObject_ =
1143         OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
1144     sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
1145     EXPECT_NE(abms, nullptr);
1146     abms->EnableRecoverAbility(nullptr);
1147     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_EnableRecoverAbility_0100";
1148 }
1149 
1150 /**
1151  * @tc.number: AaFwk_IAbilityManager_ScheduleRecoverAbility_0100
1152  * @tc.name: ScheduleRecoverAbility
1153  * @tc.desc: test ScheduleRecoverAbility function
1154  */
1155 HWTEST_F(AbilityTerminateTest, AaFwk_IAbilityManager_ScheduleRecoverAbility_0100, Function | MediumTest | Level1)
1156 {
1157     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_ScheduleRecoverAbility_0100";
1158     sptr<IRemoteObject> remoteObject_ =
1159         OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
1160     sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
1161     EXPECT_NE(abms, nullptr);
1162     int32_t reason = 1;
1163     abms->ScheduleRecoverAbility(nullptr, reason);
1164     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_ScheduleRecoverAbility_0100";
1165 }
1166 
1167 /**
1168  * @tc.number: AaFwk_IAbilityManager_VerifyPermission_0100
1169  * @tc.name: VerifyPermission
1170  * @tc.desc: test VerifyPermission function
1171  */
1172 HWTEST_F(AbilityTerminateTest, AaFwk_IAbilityManager_VerifyPermission_0100, Function | MediumTest | Level1)
1173 {
1174     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_VerifyPermission_0100";
1175     sptr<IRemoteObject> remoteObject_ =
1176         OHOS::DelayedSingleton<AppExecFwk::SysMrgClient>::GetInstance()->GetSystemAbility(ABILITY_MGR_SERVICE_ID);
1177     sptr<AAFwk::IAbilityManager> abms = iface_cast<AAFwk::IAbilityManager>(remoteObject_);
1178     EXPECT_NE(abms, nullptr);
1179     std::string permission = "<permission>";
1180     int pid = 1;
1181     int uid = 1;
1182     EXPECT_EQ(0, abms->VerifyPermission(permission, pid, uid));
1183     GTEST_LOG_(INFO) << "AaFwk_IAbilityManager_VerifyPermission_0100";
1184 }
1185 } // namespace AppExecFwk
1186 } // namespace OHOS
1187