• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2024 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 <gtest/gtest.h>
17 #include <memory>
18 
19 #define private public
20 #define protected public
21 #include "ability_connect_manager.h"
22 #undef private
23 #undef protected
24 
25 #include "ability_config.h"
26 #include "ability_manager_errors.h"
27 #include "ability_scheduler.h"
28 #include "ability_util.h"
29 #include "bundlemgr/mock_bundle_manager.h"
30 #include "hilog_tag_wrapper.h"
31 #include "mock_ability_connect_callback.h"
32 #include "mock_sa_call.h"
33 #include "mock_task_handler_wrap.h"
34 #include "sa_mgr_client.h"
35 #include "system_ability_definition.h"
36 #include <thread>
37 #include <chrono>
38 
39 using namespace testing::ext;
40 using namespace OHOS::AppExecFwk;
41 using testing::_;
42 using testing::Invoke;
43 using testing::Return;
44 using testing::SetArgReferee;
45 using ::testing::DoAll;
46 
47 namespace {
48     const int32_t SLEEP_TIME = 10000;
49 }
50 
51 namespace OHOS {
52 namespace AAFwk {
53 template<typename F>
WaitUntilTaskCalled(const F & f,const std::shared_ptr<TaskHandlerWrap> & handler,std::atomic<bool> & taskCalled)54 static void WaitUntilTaskCalled(const F& f, const std::shared_ptr<TaskHandlerWrap>& handler,
55     std::atomic<bool>& taskCalled)
56 {
57     const uint32_t maxRetryCount = 1000;
58     const uint32_t sleepTime = 1000;
59     uint32_t count = 0;
60     if (handler->SubmitTask(f)) {
61         while (!taskCalled.load()) {
62             ++count;
63             // if delay more than 1 second, break
64             if (count >= maxRetryCount) {
65                 break;
66             }
67             usleep(sleepTime);
68         }
69     }
70 }
71 
WaitUntilTaskDone(const std::shared_ptr<TaskHandlerWrap> & handler)72 static void WaitUntilTaskDone(const std::shared_ptr<TaskHandlerWrap>& handler)
73 {
74     std::atomic<bool> taskCalled(false);
75     auto f = [&taskCalled]() { taskCalled.store(true); };
76     WaitUntilTaskCalled(f, handler, taskCalled);
77 }
78 
79 class AbilityConnectManagerTest : public testing::Test {
80 public:
81     static void SetUpTestCase(void);
82     static void TearDownTestCase(void);
83     void SetUp();
84     void TearDown();
85 
86     AbilityConnectManager* ConnectManager() const;
87     std::shared_ptr<MockTaskHandlerWrap> TaskHandler() const;
88     std::shared_ptr<EventHandlerWrap> EventHandler() const;
89 
90     AbilityRequest GenerateAbilityRequest(const std::string& deviceName, const std::string& abilityName,
91         const std::string& appName, const std::string& bundleName, const std::string& moduleName);
92 
93     static constexpr int TEST_WAIT_TIME = 1000000;
94 
95     sptr<SessionInfo> MockSessionInfo(int32_t persistentId);
96     std::shared_ptr<AbilityRecord> InitAbilityRecord();
97     std::shared_ptr<MockTaskHandlerWrap> taskHandler_;
98 
99 protected:
100     AbilityRequest abilityRequest_{};
101     AbilityRequest abilityRequest1_{};
102     AbilityRequest abilityRequest2_{};
103     std::shared_ptr<AbilityRecord> serviceRecord_{ nullptr };
104     std::shared_ptr<AbilityRecord> serviceRecord1_{ nullptr };
105     std::shared_ptr<AbilityRecord> serviceRecord2_{ nullptr };
106     OHOS::sptr<Token> serviceToken_{ nullptr };
107     OHOS::sptr<Token> serviceToken1_{ nullptr };
108     OHOS::sptr<Token> serviceToken2_{ nullptr };
109     OHOS::sptr<IAbilityConnection> callbackA_{ nullptr };
110     OHOS::sptr<IAbilityConnection> callbackB_{ nullptr };
111 
112 private:
113     std::shared_ptr<AbilityConnectManager> connectManager_;
114     std::shared_ptr<EventHandlerWrap> eventHandler_;
115 };
116 
GenerateAbilityRequest(const std::string & deviceName,const std::string & abilityName,const std::string & appName,const std::string & bundleName,const std::string & moduleName)117 AbilityRequest AbilityConnectManagerTest::GenerateAbilityRequest(const std::string& deviceName,
118     const std::string& abilityName, const std::string& appName, const std::string& bundleName,
119     const std::string& moduleName)
120 {
121     ElementName element(deviceName, bundleName, abilityName, moduleName);
122     Want want;
123     want.SetElement(element);
124 
125     AbilityInfo abilityInfo;
126     abilityInfo.visible = true;
127     abilityInfo.applicationName = appName;
128     abilityInfo.type = AbilityType::SERVICE;
129     abilityInfo.name = abilityName;
130     abilityInfo.bundleName = bundleName;
131     abilityInfo.moduleName = moduleName;
132     abilityInfo.deviceId = deviceName;
133     ApplicationInfo appinfo;
134     appinfo.name = appName;
135     abilityInfo.applicationInfo = appinfo;
136     AbilityRequest abilityRequest;
137     abilityRequest.want = want;
138     abilityRequest.abilityInfo = abilityInfo;
139     abilityRequest.appInfo = appinfo;
140     abilityInfo.process = bundleName;
141 
142     return abilityRequest;
143 }
144 
MockSessionInfo(int32_t persistentId)145 sptr<SessionInfo> AbilityConnectManagerTest::MockSessionInfo(int32_t persistentId)
146 {
147     sptr<SessionInfo> sessionInfo = new (std::nothrow) SessionInfo();
148     if (!sessionInfo) {
149         TAG_LOGE(AAFwkTag::TEST, "sessionInfo is nullptr");
150         return nullptr;
151     }
152     sessionInfo->persistentId = persistentId;
153     return sessionInfo;
154 }
155 
InitAbilityRecord()156 std::shared_ptr<AbilityRecord> AbilityConnectManagerTest::InitAbilityRecord()
157 {
158     AbilityRequest abilityRequest;
159     abilityRequest.appInfo.bundleName = "com.example.unittest";
160     abilityRequest.abilityInfo.name = "MainAbility";
161     abilityRequest.abilityInfo.type = AbilityType::PAGE;
162     std::shared_ptr<AbilityRecord> abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest);
163     return abilityRecord;
164 }
165 
SetUpTestCase(void)166 void AbilityConnectManagerTest::SetUpTestCase(void)
167 {}
TearDownTestCase(void)168 void AbilityConnectManagerTest::TearDownTestCase(void)
169 {
170     std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIME));
171 }
172 
SetUp(void)173 void AbilityConnectManagerTest::SetUp(void)
174 {
175     connectManager_ = std::make_unique<AbilityConnectManager>(0);
176     taskHandler_ = MockTaskHandlerWrap::CreateQueueHandler("AbilityConnectManagerTest");
177     eventHandler_ = std::make_shared<EventHandlerWrap>(taskHandler_);
178     // generate ability request
179     std::string deviceName = "device";
180     std::string abilityName = "ServiceAbility";
181     std::string appName = "hiservcie";
182     std::string bundleName = "com.ix.hiservcie";
183     std::string moduleName = "entry";
184     abilityRequest_ = GenerateAbilityRequest(deviceName, abilityName, appName, bundleName, moduleName);
185     serviceRecord_ = AbilityRecord::CreateAbilityRecord(abilityRequest_);
186     serviceToken_ = serviceRecord_->GetToken();
187     std::string deviceName1 = "device";
188     std::string abilityName1 = "musicServiceAbility";
189     std::string appName1 = "musicservcie";
190     std::string bundleName1 = "com.ix.musicservcie";
191     std::string moduleName1 = "entry";
192     abilityRequest1_ = GenerateAbilityRequest(deviceName1, abilityName1, appName1, bundleName1, moduleName1);
193     serviceRecord1_ = AbilityRecord::CreateAbilityRecord(abilityRequest1_);
194     std::string deviceName2 = "device";
195     std::string abilityName2 = "residentServiceAbility";
196     std::string appName2 = "residentservcie";
197     std::string bundleName2 = "com.ix.residentservcie";
198     std::string moduleName2 = "entry";
199     abilityRequest2_ = GenerateAbilityRequest(deviceName2, abilityName2, appName2, bundleName2, moduleName2);
200     serviceRecord2_ = AbilityRecord::CreateAbilityRecord(abilityRequest2_);
201     serviceToken2_ = serviceRecord_->GetToken();
202     serviceToken1_ = serviceRecord_->GetToken();
203     callbackA_ = new AbilityConnectCallback();
204     callbackB_ = new AbilityConnectCallback();
205     // mock bms
206     OHOS::DelayedSingleton<SaMgrClient>::GetInstance()->RegisterSystemAbility(
207         OHOS::BUNDLE_MGR_SERVICE_SYS_ABILITY_ID, new BundleMgrService());
208 }
209 
TearDown(void)210 void AbilityConnectManagerTest::TearDown(void)
211 {
212     // reset the callback count
213     AbilityConnectCallback::onAbilityConnectDoneCount = 0;
214     AbilityConnectCallback::onAbilityDisconnectDoneCount = 0;
215     serviceRecord_ = nullptr;
216 }
217 
ConnectManager() const218 AbilityConnectManager* AbilityConnectManagerTest::ConnectManager() const
219 {
220     return connectManager_.get();
221 }
222 
TaskHandler() const223 std::shared_ptr<MockTaskHandlerWrap> AbilityConnectManagerTest::TaskHandler() const
224 {
225     return taskHandler_;
226 }
227 
EventHandler() const228 std::shared_ptr<EventHandlerWrap> AbilityConnectManagerTest::EventHandler() const
229 {
230     return eventHandler_;
231 }
232 
233 /*
234  * Feature: AbilityConnectManager
235  * Function: StartAbility
236  * SubFunction: NA
237  * FunctionPoints: StartAbility
238  * EnvConditions:NA
239  * CaseDescription: Verify the normal process of startability
240  */
241 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_001, TestSize.Level1)
242 {
243     ConnectManager()->SetTaskHandler(TaskHandler());
244     ConnectManager()->SetEventHandler(EventHandler());
245 
246     auto result = ConnectManager()->StartAbility(abilityRequest_);
247     EXPECT_EQ(OHOS::ERR_OK, result);
248     WaitUntilTaskDone(TaskHandler());
249 
250     auto elementName = abilityRequest_.want.GetElement().GetURI();
251     auto service = ConnectManager()->GetServiceRecordByElementName(elementName);
252     EXPECT_NE(service, nullptr);
253     EXPECT_EQ(static_cast<int>(ConnectManager()->GetServiceMap().size()), 1);
254 
255     service->SetAbilityState(OHOS::AAFwk::AbilityState::ACTIVE);
256 
257     auto result1 = ConnectManager()->StartAbility(abilityRequest_);
258     WaitUntilTaskDone(TaskHandler());
259     EXPECT_EQ(OHOS::ERR_OK, result1);
260     EXPECT_EQ(static_cast<int>(ConnectManager()->GetServiceMap().size()), 1);
261 
262     service->SetAbilityState(OHOS::AAFwk::AbilityState::ACTIVATING);
263     auto result2 = ConnectManager()->StartAbility(abilityRequest_);
264     WaitUntilTaskDone(TaskHandler());
265     EXPECT_EQ(OHOS::ERR_OK, result2);
266     EXPECT_EQ(static_cast<int>(ConnectManager()->GetServiceMap().size()), 1);
267 }
268 
269 /*
270  * Feature: AbilityConnectManager
271  * Function: TerminateAbility
272  * SubFunction: NA
273  * FunctionPoints: StartAbility and TerminateAbility
274  * EnvConditions:NA
275  * CaseDescription: Verify the following:
276  * 1.token is nullptr, terminate ability failed
277  * 2.token is not nullptr, terminate ability success, and verify the status
278  */
279 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_002, TestSize.Level1)
280 {
281     ConnectManager()->SetTaskHandler(TaskHandler());
282     ConnectManager()->SetEventHandler(EventHandler());
283 
284     auto result = ConnectManager()->StartAbility(abilityRequest_);
285     EXPECT_EQ(OHOS::ERR_OK, result);
286     WaitUntilTaskDone(TaskHandler());
287 
288     OHOS::sptr<OHOS::IRemoteObject> nullToken = nullptr;
289     auto result1 = ConnectManager()->TerminateAbility(nullToken);
290     EXPECT_EQ(ERR_CONNECT_MANAGER_NULL_ABILITY_RECORD, result1);
291 
292     auto elementName = abilityRequest_.want.GetElement().GetURI();
293     auto service = ConnectManager()->GetServiceRecordByElementName(elementName);
294     EXPECT_NE(service, nullptr);
295 
296     auto result2 = ConnectManager()->TerminateAbility(service->GetToken());
297     WaitUntilTaskDone(TaskHandler());
298     EXPECT_EQ(OHOS::ERR_OK, result2);
299     EXPECT_EQ(service->GetAbilityState(), TERMINATING);
300 }
301 
302 /*
303  * Feature: AbilityConnectManager
304  * Function: TerminateAbility
305  * SubFunction: NA
306  * FunctionPoints: StartAbility and TerminateAbility
307  * EnvConditions:NA
308  * CaseDescription: Verify ability is terminating, terminate ability success
309  */
310 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_003, TestSize.Level1)
311 {
312     ConnectManager()->SetTaskHandler(TaskHandler());
313     ConnectManager()->SetEventHandler(EventHandler());
314 
315     auto result = ConnectManager()->StartAbility(abilityRequest_);
316     EXPECT_EQ(OHOS::ERR_OK, result);
317     WaitUntilTaskDone(TaskHandler());
318 
319     auto elementName = abilityRequest_.want.GetElement().GetURI();
320     auto service = ConnectManager()->GetServiceRecordByElementName(elementName);
321     EXPECT_NE(service, nullptr);
322 
323     service->SetTerminatingState();
324     auto result1 = ConnectManager()->TerminateAbility(service->GetToken());
325     WaitUntilTaskDone(TaskHandler());
326     EXPECT_EQ(OHOS::ERR_OK, result1);
327     EXPECT_NE(service->GetAbilityState(), TERMINATING);
328 }
329 
330 /*
331  * Feature: AbilityConnectManager
332  * Function: TerminateAbility
333  * SubFunction: NA
334  * FunctionPoints: StartAbility and TerminateAbility
335  * EnvConditions: NA
336  * CaseDescription: Verify service is connected, terminate ability failed
337  */
338 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_004, TestSize.Level1)
339 {
340     ConnectManager()->SetTaskHandler(TaskHandler());
341     ConnectManager()->SetEventHandler(EventHandler());
342 
343     auto result = ConnectManager()->StartAbility(abilityRequest_);
344     EXPECT_EQ(OHOS::ERR_OK, result);
345     WaitUntilTaskDone(TaskHandler());
346 
347     auto result1 = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
348     EXPECT_EQ(0, result1);
349 
350     auto elementName = abilityRequest_.want.GetElement().GetURI();
351     auto service = ConnectManager()->GetServiceRecordByElementName(elementName);
352     EXPECT_NE(service, nullptr);
353 
354     auto result2 = ConnectManager()->TerminateAbility(service->GetToken());
355     WaitUntilTaskDone(TaskHandler());
356     EXPECT_EQ(0, result2);
357     EXPECT_EQ(service->GetAbilityState(), TERMINATING);
358 }
359 
360 /*
361  * Feature: AbilityConnectManager
362  * Function: StopServiceAbility
363  * SubFunction: NA
364  * FunctionPoints: StartAbility and StopServiceAbility
365  * EnvConditions: NA
366  * CaseDescription: Verify the following:
367  * 1.token is nullptr, stop service ability failed
368  * 2.token is not nullptr, stop service ability success, and verify the status
369  */
370 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_005, TestSize.Level1)
371 {
372     ConnectManager()->SetTaskHandler(TaskHandler());
373     ConnectManager()->SetEventHandler(EventHandler());
374 
375     auto result = ConnectManager()->StartAbility(abilityRequest_);
376     EXPECT_EQ(OHOS::ERR_OK, result);
377     WaitUntilTaskDone(TaskHandler());
378 
379     auto elementName = abilityRequest_.want.GetElement().GetURI();
380     auto service = ConnectManager()->GetServiceRecordByElementName(elementName);
381     EXPECT_NE(service, nullptr);
382 
383     AbilityRequest otherRequest;
384     auto result1 = ConnectManager()->StopServiceAbility(otherRequest);
385     WaitUntilTaskDone(TaskHandler());
386     EXPECT_EQ(OHOS::ERR_INVALID_VALUE, result1);
387 
388     auto result2 = ConnectManager()->StopServiceAbility(abilityRequest_);
389     WaitUntilTaskDone(TaskHandler());
390     EXPECT_EQ(OHOS::ERR_OK, result2);
391     EXPECT_EQ(service->GetAbilityState(), TERMINATING);
392 }
393 
394 /*
395  * Feature: AbilityConnectManager
396  * Function: StopServiceAbility
397  * SubFunction: NA
398  * FunctionPoints: StartAbility and StopServiceAbility
399  * EnvConditions:NA
400  * CaseDescription: Verify ability is terminating, stop service ability success
401  */
402 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_006, TestSize.Level1)
403 {
404     ConnectManager()->SetTaskHandler(TaskHandler());
405     ConnectManager()->SetEventHandler(EventHandler());
406 
407     auto result = ConnectManager()->StartAbility(abilityRequest_);
408     EXPECT_EQ(OHOS::ERR_OK, result);
409     WaitUntilTaskDone(TaskHandler());
410 
411     auto elementName = abilityRequest_.want.GetElement().GetURI();
412     auto service = ConnectManager()->GetServiceRecordByElementName(elementName);
413     EXPECT_NE(service, nullptr);
414 
415     service->SetTerminatingState();
416     auto result1 = ConnectManager()->StopServiceAbility(abilityRequest_);
417     WaitUntilTaskDone(TaskHandler());
418     EXPECT_EQ(OHOS::ERR_OK, result1);
419     EXPECT_NE(service->GetAbilityState(), TERMINATING);
420 }
421 
422 /*
423  * Feature: AbilityConnectManager
424  * Function: StopServiceAbility
425  * SubFunction: NA
426  * FunctionPoints: StartAbility and StopServiceAbility
427  * EnvConditions: NA
428  * CaseDescription: Verify service is connected, stop service ability failed
429  */
430 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_007, TestSize.Level1)
431 {
432     ConnectManager()->SetTaskHandler(TaskHandler());
433     ConnectManager()->SetEventHandler(EventHandler());
434 
435     auto result = ConnectManager()->StartAbility(abilityRequest_);
436     EXPECT_EQ(OHOS::ERR_OK, result);
437     WaitUntilTaskDone(TaskHandler());
438 
439     auto result1 = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
440     EXPECT_EQ(0, result1);
441 
442     auto elementName = abilityRequest_.want.GetElement().GetURI();
443     auto service = ConnectManager()->GetServiceRecordByElementName(elementName);
444     EXPECT_NE(service, nullptr);
445 
446     auto result2 = ConnectManager()->StopServiceAbility(abilityRequest_);
447     WaitUntilTaskDone(TaskHandler());
448     EXPECT_EQ(0, result2);
449     EXPECT_EQ(service->GetAbilityState(), TERMINATING);
450 }
451 
452 /*
453  * Feature: AbilityConnectManager
454  * Function: ConnectAbilityLocked
455  * SubFunction: NA
456  * FunctionPoints: NA
457  * EnvConditions:NA
458  * CaseDescription: verify the scene of service not loaded and callback not bound.
459  */
460 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_008, TestSize.Level1)
461 {
462     int result = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
463     EXPECT_EQ(0, result);
464 
465     auto connectMap = ConnectManager()->connectMap_;
466     auto connectRecordList = connectMap.at(callbackA_->AsObject());
467     EXPECT_EQ(1, static_cast<int>(connectRecordList.size()));
468 
469     auto elementName = abilityRequest_.want.GetElement();
470     auto elementNameUri = elementName.GetURI();
471     auto serviceMap = ConnectManager()->GetServiceMap();
472     auto abilityRecord = serviceMap.at(elementNameUri);
473     connectRecordList = abilityRecord->GetConnectRecordList();
474     EXPECT_EQ(1, static_cast<int>(connectRecordList.size()));
475 }
476 
477 /*
478  * Feature: AbilityConnectManager
479  * Function: ConnectAbilityLocked
480  * SubFunction: NA
481  * FunctionPoints: NA
482  * EnvConditions:NA
483  * CaseDescription: verify the scene of service load ability's timeout.
484  */
485 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_009, TestSize.Level1)
486 {
487     ConnectManager()->SetTaskHandler(TaskHandler());
488     ConnectManager()->SetEventHandler(EventHandler());
489     int result = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
490     EXPECT_EQ(0, result);
491 
492     auto connectMap = ConnectManager()->connectMap_;
493     EXPECT_EQ(1, static_cast<int>(connectMap.size()));
494     WaitUntilTaskDone(TaskHandler());
495     usleep(TEST_WAIT_TIME);
496 
497     connectMap = ConnectManager()->connectMap_;
498     EXPECT_EQ(1, static_cast<int>(connectMap.size()));
499 }
500 
501 /*
502  * Feature: AbilityConnectManager
503  * Function: ConnectAbilityLocked
504  * SubFunction: NA
505  * FunctionPoints: NA
506  * EnvConditions:NA
507  * CaseDescription: verify the scene of service loaded and callback not bound.
508  */
509 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_010, TestSize.Level1)
510 {
511     auto result = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
512     EXPECT_EQ(0, result);
513 
514     result = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackB_, nullptr);
515     EXPECT_EQ(0, result);
516 
517     auto connectMap = ConnectManager()->connectMap_;
518     auto connectRecordList = connectMap.at(callbackA_->AsObject());
519     EXPECT_EQ(1, static_cast<int>(connectRecordList.size()));
520 
521     connectRecordList = connectMap.at(callbackB_->AsObject());
522     EXPECT_EQ(1, static_cast<int>(connectRecordList.size()));
523 
524     auto elementName = abilityRequest_.want.GetElement();
525     std::string elementNameUri = elementName.GetURI();
526     auto serviceMap = ConnectManager()->GetServiceMap();
527     auto abilityRecord = serviceMap.at(elementNameUri);
528     connectRecordList = abilityRecord->GetConnectRecordList();
529     EXPECT_EQ(2, static_cast<int>(connectRecordList.size()));
530 }
531 
532 /*
533  * Feature: AbilityConnectManager
534  * Function: ConnectAbilityLocked
535  * SubFunction: NA
536  * FunctionPoints: NA
537  * EnvConditions:NA
538  * CaseDescription: verify the scene of service connect ability's timeout.
539  */
540 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_011, TestSize.Level1)
541 {
542     ConnectManager()->SetTaskHandler(TaskHandler());
543     ConnectManager()->SetEventHandler(EventHandler());
544 
545     int result = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
546     auto elementName = abilityRequest_.want.GetElement();
547     std::string elementNameUri = elementName.GetURI();
548     auto serviceMap = ConnectManager()->GetServiceMap();
549     auto abilityRecord = serviceMap.at(elementNameUri);
550     auto token = abilityRecord->GetToken();
551 
552     auto connectMap = ConnectManager()->connectMap_;
553     EXPECT_EQ(1, static_cast<int>(connectMap.size()));
554 
555     auto scheduler = new AbilityScheduler();
556     ConnectManager()->AttachAbilityThreadLocked(scheduler, token->AsObject());
557     ConnectManager()->AbilityTransitionDone(token->AsObject(), OHOS::AAFwk::AbilityState::INACTIVE);
558 
559     WaitUntilTaskDone(TaskHandler());
560     usleep(TEST_WAIT_TIME);
561     connectMap = ConnectManager()->connectMap_;
562     EXPECT_EQ(0, result);
563     EXPECT_EQ(1, static_cast<int>(connectMap.size()));
564 }
565 
566 /*
567  * Feature: AbilityConnectManager
568  * Function: ConnectAbilityLocked
569  * SubFunction: NA
570  * FunctionPoints: NA
571  * EnvConditions:NA
572  * CaseDescription: verify the scene of service loaded and callback bound.
573  */
574 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_012, TestSize.Level1)
575 {
576     auto result = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
577     EXPECT_EQ(0, result);
578 
579     result = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
580     EXPECT_EQ(0, result);
581 
582     auto connectMap = ConnectManager()->connectMap_;
583     auto connectRecordList = connectMap.at(callbackA_->AsObject());
584     EXPECT_EQ(1, static_cast<int>(connectRecordList.size()));
585 
586     auto elementName = abilityRequest_.want.GetElement();
587     std::string elementNameUri = elementName.GetURI();
588     auto serviceMap = ConnectManager()->GetServiceMap();
589     auto abilityRecord = serviceMap.at(elementNameUri);
590     connectRecordList = abilityRecord->GetConnectRecordList();
591     EXPECT_EQ(1, static_cast<int>(connectRecordList.size()));
592 }
593 
594 /*
595  * Feature: AbilityConnectManager
596  * Function: ConnectAbilityLocked
597  * SubFunction: NA
598  * FunctionPoints: NA
599  * EnvConditions:NA
600  * CaseDescription: verify the scene of service not loaded and callback bound.
601  */
602 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_013, TestSize.Level1)
603 {
604     int result = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
605     EXPECT_EQ(0, result);
606 
607     std::string deviceNameB = "device";
608     std::string abilityNameB = "ServiceAbilityB";
609     std::string appNameB = "hiservcieB";
610     std::string bundleNameB = "com.ix.hiservcieB";
611     std::string moduleNameB = "entry";
612     auto abilityRequestB = GenerateAbilityRequest(deviceNameB, abilityNameB, appNameB, bundleNameB, moduleNameB);
613     result = ConnectManager()->ConnectAbilityLocked(abilityRequestB, callbackA_, nullptr);
614     EXPECT_EQ(0, result);
615 
616     auto connectMap = ConnectManager()->connectMap_;
617     auto connectRecordList = connectMap.at(callbackA_->AsObject());
618     EXPECT_EQ(2, static_cast<int>(connectRecordList.size()));
619 
620     auto elementName = abilityRequest_.want.GetElement();
621     std::string elementNameUri = elementName.GetURI();
622     auto serviceMap = ConnectManager()->GetServiceMap();
623     auto abilityRecord = serviceMap.at(elementNameUri);
624     connectRecordList = abilityRecord->GetConnectRecordList();
625     EXPECT_EQ(1, static_cast<int>(connectRecordList.size()));
626 
627     auto elementNameB = abilityRequest_.want.GetElement();
628     std::string elementNameUriB = elementNameB.GetURI();
629     abilityRecord = serviceMap.at(elementNameUriB);
630     connectRecordList = abilityRecord->GetConnectRecordList();
631     EXPECT_EQ(1, static_cast<int>(connectRecordList.size()));
632 }
633 
634 /*
635  * Feature: AbilityConnectManager
636  * Function: ConnectAbilityLocked
637  * SubFunction: NA
638  * FunctionPoints: NA
639  * EnvConditions:NA
640  * CaseDescription: verify the scene of service loaded and callback bound, but service and callback was not associated.
641  */
642 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_014, TestSize.Level1)
643 {
644     auto result = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
645     EXPECT_EQ(0, result);
646 
647     std::string deviceNameB = "device";
648     std::string abilityNameB = "ServiceAbilityB";
649     std::string appNameB = "hiservcieB";
650     std::string bundleNameB = "com.ix.hiservcieB";
651     std::string moduleNameB = "entry";
652     auto abilityRequestB = GenerateAbilityRequest(deviceNameB, abilityNameB, appNameB, bundleNameB, moduleNameB);
653     result = ConnectManager()->ConnectAbilityLocked(abilityRequestB, callbackB_, nullptr);
654     EXPECT_EQ(0, result);
655 
656     ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackB_, nullptr);
657     auto connectMap = ConnectManager()->connectMap_;
658     auto connectRecordList = connectMap.at(callbackB_->AsObject());
659     EXPECT_EQ(2, static_cast<int>(connectRecordList.size()));
660 
661     connectRecordList = connectMap.at(callbackA_->AsObject());
662     EXPECT_EQ(1, static_cast<int>(connectRecordList.size()));
663 
664     auto elementName = abilityRequest_.want.GetElement();
665     std::string elementNameUri = elementName.GetURI();
666     auto serviceMap = ConnectManager()->GetServiceMap();
667     auto abilityRecord = serviceMap.at(elementNameUri);
668     connectRecordList = abilityRecord->GetConnectRecordList();
669     EXPECT_EQ(2, static_cast<int>(connectRecordList.size()));
670 }
671 
672 /*
673  * Feature: AbilityConnectManager
674  * Function: AttachAbilityThreadLocked
675  * SubFunction: NA
676  * FunctionPoints: NA
677  * EnvConditions:NA
678  * CaseDescription: verify the AttachAbilityThreadLocked function when the parameter is null.
679  */
680 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_015, TestSize.Level1)
681 {
682     auto result = ConnectManager()->AttachAbilityThreadLocked(nullptr, nullptr);
683     EXPECT_EQ(OHOS::ERR_INVALID_VALUE, result);
684 }
685 
686 /*
687  * Feature: AbilityConnectManager
688  * Function: ScheduleConnectAbilityDoneLocked
689  * SubFunction: NA
690  * FunctionPoints: NA
691  * EnvConditions:NA
692  * CaseDescription: verify the ScheduleConnectAbilityDoneLocked function when the parameter is null.
693  */
694 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_016, TestSize.Level1)
695 {
696     auto callback = new AbilityConnectCallback();
697     auto result = ConnectManager()->ScheduleConnectAbilityDoneLocked(nullptr, callback);
698     EXPECT_EQ(OHOS::ERR_INVALID_VALUE, result);
699 }
700 
701 /*
702  * Feature: AbilityConnectManager
703  * Function: ScheduleConnectAbilityDoneLocked
704  * SubFunction: NA
705  * FunctionPoints: NA
706  * EnvConditions:NA
707  * CaseDescription: verify the ScheduleConnectAbilityDoneLocked function when the state is CONNECTED.
708  */
709 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_017, TestSize.Level1)
710 {
711     auto callback = new AbilityConnectCallback();
712     ConnectManager()->ConnectAbilityLocked(abilityRequest_, callback, nullptr);
713 
714     auto elementName = abilityRequest_.want.GetElement();
715     std::string elementNameUri = elementName.GetURI();
716     auto serviceMap = ConnectManager()->GetServiceMap();
717     auto abilityRecord = serviceMap.at(elementNameUri);
718     auto token = abilityRecord->GetToken();
719 
720     abilityRecord->SetAbilityState(OHOS::AAFwk::AbilityState::ACTIVE);
721     ConnectManager()->ScheduleConnectAbilityDoneLocked(token, callback);
722     auto abilityRecordB = Token::GetAbilityRecordByToken(token);
723     EXPECT_TRUE(abilityRecordB);
724     auto connectRecordList = abilityRecordB->GetConnectRecordList();
725     int size = connectRecordList.size();
726     EXPECT_EQ(1, size);
727     if (size != 0) {
728         auto connState = (*(connectRecordList.begin()))->GetConnectState();
729         EXPECT_EQ(ConnectionState::CONNECTED, connState);
730     }
731 }
732 
733 /*
734  * Feature: AbilityConnectManager
735  * Function: GetActiveUIExtensionList
736  * SubFunction: NA
737  * FunctionPoints: NA
738  * EnvConditions:NA
739  * CaseDescription: verify the GetActiveUIExtensionList function.
740  */
741 HWTEST_F(AbilityConnectManagerTest, GetActiveUIExtensionList_01, TestSize.Level1)
742 {
743     int32_t pid = 1;
744     std::vector<std::string> extensionList;
745     auto result = ConnectManager()->GetActiveUIExtensionList(pid, extensionList);
746     EXPECT_EQ(result, ERR_OK);
747 
748     std::string bundleName = "com.test.demo";
749     result = ConnectManager()->GetActiveUIExtensionList(bundleName, extensionList);
750     EXPECT_EQ(result, ERR_OK);
751 }
752 
753 /*
754  * Feature: AbilityConnectManager
755  * Function: ScheduleConnectAbilityDoneLocked
756  * SubFunction: NA
757  * FunctionPoints: NA
758  * EnvConditions:NA
759  * CaseDescription: verify the input parameters.
760  */
761 HWTEST_F(AbilityConnectManagerTest, AAFWK_Kit_Connect_001, TestSize.Level1)
762 {
763     // start test
764     // test1 for serviceToken is null but remoteObject is valid
765     OHOS::sptr<OHOS::IRemoteObject> object = new AbilityConnectCallback();
766     int ret = ConnectManager()->ScheduleConnectAbilityDoneLocked(nullptr, object);
767     EXPECT_EQ(OHOS::ERR_INVALID_VALUE, ret);
768 
769     // test2 for both of serviceToken and remoteObject are null
770     ret = ConnectManager()->ScheduleConnectAbilityDoneLocked(nullptr, nullptr);
771     EXPECT_EQ(OHOS::ERR_INVALID_VALUE, ret);
772 }
773 
774 /*
775  * Feature: AbilityConnectManager
776  * Function: ScheduleConnectAbilityDoneLocked
777  * SubFunction: NA
778  * FunctionPoints: NA
779  * EnvConditions:NA
780  * CaseDescription: verify the input serviceToken which corresponding ability record doesn't exist.
781  */
782 HWTEST_F(AbilityConnectManagerTest, AAFWK_Kit_Connect_002, TestSize.Level1)
783 {
784     // test for serviceToken's abilityRecord is null
785     serviceRecord_ = nullptr;
786     int ret = ConnectManager()->ScheduleConnectAbilityDoneLocked(serviceToken_, nullptr);
787     EXPECT_EQ(OHOS::ERR_INVALID_VALUE, ret);
788 }
789 
790 /*
791  * Feature: AbilityConnectManager
792  * Function: ScheduleConnectAbilityDoneLocked
793  * SubFunction: OnAbilityConnectDone
794  * FunctionPoints: NA
795  * EnvConditions:NA
796  * CaseDescription: verify the input serviceToken which corresponding connection list is empty.
797  */
798 HWTEST_F(AbilityConnectManagerTest, AAFWK_Kit_Connect_003, TestSize.Level1)
799 {
800     // test for serviceToken's connection list is null
801     // start test
802     auto callback = new AbilityConnectCallback();
803     int ret = ConnectManager()->ScheduleConnectAbilityDoneLocked(serviceToken_, callback);
804     EXPECT_EQ(OHOS::AAFwk::INVALID_CONNECTION_STATE, ret);
805     auto connList = serviceRecord_->GetConnectRecordList();
806     EXPECT_EQ(true, connList.empty());  // the connection list size should be empty
807 }
808 
809 /*
810  * Feature: AbilityConnectManager
811  * Function: ScheduleConnectAbilityDoneLocked
812  * SubFunction: OnAbilityConnectDone
813  * FunctionPoints: NA
814  * EnvConditions:NA
815  * CaseDescription: verify the input serviceToken which corresponding connection list members' state
816  * is not CONNECTING or CONNECTED.
817  */
818 HWTEST_F(AbilityConnectManagerTest, AAFWK_Kit_Connect_004, TestSize.Level1)
819 {
820     // test for schedule the service connected done but the corresponding connection state is not CONNECTING
821     // generate the first connection record of callbackA_
822     auto newConnRecord1 = ConnectionRecord::CreateConnectionRecord(
823         serviceToken_, serviceRecord_, callbackA_, nullptr);  // newConnRecord1's default state is INIT
824     serviceRecord_->AddConnectRecordToList(newConnRecord1);
825     // generate the second connection record of callbackB_
826     auto newConnRecord2 = ConnectionRecord::CreateConnectionRecord(serviceToken_, serviceRecord_, callbackB_, nullptr);
827     newConnRecord2->SetConnectState(ConnectionState::DISCONNECTING);  // newConnRecord2's state is DISCONNECTING
828     serviceRecord_->AddConnectRecordToList(newConnRecord2);
829     auto connList = serviceRecord_->GetConnectRecordList();
830     EXPECT_EQ(2, static_cast<int>(connList.size()));  // the connection list members should be two
831     // start test
832     auto callback = new AbilityConnectCallback();
833     serviceRecord_->SetAbilityState(OHOS::AAFwk::AbilityState::ACTIVE);
834     int ret = ConnectManager()->ScheduleConnectAbilityDoneLocked(serviceToken_, callback);
835     EXPECT_EQ(OHOS::ERR_OK, ret);  // the result should be OK
836     // connection callback should not be called, so check the count
837     EXPECT_EQ(0, AbilityConnectCallback::onAbilityConnectDoneCount);
838     EXPECT_EQ(0, AbilityConnectCallback::onAbilityDisconnectDoneCount);
839 }
840 
841 /*
842  * Feature: AbilityConnectManager
843  * Function: ScheduleConnectAbilityDoneLocked
844  * SubFunction: OnAbilityConnectDone
845  * FunctionPoints: NA
846  * EnvConditions:NA
847  * CaseDescription: verify the scene : 1.serviceToken's corresponding connection list member's state is CONNECTING.
848  * 2.But the connection callback is null.
849  */
850 HWTEST_F(AbilityConnectManagerTest, AAFWK_Kit_Connect_005, TestSize.Level1)
851 {
852     // test for schedule the service connected done but the corresponding connection state is not CONNECTING
853     // generate the first connection record of null
854     auto newConnRecord1 = ConnectionRecord::CreateConnectionRecord(
855         serviceToken_, serviceRecord_, nullptr, nullptr);  // newConnRecord1's default state is INIT
856     serviceRecord_->AddConnectRecordToList(newConnRecord1);
857     newConnRecord1->SetConnectState(ConnectionState::CONNECTING);  // newConnRecord1's state is CONNECTING
858     auto connList = serviceRecord_->GetConnectRecordList();
859     EXPECT_EQ(1, static_cast<int>(connList.size()));  // the connection list members should be zero
860     // start test
861     auto callback = new AbilityConnectCallback();
862     serviceRecord_->SetAbilityState(OHOS::AAFwk::AbilityState::ACTIVE);
863     int ret = ConnectManager()->ScheduleConnectAbilityDoneLocked(serviceToken_, callback);
864     EXPECT_EQ(OHOS::ERR_OK, ret);  // the result should be OK
865     // connection callback should not be called, so check the count
866     EXPECT_EQ(0, AbilityConnectCallback::onAbilityConnectDoneCount);
867 }
868 
869 /*
870  * Feature: AbilityConnectManager
871  * Function: ScheduleConnectAbilityDoneLocked
872  * SubFunction: OnAbilityConnectDone
873  * FunctionPoints: NA
874  * EnvConditions:NA
875  * CaseDescription: verify the scene : 1.serviceToken's corresponding connection list member's state is CONNECTED.
876  * 2.But the connection callback is null.
877  */
878 HWTEST_F(AbilityConnectManagerTest, AAFWK_Kit_Connect_006, TestSize.Level1)
879 {
880     // test for schedule the service connected done but the corresponding connection state is not CONNECTING
881     // generate the first connection record of null
882     auto newConnRecord1 = ConnectionRecord::CreateConnectionRecord(
883         serviceToken_, serviceRecord_, nullptr, nullptr);  // newConnRecord1's default state is INIT
884     serviceRecord_->AddConnectRecordToList(newConnRecord1);
885     newConnRecord1->SetConnectState(ConnectionState::CONNECTED);  // newConnRecord1's state is CONNECTED
886     auto connList = serviceRecord_->GetConnectRecordList();
887     EXPECT_EQ(1, static_cast<int>(connList.size()));  // the connection list members should be zero
888     // start test
889     auto callback = new AbilityConnectCallback();
890     serviceRecord_->SetAbilityState(OHOS::AAFwk::AbilityState::ACTIVE);
891     int ret = ConnectManager()->ScheduleConnectAbilityDoneLocked(serviceToken_, callback);
892     EXPECT_EQ(OHOS::ERR_OK, ret);  // the result should be OK
893     // connection callback should not be called, so check the count
894     EXPECT_EQ(0, AbilityConnectCallback::onAbilityConnectDoneCount);
895 }
896 
897 /*
898  * Feature: AbilityConnectManager
899  * Function: ScheduleConnectAbilityDoneLocked
900  * SubFunction: OnAbilityConnectDone
901  * FunctionPoints: NA
902  * EnvConditions:NA
903  * CaseDescription: verify the scene : 1.serviceToken's corresponding connection list member's state is CONNECTING.
904  * 2.But the connection callback is valid.
905  */
906 HWTEST_F(AbilityConnectManagerTest, AAFWK_Kit_Connect_007, TestSize.Level1)
907 {
908     // test for schedule the service connected done but the corresponding connection state is not CONNECTING
909     // generate the first connection record of callbackA_
910     auto newConnRecord1 = ConnectionRecord::CreateConnectionRecord(
911         serviceToken_, serviceRecord_, callbackA_, nullptr);  // newConnRecord1's default state is INIT
912     serviceRecord_->AddConnectRecordToList(newConnRecord1);
913     // generate the second connection record of callbackB_
914     auto newConnRecord2 = ConnectionRecord::CreateConnectionRecord(serviceToken_, serviceRecord_, callbackB_, nullptr);
915     newConnRecord2->SetConnectState(ConnectionState::CONNECTING);  // newConnRecord2's state is CONNECTING
916     serviceRecord_->AddConnectRecordToList(newConnRecord2);
917     auto connList = serviceRecord_->GetConnectRecordList();
918     EXPECT_EQ(2, static_cast<int>(connList.size()));  // the connection list members should be two
919     // start test
920     auto callback = new AbilityConnectCallback();
921     serviceRecord_->SetAbilityState(OHOS::AAFwk::AbilityState::ACTIVE);
922     int ret = ConnectManager()->ScheduleConnectAbilityDoneLocked(serviceToken_, callback);
923     EXPECT_EQ(OHOS::ERR_OK, ret);  // the result should be OK
924     // connection callback should not be called, so check the count
925     EXPECT_EQ(0, AbilityConnectCallback::onAbilityConnectDoneCount);
926     EXPECT_EQ(0, AbilityConnectCallback::onAbilityDisconnectDoneCount);
927 }
928 
929 /*
930  * Feature: AbilityConnectManager
931  * Function: ScheduleConnectAbilityDoneLocked
932  * SubFunction: OnAbilityConnectDone
933  * FunctionPoints: NA
934  * EnvConditions:NA
935  * CaseDescription: verify the scene : 1.serviceToken's corresponding connection list member's state is CONNECTED.
936  * 2.But the connection callback is valid.
937  */
938 HWTEST_F(AbilityConnectManagerTest, AAFWK_Kit_Connect_008, TestSize.Level1)
939 {
940     // test for schedule the service connected done but the corresponding connection state is not CONNECTING
941     // generate the first connection record of callbackA_
942     auto newConnRecord1 = ConnectionRecord::CreateConnectionRecord(
943         serviceToken_, serviceRecord_, callbackA_, nullptr);               // newConnRecord1's default state is INIT
944     newConnRecord1->SetConnectState(ConnectionState::CONNECTED);  // newConnRecord1's state is CONNECTED
945     serviceRecord_->AddConnectRecordToList(newConnRecord1);
946     // generate the second connection record of callbackB_
947     auto newConnRecord2 = ConnectionRecord::CreateConnectionRecord(serviceToken_, serviceRecord_, callbackB_, nullptr);
948     newConnRecord2->SetConnectState(ConnectionState::CONNECTING);  // newConnRecord2's state is CONNECTING
949     serviceRecord_->AddConnectRecordToList(newConnRecord2);
950     // generate the third connection record of callbackC
951     auto callbackC = new AbilityConnectCallback();
952     auto newConnRecord3 = ConnectionRecord::CreateConnectionRecord(serviceToken_, serviceRecord_, callbackC, nullptr);
953     newConnRecord3->SetConnectState(ConnectionState::CONNECTING);  // newConnRecord3's state is CONNECTING
954     serviceRecord_->AddConnectRecordToList(newConnRecord3);
955     auto connList = serviceRecord_->GetConnectRecordList();
956     EXPECT_EQ(3, static_cast<int>(connList.size()));  // the connection list members should be three
957     // start test
958     auto callback = new AbilityConnectCallback();
959     serviceRecord_->SetAbilityState(OHOS::AAFwk::AbilityState::ACTIVE);
960     int ret = ConnectManager()->ScheduleConnectAbilityDoneLocked(serviceToken_, callback);
961     EXPECT_EQ(OHOS::ERR_OK, ret);  // the result should be OK
962     // connection callback should not be called, so check the count
963     EXPECT_EQ(0, AbilityConnectCallback::onAbilityConnectDoneCount);
964     EXPECT_EQ(0, AbilityConnectCallback::onAbilityDisconnectDoneCount);
965 }
966 
967 /*
968  * Feature: AbilityConnectManager
969  * Function: DisconnectAbilityLocked
970  * SubFunction:
971  * FunctionPoints: DisconnectAbilityLocked and ConnectAbilityLocked
972  * EnvConditions:NA
973  * CaseDescription:Verify the following:
974  * 1. Disconnect ability a nonexistent connect, disconnect failed
975  * 2. If the current connect ability state is not connected, disconnect fails
976  * 3. Verify the success of disconnect ability
977  */
978 HWTEST_F(AbilityConnectManagerTest, AAFWK_Kit_Disconnect_001, TestSize.Level1)
979 {
980     ConnectManager()->SetTaskHandler(TaskHandler());
981     ConnectManager()->SetEventHandler(EventHandler());
982 
983     auto callback = new AbilityConnectCallback();
984     auto result = ConnectManager()->DisconnectAbilityLocked(callback);
985     EXPECT_EQ(result, OHOS::AAFwk::CONNECTION_NOT_EXIST);
986 
987     auto result1 = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
988     EXPECT_EQ(0, result1);
989 
990     auto result2 = ConnectManager()->DisconnectAbilityLocked(callbackA_);
991     EXPECT_EQ(result2, OHOS::AAFwk::INVALID_CONNECTION_STATE);
992 
993     auto list = ConnectManager()->GetConnectRecordListByCallback(callbackA_);
994     EXPECT_EQ(static_cast<int>(list.size()), 1);
995 
996     for (auto& it : list) {
997         it->SetConnectState(ConnectionState::CONNECTED);
998     }
999 
1000     auto result3 = ConnectManager()->DisconnectAbilityLocked(callbackA_);
1001     EXPECT_EQ(result3, OHOS::ERR_OK);
1002 }
1003 
1004 /*
1005  * Feature: AbilityConnectManager
1006  * Function: DisconnectAbilityLocked
1007  * SubFunction:
1008  * FunctionPoints: DisconnectAbilityLocked and ConnectAbilityLocked
1009  * EnvConditions:NA
1010  * CaseDescription: Results after verifying the disconnect ability
1011  */
1012 HWTEST_F(AbilityConnectManagerTest, AAFWK_Kit_Disconnect_002, TestSize.Level1)
1013 {
1014     ConnectManager()->SetTaskHandler(TaskHandler());
1015     ConnectManager()->SetEventHandler(EventHandler());
1016 
1017     auto result = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
1018     EXPECT_EQ(0, result);
1019 
1020     auto result1 = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackB_, nullptr);
1021     EXPECT_EQ(0, result1);
1022 
1023     auto result2 = ConnectManager()->ConnectAbilityLocked(abilityRequest1_, callbackA_, nullptr);
1024     EXPECT_EQ(0, result2);
1025 
1026     auto result3 = ConnectManager()->ConnectAbilityLocked(abilityRequest1_, callbackB_, nullptr);
1027     EXPECT_EQ(0, result3);
1028 
1029     auto listA = ConnectManager()->GetConnectRecordListByCallback(callbackA_);
1030     EXPECT_EQ(static_cast<int>(listA.size()), 2);
1031 
1032     for (auto& it : listA) {
1033         it->SetConnectState(ConnectionState::CONNECTED);
1034     }
1035 
1036     auto listB = ConnectManager()->GetConnectRecordListByCallback(callbackB_);
1037     EXPECT_EQ(static_cast<int>(listB.size()), 2);
1038 
1039     for (auto& it : listB) {
1040         it->SetConnectState(ConnectionState::CONNECTED);
1041     }
1042 
1043     auto result5 = ConnectManager()->DisconnectAbilityLocked(callbackA_);
1044     WaitUntilTaskDone(TaskHandler());
1045     EXPECT_EQ(result5, OHOS::ERR_OK);
1046     auto serviceMap = ConnectManager()->GetServiceMap();
1047     EXPECT_EQ(static_cast<int>(serviceMap.size()), 2);
1048 
1049     auto connectMap = ConnectManager()->connectMap_;
1050     EXPECT_EQ(static_cast<int>(connectMap.size()), 1);
1051     for (auto& it : connectMap) {
1052         EXPECT_EQ(static_cast<int>(it.second.size()), 2);
1053     }
1054 }
1055 
1056 /*
1057  * Feature: AbilityConnectManager
1058  * Function: DisconnectAbilityLocked
1059  * SubFunction:
1060  * FunctionPoints: DisconnectAbilityLocked and ConnectAbilityLocked
1061  * EnvConditions:NA
1062  * CaseDescription:Verify the following:
1063  * 1. Disconnect ability a nonexistent connect, disconnect failed
1064  * 2. If the current connect ability state is not connected, disconnect fails
1065  * 3. Verify the success of disconnect ability
1066  */
1067 HWTEST_F(AbilityConnectManagerTest, AAFWK_Kit_Disconnect_003, TestSize.Level1)
1068 {
1069     ConnectManager()->SetTaskHandler(TaskHandler());
1070     ConnectManager()->SetEventHandler(EventHandler());
1071 
1072     auto callback = new AbilityConnectCallback();
1073     auto result = ConnectManager()->DisconnectAbilityLocked(callback);
1074     EXPECT_EQ(result, OHOS::AAFwk::CONNECTION_NOT_EXIST);
1075 
1076     auto result1 = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
1077     EXPECT_EQ(0, result1);
1078 
1079     auto result2 = ConnectManager()->DisconnectAbilityLocked(callbackA_);
1080     EXPECT_EQ(result2, OHOS::AAFwk::INVALID_CONNECTION_STATE);
1081 
1082     auto list = ConnectManager()->GetConnectRecordListByCallback(callbackA_);
1083     EXPECT_EQ(static_cast<int>(list.size()), 1);
1084 
1085     for (auto& it : list) {
1086         it->SetConnectState(ConnectionState::CONNECTED);
1087     }
1088 
1089     auto result3 = ConnectManager()->DisconnectAbilityLocked(callbackA_);
1090     EXPECT_EQ(result3, OHOS::ERR_OK);
1091 }
1092 
1093 /*
1094  * Feature: AbilityConnectManager
1095  * Function: DisconnectAbilityLocked
1096  * SubFunction:
1097  * FunctionPoints: DisconnectAbilityLocked and ConnectAbilityLocked
1098  * EnvConditions:NA
1099  * CaseDescription: Results after verifying the disconnect ability
1100  */
1101 HWTEST_F(AbilityConnectManagerTest, AAFWK_Kit_Disconnect_004, TestSize.Level1)
1102 {
1103     ConnectManager()->SetTaskHandler(TaskHandler());
1104     ConnectManager()->SetEventHandler(EventHandler());
1105 
1106     auto result = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
1107     EXPECT_EQ(0, result);
1108 
1109     auto result1 = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackB_, nullptr);
1110     EXPECT_EQ(0, result1);
1111 
1112     auto result2 = ConnectManager()->ConnectAbilityLocked(abilityRequest1_, callbackA_, nullptr);
1113     EXPECT_EQ(0, result2);
1114 
1115     auto result3 = ConnectManager()->ConnectAbilityLocked(abilityRequest1_, callbackB_, nullptr);
1116     EXPECT_EQ(0, result3);
1117 
1118     auto listA = ConnectManager()->GetConnectRecordListByCallback(callbackA_);
1119     EXPECT_EQ(static_cast<int>(listA.size()), 2);
1120 
1121     for (auto& it : listA) {
1122         it->SetConnectState(ConnectionState::CONNECTED);
1123     }
1124 
1125     auto listB = ConnectManager()->GetConnectRecordListByCallback(callbackB_);
1126     EXPECT_EQ(static_cast<int>(listB.size()), 2);
1127 
1128     for (auto& it : listB) {
1129         it->SetConnectState(ConnectionState::CONNECTED);
1130     }
1131 
1132     auto result5 = ConnectManager()->DisconnectAbilityLocked(callbackA_);
1133     WaitUntilTaskDone(TaskHandler());
1134     EXPECT_EQ(result5, OHOS::ERR_OK);
1135     auto serviceMap = ConnectManager()->GetServiceMap();
1136     EXPECT_EQ(static_cast<int>(serviceMap.size()), 2);
1137 
1138     auto connectMap = ConnectManager()->connectMap_;
1139     EXPECT_EQ(static_cast<int>(connectMap.size()), 1);
1140     for (auto& it : connectMap) {
1141         EXPECT_EQ(static_cast<int>(it.second.size()), 2);
1142     }
1143 }
1144 
1145 /*
1146  * Feature: AbilityConnectManager
1147  * Function: AbilityTransitionDone
1148  * SubFunction: NA
1149  * FunctionPoints: AbilityTransitionDone
1150  * EnvConditions:NA
1151  * CaseDescription: Verify the abilitytransitiondone process
1152  */
1153 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_019, TestSize.Level1)
1154 {
1155     OHOS::sptr<OHOS::IRemoteObject> nullToken = nullptr;
1156     auto result = ConnectManager()->AbilityTransitionDone(nullToken, OHOS::AAFwk::AbilityState::INACTIVE);
1157     EXPECT_EQ(result, OHOS::ERR_INVALID_VALUE);
1158 
1159     ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
1160     auto elementName = abilityRequest_.want.GetElement();
1161     std::string elementNameUri = elementName.GetURI();
1162     auto serviceMap = ConnectManager()->GetServiceMap();
1163     auto abilityRecord = serviceMap.at(elementNameUri);
1164     auto token = abilityRecord->GetToken();
1165 
1166     auto result1 = ConnectManager()->AbilityTransitionDone(token, OHOS::AAFwk::AbilityState::INACTIVE);
1167     EXPECT_EQ(result1, OHOS::ERR_INVALID_VALUE);
1168 
1169     ConnectManager()->MoveToTerminatingMap(abilityRecord);
1170     auto result2 = ConnectManager()->AbilityTransitionDone(token, OHOS::AAFwk::AbilityState::INITIAL);
1171     EXPECT_EQ(result2, OHOS::ERR_OK);
1172 
1173     auto result3 = ConnectManager()->AbilityTransitionDone(token, OHOS::AAFwk::AbilityState::TERMINATING);
1174     EXPECT_EQ(result3, OHOS::ERR_INVALID_VALUE);
1175 }
1176 
1177 /*
1178  * Feature: AbilityConnectManager
1179  * Function: ScheduleDisconnectAbilityDoneLocked
1180  * SubFunction: NA
1181  * FunctionPoints: ScheduleDisconnectAbilityDoneLocked
1182  * EnvConditions:NA
1183  * CaseDescription: Verify the ScheduleDisconnectAbilityDoneLocked process
1184  */
1185 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_020, TestSize.Level1)
1186 {
1187     ConnectManager()->SetTaskHandler(TaskHandler());
1188     ConnectManager()->SetEventHandler(EventHandler());
1189 
1190     OHOS::sptr<OHOS::IRemoteObject> nullToken = nullptr;
1191     auto result = ConnectManager()->ScheduleDisconnectAbilityDoneLocked(nullToken);
1192     EXPECT_EQ(result, OHOS::AAFwk::CONNECTION_NOT_EXIST);
1193 
1194     std::shared_ptr<AbilityRecord> ability = nullptr;
1195     OHOS::sptr<OHOS::IRemoteObject> token1 = new OHOS::AAFwk::Token(ability);
1196     auto result1 = ConnectManager()->ScheduleDisconnectAbilityDoneLocked(token1);
1197     EXPECT_EQ(result1, OHOS::AAFwk::CONNECTION_NOT_EXIST);
1198 
1199     ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
1200     auto elementName = abilityRequest_.want.GetElement();
1201     std::string elementNameUri = elementName.GetURI();
1202     auto serviceMap = ConnectManager()->GetServiceMap();
1203     auto abilityRecord = serviceMap.at(elementNameUri);
1204     auto token = abilityRecord->GetToken();
1205 
1206     auto listA = ConnectManager()->GetConnectRecordListByCallback(callbackA_);
1207     for (auto& it : listA) {
1208         it->SetConnectState(ConnectionState::CONNECTED);
1209     }
1210 
1211     auto result2 = ConnectManager()->DisconnectAbilityLocked(callbackA_);
1212     WaitUntilTaskDone(TaskHandler());
1213     EXPECT_EQ(result2, OHOS::ERR_OK);
1214 
1215     auto result3 = ConnectManager()->ScheduleDisconnectAbilityDoneLocked(token);
1216     EXPECT_EQ(result3, OHOS::AAFwk::INVALID_CONNECTION_STATE);
1217 
1218     abilityRecord->SetAbilityState(OHOS::AAFwk::AbilityState::ACTIVE);
1219 
1220     auto result4 = ConnectManager()->ScheduleDisconnectAbilityDoneLocked(token);
1221     EXPECT_EQ(result4, OHOS::ERR_OK);
1222 }
1223 
1224 /*
1225  * Feature: AbilityConnectManager
1226  * Function: ScheduleCommandAbilityDoneLocked
1227  * SubFunction: NA
1228  * FunctionPoints: ScheduleCommandAbilityDoneLocked
1229  * EnvConditions:NA
1230  * CaseDescription: Verify the ScheduleCommandAbilityDoneLocked process
1231  */
1232 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_021, TestSize.Level1)
1233 {
1234     ConnectManager()->SetTaskHandler(TaskHandler());
1235     ConnectManager()->SetEventHandler(EventHandler());
1236 
1237     OHOS::sptr<OHOS::IRemoteObject> nullToken = nullptr;
1238     auto result = ConnectManager()->ScheduleCommandAbilityDoneLocked(nullToken);
1239     EXPECT_EQ(result, OHOS::ERR_INVALID_VALUE);
1240 
1241     std::shared_ptr<AbilityRecord> ability = nullptr;
1242     OHOS::sptr<OHOS::IRemoteObject> token1 = new OHOS::AAFwk::Token(ability);
1243     auto result1 = ConnectManager()->ScheduleCommandAbilityDoneLocked(token1);
1244     EXPECT_EQ(result1, OHOS::ERR_INVALID_VALUE);
1245 
1246     ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
1247     auto elementName = abilityRequest_.want.GetElement();
1248     std::string elementNameUri = elementName.GetURI();
1249     auto serviceMap = ConnectManager()->GetServiceMap();
1250     auto abilityRecord = serviceMap.at(elementNameUri);
1251     auto token = abilityRecord->GetToken();
1252 
1253     auto result2 = ConnectManager()->ScheduleCommandAbilityDoneLocked(token);
1254     EXPECT_EQ(result2, OHOS::AAFwk::INVALID_CONNECTION_STATE);
1255 
1256     abilityRecord->SetAbilityState(OHOS::AAFwk::AbilityState::ACTIVE);
1257     auto result3 = ConnectManager()->ScheduleCommandAbilityDoneLocked(token);
1258     EXPECT_EQ(result3, OHOS::ERR_OK);
1259 }
1260 
1261 /*
1262  * Feature: AbilityConnectManager
1263  * Function: GetExtensionByTokenFromServiceMap
1264  * SubFunction: NA
1265  * FunctionPoints: GetExtensionByTokenFromServiceMap
1266  * EnvConditions:NA
1267  * CaseDescription: Verify the GetExtensionByTokenFromServiceMap process
1268  */
1269 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_022, TestSize.Level1)
1270 {
1271     ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
1272     auto elementName = abilityRequest_.want.GetElement();
1273     std::string elementNameUri = elementName.GetURI();
1274     auto serviceMap = ConnectManager()->GetServiceMap();
1275     auto abilityRecord = serviceMap.at(elementNameUri);
1276     auto token = abilityRecord->GetToken();
1277 
1278     auto ability = ConnectManager()->GetExtensionByTokenFromServiceMap(token);
1279     EXPECT_EQ(abilityRecord, ability);
1280 
1281     OHOS::sptr<OHOS::IRemoteObject> nullToken = nullptr;
1282     auto ability1 = ConnectManager()->GetExtensionByTokenFromServiceMap(nullToken);
1283     EXPECT_EQ(nullptr, ability1);
1284 
1285     auto recordId = abilityRecord->GetAbilityRecordId();
1286     EXPECT_EQ(ConnectManager()->GetExtensionByIdFromServiceMap(recordId), abilityRecord);
1287     EXPECT_EQ(ConnectManager()->GetExtensionByIdFromServiceMap(0), nullptr);
1288 }
1289 
1290 /*
1291  * Feature: AbilityConnectManager
1292  * Function: OnAbilityDied
1293  * SubFunction:
1294  * FunctionPoints: OnAbilityDied
1295  * EnvConditions:NA
1296  * CaseDescription: Verify the OnAbilityDied process
1297  */
1298 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_024, TestSize.Level1)
1299 {
1300     ConnectManager()->SetTaskHandler(TaskHandler());
1301     ConnectManager()->SetEventHandler(EventHandler());
1302 
1303     auto result = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
1304     EXPECT_EQ(0, result);
1305 
1306     auto result1 = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackB_, nullptr);
1307     EXPECT_EQ(0, result1);
1308 
1309     auto result2 = ConnectManager()->ConnectAbilityLocked(abilityRequest1_, callbackA_, nullptr);
1310     EXPECT_EQ(0, result2);
1311 
1312     auto result3 = ConnectManager()->ConnectAbilityLocked(abilityRequest1_, callbackB_, nullptr);
1313     EXPECT_EQ(0, result3);
1314 
1315     auto listA = ConnectManager()->GetConnectRecordListByCallback(callbackA_);
1316     EXPECT_EQ(static_cast<int>(listA.size()), 2);
1317 
1318     for (auto& it : listA) {
1319         it->SetConnectState(ConnectionState::CONNECTED);
1320     }
1321 
1322     auto listB = ConnectManager()->GetConnectRecordListByCallback(callbackB_);
1323     EXPECT_EQ(static_cast<int>(listB.size()), 2);
1324 
1325     for (auto& it : listB) {
1326         it->SetConnectState(ConnectionState::CONNECTED);
1327     }
1328 
1329     auto elementName = abilityRequest_.want.GetElement();
1330     std::string elementNameUri = elementName.GetURI();
1331     auto serviceMap = ConnectManager()->GetServiceMap();
1332     auto abilityRecord = serviceMap.at(elementNameUri);
1333     auto token = abilityRecord->GetToken();
1334 
1335     int userId = 0;
__anon6d2e28cc0302() 1336     auto task = [abilityRecord, connectManager = ConnectManager(), userId]() {
1337         connectManager->HandleAbilityDiedTask(abilityRecord, userId);
1338     };
1339     EXPECT_CALL(*taskHandler_, SubmitTaskInner(_, _)).WillRepeatedly(DoAll(SetArgReferee<0>(task),
1340         testing::Invoke(taskHandler_.get(), &MockTaskHandlerWrap::MockTaskHandler)));
1341     ConnectManager()->OnAbilityDied(abilityRecord, 0);
1342     auto list = abilityRecord->GetConnectRecordList();
1343     EXPECT_EQ(static_cast<int>(list.size()), 0);
1344 
1345     auto elementName1 = abilityRequest1_.want.GetElement();
1346     std::string elementNameUri1 = elementName1.GetURI();
1347     serviceMap = ConnectManager()->GetServiceMap();
1348     auto abilityRecord1 = serviceMap.at(elementNameUri1);
1349     auto token1 = abilityRecord1->GetToken();
__anon6d2e28cc0402() 1350     auto task1 = [abilityRecord1, connectManager = ConnectManager(), userId]() {
1351         connectManager->HandleAbilityDiedTask(abilityRecord1, userId);
1352     };
1353     EXPECT_CALL(*taskHandler_, SubmitTaskInner(_, _)).WillRepeatedly(DoAll(SetArgReferee<0>(task1),
1354         testing::Invoke(taskHandler_.get(), &MockTaskHandlerWrap::MockTaskHandler)));
1355     ConnectManager()->OnAbilityDied(abilityRecord1, 0);
1356     auto list1 = abilityRecord1->GetConnectRecordList();
1357     EXPECT_EQ(static_cast<int>(list1.size()), 0);
1358 }
1359 
1360 /*
1361  * Feature: AbilityConnectManager
1362  * Function: DispatchInactive
1363  * SubFunction:
1364  * FunctionPoints: DispatchInactive
1365  * EnvConditions:NA
1366  * CaseDescription: Verify the DispatchInactive process
1367  */
1368 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_025, TestSize.Level1)
1369 {
1370     std::shared_ptr<AbilityRecord> ability = nullptr;
1371     auto result = ConnectManager()->DispatchInactive(ability, OHOS::AAFwk::AbilityState::INACTIVATING);
1372     EXPECT_EQ(result, OHOS::ERR_INVALID_VALUE);
1373 
1374     ConnectManager()->SetTaskHandler(TaskHandler());
1375     ConnectManager()->SetEventHandler(EventHandler());
1376 
1377     auto result3 = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
1378     EXPECT_EQ(0, result3);
1379 
1380     auto elementName = abilityRequest_.want.GetElement();
1381     std::string elementNameUri = elementName.GetURI();
1382     auto serviceMap = ConnectManager()->GetServiceMap();
1383     auto abilityRecord = serviceMap.at(elementNameUri);
1384     auto token = abilityRecord->GetToken();
1385 
1386     abilityRecord->SetAbilityState(OHOS::AAFwk::AbilityState::ACTIVE);
1387     auto result1 = ConnectManager()->DispatchInactive(abilityRecord, OHOS::AAFwk::AbilityState::INACTIVATING);
1388     EXPECT_EQ(result1, OHOS::ERR_INVALID_VALUE);
1389 
1390     abilityRecord->SetAbilityState(OHOS::AAFwk::AbilityState::INACTIVATING);
1391     auto result2 = ConnectManager()->DispatchInactive(abilityRecord, OHOS::AAFwk::AbilityState::INACTIVATING);
1392     EXPECT_EQ(result2, OHOS::ERR_OK);
1393     EXPECT_EQ(abilityRecord->GetAbilityState(), OHOS::AAFwk::AbilityState::INACTIVE);
1394 }
1395 
1396 /*
1397  * Feature: AbilityConnectManager
1398  * Function: DispatchInactive
1399  * SubFunction:
1400  * FunctionPoints: DispatchInactive
1401  * EnvConditions:NA
1402  * CaseDescription: Verify the DispatchInactive process
1403  */
1404 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_026, TestSize.Level1)
1405 {
1406     std::shared_ptr<AbilityRecord> ability = nullptr;
1407     auto result = ConnectManager()->DispatchInactive(ability, OHOS::AAFwk::AbilityState::INACTIVATING);
1408     EXPECT_EQ(result, OHOS::ERR_INVALID_VALUE);
1409 
1410     ConnectManager()->SetTaskHandler(TaskHandler());
1411     ConnectManager()->SetEventHandler(EventHandler());
1412 
1413     auto result3 = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
1414     EXPECT_EQ(0, result3);
1415 
1416     auto elementName = abilityRequest_.want.GetElement();
1417     std::string elementNameUri = elementName.GetURI();
1418     auto serviceMap = ConnectManager()->GetServiceMap();
1419     auto abilityRecord = serviceMap.at(elementNameUri);
1420     auto token = abilityRecord->GetToken();
1421 
1422     abilityRecord->SetAbilityState(OHOS::AAFwk::AbilityState::ACTIVE);
1423     auto result1 = ConnectManager()->DispatchInactive(abilityRecord, OHOS::AAFwk::AbilityState::INACTIVATING);
1424     EXPECT_EQ(result1, OHOS::ERR_INVALID_VALUE);
1425 
1426     abilityRecord->SetAbilityState(OHOS::AAFwk::AbilityState::INACTIVATING);
1427     auto result2 = ConnectManager()->DispatchInactive(abilityRecord, OHOS::AAFwk::AbilityState::INACTIVATING);
1428     EXPECT_EQ(result2, OHOS::ERR_OK);
1429     EXPECT_EQ(abilityRecord->GetAbilityState(), OHOS::AAFwk::AbilityState::INACTIVE);
1430 }
1431 
1432 /*
1433  * Feature: AbilityConnectManager
1434  * Function: AddConnectDeathRecipient
1435  * SubFunction:
1436  * FunctionPoints: AddConnectDeathRecipient
1437  * EnvConditions:NA
1438  * CaseDescription: Verify the AddConnectDeathRecipient process
1439  */
1440 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_027, TestSize.Level1)
1441 {
1442     ConnectManager()->SetTaskHandler(TaskHandler());
1443     ConnectManager()->SetEventHandler(EventHandler());
1444 
1445     ConnectManager()->AddConnectDeathRecipient(nullptr);
1446     EXPECT_TRUE(ConnectManager()->recipientMap_.empty());
1447 }
1448 
1449 /*
1450  * Feature: AbilityConnectManager
1451  * Function: RemoveConnectDeathRecipient
1452  * SubFunction:
1453  * FunctionPoints: RemoveConnectDeathRecipient
1454  * EnvConditions:NA
1455  * CaseDescription: Verify the RemoveConnectDeathRecipient process
1456  */
1457 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_028, TestSize.Level1)
1458 {
1459     ConnectManager()->SetTaskHandler(TaskHandler());
1460     ConnectManager()->SetEventHandler(EventHandler());
1461 
1462     ConnectManager()->AddConnectDeathRecipient(nullptr);
1463     EXPECT_TRUE(ConnectManager()->recipientMap_.empty());
1464 
1465     ConnectManager()->RemoveConnectDeathRecipient(nullptr);
1466     EXPECT_TRUE(ConnectManager()->recipientMap_.empty());
1467 }
1468 
1469 /*
1470  * Feature: AbilityConnectManager
1471  * Function: OnCallBackDied
1472  * SubFunction:
1473  * FunctionPoints: OnCallBackDied
1474  * EnvConditions:NA
1475  * CaseDescription: Verify the OnCallBackDied process
1476  */
1477 HWTEST_F(AbilityConnectManagerTest, AAFWK_Connect_Service_029, TestSize.Level1)
1478 {
1479     TAG_LOGI(AAFwkTag::TEST, "AbilityConnectManagerTest::AAFWK_Connect_Service_029 called.");
1480     ConnectManager()->SetTaskHandler(TaskHandler());
1481     ConnectManager()->SetEventHandler(EventHandler());
1482 
1483 
1484     auto result = ConnectManager()->ConnectAbilityLocked(abilityRequest_, callbackA_, nullptr);
1485     EXPECT_EQ(0, result);
1486 
1487     const sptr<IRemoteObject> remoteObject1 = nullptr;
__anon6d2e28cc0502() 1488     auto task1 = [remoteObject1, connectManager = ConnectManager()]() {
1489         connectManager->HandleCallBackDiedTask(remoteObject1);
1490     };
1491     EXPECT_CALL(*taskHandler_, SubmitTaskInner(_, _)).WillRepeatedly(DoAll(SetArgReferee<0>(task1),
1492         testing::Invoke(taskHandler_.get(), &MockTaskHandlerWrap::MockTaskHandler)));
1493     ConnectManager()->OnCallBackDied(nullptr);
1494     auto connectMap = ConnectManager()->connectMap_;
1495     auto connectRecordList = connectMap.at(callbackA_->AsObject());
1496     EXPECT_EQ(1, static_cast<int>(connectRecordList.size()));
1497     for (auto& it : connectRecordList) {
1498         EXPECT_NE(it->GetAbilityConnectCallback(), nullptr);
1499     }
1500 
1501 
1502     const sptr<IRemoteObject> remoteObject2 = callbackA_->AsObject();
__anon6d2e28cc0602() 1503     auto task2 = [remoteObject2, connectManager = ConnectManager()]() {
1504         connectManager->HandleCallBackDiedTask(remoteObject2);
1505     };
1506     EXPECT_CALL(*taskHandler_, SubmitTaskInner(_, _)).WillRepeatedly(DoAll(SetArgReferee<0>(task2),
1507         testing::Invoke(taskHandler_.get(), &MockTaskHandlerWrap::MockTaskHandler)));
1508     ConnectManager()->OnCallBackDied(callbackA_->AsObject());
1509     connectRecordList = connectMap.at(callbackA_->AsObject());
1510     EXPECT_EQ(1, static_cast<int>(connectMap.size()));
1511     for (auto& it : connectRecordList) {
1512         EXPECT_EQ(it->GetAbilityConnectCallback(), nullptr);
1513     }
1514     TAG_LOGI(AAFwkTag::TEST, "AbilityConnectManagerTest::AAFWK_Connect_Service_029 end.");
1515 }
1516 
1517 /*
1518  * Feature: AbilityConnectManager
1519  * Function: StartAbilityLocked
1520  * SubFunction: StartAbilityLocked
1521  * FunctionPoints: NA
1522  * EnvConditions: NA
1523  * CaseDescription: Verify AbilityConnectManager StartAbilityLocked
1524  */
1525 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_StartAbilityLocked_001, TestSize.Level1)
1526 {
1527     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1528     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1529     AbilityRequest abilityRequest;
1530     abilityRequest.abilityInfo.deviceId = "id";
1531     abilityRequest.abilityInfo.bundleName = "bundle";
1532     abilityRequest.abilityInfo.name = "name";
1533     abilityRequest.abilityInfo.moduleName = "module";
1534     std::string stringUri = "id/bundle/module/name";
1535     AppExecFwk::ElementName element(abilityRequest.abilityInfo.deviceId, abilityRequest.abilityInfo.bundleName,
1536         abilityRequest.abilityInfo.name, abilityRequest.abilityInfo.moduleName);
1537     EXPECT_EQ(element.GetURI(), stringUri);
1538     abilityRecord->currentState_ = AbilityState::ACTIVE;
1539     abilityRecord->SetPreAbilityRecord(serviceRecord1_);
1540     connectManager->serviceMap_.emplace(stringUri, abilityRecord);
1541     int res = connectManager->StartAbilityLocked(abilityRequest);
1542     EXPECT_EQ(res, ERR_OK);
1543 }
1544 
1545 /*
1546  * Feature: AbilityConnectManager
1547  * Function: GetOrCreateServiceRecord
1548  * SubFunction: GetOrCreateServiceRecord
1549  * FunctionPoints: NA
1550  * EnvConditions: NA
1551  * CaseDescription: Verify AbilityConnectManager GetOrCreateServiceRecord
1552  */
1553 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_GetOrCreateServiceRecord_001, TestSize.Level1)
1554 {
1555     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1556     ASSERT_NE(connectManager, nullptr);
1557     AbilityRequest abilityRequest;
1558     bool isCreatedByConnect = false;
1559     std::shared_ptr<AbilityRecord> targetService = nullptr;
1560     bool isLoadedAbility = false;
1561     abilityRequest.abilityInfo.name = AbilityConfig::LAUNCHER_ABILITY_NAME;
1562     connectManager->serviceMap_.clear();
1563     connectManager->GetOrCreateServiceRecord(abilityRequest, isCreatedByConnect, targetService, isLoadedAbility);
1564 }
1565 
1566 /*
1567  * Feature: AbilityConnectManager
1568  * Function: ConnectAbilityLocked
1569  * SubFunction: ConnectAbilityLocked
1570  * FunctionPoints: NA
1571  * EnvConditions: NA
1572  * CaseDescription: Verify AbilityConnectManager ConnectAbilityLocked
1573  */
1574 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ConnectAbilityLocked_001, TestSize.Level1)
1575 {
1576     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1577     ASSERT_NE(connectManager, nullptr);
1578     ConnectManager()->SetTaskHandler(TaskHandler());
1579     ConnectManager()->SetEventHandler(EventHandler());
1580     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1581     AbilityRequest abilityRequest;
1582     sptr<IRemoteObject> callerToken = abilityRecord->GetToken();
1583     OHOS::sptr<IAbilityConnection> connect = new AbilityConnectCallback();
1584     OHOS::sptr<IAbilityConnection> callback1 = new AbilityConnectCallback();
1585     OHOS::sptr<IAbilityConnection> callback2 = new AbilityConnectCallback();
1586     std::shared_ptr<ConnectionRecord> connection1 =
1587         std::make_shared<ConnectionRecord>(callerToken, abilityRecord, callback1, nullptr);
1588     std::shared_ptr<ConnectionRecord> connection2 =
1589         std::make_shared<ConnectionRecord>(callerToken, abilityRecord, callback2, nullptr);
1590     abilityRequest.abilityInfo.deviceId = "id";
1591     abilityRequest.abilityInfo.bundleName = "bundle";
1592     abilityRequest.abilityInfo.name = "name";
1593     abilityRequest.abilityInfo.moduleName = "module";
1594     std::string stringUri = "id/bundle/name/module";
1595     abilityRecord->currentState_ = AbilityState::ACTIVE;
1596     abilityRecord->AddConnectRecordToList(connection1);
1597     connectManager->serviceMap_.emplace(stringUri, abilityRecord);
1598     connectManager->connectMap_.clear();
1599     connectManager->ConnectAbilityLocked(abilityRequest, connect, callerToken);
1600     abilityRecord->AddConnectRecordToList(connection2);
1601     connectManager->ConnectAbilityLocked(abilityRequest, connect, callerToken);
1602     connectManager->SetEventHandler(nullptr);
1603     connectManager->ConnectAbilityLocked(abilityRequest, connect, callerToken);
1604 }
1605 
1606 /*
1607  * Feature: AbilityConnectManager
1608  * Function: AttachAbilityThreadLocked
1609  * SubFunction: AttachAbilityThreadLocked
1610  * FunctionPoints: NA
1611  * EnvConditions: NA
1612  * CaseDescription: Verify AbilityConnectManager AttachAbilityThreadLocked
1613  */
1614 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_AttachAbilityThreadLocked_001, TestSize.Level1)
1615 {
1616     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1617     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1618     sptr<IAbilityScheduler> scheduler = nullptr;
1619     sptr<IRemoteObject> token = abilityRecord->GetToken();
1620     connectManager->serviceMap_.emplace("first", abilityRecord);
1621     connectManager->eventHandler_ = nullptr;
1622     connectManager->taskHandler_ = nullptr;
1623     int res = connectManager->AttachAbilityThreadLocked(scheduler, token);
1624     EXPECT_EQ(res, ERR_OK);
1625 }
1626 
1627 /*
1628  * Feature: AbilityConnectManager
1629  * Function: OnAppStateChanged
1630  * SubFunction: OnAppStateChanged
1631  * FunctionPoints: NA
1632  * EnvConditions: NA
1633  * CaseDescription: Verify AbilityConnectManager OnAppStateChanged
1634  */
1635 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_OnAppStateChanged_001, TestSize.Level1)
1636 {
1637     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1638     ASSERT_NE(connectManager, nullptr);
1639     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1640     AppInfo info;
1641     std::string bundleName = "bundleName";
1642     std::string name = "name";
1643     int32_t uid = 0;
1644     info.processName = bundleName;
1645     abilityRecord->abilityInfo_.applicationInfo.bundleName = bundleName;
1646     abilityRecord->abilityInfo_.applicationInfo.name = name;
1647     abilityRecord->abilityInfo_.uid = uid;
1648     info.appData.push_back({name, uid});
1649     connectManager->serviceMap_.emplace("first", abilityRecord);
1650     connectManager->OnAppStateChanged(info);
1651 }
1652 
1653 /*
1654  * Feature: AbilityConnectManager
1655  * Function: OnAppStateChanged
1656  * SubFunction: OnAppStateChanged
1657  * FunctionPoints: NA
1658  * EnvConditions: NA
1659  * CaseDescription: Verify AbilityConnectManager OnAppStateChanged
1660  */
1661 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_OnAppStateChanged_002, TestSize.Level1)
1662 {
1663     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1664     ASSERT_NE(connectManager, nullptr);
1665     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1666     AppInfo info;
1667     std::string bundleName = "bundleName";
1668     std::string name = "name";
1669     int32_t uid = 0;
1670     info.processName = "";
1671     abilityRecord->abilityInfo_.applicationInfo.bundleName = bundleName;
1672     abilityRecord->abilityInfo_.applicationInfo.name = name;
1673     abilityRecord->abilityInfo_.uid = uid;
1674     info.appData.push_back({name, uid});
1675     connectManager->serviceMap_.emplace("first", abilityRecord);
1676     connectManager->serviceMap_.emplace("first", nullptr);
1677     connectManager->OnAppStateChanged(info);
1678 }
1679 
1680 /*
1681  * Feature: AbilityConnectManager
1682  * Function: AbilityTransitionDone
1683  * SubFunction: AbilityTransitionDone
1684  * FunctionPoints: NA
1685  * EnvConditions: NA
1686  * CaseDescription: Verify AbilityConnectManager AbilityTransitionDone
1687  */
1688 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_AbilityTransitionDone_001, TestSize.Level1)
1689 {
1690     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1691     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1692     sptr<IRemoteObject> token = abilityRecord->GetToken();
1693     int state = AbilityState::INACTIVE;
1694     abilityRecord->abilityInfo_.type = AbilityType::PAGE;
1695     abilityRecord->SetAbilityState(AbilityState::ACTIVE);
1696     connectManager->serviceMap_.emplace("first", abilityRecord);
1697     int res1 = connectManager->AbilityTransitionDone(token, state);
1698     EXPECT_EQ(res1, ERR_INVALID_VALUE);
1699     state = AbilityState::INITIAL;
1700     connectManager->MoveToTerminatingMap(abilityRecord);
1701     int res2 = connectManager->AbilityTransitionDone(token, state);
1702     EXPECT_EQ(res2, ERR_OK);
1703 }
1704 
1705 /*
1706  * Feature: AbilityConnectManager
1707  * Function: ScheduleConnectAbilityDoneLocked
1708  * SubFunction: ScheduleConnectAbilityDoneLocked
1709  * FunctionPoints: NA
1710  * EnvConditions: NA
1711  * CaseDescription: Verify AbilityConnectManager ScheduleConnectAbilityDoneLocked
1712  */
1713 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleConnectAbilityDoneLocked_001, TestSize.Level1)
1714 {
1715     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1716     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1717     sptr<IRemoteObject> token = abilityRecord->GetToken();
1718     sptr<IRemoteObject> remoteObject = nullptr;
1719     abilityRecord->abilityInfo_.type = AbilityType::PAGE;
1720     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
1721     connectManager->serviceMap_.emplace("first", abilityRecord);
1722     int res = connectManager->ScheduleConnectAbilityDoneLocked(token, remoteObject);
1723     EXPECT_EQ(res, ERR_OK);
1724 }
1725 
1726 /*
1727  * Feature: AbilityConnectManager
1728  * Function: ScheduleDisconnectAbilityDoneLocked
1729  * SubFunction: ScheduleDisconnectAbilityDoneLocked
1730  * FunctionPoints: NA
1731  * EnvConditions: NA
1732  * CaseDescription: Verify AbilityConnectManager ScheduleDisconnectAbilityDoneLocked
1733  */
1734 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleDisconnectAbilityDoneLocked_001, TestSize.Level1)
1735 {
1736     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1737     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1738     OHOS::sptr<IAbilityConnection> callback = new AbilityConnectCallback();
1739     std::shared_ptr<ConnectionRecord> connection =
1740         std::make_shared<ConnectionRecord>(abilityRecord->GetToken(), abilityRecord, callback, nullptr);
1741     sptr<IRemoteObject> token = abilityRecord->GetToken();
1742     connection->SetConnectState(ConnectionState::DISCONNECTING);
1743     abilityRecord->abilityInfo_.type = AbilityType::PAGE;
1744     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
1745     abilityRecord->connRecordList_.push_back(connection);
1746     connectManager->serviceMap_.emplace("first", abilityRecord);
1747     int res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
1748     EXPECT_EQ(res, INVALID_CONNECTION_STATE);
1749     abilityRecord->AddStartId();
1750     abilityRecord->SetAbilityState(AbilityState::ACTIVE);
1751     connectManager->serviceMap_.emplace("first", abilityRecord);
1752     res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
1753     EXPECT_EQ(res, ERR_OK);
1754 }
1755 
1756 /*
1757  * Feature: AbilityConnectManager
1758  * Function: ScheduleCommandAbilityDoneLocked
1759  * SubFunction: ScheduleCommandAbilityDoneLocked
1760  * FunctionPoints: NA
1761  * EnvConditions: NA
1762  * CaseDescription: Verify AbilityConnectManager ScheduleCommandAbilityDoneLocked
1763  */
1764 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleCommandAbilityDoneLocked_001, TestSize.Level1)
1765 {
1766     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1767     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1768     sptr<IRemoteObject> token = abilityRecord->GetToken();
1769     abilityRecord->abilityInfo_.type = AbilityType::PAGE;
1770     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
1771     abilityRecord->connRecordList_.clear();
1772     connectManager->serviceMap_.emplace("first", abilityRecord);
1773     int res = connectManager->ScheduleCommandAbilityDoneLocked(token);
1774     EXPECT_EQ(res, ERR_OK);
1775 }
1776 
1777 /*
1778  * Feature: AbilityConnectManager
1779  * Function: CompleteCommandAbility
1780  * SubFunction: CompleteCommandAbility
1781  * FunctionPoints: NA
1782  * EnvConditions: NA
1783  * CaseDescription: Verify AbilityConnectManager CompleteCommandAbility
1784  */
1785 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_CompleteCommandAbility_001, TestSize.Level1)
1786 {
1787     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1788     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1789     connectManager->taskHandler_ = nullptr;
1790     connectManager->CompleteCommandAbility(abilityRecord);
1791     EXPECT_TRUE(abilityRecord->IsAbilityState(AbilityState::ACTIVE));
1792 }
1793 
1794 /*
1795  * Feature: AbilityConnectManager
1796  * Function: GetServiceRecordByElementName
1797  * SubFunction: GetServiceRecordByElementName
1798  * FunctionPoints: NA
1799  * EnvConditions: NA
1800  * CaseDescription: Verify AbilityConnectManager GetServiceRecordByElementName
1801  */
1802 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_GetServiceRecordByElementName_001, TestSize.Level1)
1803 {
1804     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1805     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1806     std::string element = "first";
1807     connectManager->serviceMap_.emplace(element, abilityRecord);
1808     auto res = connectManager->GetServiceRecordByElementName(element);
1809     EXPECT_NE(res, nullptr);
1810 }
1811 
1812 /*
1813  * Feature: AbilityConnectManager
1814  * Function: GetExtensionByTokenFromServiceMap
1815  * SubFunction: GetExtensionByTokenFromServiceMap
1816  * FunctionPoints: NA
1817  * EnvConditions: NA
1818  * CaseDescription: Verify AbilityConnectManager GetExtensionByTokenFromServiceMap
1819  */
1820 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_GetExtensionByTokenFromServiceMap_001, TestSize.Level1)
1821 {
1822     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1823     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1824     sptr<IRemoteObject> token = abilityRecord->GetToken();
1825     connectManager->serviceMap_.emplace("first", nullptr);
1826     auto res = connectManager->GetExtensionByTokenFromServiceMap(token);
1827     EXPECT_EQ(res, nullptr);
1828 }
1829 
1830 /*
1831  * Feature: AbilityConnectManager
1832  * Function: GetConnectRecordListByCallback
1833  * SubFunction: GetConnectRecordListByCallback
1834  * FunctionPoints: NA
1835  * EnvConditions: NA
1836  * CaseDescription: Verify AbilityConnectManager GetConnectRecordListByCallback
1837  */
1838 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_GetConnectRecordListByCallback_001, TestSize.Level1)
1839 {
1840     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1841     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1842     sptr<IAbilityConnection> callback = new AbilityConnectCallback();
1843     connectManager->connectMap_.clear();
1844     auto res = connectManager->GetConnectRecordListByCallback(callback);
1845     EXPECT_EQ(res.size(), 0u);
1846 }
1847 
1848 /*
1849  * Feature: AbilityConnectManager
1850  * Function: GetExtensionByIdFromServiceMap
1851  * SubFunction: GetExtensionByIdFromServiceMap
1852  * FunctionPoints: NA
1853  * EnvConditions: NA
1854  * CaseDescription: Verify AbilityConnectManager GetExtensionByIdFromServiceMap
1855  */
1856 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_GetAbilityRecordById_001, TestSize.Level1)
1857 {
1858     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1859     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1860     int64_t abilityRecordId = abilityRecord->GetRecordId();
1861     connectManager->serviceMap_.emplace("first", abilityRecord);
1862     connectManager->serviceMap_.emplace("second", nullptr);
1863     auto res = connectManager->GetExtensionByIdFromServiceMap(abilityRecordId);
1864     EXPECT_NE(res, nullptr);
1865 }
1866 
1867 /*
1868  * Feature: AbilityConnectManager
1869  * Function: LoadAbility
1870  * SubFunction: LoadAbility
1871  * FunctionPoints: NA
1872  * EnvConditions: NA
1873  * CaseDescription: Verify AbilityConnectManager LoadAbility
1874  */
1875 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_LoadAbility_001, TestSize.Level1)
1876 {
1877     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1878     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1879     abilityRecord->isLauncherRoot_ = true;
1880     abilityRecord->isRestarting_ = true;
1881     abilityRecord->isLauncherAbility_ = true;
1882     abilityRecord->restartCount_ = -1;
1883     EXPECT_FALSE(abilityRecord->CanRestartRootLauncher());
1884     connectManager->LoadAbility(abilityRecord);
1885 }
1886 
1887 /*
1888  * Feature: AbilityConnectManager
1889  * Function: LoadAbility
1890  * SubFunction: LoadAbility
1891  * FunctionPoints: NA
1892  * EnvConditions: NA
1893  * CaseDescription: Verify AbilityConnectManager LoadAbility
1894  */
1895 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_LoadAbility_002, TestSize.Level1)
1896 {
1897     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1898     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1899     std::shared_ptr<CallerRecord> caller1 = std::make_shared<CallerRecord>(0, abilityRecord);
1900     std::shared_ptr<CallerRecord> caller2 = std::make_shared<CallerRecord>();
1901     abilityRecord->isLauncherRoot_ = false;
1902     abilityRecord->isCreateByConnect_ = false;
1903     abilityRecord->callerList_.push_back(caller1);
1904     EXPECT_TRUE(abilityRecord->CanRestartRootLauncher());
1905     connectManager->LoadAbility(abilityRecord);
1906     abilityRecord->callerList_.push_back(caller2);
1907     connectManager->LoadAbility(abilityRecord);
1908     abilityRecord->callerList_.push_back(nullptr);
1909     connectManager->LoadAbility(abilityRecord);
1910 }
1911 
1912 /*
1913  * Feature: AbilityConnectManager
1914  * Function: PostTimeOutTask
1915  * SubFunction: PostTimeOutTask
1916  * FunctionPoints: NA
1917  * EnvConditions: NA
1918  * CaseDescription: Verify AbilityConnectManager PostTimeOutTask
1919  */
1920 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_PostTimeOutTask_001, TestSize.Level1)
1921 {
1922     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1923     ASSERT_NE(connectManager, nullptr);
1924     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1925     uint32_t messageId = 2;
1926     connectManager->PostTimeOutTask(abilityRecord, messageId);
1927 }
1928 
1929 /*
1930  * Feature: AbilityConnectManager
1931  * Function: HandleStartTimeoutTask
1932  * SubFunction: HandleStartTimeoutTask
1933  * FunctionPoints: NA
1934  * EnvConditions: NA
1935  * CaseDescription: Verify AbilityConnectManager HandleStartTimeoutTask
1936  */
1937 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_HandleStartTimeoutTask_001, TestSize.Level1)
1938 {
1939     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1940     ASSERT_NE(connectManager, nullptr);
1941     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1942     abilityRecord->abilityInfo_.name = "abilityName";
1943     connectManager->HandleStartTimeoutTask(abilityRecord);
1944 }
1945 
1946 /*
1947  * Feature: AbilityConnectManager
1948  * Function: HandleStartTimeoutTask
1949  * SubFunction: HandleStartTimeoutTask
1950  * FunctionPoints: NA
1951  * EnvConditions: NA
1952  * CaseDescription: Verify AbilityConnectManager HandleStartTimeoutTask
1953  */
1954 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_HandleStartTimeoutTask_002, TestSize.Level1)
1955 {
1956     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1957     ASSERT_NE(connectManager, nullptr);
1958     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1959     abilityRecord->abilityInfo_.name = AbilityConfig::LAUNCHER_ABILITY_NAME;
1960     connectManager->HandleStartTimeoutTask(abilityRecord);
1961 }
1962 
1963 /*
1964  * Feature: AbilityConnectManager
1965  * Function: HandleConnectTimeoutTask
1966  * SubFunction: HandleConnectTimeoutTask
1967  * FunctionPoints: NA
1968  * EnvConditions: NA
1969  * CaseDescription: Verify AbilityConnectManager HandleConnectTimeoutTask
1970  */
1971 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_HandleConnectTimeoutTask_001, TestSize.Level1)
1972 {
1973     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1974     ASSERT_NE(connectManager, nullptr);
1975     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1976     abilityRecord->abilityInfo_.name = AbilityConfig::LAUNCHER_ABILITY_NAME;
1977     connectManager->HandleConnectTimeoutTask(abilityRecord);
1978 }
1979 
1980 /*
1981  * Feature: AbilityConnectManager
1982  * Function: HandleCommandTimeoutTask
1983  * SubFunction: HandleCommandTimeoutTask
1984  * FunctionPoints: NA
1985  * EnvConditions: NA
1986  * CaseDescription: Verify AbilityConnectManager HandleCommandTimeoutTask
1987  */
1988 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_HandleCommandTimeoutTask_001, TestSize.Level1)
1989 {
1990     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
1991     ASSERT_NE(connectManager, nullptr);
1992     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
1993     abilityRecord->abilityInfo_.name = AbilityConfig::LAUNCHER_ABILITY_NAME;
1994     connectManager->HandleCommandTimeoutTask(abilityRecord);
1995     abilityRecord->abilityInfo_.name = "abilityName";
1996     connectManager->HandleCommandTimeoutTask(abilityRecord);
1997 }
1998 
1999 /*
2000  * Feature: AbilityConnectManager
2001  * Function: HandleTerminateDisconnectTask
2002  * SubFunction: HandleTerminateDisconnectTask
2003  * FunctionPoints: NA
2004  * EnvConditions: NA
2005  * CaseDescription: Verify AbilityConnectManager HandleTerminateDisconnectTask
2006  */
2007 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_HandleTerminateDisconnectTask_001, TestSize.Level1)
2008 {
2009     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2010     ASSERT_NE(connectManager, nullptr);
2011     OHOS::sptr<IAbilityConnection> callback = new AbilityConnectCallback();
2012     std::shared_ptr<ConnectionRecord> connection =
2013         std::make_shared<ConnectionRecord>(nullptr, nullptr, callback, nullptr);
2014     AbilityConnectManager::ConnectListType connectlist;
2015     connectlist.push_back(nullptr);
2016     connectlist.push_back(connection);
2017     connectManager->HandleTerminateDisconnectTask(connectlist);
2018 }
2019 
2020 /*
2021  * Feature: AbilityConnectManager
2022  * Function: DispatchInactive
2023  * SubFunction: DispatchInactive
2024  * FunctionPoints: NA
2025  * EnvConditions: NA
2026  * CaseDescription: Verify AbilityConnectManager DispatchInactive
2027  */
2028 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_DispatchInactive_001, TestSize.Level1)
2029 {
2030     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2031     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2032     int state = 0;
2033     abilityRecord->SetAbilityState(AbilityState::INACTIVATING);
2034     abilityRecord->isCreateByConnect_ = false;
2035     connectManager->SetTaskHandler(TaskHandler());
2036     connectManager->SetEventHandler(EventHandler());
2037     int res = connectManager->DispatchInactive(abilityRecord, state);
2038     EXPECT_EQ(res, ERR_OK);
2039 }
2040 
2041 /*
2042  * Feature: AbilityConnectManager
2043  * Function: DispatchTerminate
2044  * SubFunction: DispatchTerminate
2045  * FunctionPoints: NA
2046  * EnvConditions: NA
2047  * CaseDescription: Verify AbilityConnectManager DispatchTerminate
2048  */
2049 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_DispatchTerminate_001, TestSize.Level1)
2050 {
2051     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2052     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2053     connectManager->SetTaskHandler(TaskHandler());
2054     connectManager->SetEventHandler(EventHandler());
2055     int res = connectManager->DispatchTerminate(abilityRecord);
2056     EXPECT_EQ(res, ERR_OK);
2057 }
2058 
2059 /*
2060  * Feature: AbilityConnectManager
2061  * Function: CommandAbility
2062  * SubFunction: CommandAbility
2063  * FunctionPoints: NA
2064  * EnvConditions: NA
2065  * CaseDescription: Verify AbilityConnectManager CommandAbility
2066  */
2067 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_CommandAbility_001, TestSize.Level1)
2068 {
2069     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2070     ASSERT_NE(connectManager, nullptr);
2071     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2072     connectManager->SetEventHandler(nullptr);
2073     connectManager->CommandAbility(abilityRecord);
2074 }
2075 
2076 /*
2077  * Feature: AbilityConnectManager
2078  * Function: TerminateDone
2079  * SubFunction: TerminateDone
2080  * FunctionPoints: NA
2081  * EnvConditions: NA
2082  * CaseDescription: Verify AbilityConnectManager TerminateDone
2083  */
2084 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_TerminateDone_001, TestSize.Level1)
2085 {
2086     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2087     ASSERT_NE(connectManager, nullptr);
2088     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2089     abilityRecord->SetAbilityState(AbilityState::TERMINATING);
2090     connectManager->TerminateDone(abilityRecord);
2091 }
2092 
2093 /*
2094  * Feature: AbilityConnectManager
2095  * Function: GetAbilityConnectedRecordFromRecordList
2096  * SubFunction: GetAbilityConnectedRecordFromRecordList
2097  * FunctionPoints: NA
2098  * EnvConditions: NA
2099  * CaseDescription: Verify AbilityConnectManager GetAbilityConnectedRecordFromRecordList
2100  */
2101 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_GetAbilityConnectedRecordFromRecordList_001, TestSize.Level1)
2102 {
2103     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2104     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2105     std::list<std::shared_ptr<ConnectionRecord>> connectRecordList;
2106     OHOS::sptr<IAbilityConnection> callback = new AbilityConnectCallback();
2107     std::shared_ptr<ConnectionRecord> connection =
2108         std::make_shared<ConnectionRecord>(abilityRecord->GetToken(), abilityRecord, callback, nullptr);
2109     connectRecordList.push_back(connection);
2110     auto res1 = connectManager->GetAbilityConnectedRecordFromRecordList(nullptr, connectRecordList);
2111     EXPECT_EQ(res1, nullptr);
2112     connectRecordList.push_back(nullptr);
2113     auto res2 = connectManager->GetAbilityConnectedRecordFromRecordList(abilityRecord, connectRecordList);
2114     EXPECT_EQ(res2, connection);
2115 }
2116 
2117 /*
2118  * Feature: AbilityConnectManager
2119  * Function: RemoveServiceAbility
2120  * SubFunction: RemoveServiceAbility
2121  * FunctionPoints: NA
2122  * EnvConditions: NA
2123  * CaseDescription: Verify AbilityConnectManager RemoveServiceAbility
2124  */
2125 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_RemoveServiceAbility_001, TestSize.Level1)
2126 {
2127     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2128     ASSERT_NE(connectManager, nullptr);
2129     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2130     AbilityInfo abilityInfo;
2131     abilityRecord->abilityInfo_ = abilityInfo;
2132     connectManager->serviceMap_.clear();
2133     connectManager->RemoveServiceAbility(abilityRecord);
2134 }
2135 
2136 /*
2137  * Feature: AbilityConnectManager
2138  * Function: OnCallBackDied
2139  * SubFunction: OnCallBackDied
2140  * FunctionPoints: NA
2141  * EnvConditions: NA
2142  * CaseDescription: Verify AbilityConnectManager OnCallBackDied
2143  */
2144 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_OnCallBackDied_001, TestSize.Level1)
2145 {
2146     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2147     ASSERT_NE(connectManager, nullptr);
2148     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2149     wptr<IRemoteObject> remote{ abilityRecord->GetToken() };
2150     connectManager->SetEventHandler(nullptr);
2151     connectManager->OnCallBackDied(remote);
2152 }
2153 
2154 /*
2155  * Feature: AbilityConnectManager
2156  * Function: HandleCallBackDiedTask
2157  * SubFunction: HandleCallBackDiedTask
2158  * FunctionPoints: NA
2159  * EnvConditions: NA
2160  * CaseDescription: Verify AbilityConnectManager HandleCallBackDiedTask
2161  */
2162 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_HandleCallBackDiedTask_001, TestSize.Level1)
2163 {
2164     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2165     ASSERT_NE(connectManager, nullptr);
2166     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2167     sptr<IRemoteObject> connect = abilityRecord->GetToken();
2168     connectManager->connectMap_.clear();
2169     connectManager->HandleCallBackDiedTask(connect);
2170 }
2171 
2172 /*
2173  * Feature: AbilityConnectManager
2174  * Function: OnAbilityDied
2175  * SubFunction: OnAbilityDied
2176  * FunctionPoints: NA
2177  * EnvConditions: NA
2178  * CaseDescription: Verify AbilityConnectManager OnAbilityDied
2179  */
2180 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_OnAbilityDied_001, TestSize.Level1)
2181 {
2182     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2183     ASSERT_NE(connectManager, nullptr);
2184     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2185     int32_t currentUserId = 0;
2186     abilityRecord->abilityInfo_.type = AbilityType::PAGE;
2187     connectManager->SetEventHandler(nullptr);
2188     connectManager->OnAbilityDied(abilityRecord, currentUserId);
2189     abilityRecord->abilityInfo_.type = AbilityType::EXTENSION;
2190     connectManager->OnAbilityDied(abilityRecord, currentUserId);
2191 }
2192 
2193 /*
2194  * Feature: AbilityConnectManager
2195  * Function: OnTimeOut
2196  * SubFunction: OnTimeOut
2197  * FunctionPoints: NA
2198  * EnvConditions: NA
2199  * CaseDescription: Verify AbilityConnectManager OnTimeOut
2200  */
2201 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_OnTimeOut_001, TestSize.Level1)
2202 {
2203     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2204     ASSERT_NE(connectManager, nullptr);
2205     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2206     uint32_t msgId = 2;
2207     connectManager->serviceMap_.emplace("first", abilityRecord);
2208     int64_t abilityRecordId = 1;
2209     connectManager->OnTimeOut(msgId, abilityRecordId);
2210     msgId = 0;
2211     connectManager->OnTimeOut(msgId, abilityRecordId);
2212 }
2213 
2214 /*
2215  * Feature: AbilityConnectManager
2216  * Function: HandleInactiveTimeout
2217  * SubFunction: HandleInactiveTimeout
2218  * FunctionPoints: NA
2219  * EnvConditions: NA
2220  * CaseDescription: Verify AbilityConnectManager HandleInactiveTimeout
2221  */
2222 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_HandleInactiveTimeout_001, TestSize.Level1)
2223 {
2224     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2225     ASSERT_NE(connectManager, nullptr);
2226     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2227     abilityRecord->abilityInfo_.name = AbilityConfig::LAUNCHER_ABILITY_NAME;
2228     connectManager->HandleInactiveTimeout(abilityRecord);
2229     abilityRecord->abilityInfo_.name = "abilityName";
2230     connectManager->HandleInactiveTimeout(abilityRecord);
2231 }
2232 
2233 /*
2234  * Feature: AbilityConnectManager
2235  * Function: HandleAbilityDiedTask
2236  * SubFunction: HandleAbilityDiedTask
2237  * FunctionPoints: NA
2238  * EnvConditions: NA
2239  * CaseDescription: Verify AbilityConnectManager HandleAbilityDiedTask
2240  */
2241 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_HandleAbilityDiedTask_001, TestSize.Level1)
2242 {
2243     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2244     ASSERT_NE(connectManager, nullptr);
2245     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2246     int32_t currentUserId = 0;
2247     connectManager->serviceMap_.clear();
2248     connectManager->HandleAbilityDiedTask(abilityRecord, currentUserId);
2249 }
2250 
2251 /*
2252  * Feature: AbilityConnectManager
2253  * Function: DisconnectBeforeCleanup
2254  * SubFunction: DisconnectBeforeCleanup
2255  * FunctionPoints: NA
2256  * EnvConditions: NA
2257  * CaseDescription: Verify AbilityConnectManager DisconnectBeforeCleanup
2258  */
2259 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_DisconnectBeforeCleanup_001, TestSize.Level1)
2260 {
2261     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(100);
2262     ASSERT_NE(connectManager, nullptr);
2263     ConnectManager()->SetTaskHandler(TaskHandler());
2264     ConnectManager()->SetEventHandler(EventHandler());
2265     serviceRecord1_->SetUid(102 * 200000);
2266     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2267     AbilityRequest abilityRequest;
2268     sptr<IRemoteObject> callerToken = abilityRecord->GetToken();
2269     OHOS::sptr<IAbilityConnection> callback1 = new AbilityConnectCallback();
2270     std::shared_ptr<ConnectionRecord> connection1 =
2271         std::make_shared<ConnectionRecord>(callerToken, abilityRecord, callback1, nullptr);
2272     connection1->AttachCallerInfo();
2273     abilityRequest.abilityInfo.deviceId = "id";
2274     abilityRequest.abilityInfo.bundleName = "bundle";
2275     abilityRequest.abilityInfo.name = "name";
2276     abilityRequest.abilityInfo.moduleName = "module";
2277     std::string stringUri = "id/bundle/name/module";
2278     abilityRecord->currentState_ = AbilityState::ACTIVE;
2279     abilityRecord->AddConnectRecordToList(connection1);
2280     connectManager->AddConnectObjectToMap(callback1->AsObject(), abilityRecord->GetConnectRecordList(), false);
2281     connectManager->serviceMap_.emplace(stringUri, abilityRecord);
2282     connectManager->DisconnectBeforeCleanup();
2283     ASSERT_EQ(abilityRecord->GetConnectRecordList().empty(), true);
2284     ASSERT_EQ(connectManager->GetConnectRecordListByCallback(callback1).empty(), true);
2285 }
2286 
2287 /*
2288  * Feature: AbilityConnectManager
2289  * Function: RestartAbility
2290  * SubFunction: RestartAbility
2291  * FunctionPoints: NA
2292  * EnvConditions: NA
2293  * CaseDescription: Verify AbilityConnectManager RestartAbility
2294  */
2295 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_RestartAbility_001, TestSize.Level1)
2296 {
2297     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2298     ASSERT_NE(connectManager, nullptr);
2299     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2300     int32_t currentUserId = 0;
2301     connectManager->userId_ = 1;
2302     abilityRecord->abilityInfo_.name = AbilityConfig::LAUNCHER_ABILITY_NAME;
2303     connectManager->RestartAbility(abilityRecord, currentUserId);
2304     connectManager->userId_ = currentUserId;
2305     connectManager->RestartAbility(abilityRecord, currentUserId);
2306 }
2307 
2308 /*
2309  * Feature: AbilityConnectManager
2310  * Function: RestartAbility
2311  * SubFunction: RestartAbility
2312  * FunctionPoints: NA
2313  * EnvConditions: NA
2314  * CaseDescription: Verify AbilityConnectManager RestartAbility
2315  */
2316 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_RestartAbility_002, TestSize.Level1)
2317 {
2318     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2319     ASSERT_NE(connectManager, nullptr);
2320     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2321     int32_t currentUserId = 0;
2322     connectManager->userId_ = currentUserId;
2323     abilityRecord->abilityInfo_.name = "abilityName";
2324     abilityRecord->SetRestartCount(-1);
2325     connectManager->RestartAbility(abilityRecord, currentUserId);
2326 }
2327 
2328 /*
2329  * Feature: AbilityConnectManager
2330  * Function: RestartAbility
2331  * SubFunction: RestartAbility
2332  * FunctionPoints: NA
2333  * EnvConditions: NA
2334  * CaseDescription: Verify AbilityConnectManager RestartAbility
2335  */
2336 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_RestartAbility_003, TestSize.Level1)
2337 {
2338     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2339     ASSERT_NE(connectManager, nullptr);
2340     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2341     int32_t currentUserId = 0;
2342     connectManager->userId_ = 1;
2343     abilityRecord->abilityInfo_.bundleName = AbilityConfig::SCENEBOARD_BUNDLE_NAME;
2344     abilityRecord->abilityInfo_.name = AbilityConfig::SCENEBOARD_ABILITY_NAME;
2345     connectManager->HandleAbilityDiedTask(abilityRecord, currentUserId);
2346     EXPECT_EQ(static_cast<int>(ConnectManager()->GetServiceMap().size()), 0);
2347 }
2348 
2349 /*
2350  * Feature: AbilityConnectManager
2351  * Function: DumpState
2352  * SubFunction: DumpState
2353  * FunctionPoints: NA
2354  * EnvConditions: NA
2355  * CaseDescription: Verify AbilityConnectManager DumpState
2356  */
2357 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_DumpState_001, TestSize.Level1)
2358 {
2359     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2360     ASSERT_NE(connectManager, nullptr);
2361     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2362     std::vector<std::string> info;
2363     bool isClient = false;
2364     std::string args = "args";
2365     connectManager->serviceMap_.emplace(args, abilityRecord);
2366     connectManager->DumpState(info, isClient, args);
2367     connectManager->serviceMap_.clear();
2368     connectManager->DumpState(info, isClient, args);
2369     args = "";
2370     connectManager->DumpState(info, isClient, args);
2371 }
2372 
2373 /*
2374  * Feature: AbilityConnectManager
2375  * Function: DumpStateByUri
2376  * SubFunction: DumpStateByUri
2377  * FunctionPoints: NA
2378  * EnvConditions: NA
2379  * CaseDescription: Verify AbilityConnectManager DumpStateByUri
2380  */
2381 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_DumpStateByUri_001, TestSize.Level1)
2382 {
2383     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2384     ASSERT_NE(connectManager, nullptr);
2385     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2386     std::vector<std::string> info;
2387     bool isClient = false;
2388     std::string args = "args";
2389     std::vector<std::string> params;
2390     connectManager->serviceMap_.emplace(args, abilityRecord);
2391     connectManager->DumpStateByUri(info, isClient, args, params);
2392     connectManager->serviceMap_.clear();
2393     connectManager->DumpStateByUri(info, isClient, args, params);
2394 }
2395 
2396 /*
2397  * Feature: AbilityConnectManager
2398  * Function: GetExtensionRunningInfos
2399  * SubFunction: GetExtensionRunningInfos
2400  * FunctionPoints: NA
2401  * EnvConditions: NA
2402  * CaseDescription: Verify AbilityConnectManager GetExtensionRunningInfos
2403  */
2404 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_GetExtensionRunningInfos_001, TestSize.Level1)
2405 {
2406     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2407     ASSERT_NE(connectManager, nullptr);
2408     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2409     int upperLimit = 1;
2410     std::vector<ExtensionRunningInfo> info;
2411     int32_t userId = 0;
2412     bool isPerm = false;
2413     ExtensionRunningInfo extensionInfo;
2414     info.push_back(extensionInfo);
2415     connectManager->serviceMap_.emplace("first", abilityRecord);
2416     connectManager->GetExtensionRunningInfos(upperLimit, info, userId, isPerm);
2417 }
2418 
2419 /*
2420  * Feature: AbilityConnectManager
2421  * Function: GetExtensionRunningInfo
2422  * SubFunction: GetExtensionRunningInfo
2423  * FunctionPoints: NA
2424  * EnvConditions: NA
2425  * CaseDescription: Verify AbilityConnectManager GetExtensionRunningInfo
2426  */
2427 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_GetExtensionRunningInfo_001, TestSize.Level1)
2428 {
2429     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2430     ASSERT_NE(connectManager, nullptr);
2431     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2432     OHOS::sptr<IAbilityConnection> callback = new AbilityConnectCallback();
2433     std::shared_ptr<ConnectionRecord> connection =
2434         std::make_shared<ConnectionRecord>(abilityRecord->GetToken(), abilityRecord, callback, nullptr);
2435     int32_t userId = 0;
2436     std::vector<ExtensionRunningInfo> info;
2437     Want want;
2438     AbilityInfo abilityInfo;
2439     ApplicationInfo applicationInfo;
2440     want.SetElementName("device", "bundle", "ability", "module");
2441     abilityRecord->SetWant(want);
2442     abilityRecord->connRecordList_.push_back(nullptr);
2443     abilityRecord->connRecordList_.push_back(connection);
2444     connectManager->GetExtensionRunningInfo(abilityRecord, userId, info);
2445 }
2446 
2447 /*
2448  * Feature: AbilityConnectManager
2449  * Function: IsAbilityNeedKeepAlive
2450  * SubFunction:
2451  * FunctionPoints: IsAbilityNeedKeepAlive
2452  * EnvConditions:NA
2453  * CaseDescription: Verify the IsAbilityNeedKeepAlive need keep alive.
2454  * @tc.require: issueI6588V
2455  */
2456 HWTEST_F(AbilityConnectManagerTest, AAFWK_IsAbilityNeedKeepAlive_001, TestSize.Level1)
2457 {
2458     ConnectManager()->SetTaskHandler(TaskHandler());
2459     ConnectManager()->SetEventHandler(EventHandler());
2460 
2461     serviceRecord2_->SetKeepAliveBundle(true);
2462     // mock bms return
2463     EXPECT_TRUE(ConnectManager()->IsAbilityNeedKeepAlive(serviceRecord2_));
2464 }
2465 
2466 /*
2467  * Feature: AbilityConnectManager
2468  * Function: RestartAbility
2469  * SubFunction:
2470  * FunctionPoints: RestartAbility
2471  * EnvConditions:NA
2472  * CaseDescription: Verify ability not restart the normal ability died.
2473  * @tc.require: issueI6588V
2474  */
2475 HWTEST_F(AbilityConnectManagerTest, AAFWK_RestartAbility_001, TestSize.Level1)
2476 {
2477     ConnectManager()->SetTaskHandler(TaskHandler());
2478     ConnectManager()->SetEventHandler(EventHandler());
2479 
2480     int userId = 0;
2481 
2482     auto result = ConnectManager()->StartAbility(abilityRequest_);
2483     EXPECT_EQ(OHOS::ERR_OK, result);
2484 
2485     auto elementName = abilityRequest_.want.GetElement().GetURI();
2486     std::shared_ptr<AbilityRecord> service = ConnectManager()->GetServiceRecordByElementName(elementName);
2487     EXPECT_NE(service, nullptr);
2488     EXPECT_EQ(static_cast<int>(ConnectManager()->GetServiceMap().size()), 1);
2489 
2490     // HandleTerminate
__anon6d2e28cc0702() 2491     auto task = [service, connectManager = ConnectManager(), userId]() {
2492         connectManager->HandleAbilityDiedTask(service, userId);
2493     };
2494     EXPECT_CALL(*taskHandler_, SubmitTaskInner(_, _)).WillRepeatedly(DoAll(SetArgReferee<0>(task),
2495         testing::Invoke(taskHandler_.get(), &MockTaskHandlerWrap::MockTaskHandler)));
2496     ConnectManager()->OnAbilityDied(service, userId);
2497     EXPECT_EQ(static_cast<int>(ConnectManager()->GetServiceMap().size()), 0);
2498 }
2499 
2500 /*
2501  * Feature: AbilityConnectManager
2502  * Function: RestartAbility
2503  * SubFunction:
2504  * FunctionPoints: RestartAbility
2505  * EnvConditions:NA
2506  * CaseDescription: Verify ability restart when the resident ability died.
2507  * @tc.require: issueI6588V
2508  */
2509 HWTEST_F(AbilityConnectManagerTest, AAFWK_RestartAbility_002, TestSize.Level1)
2510 {
2511     ConnectManager()->SetTaskHandler(TaskHandler());
2512     ConnectManager()->SetEventHandler(EventHandler());
2513 
2514     int userId = 0;
2515 
2516     auto result = ConnectManager()->StartAbility(abilityRequest2_);
2517     EXPECT_EQ(OHOS::ERR_OK, result);
2518     WaitUntilTaskDone(TaskHandler());
2519 
2520     auto elementName = abilityRequest2_.want.GetElement().GetURI();
2521     auto service = ConnectManager()->GetServiceRecordByElementName(elementName);
2522     EXPECT_NE(service, nullptr);
2523     EXPECT_EQ(static_cast<int>(ConnectManager()->GetServiceMap().size()), 1);
2524 
2525     // HandleTerminate
2526     ConnectManager()->HandleAbilityDiedTask(service, userId);
2527     EXPECT_EQ(static_cast<int>(ConnectManager()->GetServiceMap().size()), 0);
2528 }
2529 
2530 /*
2531  * Feature: AbilityConnectManager
2532  * Function: RestartAbility
2533  * SubFunction:
2534  * FunctionPoints: RestartAbility
2535  * EnvConditions:NA
2536  * CaseDescription: Verify ability restart when the resident ability died and restart out of max times.
2537  * @tc.require: issueI6588V
2538  */
2539 HWTEST_F(AbilityConnectManagerTest, AAFWK_RestartAbility_003, TestSize.Level1)
2540 {
2541     ConnectManager()->SetTaskHandler(TaskHandler());
2542     ConnectManager()->SetEventHandler(EventHandler());
2543 
2544     int userId = 0;
2545 
2546     auto result = ConnectManager()->StartAbility(abilityRequest2_);
2547     EXPECT_EQ(OHOS::ERR_OK, result);
2548     WaitUntilTaskDone(TaskHandler());
2549 
2550     auto elementName = abilityRequest2_.want.GetElement().GetURI();
2551     std::shared_ptr<AbilityRecord> service = ConnectManager()->GetServiceRecordByElementName(elementName);
2552     EXPECT_NE(service, nullptr);
2553     EXPECT_EQ(static_cast<int>(ConnectManager()->GetServiceMap().size()), 1);
2554     // set the over interval time according the config; without init config, the interval time is 0.
2555     // ensure now - restartTime < intervalTime
2556     service->SetRestartTime(AbilityUtil::SystemTimeMillis() + 1000);
2557 
2558     // HandleTerminate
2559     ConnectManager()->HandleAbilityDiedTask(service, userId);
2560     EXPECT_EQ(static_cast<int>(ConnectManager()->GetServiceMap().size()), 0);
2561 }
2562 
2563 /*
2564  * Feature: AbilityConnectManager
2565  * Function: PostRestartResidentTask
2566  * SubFunction:
2567  * FunctionPoints: PostRestartResidentTask
2568  * EnvConditions:NA
2569  * CaseDescription: Verify the PostRestartResidentTask process.
2570  * @tc.require: issueI6588V
2571  */
2572 HWTEST_F(AbilityConnectManagerTest, AAFWK_PostRestartResidentTask_001, TestSize.Level1)
2573 {
2574     ConnectManager()->SetTaskHandler(TaskHandler());
2575     ConnectManager()->SetEventHandler(EventHandler());
2576 
2577     ConnectManager()->PostRestartResidentTask(abilityRequest2_);
2578     WaitUntilTaskDone(TaskHandler());
2579     EXPECT_EQ(static_cast<int>(ConnectManager()->GetServiceMap().size()), 0);
2580 }
2581 
2582 /*
2583  * Feature: AbilityConnectManager
2584  * Function: StartAbility
2585  * SubFunction: NA
2586  * FunctionPoints: StartAbility
2587  * EnvConditions:NA
2588  * CaseDescription: Verify the normal process of startability with session info
2589  */
2590 HWTEST_F(AbilityConnectManagerTest, AAFWK_Start_Service_With_SessionInfo_001, TestSize.Level1)
2591 {
2592     ConnectManager()->SetTaskHandler(TaskHandler());
2593     ConnectManager()->SetEventHandler(EventHandler());
2594 
2595     auto sessionInfo = MockSessionInfo(0);
2596     abilityRequest_.sessionInfo = sessionInfo;
2597     auto result = ConnectManager()->StartAbility(abilityRequest_);
2598     EXPECT_EQ(OHOS::ERR_OK, result);
2599     abilityRequest_.sessionInfo = nullptr;
2600     WaitUntilTaskDone(TaskHandler());
2601 
2602     auto service = ConnectManager()->GetUIExtensionBySessionInfo(sessionInfo);
2603     EXPECT_EQ(static_cast<int>(ConnectManager()->GetServiceMap().size()), 1);
2604 }
2605 
2606 /*
2607  * Feature: AbilityConnectManager
2608  * Function: StartAbilityLocked
2609  * SubFunction: StartAbilityLocked
2610  * FunctionPoints: NA
2611  * EnvConditions: NA
2612  * CaseDescription: Verify AbilityConnectManager StartAbilityLocked with session info
2613  */
2614 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_StartAbilityLocked_With_SessionInfo_001, TestSize.Level1)
2615 {
2616     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2617     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2618     AbilityRequest abilityRequest;
2619     abilityRequest.abilityInfo.deviceId = "id";
2620     abilityRequest.abilityInfo.bundleName = "bundle";
2621     abilityRequest.abilityInfo.name = "name";
2622     abilityRequest.abilityInfo.moduleName = "module";
2623     std::string stringUri = "id/bundle/module/name";
2624     AppExecFwk::ElementName element(abilityRequest.abilityInfo.deviceId, abilityRequest.abilityInfo.bundleName,
2625         abilityRequest.abilityInfo.name, abilityRequest.abilityInfo.moduleName);
2626     EXPECT_EQ(element.GetURI(), stringUri);
2627     abilityRecord->currentState_ = AbilityState::ACTIVE;
2628     abilityRecord->SetPreAbilityRecord(serviceRecord1_);
2629     connectManager->serviceMap_.emplace(stringUri, abilityRecord);
2630     abilityRequest.sessionInfo = MockSessionInfo(0);
2631     int res = connectManager->StartAbilityLocked(abilityRequest);
2632     EXPECT_EQ(res, ERR_OK);
2633 }
2634 
2635 /*
2636  * Feature: MissionListManager
2637  * Function: MoveToBackground
2638  * SubFunction: NA
2639  * FunctionPoints: MissionListManager MoveToBackground
2640  * EnvConditions: NA
2641  * CaseDescription: Verify MoveToBackground
2642  */
2643 HWTEST_F(AbilityConnectManagerTest, MoveToBackground_001, TestSize.Level1)
2644 {
2645     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
2646     ASSERT_NE(connectManager, nullptr);
2647     std::shared_ptr<AbilityRecord> abilityRecord;
2648     connectManager->MoveToBackground(abilityRecord);
2649     connectManager.reset();
2650 }
2651 
2652 /*
2653  * Feature: MissionListManager
2654  * Function: MoveToBackground
2655  * SubFunction: NA
2656  * FunctionPoints: MissionListManager MoveToBackground
2657  * EnvConditions: NA
2658  * CaseDescription: Verify MoveToBackground
2659  */
2660 HWTEST_F(AbilityConnectManagerTest, MoveToBackground_002, TestSize.Level1)
2661 {
2662     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
2663     ASSERT_NE(connectManager, nullptr);
2664     std::shared_ptr<AbilityRecord> abilityRecord = InitAbilityRecord();
2665     abilityRecord->lifeCycleStateInfo_.sceneFlag = 1;
2666     connectManager->MoveToBackground(abilityRecord);
2667     connectManager.reset();
2668 }
2669 
2670 /*
2671  * Feature: MissionListManager
2672  * Function: MoveToBackground
2673  * SubFunction: NA
2674  * FunctionPoints: MissionListManager MoveToBackground
2675  * EnvConditions: NA
2676  * CaseDescription: Verify MoveToBackground
2677  */
2678 HWTEST_F(AbilityConnectManagerTest, MoveToBackground_003, TestSize.Level1)
2679 {
2680     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
2681     ASSERT_NE(connectManager, nullptr);
2682     std::shared_ptr<AbilityRecord> abilityRecord = InitAbilityRecord();
2683     abilityRecord->lifeCycleStateInfo_.sceneFlag = 2;
2684     abilityRecord->SetClearMissionFlag(true);
2685     connectManager->MoveToBackground(abilityRecord);
2686     connectManager.reset();
2687 }
2688 
2689 
2690 /*
2691  * Feature: MissionListManager
2692  * Function: CompleteBackground
2693  * SubFunction: NA
2694  * FunctionPoints: MissionListManager CompleteBackground
2695  * EnvConditions: NA
2696  * CaseDescription: Verify CompleteBackground
2697  */
2698 HWTEST_F(AbilityConnectManagerTest, CompleteBackground_001, TestSize.Level1)
2699 {
2700     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
2701     ASSERT_NE(connectManager, nullptr);
2702     std::shared_ptr<AbilityRecord> abilityRecord = InitAbilityRecord();
2703     abilityRecord->currentState_ = AbilityState::FOREGROUND;
2704     connectManager->CompleteBackground(abilityRecord);
2705     connectManager.reset();
2706 }
2707 
2708 /*
2709  * Feature: MissionListManager
2710  * Function: CompleteBackground
2711  * SubFunction: NA
2712  * FunctionPoints: MissionListManager CompleteBackground
2713  * EnvConditions: NA
2714  * CaseDescription: Verify CompleteBackground
2715  */
2716 HWTEST_F(AbilityConnectManagerTest, CompleteBackground_002, TestSize.Level1)
2717 {
2718     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
2719     ASSERT_NE(connectManager, nullptr);
2720     std::shared_ptr<AbilityRecord> abilityRecord = InitAbilityRecord();
2721     abilityRecord->currentState_ = AbilityState::BACKGROUNDING;
2722     abilityRecord->SetPendingState(AbilityState::FOREGROUND);
2723     abilityRecord->SetSwitchingPause(true);
2724     connectManager->CompleteBackground(abilityRecord);
2725     connectManager.reset();
2726 }
2727 
2728 /*
2729  * Feature: MissionListManager
2730  * Function: CompleteBackground
2731  * SubFunction: NA
2732  * FunctionPoints: MissionListManager CompleteBackground
2733  * EnvConditions: NA
2734  * CaseDescription: Verify CompleteBackground
2735  */
2736 HWTEST_F(AbilityConnectManagerTest, CompleteBackground_003, TestSize.Level1)
2737 {
2738     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
2739     ASSERT_NE(connectManager, nullptr);
2740     std::shared_ptr<AbilityRecord> abilityRecord = InitAbilityRecord();
2741     abilityRecord->currentState_ = AbilityState::BACKGROUNDING;
2742     abilityRecord->SetPendingState(AbilityState::BACKGROUND);
2743     abilityRecord->SetSwitchingPause(false);
2744     abilityRecord->SetStartedByCall(true);
2745     abilityRecord->SetStartToBackground(true);
2746     abilityRecord->isReady_ = true;
2747     connectManager->CompleteBackground(abilityRecord);
2748     connectManager.reset();
2749 }
2750 
2751 /*
2752  * Feature: MissionListManager
2753  * Function: CompleteBackground
2754  * SubFunction: NA
2755  * FunctionPoints: MissionListManager CompleteBackground
2756  * EnvConditions: NA
2757  * CaseDescription: Verify CompleteBackground
2758  */
2759 HWTEST_F(AbilityConnectManagerTest, CompleteBackground_004, TestSize.Level1)
2760 {
2761     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
2762     ASSERT_NE(connectManager, nullptr);
2763     std::shared_ptr<AbilityRecord> abilityRecord = InitAbilityRecord();
2764     std::shared_ptr<AbilityRecord> abilityRecord2 = InitAbilityRecord();
2765     abilityRecord->currentState_ = AbilityState::BACKGROUNDING;
2766     abilityRecord->SetPendingState(AbilityState::BACKGROUND);
2767     abilityRecord->SetSwitchingPause(false);
2768     abilityRecord->SetStartedByCall(false);
2769     abilityRecord->SetStartToBackground(true);
2770     abilityRecord->isReady_ = true;
2771     abilityRecord2->currentState_ = AbilityState::BACKGROUND;
2772     connectManager->CompleteBackground(abilityRecord);
2773     connectManager.reset();
2774 }
2775 
2776 /*
2777  * Feature: MissionListManager
2778  * Function: CompleteBackground
2779  * SubFunction: NA
2780  * FunctionPoints: MissionListManager CompleteBackground
2781  * EnvConditions: NA
2782  * CaseDescription: Verify CompleteBackground
2783  */
2784 HWTEST_F(AbilityConnectManagerTest, CompleteBackground_005, TestSize.Level1)
2785 {
2786     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
2787     ASSERT_NE(connectManager, nullptr);
2788     std::shared_ptr<AbilityRecord> abilityRecord = InitAbilityRecord();
2789     std::shared_ptr<AbilityRecord> abilityRecord2 = InitAbilityRecord();
2790     abilityRecord->currentState_ = AbilityState::BACKGROUNDING;
2791     abilityRecord->SetPendingState(AbilityState::BACKGROUND);
2792     abilityRecord->SetSwitchingPause(false);
2793     abilityRecord->SetStartedByCall(true);
2794     abilityRecord->SetStartToBackground(false);
2795     abilityRecord->isReady_ = true;
2796     abilityRecord2->currentState_ = AbilityState::BACKGROUND;
2797     connectManager->CompleteBackground(abilityRecord);
2798     connectManager.reset();
2799 }
2800 
2801 /*
2802  * Feature: MissionListManager
2803  * Function: CompleteBackground
2804  * SubFunction: NA
2805  * FunctionPoints: MissionListManager CompleteBackground
2806  * EnvConditions: NA
2807  * CaseDescription: Verify CompleteBackground
2808  */
2809 HWTEST_F(AbilityConnectManagerTest, CompleteBackground_006, TestSize.Level1)
2810 {
2811     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
2812     ASSERT_NE(connectManager, nullptr);
2813     std::shared_ptr<AbilityRecord> abilityRecord = InitAbilityRecord();
2814     std::shared_ptr<AbilityRecord> abilityRecord2 = InitAbilityRecord();
2815     abilityRecord->currentState_ = AbilityState::BACKGROUNDING;
2816     abilityRecord->SetPendingState(AbilityState::BACKGROUND);
2817     abilityRecord->SetSwitchingPause(false);
2818     abilityRecord->SetStartedByCall(true);
2819     abilityRecord->SetStartToBackground(true);
2820     abilityRecord->isReady_ = false;
2821     abilityRecord2->currentState_ = AbilityState::FOREGROUND;
2822     connectManager->CompleteBackground(abilityRecord);
2823     connectManager.reset();
2824 }
2825 
2826 /*
2827  * Feature: MissionListManager
2828  * Function: PrintTimeOutLog
2829  * SubFunction: NA
2830  * FunctionPoints: MissionListManager PrintTimeOutLog
2831  * EnvConditions: NA
2832  * CaseDescription: Verify PrintTimeOutLog
2833  */
2834 HWTEST_F(AbilityConnectManagerTest, PrintTimeOutLog_001, TestSize.Level1)
2835 {
2836     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
2837     ASSERT_NE(connectManager, nullptr);
2838     uint32_t msgId = 0;
2839     connectManager->PrintTimeOutLog(nullptr, msgId);
2840     connectManager.reset();
2841 }
2842 
2843 /*
2844  * Feature: MissionListManager
2845  * Function: PrintTimeOutLog
2846  * SubFunction: NA
2847  * FunctionPoints: MissionListManager PrintTimeOutLog
2848  * EnvConditions: NA
2849  * CaseDescription: Verify PrintTimeOutLog
2850  */
2851 HWTEST_F(AbilityConnectManagerTest, PrintTimeOutLog_002, TestSize.Level1)
2852 {
2853     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
2854     ASSERT_NE(connectManager, nullptr);
2855     std::shared_ptr<AbilityRecord> abilityRecord = InitAbilityRecord();
2856     uint32_t msgId = 0;
2857     connectManager->PrintTimeOutLog(abilityRecord, msgId);
2858     connectManager.reset();
2859 }
2860 
2861 /*
2862  * Feature: MissionListManager
2863  * Function: PrintTimeOutLog
2864  * SubFunction: NA
2865  * FunctionPoints: MissionListManager PrintTimeOutLog
2866  * EnvConditions: NA
2867  * CaseDescription: Verify PrintTimeOutLog
2868  */
2869 HWTEST_F(AbilityConnectManagerTest, PrintTimeOutLog_003, TestSize.Level1)
2870 {
2871     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
2872     ASSERT_NE(connectManager, nullptr);
2873     std::shared_ptr<AbilityRecord> abilityRecord = InitAbilityRecord();
2874     uint32_t msgId = 1;
2875     connectManager->PrintTimeOutLog(abilityRecord, msgId);
2876     connectManager.reset();
2877 }
2878 
2879 /*
2880  * Feature: MissionListManager
2881  * Function: PrintTimeOutLog
2882  * SubFunction: NA
2883  * FunctionPoints: MissionListManager PrintTimeOutLog
2884  * EnvConditions: NA
2885  * CaseDescription: Verify PrintTimeOutLog
2886  */
2887 HWTEST_F(AbilityConnectManagerTest, PrintTimeOutLog_004, TestSize.Level1)
2888 {
2889     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
2890     ASSERT_NE(connectManager, nullptr);
2891     std::shared_ptr<AbilityRecord> abilityRecord = InitAbilityRecord();
2892     uint32_t msgId = 2;
2893     connectManager->PrintTimeOutLog(abilityRecord, msgId);
2894     connectManager.reset();
2895 }
2896 
2897 /*
2898  * Feature: MissionListManager
2899  * Function: PrintTimeOutLog
2900  * SubFunction: NA
2901  * FunctionPoints: MissionListManager PrintTimeOutLog
2902  * EnvConditions: NA
2903  * CaseDescription: Verify PrintTimeOutLog
2904  */
2905 HWTEST_F(AbilityConnectManagerTest, PrintTimeOutLog_005, TestSize.Level1)
2906 {
2907     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
2908     ASSERT_NE(connectManager, nullptr);
2909     std::shared_ptr<AbilityRecord> abilityRecord = InitAbilityRecord();
2910     uint32_t msgId = 4;
2911     connectManager->PrintTimeOutLog(abilityRecord, msgId);
2912     connectManager.reset();
2913 }
2914 
2915 /*
2916  * Feature: MissionListManager
2917  * Function: PrintTimeOutLog
2918  * SubFunction: NA
2919  * FunctionPoints: MissionListManager PrintTimeOutLog
2920  * EnvConditions: NA
2921  * CaseDescription: Verify PrintTimeOutLog
2922  */
2923 HWTEST_F(AbilityConnectManagerTest, PrintTimeOutLog_006, TestSize.Level1)
2924 {
2925     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
2926     ASSERT_NE(connectManager, nullptr);
2927     std::shared_ptr<AbilityRecord> abilityRecord = InitAbilityRecord();
2928     uint32_t msgId = 5;
2929     connectManager->PrintTimeOutLog(abilityRecord, msgId);
2930     connectManager.reset();
2931 }
2932 
2933 /*
2934  * Feature: MissionListManager
2935  * Function: PrintTimeOutLog
2936  * SubFunction: NA
2937  * FunctionPoints: MissionListManager PrintTimeOutLog
2938  * EnvConditions: NA
2939  * CaseDescription: Verify PrintTimeOutLog
2940  */
2941 HWTEST_F(AbilityConnectManagerTest, PrintTimeOutLog_007, TestSize.Level1)
2942 {
2943     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
2944     ASSERT_NE(connectManager, nullptr);
2945     std::shared_ptr<AbilityRecord> abilityRecord = InitAbilityRecord();
2946     uint32_t msgId = 6;
2947     connectManager->PrintTimeOutLog(abilityRecord, msgId);
2948     connectManager.reset();
2949 }
2950 
2951 /*
2952  * Feature: MissionListManager
2953  * Function: PrintTimeOutLog
2954  * SubFunction: NA
2955  * FunctionPoints: MissionListManager PrintTimeOutLog
2956  * EnvConditions: NA
2957  * CaseDescription: Verify PrintTimeOutLog
2958  */
2959 HWTEST_F(AbilityConnectManagerTest, PrintTimeOutLog_008, TestSize.Level1)
2960 {
2961     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
2962     ASSERT_NE(connectManager, nullptr);
2963     std::shared_ptr<AbilityRecord> abilityRecord = InitAbilityRecord();
2964     uint32_t msgId = 3;
2965     connectManager->PrintTimeOutLog(abilityRecord, msgId);
2966     connectManager.reset();
2967 }
2968 
2969 /*
2970  * Feature: AbilityConnectManager
2971  * Function: OnAbilityRequestDone
2972  * SubFunction: NA
2973  * FunctionPoints: AbilityConnectManager OnAbilityRequestDone
2974  * EnvConditions: NA
2975  * CaseDescription: Verify OnAbilityRequestDone
2976  * @tc.require: AR000I8B26
2977  */
2978 HWTEST_F(AbilityConnectManagerTest, OnAbilityRequestDone_001, TestSize.Level1)
2979 {
2980     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
2981     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
2982     sptr<IRemoteObject> token = abilityRecord->GetToken();
2983     abilityRecord->abilityInfo_.extensionAbilityType = ExtensionAbilityType::UI;
2984     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
2985     connectManager->serviceMap_.emplace("first", abilityRecord);
2986     connectManager->OnAbilityRequestDone(token, 2);
2987     EXPECT_EQ(abilityRecord->GetAbilityState(), AbilityState::FOREGROUNDING);
2988     connectManager->serviceMap_.erase("first");
2989     abilityRecord->abilityInfo_.extensionAbilityType = ExtensionAbilityType::UNSPECIFIED;
2990     abilityRecord->SetAbilityState(AbilityState::INITIAL);
2991 }
2992 
2993 /*
2994  * Feature: AbilityConnectManager
2995  * Function: ScheduleCommandAbilityWindowDone
2996  * SubFunction: NA
2997  * FunctionPoints: AbilityConnectManager ScheduleCommandAbilityWindowDone
2998  * EnvConditions: NA
2999  * CaseDescription: Verify ScheduleCommandAbilityWindowDone
3000  * @tc.require: AR000I8B26
3001  */
3002 HWTEST_F(AbilityConnectManagerTest, ScheduleCommandAbilityWindowDone_001, TestSize.Level1)
3003 {
3004     ConnectManager()->SetTaskHandler(TaskHandler());
3005     ConnectManager()->SetEventHandler(EventHandler());
3006     auto sessionInfo = MockSessionInfo(0);
3007 
3008     sptr<IRemoteObject> nullToken = nullptr;
3009     auto result = ConnectManager()->ScheduleCommandAbilityWindowDone(
3010         nullToken, sessionInfo, WIN_CMD_FOREGROUND, ABILITY_CMD_FOREGROUND);
3011     EXPECT_EQ(result, OHOS::ERR_INVALID_VALUE);
3012 
3013     std::shared_ptr<AbilityRecord> ability = nullptr;
3014     OHOS::sptr<OHOS::IRemoteObject> token1 = new OHOS::AAFwk::Token(ability);
3015     auto result1 = ConnectManager()->ScheduleCommandAbilityWindowDone(
3016         token1, sessionInfo, WIN_CMD_FOREGROUND, ABILITY_CMD_FOREGROUND);
3017     EXPECT_EQ(result1, OHOS::ERR_INVALID_VALUE);
3018 
3019     sptr<SessionInfo> nullSession = nullptr;
3020     auto result2 = ConnectManager()->ScheduleCommandAbilityWindowDone(
3021         serviceToken_, nullSession, WIN_CMD_FOREGROUND, ABILITY_CMD_FOREGROUND);
3022     EXPECT_EQ(result2, OHOS::ERR_INVALID_VALUE);
3023 
3024     auto result3 = ConnectManager()->ScheduleCommandAbilityWindowDone(
3025         serviceToken_, sessionInfo, WIN_CMD_FOREGROUND, ABILITY_CMD_FOREGROUND);
3026     EXPECT_EQ(result3, OHOS::ERR_OK);
3027 }
3028 
3029 /*
3030  * Feature: AbilityConnectManager
3031  * Function: ForegroundUIExtensionAbility
3032  * SubFunction: NA
3033  * FunctionPoints: MissionListManager ForegroundUIExtensionAbility
3034  * EnvConditions: NA
3035  * CaseDescription: Verify ForegroundUIExtensionAbility
3036  * @tc.require: AR000I8B26
3037  */
3038 HWTEST_F(AbilityConnectManagerTest, MoveToForeground_001, TestSize.Level1)
3039 {
3040     serviceRecord_->ForegroundUIExtensionAbility();
3041     EXPECT_EQ(serviceRecord_->GetAbilityState(), AbilityState::FOREGROUNDING);
3042     serviceRecord_->SetAbilityState(AbilityState::INITIAL);
3043 }
3044 
3045 /*
3046  * Feature: AbilityConnectManager
3047  * Function: DispatchForeground
3048  * SubFunction:
3049  * FunctionPoints: DispatchForeground
3050  * EnvConditions:NA
3051  * CaseDescription: Verify the DispatchForeground process
3052  * @tc.require: AR000I8B26
3053  */
3054 HWTEST_F(AbilityConnectManagerTest, DispatchForeground_001, TestSize.Level1)
3055 {
3056     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
3057     ASSERT_NE(connectManager, nullptr);
3058     std::shared_ptr<AbilityRecord> ability = nullptr;
3059     auto result = connectManager->DispatchForeground(ability);
3060     EXPECT_EQ(result, OHOS::ERR_INVALID_VALUE);
3061 
3062     result = connectManager->DispatchForeground(serviceRecord_);
3063     EXPECT_EQ(result, OHOS::ERR_INVALID_VALUE);
3064 
3065     connectManager->SetTaskHandler(TaskHandler());
3066     connectManager->SetEventHandler(EventHandler());
3067     result = connectManager->DispatchForeground(serviceRecord_);
3068     EXPECT_EQ(result, OHOS::ERR_OK);
3069 }
3070 
3071 /*
3072  * Feature: AbilityConnectManager
3073  * Function: DispatchBackground
3074  * SubFunction:
3075  * FunctionPoints: DispatchBackground
3076  * EnvConditions:NA
3077  * CaseDescription: Verify the DispatchBackground process
3078  * @tc.require: AR000I8B26
3079  */
3080 HWTEST_F(AbilityConnectManagerTest, DispatchBackground_001, TestSize.Level1)
3081 {
3082     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
3083     ASSERT_NE(connectManager, nullptr);
3084     std::shared_ptr<AbilityRecord> ability = nullptr;
3085     auto result = connectManager->DispatchBackground(ability);
3086     EXPECT_EQ(result, OHOS::ERR_INVALID_VALUE);
3087 
3088     result = connectManager->DispatchBackground(serviceRecord_);
3089     EXPECT_EQ(result, OHOS::ERR_INVALID_VALUE);
3090 
3091     connectManager->SetTaskHandler(TaskHandler());
3092     connectManager->SetEventHandler(EventHandler());
3093     result = connectManager->DispatchBackground(serviceRecord_);
3094     EXPECT_EQ(result, OHOS::ERR_OK);
3095 }
3096 
3097 /*
3098  * Feature: AbilityConnectManager
3099  * Function: HandleCommandWindowTimeoutTask
3100  * SubFunction: HandleCommandWindowTimeoutTask
3101  * FunctionPoints: NA
3102  * EnvConditions: NA
3103  * CaseDescription: Verify AbilityConnectManager HandleCommandWindowTimeoutTask
3104  * @tc.require: AR000I8B26
3105  */
3106 HWTEST_F(AbilityConnectManagerTest, HandleCommandWindowTimeoutTask_001, TestSize.Level1)
3107 {
3108     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3109     ASSERT_NE(connectManager, nullptr);
3110     connectManager->HandleCommandWindowTimeoutTask(serviceRecord_, MockSessionInfo(0), WIN_CMD_FOREGROUND);
3111 }
3112 
3113 /*
3114  * Feature: AbilityConnectManager
3115  * Function: CommandAbilityWindow
3116  * SubFunction: CommandAbilityWindow
3117  * FunctionPoints: NA
3118  * EnvConditions: NA
3119  * CaseDescription: Verify AbilityConnectManager CommandAbilityWindow
3120  * @tc.require: AR000I8B26
3121  */
3122 HWTEST_F(AbilityConnectManagerTest, CommandAbilityWindow_001, TestSize.Level1)
3123 {
3124     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3125     ASSERT_NE(connectManager, nullptr);
3126     connectManager->SetTaskHandler(TaskHandler());
3127     connectManager->SetEventHandler(EventHandler());
3128     connectManager->CommandAbilityWindow(serviceRecord_, MockSessionInfo(0), WIN_CMD_FOREGROUND);
3129 }
3130 
3131 /*
3132  * Feature: AbilityConnectManager
3133  * Function: CompleteForeground
3134  * SubFunction: CompleteForeground
3135  * FunctionPoints: NA
3136  * EnvConditions: NA
3137  * CaseDescription: Verify AbilityConnectManager CompleteForeground
3138  * @tc.require: AR000I8B26
3139  */
3140 HWTEST_F(AbilityConnectManagerTest, CompleteForeground_001, TestSize.Level1)
3141 {
3142     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
3143     ASSERT_NE(connectManager, nullptr);
3144     std::shared_ptr<AbilityRecord> abilityRecord = InitAbilityRecord();
3145     abilityRecord->currentState_ = AbilityState::BACKGROUND;
3146     connectManager->CompleteForeground(abilityRecord);
3147     EXPECT_EQ(abilityRecord->GetAbilityState(), AbilityState::BACKGROUND);
3148 
3149     abilityRecord->currentState_ = AbilityState::FOREGROUNDING;
3150     connectManager->CompleteForeground(abilityRecord);
3151     EXPECT_EQ(abilityRecord->GetAbilityState(), AbilityState::FOREGROUND);
3152     connectManager.reset();
3153 }
3154 
3155 /*
3156  * Feature: AbilityConnectManager
3157  * Function: AddUIExtWindowDeathRecipient
3158  * SubFunction: AddUIExtWindowDeathRecipient
3159  * FunctionPoints: NA
3160  * EnvConditions: NA
3161  * CaseDescription: Verify AbilityConnectManager AddUIExtWindowDeathRecipient
3162  * @tc.require: AR000I8B26
3163  */
3164 HWTEST_F(AbilityConnectManagerTest, AddUIExtWindowDeathRecipient_001, TestSize.Level1)
3165 {
3166     ConnectManager()->SetTaskHandler(TaskHandler());
3167     ConnectManager()->SetEventHandler(EventHandler());
3168     ConnectManager()->uiExtRecipientMap_.clear();
3169 
3170     ConnectManager()->AddUIExtWindowDeathRecipient(nullptr);
3171     EXPECT_TRUE(ConnectManager()->uiExtRecipientMap_.empty());
3172 
3173     ConnectManager()->AddUIExtWindowDeathRecipient(callbackA_->AsObject());
3174     EXPECT_EQ(static_cast<int>(ConnectManager()->uiExtRecipientMap_.size()), 1);
3175 
3176     // Add twice, do not add repeatedly
3177     ConnectManager()->AddUIExtWindowDeathRecipient(callbackA_->AsObject());
3178     EXPECT_EQ(static_cast<int>(ConnectManager()->uiExtRecipientMap_.size()), 1);
3179     ConnectManager()->uiExtRecipientMap_.clear();
3180 }
3181 
3182 /*
3183  * Feature: AbilityConnectManager
3184  * Function: RemoveUIExtWindowDeathRecipient
3185  * SubFunction:
3186  * FunctionPoints: RemoveUIExtWindowDeathRecipient
3187  * EnvConditions:NA
3188  * CaseDescription: Verify the RemoveUIExtWindowDeathRecipient process
3189  * @tc.require: AR000I8B26
3190  */
3191 HWTEST_F(AbilityConnectManagerTest, RemoveUIExtWindowDeathRecipient_001, TestSize.Level1)
3192 {
3193     ConnectManager()->SetTaskHandler(TaskHandler());
3194     ConnectManager()->SetEventHandler(EventHandler());
3195     ConnectManager()->uiExtRecipientMap_.clear();
3196 
3197     ConnectManager()->AddUIExtWindowDeathRecipient(callbackA_->AsObject());
3198     EXPECT_EQ(static_cast<int>(ConnectManager()->uiExtRecipientMap_.size()), 1);
3199 
3200     ConnectManager()->RemoveUIExtWindowDeathRecipient(nullptr);
3201     EXPECT_FALSE(ConnectManager()->uiExtRecipientMap_.empty());
3202 
3203     ConnectManager()->RemoveUIExtWindowDeathRecipient(callbackA_->AsObject());
3204     EXPECT_TRUE(ConnectManager()->uiExtRecipientMap_.empty());
3205 }
3206 
3207 /*
3208  * Feature: AbilityConnectManager
3209  * Function: OnUIExtWindowDied
3210  * SubFunction:
3211  * FunctionPoints: OnUIExtWindowDied
3212  * EnvConditions:NA
3213  * CaseDescription: Verify the OnUIExtWindowDied process
3214  * @tc.require: AR000I8B26
3215  */
3216 HWTEST_F(AbilityConnectManagerTest, OnUIExtWindowDied_001, TestSize.Level1)
3217 {
3218     ConnectManager()->SetTaskHandler(TaskHandler());
3219     ConnectManager()->SetEventHandler(EventHandler());
3220     ConnectManager()->uiExtRecipientMap_.clear();
3221     ConnectManager()->uiExtensionMap_.clear();
3222 
3223     ConnectManager()->uiExtensionMap_.emplace(
3224         callbackA_->AsObject(), AbilityConnectManager::UIExtWindowMapValType(serviceRecord_, MockSessionInfo(0)));
3225     ConnectManager()->AddUIExtWindowDeathRecipient(callbackA_->AsObject());
3226     ConnectManager()->OnUIExtWindowDied(nullptr);
3227     EXPECT_EQ(static_cast<int>(ConnectManager()->uiExtRecipientMap_.size()), 1);
3228     EXPECT_EQ(static_cast<int>(ConnectManager()->uiExtensionMap_.size()), 1);
3229 }
3230 
3231 /*
3232  * Feature: AbilityConnectManager
3233  * Function: HandleUIExtWindowDiedTask
3234  * SubFunction: HandleUIExtWindowDiedTask
3235  * FunctionPoints: NA
3236  * EnvConditions: NA
3237  * CaseDescription: Verify AbilityConnectManager HandleUIExtWindowDiedTask
3238  * @tc.require: AR000I8B26
3239  */
3240 HWTEST_F(AbilityConnectManagerTest, HandleUIExtWindowDiedTask_001, TestSize.Level1)
3241 {
3242     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3243     ASSERT_NE(connectManager, nullptr);
3244     connectManager->uiExtRecipientMap_.clear();
3245     connectManager->uiExtensionMap_.clear();
3246 
3247     connectManager->uiExtensionMap_.emplace(
3248         callbackA_->AsObject(), AbilityConnectManager::UIExtWindowMapValType(serviceRecord_, MockSessionInfo(0)));
3249     connectManager->AddUIExtWindowDeathRecipient(callbackA_->AsObject());
3250     connectManager->HandleUIExtWindowDiedTask(nullptr);
3251     EXPECT_EQ(static_cast<int>(connectManager->uiExtRecipientMap_.size()), 1);
3252     EXPECT_EQ(static_cast<int>(connectManager->uiExtensionMap_.size()), 1);
3253 
3254     connectManager->HandleUIExtWindowDiedTask(callbackA_->AsObject());
3255     EXPECT_TRUE(connectManager->uiExtRecipientMap_.empty());
3256     EXPECT_TRUE(connectManager->uiExtensionMap_.empty());
3257 }
3258 
3259 /*
3260  * Feature: AbilityConnectManager
3261  * Function: IsUIExtensionFocused
3262  * SubFunction: IsUIExtensionFocused
3263  * FunctionPoints: NA
3264  * EnvConditions: NA
3265  * CaseDescription: Verify AbilityConnectManager IsUIExtensionFocused
3266  */
3267 HWTEST_F(AbilityConnectManagerTest, IsUIExtensionFocused_001, TestSize.Level1)
3268 {
3269     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
3270     ASSERT_NE(connectManager, nullptr);
3271     connectManager->uiExtensionMap_.clear();
3272     bool isFocused = connectManager->IsUIExtensionFocused(
3273         serviceRecord_->GetApplicationInfo().accessTokenId, serviceRecord1_->GetToken());
3274     EXPECT_EQ(isFocused, false);
3275     connectManager.reset();
3276 }
3277 
3278 /*
3279  * Feature: AbilityConnectManager
3280  * Function: IsUIExtensionFocused
3281  * SubFunction: IsUIExtensionFocused
3282  * FunctionPoints: NA
3283  * EnvConditions: NA
3284  * CaseDescription: Verify AbilityConnectManager IsUIExtensionFocused
3285  */
3286 HWTEST_F(AbilityConnectManagerTest, IsUIExtensionFocused_002, TestSize.Level1)
3287 {
3288     AAFwk::IsMockSaCall::IsMockSaCallWithPermission();
3289     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
3290     ASSERT_NE(connectManager, nullptr);
3291     connectManager->uiExtensionMap_.clear();
3292 
3293     std::string device = "device";
3294     std::string abilityName = "uiExtensionUserAbility";
3295     std::string appName = "uiExtensionUser";
3296     std::string bundleName = "com.ix.uiExtensionUser";
3297     std::string moduleName = "entry";
3298     auto request = GenerateAbilityRequest(device, abilityName, appName, bundleName, moduleName);
3299     auto uiExtensionUser = AbilityRecord::CreateAbilityRecord(request);
3300     EXPECT_NE(uiExtensionUser, nullptr);
3301 
3302     std::string abilityName1 = "uiExtensionAbility1";
3303     std::string appName1 = "uiExtensionProvider1";
3304     std::string bundleName1 = "com.ix.uiExtensionProvider1";
3305     std::string moduleName1 = "entry";
3306     auto request1 = GenerateAbilityRequest(device, abilityName1, appName1, bundleName1, moduleName1);
3307     auto uiExtension1 = AbilityRecord::CreateAbilityRecord(request1);
3308     EXPECT_NE(uiExtension1, nullptr);
3309     uiExtension1->abilityInfo_.extensionAbilityType = ExtensionAbilityType::SYS_COMMON_UI;
3310     sptr<SessionInfo> sessionInfo1 = new (std::nothrow) SessionInfo();
3311     sessionInfo1->callerToken = uiExtensionUser->GetToken();
3312     uiExtension1->sessionInfo_ = sessionInfo1;
3313     connectManager->uiExtensionMap_.emplace(
3314         callbackA_->AsObject(), AbilityConnectManager::UIExtWindowMapValType(uiExtension1, sessionInfo1));
3315     bool isFocused1 = connectManager->IsUIExtensionFocused(
3316         uiExtension1->GetApplicationInfo().accessTokenId, uiExtensionUser->GetToken());
3317     EXPECT_EQ(isFocused1, true);
3318     std::string abilityName2 = "uiExtensionAbility2";
3319     std::string appName2 = "uiExtensionProvider2";
3320     std::string bundleName2 = "com.ix.uiExtensionProvider2";
3321     std::string moduleName2 = "entry";
3322     auto request2 = GenerateAbilityRequest(device, abilityName2, appName2, bundleName2, moduleName2);
3323     auto uiExtension2 = AbilityRecord::CreateAbilityRecord(request2);
3324     EXPECT_NE(uiExtension2, nullptr);
3325     uiExtension2->abilityInfo_.extensionAbilityType = ExtensionAbilityType::SYS_COMMON_UI;
3326     sptr<SessionInfo> sessionInfo2 = new (std::nothrow) SessionInfo();
3327     sessionInfo2->callerToken = uiExtension1->GetToken();
3328     uiExtension2->sessionInfo_ = sessionInfo2;
3329     connectManager->uiExtensionMap_.emplace(
3330         callbackA_->AsObject(), AbilityConnectManager::UIExtWindowMapValType(uiExtension2, sessionInfo2));
3331     bool isFocused2 = connectManager->IsUIExtensionFocused(
3332         uiExtension2->GetApplicationInfo().accessTokenId, uiExtensionUser->GetToken());
3333     EXPECT_EQ(isFocused2, true);
3334     connectManager.reset();
3335 }
3336 
3337 /*
3338  * Feature: AbilityConnectManager
3339  * Function: GetUIExtensionSourceToken
3340  * SubFunction: GetUIExtensionSourceToken
3341  * FunctionPoints: NA
3342  * EnvConditions: NA
3343  * CaseDescription: Verify AbilityConnectManager GetUIExtensionSourceToken
3344  */
3345 HWTEST_F(AbilityConnectManagerTest, GetUIExtensionSourceToken_001, TestSize.Level1)
3346 {
3347     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(3);
3348     ASSERT_NE(connectManager, nullptr);
3349     connectManager->uiExtensionMap_.clear();
3350     auto sourceToken = connectManager->GetUIExtensionSourceToken(nullptr);
3351     EXPECT_EQ(sourceToken, nullptr);
3352     connectManager.reset();
3353 }
3354 
3355 /*
3356  * Feature: AbilityConnectManager
3357  * Function: PauseExtensions
3358  * SubFunction: PauseExtensions
3359  * FunctionPoints: NA
3360  * EnvConditions: NA
3361  * CaseDescription: Verify AbilityConnectManager PauseExtensions
3362  */
3363 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_PauseExtensions_001, TestSize.Level1)
3364 {
3365     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3366     ASSERT_NE(connectManager, nullptr);
3367     std::shared_ptr<AbilityRecord> abilityRecord1 = serviceRecord_;
3368     abilityRecord1->abilityInfo_.type = AbilityType::PAGE;
3369     connectManager->serviceMap_.emplace("first", abilityRecord1);
3370     std::shared_ptr<AbilityRecord> abilityRecord2 = AbilityRecord::CreateAbilityRecord(abilityRequest_);
3371     abilityRecord2->abilityInfo_.type = AbilityType::EXTENSION;
3372     abilityRecord2->abilityInfo_.name = AbilityConfig::LAUNCHER_ABILITY_NAME;
3373     abilityRecord2->abilityInfo_.bundleName = AbilityConfig::LAUNCHER_BUNDLE_NAME;
3374     connectManager->serviceMap_.emplace("second", abilityRecord2);
3375     connectManager->PauseExtensions();
3376 }
3377 
3378 /*
3379  * Feature: AbilityConnectManager
3380  * Function: SignRestartAppFlag
3381  * CaseDescription: Verify AbilityConnectManager SignRestartAppFlag
3382  */
3383 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_SignRestartAppFlag_001, TestSize.Level1)
3384 {
3385     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3386     ASSERT_NE(connectManager, nullptr);
3387 
3388     std::string bundleName = "testBundleName";
3389     std::shared_ptr<AbilityRecord> abilityRecord1 = serviceRecord_;
3390     abilityRecord1->abilityInfo_.bundleName = bundleName;
3391     connectManager->serviceMap_.emplace("first", abilityRecord1);
3392     std::shared_ptr<AbilityRecord> abilityRecord2 = AbilityRecord::CreateAbilityRecord(abilityRequest_);
3393     abilityRecord2->abilityInfo_.bundleName = "errTestBundleName";
3394     connectManager->serviceMap_.emplace("second", abilityRecord2);
3395     int32_t uid = 100;
3396     connectManager->SignRestartAppFlag(uid, "");
3397 }
3398 
3399 /*
3400  * Feature: AbilityConnectManager
3401  * Function: BuildEventInfo
3402  * CaseDescription: Verify AbilityConnectManager BuildEventInfo
3403  */
3404 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_BuildEventInfo_001, TestSize.Level1)
3405 {
3406     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3407     ASSERT_NE(connectManager, nullptr);
3408 
3409     connectManager->BuildEventInfo(nullptr);
3410     std::shared_ptr<AbilityRecord> abilityRecord = InitAbilityRecord();
3411     connectManager->BuildEventInfo(abilityRecord);
3412     abilityRecord->SetCreateByConnectMode(true);
3413     connectManager->BuildEventInfo(abilityRecord);
3414 }
3415 
3416 /**
3417  * @tc.name: UpdateUIExtensionInfo_0100
3418  * @tc.desc: Update want params of ui extension.
3419  * @tc.type: FUNC
3420  */
3421 HWTEST_F(AbilityConnectManagerTest, UpdateUIExtensionInfo_0100, TestSize.Level1)
3422 {
3423     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3424     ASSERT_NE(connectManager, nullptr);
3425 
3426     Want want;
3427     AppExecFwk::AbilityInfo abilityInfo;
3428     abilityInfo.extensionAbilityType = ExtensionAbilityType::SYS_COMMON_UI;
3429     AppExecFwk::ApplicationInfo applicationInfo;
3430     auto abilityRecord = std::make_shared<AbilityRecord>(want, abilityInfo, applicationInfo);
3431     abilityRecord->SetUIExtensionAbilityId(1000);
3432     connectManager->UpdateUIExtensionInfo(abilityRecord);
3433     EXPECT_EQ(abilityRecord->GetWant().HasParameter("ability.want.params.uiExtensionAbilityId"), true);
3434     EXPECT_EQ(abilityRecord->GetWant().GetIntParam("ability.want.params.uiExtensionAbilityId", -1), 1000);
3435 }
3436 
3437 /**
3438  * @tc.name: PreloadUIExtensionAbilityLocked_0100
3439  * @tc.desc: preload uiextension ability
3440  * @tc.type: FUNC
3441  */
3442 HWTEST_F(AbilityConnectManagerTest, PreloadUIExtensionAbilityLocked_0100, TestSize.Level1)
3443 {
3444     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3445     ASSERT_NE(connectManager, nullptr);
3446 
3447     AbilityRequest abilityRequest;
3448     AppExecFwk::ElementName providerElement("0", "com.ohos.uiextensionprovider", "UIExtensionProvider", "entry");
3449     abilityRequest.want.SetElement(providerElement);
3450     abilityRequest.abilityInfo.type = AbilityType::EXTENSION;
3451     std::string hostBundleName = "com.ohos.uiextensionuser";
3452     auto ret = connectManager->PreloadUIExtensionAbilityLocked(abilityRequest, hostBundleName);
3453     EXPECT_NE(ret, ERR_OK);
3454 }
3455 
3456 /**
3457  * @tc.name: UnloadUIExtensionAbility_0100
3458  * @tc.desc: UnloadUIExtensionAbility
3459  * @tc.type: FUNC
3460  */
3461 HWTEST_F(AbilityConnectManagerTest, UnloadUIExtensionAbility_0100, TestSize.Level1)
3462 {
3463     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3464     ASSERT_NE(connectManager, nullptr);
3465 
3466     AbilityRequest abilityRequest;
3467     AppExecFwk::ElementName providerElement("0", "com.ohos.uiextensionprovider", "UIExtensionProvider", "entry");
3468     abilityRequest.want.SetElement(providerElement);
3469     std::shared_ptr<AbilityRecord> abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest);
3470     std::string hostBundleName = "com.ohos.uiextensionuser";
3471     auto ret = connectManager->UnloadUIExtensionAbility(abilityRecord, hostBundleName);
3472     EXPECT_EQ(ret, ERR_CONNECT_MANAGER_NULL_ABILITY_RECORD);
3473 }
3474 
3475 /**
3476  * @tc.name: AbilityWindowConfigTransactionDone_0100
3477  * @tc.desc: AbilityWindowConfigTransactionDone
3478  * @tc.type: FUNC
3479  */
3480 HWTEST_F(AbilityConnectManagerTest, AbilityWindowConfigTransactionDone_0100, TestSize.Level1)
3481 {
3482     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3483     ASSERT_NE(connectManager, nullptr);
3484 
3485     WindowConfig windowConfig;
3486     auto ret = connectManager->AbilityWindowConfigTransactionDone(serviceToken_, windowConfig);
3487     EXPECT_EQ(ret, ERR_OK);
3488 }
3489 
3490 /**
3491  * @tc.name: UpdateKeepAliveEnableState_0100
3492  * @tc.desc: UpdateKeepAliveEnableState
3493  * @tc.type: FUNC
3494  */
3495 HWTEST_F(AbilityConnectManagerTest, UpdateKeepAliveEnableState_0100, TestSize.Level1)
3496 {
3497     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3498     ASSERT_NE(connectManager, nullptr);
3499 
3500     auto ret = connectManager->UpdateKeepAliveEnableState("bundle", "entry", "mainAbility", true);
3501     EXPECT_EQ(ret, ERR_OK);
3502 }
3503 
3504 /*
3505  * Feature: AbilityConnectManager
3506  * Function: ScheduleConnectAbilityDoneLocked
3507  * SubFunction: ScheduleConnectAbilityDoneLocked
3508  * FunctionPoints: NA
3509  * EnvConditions: NA
3510  * CaseDescription: Verify AbilityConnectManager ScheduleConnectAbilityDoneLocked
3511  */
3512 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleConnectAbilityDoneLocked_002, TestSize.Level1)
3513 {
3514     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3515     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3516     sptr<IRemoteObject> token = abilityRecord->GetToken();
3517     sptr<IRemoteObject> remoteObject = nullptr;
3518     abilityRecord->abilityInfo_.type = AbilityType::EXTENSION;
3519     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3520     connectManager->serviceMap_.emplace("first", abilityRecord);
3521     int res = connectManager->ScheduleConnectAbilityDoneLocked(token, remoteObject);
3522     EXPECT_EQ(res, ERR_OK);
3523 }
3524 
3525 /*
3526  * Feature: AbilityConnectManager
3527  * Function: ScheduleConnectAbilityDoneLocked
3528  * SubFunction: ScheduleConnectAbilityDoneLocked
3529  * FunctionPoints: NA
3530  * EnvConditions: NA
3531  * CaseDescription: Verify AbilityConnectManager ScheduleConnectAbilityDoneLocked
3532  */
3533 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleConnectAbilityDoneLocked_003, TestSize.Level1)
3534 {
3535     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3536     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3537     sptr<IRemoteObject> token = abilityRecord->GetToken();
3538     sptr<IRemoteObject> remoteObject = nullptr;
3539     abilityRecord->abilityInfo_.type = AbilityType::SERVICE;
3540     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3541     connectManager->serviceMap_.emplace("first", abilityRecord);
3542     int res = connectManager->ScheduleConnectAbilityDoneLocked(token, remoteObject);
3543     EXPECT_EQ(res, ERR_OK);
3544 }
3545 
3546 /*
3547  * Feature: AbilityConnectManager
3548  * Function: ScheduleConnectAbilityDoneLocked
3549  * SubFunction: ScheduleConnectAbilityDoneLocked
3550  * FunctionPoints: NA
3551  * EnvConditions: NA
3552  * CaseDescription: Verify AbilityConnectManager ScheduleConnectAbilityDoneLocked
3553  */
3554 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleConnectAbilityDoneLocked_004, TestSize.Level1)
3555 {
3556     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3557     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3558     sptr<IRemoteObject> token = abilityRecord->GetToken();
3559     sptr<IRemoteObject> remoteObject = nullptr;
3560     abilityRecord->abilityInfo_.type = AbilityType::DATA;
3561     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3562     connectManager->serviceMap_.emplace("first", abilityRecord);
3563     int res = connectManager->ScheduleConnectAbilityDoneLocked(token, remoteObject);
3564     EXPECT_EQ(res, ERR_OK);
3565 }
3566 
3567 /*
3568  * Feature: AbilityConnectManager
3569  * Function: ScheduleConnectAbilityDoneLocked
3570  * SubFunction: ScheduleConnectAbilityDoneLocked
3571  * FunctionPoints: NA
3572  * EnvConditions: NA
3573  * CaseDescription: Verify AbilityConnectManager ScheduleConnectAbilityDoneLocked
3574  */
3575 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleConnectAbilityDoneLocked_005, TestSize.Level1)
3576 {
3577     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3578     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3579     sptr<IRemoteObject> token = abilityRecord->GetToken();
3580     sptr<IRemoteObject> remoteObject = nullptr;
3581     abilityRecord->abilityInfo_.type = AbilityType::FORM;
3582     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3583     connectManager->serviceMap_.emplace("first", abilityRecord);
3584     int res = connectManager->ScheduleConnectAbilityDoneLocked(token, remoteObject);
3585     EXPECT_EQ(res, ERR_OK);
3586 }
3587 
3588 /*
3589  * Feature: AbilityConnectManager
3590  * Function: ScheduleConnectAbilityDoneLocked
3591  * SubFunction: ScheduleConnectAbilityDoneLocked
3592  * FunctionPoints: NA
3593  * EnvConditions: NA
3594  * CaseDescription: Verify AbilityConnectManager ScheduleConnectAbilityDoneLocked
3595  */
3596 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleConnectAbilityDoneLocked_006, TestSize.Level1)
3597 {
3598     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3599     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3600     sptr<IRemoteObject> token = abilityRecord->GetToken();
3601     sptr<IRemoteObject> remoteObject = nullptr;
3602     abilityRecord->abilityInfo_.type = AbilityType::UNKNOWN;
3603     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3604     connectManager->serviceMap_.emplace("first", abilityRecord);
3605     int res = connectManager->ScheduleConnectAbilityDoneLocked(token, remoteObject);
3606     EXPECT_EQ(res, ERR_OK);
3607 }
3608 
3609 /*
3610  * Feature: AbilityConnectManager
3611  * Function: ScheduleConnectAbilityDoneLocked
3612  * SubFunction: ScheduleConnectAbilityDoneLocked
3613  * FunctionPoints: NA
3614  * EnvConditions: NA
3615  * CaseDescription: Verify AbilityConnectManager ScheduleConnectAbilityDoneLocked
3616  */
3617 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleConnectAbilityDoneLocked_007, TestSize.Level1)
3618 {
3619     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3620     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3621     sptr<IRemoteObject> token = abilityRecord->GetToken();
3622     sptr<IRemoteObject> remoteObject = nullptr;
3623     abilityRecord->abilityInfo_.type = AbilityType::PAGE;
3624     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3625     connectManager->serviceMap_.emplace("first", abilityRecord);
3626     int res = connectManager->ScheduleConnectAbilityDoneLocked(nullptr, remoteObject);
3627     EXPECT_EQ(res, ERR_INVALID_VALUE);
3628 }
3629 
3630 /*
3631  * Feature: AbilityConnectManager
3632  * Function: ScheduleConnectAbilityDoneLocked
3633  * SubFunction: ScheduleConnectAbilityDoneLocked
3634  * FunctionPoints: NA
3635  * EnvConditions: NA
3636  * CaseDescription: Verify AbilityConnectManager ScheduleConnectAbilityDoneLocked
3637  */
3638 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleConnectAbilityDoneLocked_008, TestSize.Level1)
3639 {
3640     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3641     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3642     sptr<IRemoteObject> token = abilityRecord->GetToken();
3643     sptr<IRemoteObject> remoteObject = nullptr;
3644     abilityRecord->abilityInfo_.type = AbilityType::EXTENSION;
3645     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3646     connectManager->serviceMap_.emplace("first", abilityRecord);
3647     int res = connectManager->ScheduleConnectAbilityDoneLocked(nullptr, remoteObject);
3648     EXPECT_EQ(res, ERR_INVALID_VALUE);
3649 }
3650 
3651 /*
3652  * Feature: AbilityConnectManager
3653  * Function: ScheduleConnectAbilityDoneLocked
3654  * SubFunction: ScheduleConnectAbilityDoneLocked
3655  * FunctionPoints: NA
3656  * EnvConditions: NA
3657  * CaseDescription: Verify AbilityConnectManager ScheduleConnectAbilityDoneLocked
3658  */
3659 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleConnectAbilityDoneLocked_009, TestSize.Level1)
3660 {
3661     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3662     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3663     sptr<IRemoteObject> token = abilityRecord->GetToken();
3664     sptr<IRemoteObject> remoteObject = nullptr;
3665     abilityRecord->abilityInfo_.type = AbilityType::SERVICE;
3666     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3667     connectManager->serviceMap_.emplace("first", abilityRecord);
3668     int res = connectManager->ScheduleConnectAbilityDoneLocked(nullptr, remoteObject);
3669     EXPECT_EQ(res, ERR_INVALID_VALUE);
3670 }
3671 
3672 /*
3673  * Feature: AbilityConnectManager
3674  * Function: ScheduleConnectAbilityDoneLocked
3675  * SubFunction: ScheduleConnectAbilityDoneLocked
3676  * FunctionPoints: NA
3677  * EnvConditions: NA
3678  * CaseDescription: Verify AbilityConnectManager ScheduleConnectAbilityDoneLocked
3679  */
3680 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleConnectAbilityDoneLocked_010, TestSize.Level1)
3681 {
3682     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3683     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3684     sptr<IRemoteObject> token = abilityRecord->GetToken();
3685     sptr<IRemoteObject> remoteObject = nullptr;
3686     abilityRecord->abilityInfo_.type = AbilityType::DATA;
3687     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3688     connectManager->serviceMap_.emplace("first", abilityRecord);
3689     int res = connectManager->ScheduleConnectAbilityDoneLocked(nullptr, remoteObject);
3690     EXPECT_EQ(res, ERR_INVALID_VALUE);
3691 }
3692 
3693 /*
3694  * Feature: AbilityConnectManager
3695  * Function: ScheduleConnectAbilityDoneLocked
3696  * SubFunction: ScheduleConnectAbilityDoneLocked
3697  * FunctionPoints: NA
3698  * EnvConditions: NA
3699  * CaseDescription: Verify AbilityConnectManager ScheduleConnectAbilityDoneLocked
3700  */
3701 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleConnectAbilityDoneLocked_011, TestSize.Level1)
3702 {
3703     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3704     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3705     sptr<IRemoteObject> token = abilityRecord->GetToken();
3706     sptr<IRemoteObject> remoteObject = nullptr;
3707     abilityRecord->abilityInfo_.type = AbilityType::FORM;
3708     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3709     connectManager->serviceMap_.emplace("first", abilityRecord);
3710     int res = connectManager->ScheduleConnectAbilityDoneLocked(nullptr, remoteObject);
3711     EXPECT_EQ(res, ERR_INVALID_VALUE);
3712 }
3713 
3714 /*
3715  * Feature: AbilityConnectManager
3716  * Function: ScheduleConnectAbilityDoneLocked
3717  * SubFunction: ScheduleConnectAbilityDoneLocked
3718  * FunctionPoints: NA
3719  * EnvConditions: NA
3720  * CaseDescription: Verify AbilityConnectManager ScheduleConnectAbilityDoneLocked
3721  */
3722 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleConnectAbilityDoneLocked_012, TestSize.Level1)
3723 {
3724     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3725     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3726     sptr<IRemoteObject> token = abilityRecord->GetToken();
3727     sptr<IRemoteObject> remoteObject = nullptr;
3728     abilityRecord->abilityInfo_.type = AbilityType::UNKNOWN;
3729     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3730     connectManager->serviceMap_.emplace("first", abilityRecord);
3731     int res = connectManager->ScheduleConnectAbilityDoneLocked(nullptr, remoteObject);
3732     EXPECT_EQ(res, ERR_INVALID_VALUE);
3733 }
3734 
3735 /*
3736  * Feature: AbilityConnectManager
3737  * Function: ScheduleDisconnectAbilityDoneLocked
3738  * SubFunction: ScheduleDisconnectAbilityDoneLocked
3739  * FunctionPoints: NA
3740  * EnvConditions: NA
3741  * CaseDescription: Verify AbilityConnectManager ScheduleDisconnectAbilityDoneLocked
3742  */
3743 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleDisconnectAbilityDoneLocked_002, TestSize.Level1)
3744 {
3745     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3746     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3747     OHOS::sptr<IAbilityConnection> callback = new AbilityConnectCallback();
3748     std::shared_ptr<ConnectionRecord> connection =
3749         std::make_shared<ConnectionRecord>(abilityRecord->GetToken(), abilityRecord, callback, nullptr);
3750     sptr<IRemoteObject> token = abilityRecord->GetToken();
3751     connection->SetConnectState(ConnectionState::DISCONNECTING);
3752     abilityRecord->abilityInfo_.type = AbilityType::EXTENSION;
3753     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3754     abilityRecord->connRecordList_.push_back(connection);
3755     connectManager->serviceMap_.emplace("first", abilityRecord);
3756     int res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
3757     EXPECT_EQ(res, INVALID_CONNECTION_STATE);
3758     abilityRecord->AddStartId();
3759     abilityRecord->SetAbilityState(AbilityState::ACTIVE);
3760     connectManager->serviceMap_.emplace("first", abilityRecord);
3761     res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
3762     EXPECT_EQ(res, ERR_OK);
3763 }
3764 
3765 /*
3766  * Feature: AbilityConnectManager
3767  * Function: ScheduleDisconnectAbilityDoneLocked
3768  * SubFunction: ScheduleDisconnectAbilityDoneLocked
3769  * FunctionPoints: NA
3770  * EnvConditions: NA
3771  * CaseDescription: Verify AbilityConnectManager ScheduleDisconnectAbilityDoneLocked
3772  */
3773 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleDisconnectAbilityDoneLocked_003, TestSize.Level1)
3774 {
3775     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3776     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3777     OHOS::sptr<IAbilityConnection> callback = new AbilityConnectCallback();
3778     std::shared_ptr<ConnectionRecord> connection =
3779         std::make_shared<ConnectionRecord>(abilityRecord->GetToken(), abilityRecord, callback, nullptr);
3780     sptr<IRemoteObject> token = abilityRecord->GetToken();
3781     connection->SetConnectState(ConnectionState::DISCONNECTING);
3782     abilityRecord->abilityInfo_.type = AbilityType::SERVICE;
3783     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3784     abilityRecord->connRecordList_.push_back(connection);
3785     connectManager->serviceMap_.emplace("first", abilityRecord);
3786     int res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
3787     EXPECT_EQ(res, INVALID_CONNECTION_STATE);
3788     abilityRecord->AddStartId();
3789     abilityRecord->SetAbilityState(AbilityState::ACTIVE);
3790     connectManager->serviceMap_.emplace("first", abilityRecord);
3791     res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
3792     EXPECT_EQ(res, ERR_OK);
3793 }
3794 
3795 /*
3796  * Feature: AbilityConnectManager
3797  * Function: ScheduleDisconnectAbilityDoneLocked
3798  * SubFunction: ScheduleDisconnectAbilityDoneLocked
3799  * FunctionPoints: NA
3800  * EnvConditions: NA
3801  * CaseDescription: Verify AbilityConnectManager ScheduleDisconnectAbilityDoneLocked
3802  */
3803 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleDisconnectAbilityDoneLocked_004, TestSize.Level1)
3804 {
3805     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3806     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3807     OHOS::sptr<IAbilityConnection> callback = new AbilityConnectCallback();
3808     std::shared_ptr<ConnectionRecord> connection =
3809         std::make_shared<ConnectionRecord>(abilityRecord->GetToken(), abilityRecord, callback, nullptr);
3810     sptr<IRemoteObject> token = abilityRecord->GetToken();
3811     connection->SetConnectState(ConnectionState::DISCONNECTING);
3812     abilityRecord->abilityInfo_.type = AbilityType::DATA;
3813     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3814     abilityRecord->connRecordList_.push_back(connection);
3815     connectManager->serviceMap_.emplace("first", abilityRecord);
3816     int res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
3817     EXPECT_EQ(res, INVALID_CONNECTION_STATE);
3818     abilityRecord->AddStartId();
3819     abilityRecord->SetAbilityState(AbilityState::ACTIVE);
3820     connectManager->serviceMap_.emplace("first", abilityRecord);
3821     res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
3822     EXPECT_EQ(res, ERR_OK);
3823 }
3824 
3825 /*
3826  * Feature: AbilityConnectManager
3827  * Function: ScheduleDisconnectAbilityDoneLocked
3828  * SubFunction: ScheduleDisconnectAbilityDoneLocked
3829  * FunctionPoints: NA
3830  * EnvConditions: NA
3831  * CaseDescription: Verify AbilityConnectManager ScheduleDisconnectAbilityDoneLocked
3832  */
3833 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleDisconnectAbilityDoneLocked_005, TestSize.Level1)
3834 {
3835     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3836     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3837     OHOS::sptr<IAbilityConnection> callback = new AbilityConnectCallback();
3838     std::shared_ptr<ConnectionRecord> connection =
3839         std::make_shared<ConnectionRecord>(abilityRecord->GetToken(), abilityRecord, callback, nullptr);
3840     sptr<IRemoteObject> token = abilityRecord->GetToken();
3841     connection->SetConnectState(ConnectionState::DISCONNECTING);
3842     abilityRecord->abilityInfo_.type = AbilityType::FORM;
3843     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3844     abilityRecord->connRecordList_.push_back(connection);
3845     connectManager->serviceMap_.emplace("first", abilityRecord);
3846     int res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
3847     EXPECT_EQ(res, INVALID_CONNECTION_STATE);
3848     abilityRecord->AddStartId();
3849     abilityRecord->SetAbilityState(AbilityState::ACTIVE);
3850     connectManager->serviceMap_.emplace("first", abilityRecord);
3851     res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
3852     EXPECT_EQ(res, ERR_OK);
3853 }
3854 
3855 /*
3856  * Feature: AbilityConnectManager
3857  * Function: ScheduleDisconnectAbilityDoneLocked
3858  * SubFunction: ScheduleDisconnectAbilityDoneLocked
3859  * FunctionPoints: NA
3860  * EnvConditions: NA
3861  * CaseDescription: Verify AbilityConnectManager ScheduleDisconnectAbilityDoneLocked
3862  */
3863 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleDisconnectAbilityDoneLocked_006, TestSize.Level1)
3864 {
3865     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3866     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3867     OHOS::sptr<IAbilityConnection> callback = new AbilityConnectCallback();
3868     std::shared_ptr<ConnectionRecord> connection =
3869         std::make_shared<ConnectionRecord>(abilityRecord->GetToken(), abilityRecord, callback, nullptr);
3870     sptr<IRemoteObject> token = abilityRecord->GetToken();
3871     connection->SetConnectState(ConnectionState::DISCONNECTING);
3872     abilityRecord->abilityInfo_.type = AbilityType::UNKNOWN;
3873     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3874     abilityRecord->connRecordList_.push_back(connection);
3875     connectManager->serviceMap_.emplace("first", abilityRecord);
3876     int res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
3877     EXPECT_EQ(res, INVALID_CONNECTION_STATE);
3878     abilityRecord->AddStartId();
3879     abilityRecord->SetAbilityState(AbilityState::ACTIVE);
3880     connectManager->serviceMap_.emplace("first", abilityRecord);
3881     res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
3882     EXPECT_EQ(res, ERR_OK);
3883 }
3884 
3885 /*
3886  * Feature: AbilityConnectManager
3887  * Function: ScheduleDisconnectAbilityDoneLocked
3888  * SubFunction: ScheduleDisconnectAbilityDoneLocked
3889  * FunctionPoints: NA
3890  * EnvConditions: NA
3891  * CaseDescription: Verify AbilityConnectManager ScheduleDisconnectAbilityDoneLocked
3892  */
3893 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleDisconnectAbilityDoneLocked_007, TestSize.Level1)
3894 {
3895     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3896     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3897     OHOS::sptr<IAbilityConnection> callback = new AbilityConnectCallback();
3898     std::shared_ptr<ConnectionRecord> connection =
3899         std::make_shared<ConnectionRecord>(abilityRecord->GetToken(), abilityRecord, callback, nullptr);
3900     sptr<IRemoteObject> token = abilityRecord->GetToken();
3901     connection->SetConnectState(ConnectionState::DISCONNECTING);
3902     abilityRecord->abilityInfo_.type = AbilityType::PAGE;
3903     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3904     abilityRecord->connRecordList_.push_back(connection);
3905     connectManager->serviceMap_.emplace("first", abilityRecord);
3906     int res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
3907     EXPECT_EQ(res, INVALID_CONNECTION_STATE);
3908     abilityRecord->AddStartId();
3909     abilityRecord->SetAbilityState(AbilityState::ACTIVE);
3910     connectManager->serviceMap_.emplace("first", abilityRecord);
3911     res = connectManager->ScheduleDisconnectAbilityDoneLocked(nullptr);
3912     EXPECT_EQ(res, CONNECTION_NOT_EXIST);
3913 }
3914 
3915 /*
3916  * Feature: AbilityConnectManager
3917  * Function: ScheduleDisconnectAbilityDoneLocked
3918  * SubFunction: ScheduleDisconnectAbilityDoneLocked
3919  * FunctionPoints: NA
3920  * EnvConditions: NA
3921  * CaseDescription: Verify AbilityConnectManager ScheduleDisconnectAbilityDoneLocked
3922  */
3923 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleDisconnectAbilityDoneLocked_008, TestSize.Level1)
3924 {
3925     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3926     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3927     OHOS::sptr<IAbilityConnection> callback = new AbilityConnectCallback();
3928     std::shared_ptr<ConnectionRecord> connection =
3929         std::make_shared<ConnectionRecord>(abilityRecord->GetToken(), abilityRecord, callback, nullptr);
3930     sptr<IRemoteObject> token = abilityRecord->GetToken();
3931     connection->SetConnectState(ConnectionState::DISCONNECTING);
3932     abilityRecord->abilityInfo_.type = AbilityType::EXTENSION;
3933     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3934     abilityRecord->connRecordList_.push_back(connection);
3935     connectManager->serviceMap_.emplace("first", abilityRecord);
3936     int res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
3937     EXPECT_EQ(res, INVALID_CONNECTION_STATE);
3938     abilityRecord->AddStartId();
3939     abilityRecord->SetAbilityState(AbilityState::ACTIVE);
3940     connectManager->serviceMap_.emplace("first", abilityRecord);
3941     res = connectManager->ScheduleDisconnectAbilityDoneLocked(nullptr);
3942     EXPECT_EQ(res, CONNECTION_NOT_EXIST);
3943 }
3944 
3945 /*
3946  * Feature: AbilityConnectManager
3947  * Function: ScheduleDisconnectAbilityDoneLocked
3948  * SubFunction: ScheduleDisconnectAbilityDoneLocked
3949  * FunctionPoints: NA
3950  * EnvConditions: NA
3951  * CaseDescription: Verify AbilityConnectManager ScheduleDisconnectAbilityDoneLocked
3952  */
3953 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleDisconnectAbilityDoneLocked_009, TestSize.Level1)
3954 {
3955     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3956     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3957     OHOS::sptr<IAbilityConnection> callback = new AbilityConnectCallback();
3958     std::shared_ptr<ConnectionRecord> connection =
3959         std::make_shared<ConnectionRecord>(abilityRecord->GetToken(), abilityRecord, callback, nullptr);
3960     sptr<IRemoteObject> token = abilityRecord->GetToken();
3961     connection->SetConnectState(ConnectionState::DISCONNECTING);
3962     abilityRecord->abilityInfo_.type = AbilityType::SERVICE;
3963     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3964     abilityRecord->connRecordList_.push_back(connection);
3965     connectManager->serviceMap_.emplace("first", abilityRecord);
3966     int res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
3967     EXPECT_EQ(res, INVALID_CONNECTION_STATE);
3968     abilityRecord->AddStartId();
3969     abilityRecord->SetAbilityState(AbilityState::ACTIVE);
3970     connectManager->serviceMap_.emplace("first", abilityRecord);
3971     res = connectManager->ScheduleDisconnectAbilityDoneLocked(nullptr);
3972     EXPECT_EQ(res, CONNECTION_NOT_EXIST);
3973 }
3974 
3975 /*
3976  * Feature: AbilityConnectManager
3977  * Function: ScheduleDisconnectAbilityDoneLocked
3978  * SubFunction: ScheduleDisconnectAbilityDoneLocked
3979  * FunctionPoints: NA
3980  * EnvConditions: NA
3981  * CaseDescription: Verify AbilityConnectManager ScheduleDisconnectAbilityDoneLocked
3982  */
3983 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleDisconnectAbilityDoneLocked_010, TestSize.Level1)
3984 {
3985     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
3986     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
3987     OHOS::sptr<IAbilityConnection> callback = new AbilityConnectCallback();
3988     std::shared_ptr<ConnectionRecord> connection =
3989         std::make_shared<ConnectionRecord>(abilityRecord->GetToken(), abilityRecord, callback, nullptr);
3990     sptr<IRemoteObject> token = abilityRecord->GetToken();
3991     connection->SetConnectState(ConnectionState::DISCONNECTING);
3992     abilityRecord->abilityInfo_.type = AbilityType::DATA;
3993     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
3994     abilityRecord->connRecordList_.push_back(connection);
3995     connectManager->serviceMap_.emplace("first", abilityRecord);
3996     int res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
3997     EXPECT_EQ(res, INVALID_CONNECTION_STATE);
3998     abilityRecord->AddStartId();
3999     abilityRecord->SetAbilityState(AbilityState::ACTIVE);
4000     connectManager->serviceMap_.emplace("first", abilityRecord);
4001     res = connectManager->ScheduleDisconnectAbilityDoneLocked(nullptr);
4002     EXPECT_EQ(res, CONNECTION_NOT_EXIST);
4003 }
4004 
4005 /*
4006  * Feature: AbilityConnectManager
4007  * Function: ScheduleDisconnectAbilityDoneLocked
4008  * SubFunction: ScheduleDisconnectAbilityDoneLocked
4009  * FunctionPoints: NA
4010  * EnvConditions: NA
4011  * CaseDescription: Verify AbilityConnectManager ScheduleDisconnectAbilityDoneLocked
4012  */
4013 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleDisconnectAbilityDoneLocked_011, TestSize.Level1)
4014 {
4015     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
4016     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
4017     OHOS::sptr<IAbilityConnection> callback = new AbilityConnectCallback();
4018     std::shared_ptr<ConnectionRecord> connection =
4019         std::make_shared<ConnectionRecord>(abilityRecord->GetToken(), abilityRecord, callback, nullptr);
4020     sptr<IRemoteObject> token = abilityRecord->GetToken();
4021     connection->SetConnectState(ConnectionState::DISCONNECTING);
4022     abilityRecord->abilityInfo_.type = AbilityType::FORM;
4023     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
4024     abilityRecord->connRecordList_.push_back(connection);
4025     connectManager->serviceMap_.emplace("first", abilityRecord);
4026     int res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
4027     EXPECT_EQ(res, INVALID_CONNECTION_STATE);
4028     abilityRecord->AddStartId();
4029     abilityRecord->SetAbilityState(AbilityState::ACTIVE);
4030     connectManager->serviceMap_.emplace("first", abilityRecord);
4031     res = connectManager->ScheduleDisconnectAbilityDoneLocked(nullptr);
4032     EXPECT_EQ(res, CONNECTION_NOT_EXIST);
4033 }
4034 
4035 /*
4036  * Feature: AbilityConnectManager
4037  * Function: ScheduleDisconnectAbilityDoneLocked
4038  * SubFunction: ScheduleDisconnectAbilityDoneLocked
4039  * FunctionPoints: NA
4040  * EnvConditions: NA
4041  * CaseDescription: Verify AbilityConnectManager ScheduleDisconnectAbilityDoneLocked
4042  */
4043 HWTEST_F(AbilityConnectManagerTest, AAFwk_AbilityMS_ScheduleDisconnectAbilityDoneLocked_012, TestSize.Level1)
4044 {
4045     std::shared_ptr<AbilityConnectManager> connectManager = std::make_shared<AbilityConnectManager>(0);
4046     std::shared_ptr<AbilityRecord> abilityRecord = serviceRecord_;
4047     OHOS::sptr<IAbilityConnection> callback = new AbilityConnectCallback();
4048     std::shared_ptr<ConnectionRecord> connection =
4049         std::make_shared<ConnectionRecord>(abilityRecord->GetToken(), abilityRecord, callback, nullptr);
4050     sptr<IRemoteObject> token = abilityRecord->GetToken();
4051     connection->SetConnectState(ConnectionState::DISCONNECTING);
4052     abilityRecord->abilityInfo_.type = AbilityType::UNKNOWN;
4053     abilityRecord->SetAbilityState(AbilityState::INACTIVE);
4054     abilityRecord->connRecordList_.push_back(connection);
4055     connectManager->serviceMap_.emplace("first", abilityRecord);
4056     int res = connectManager->ScheduleDisconnectAbilityDoneLocked(token);
4057     EXPECT_EQ(res, INVALID_CONNECTION_STATE);
4058     abilityRecord->AddStartId();
4059     abilityRecord->SetAbilityState(AbilityState::ACTIVE);
4060     connectManager->serviceMap_.emplace("first", abilityRecord);
4061     res = connectManager->ScheduleDisconnectAbilityDoneLocked(nullptr);
4062     EXPECT_EQ(res, CONNECTION_NOT_EXIST);
4063 }
4064 }  // namespace AAFwk
4065 }  // namespace OHOS
4066