1 /*
2  * Copyright (C) 2021-2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "ims_test.h"
17 
18 #define private public
19 #define protected public
20 #include "cellular_call_config.h"
21 #include "cellular_call_handler.h"
22 #include "cellular_call_proxy.h"
23 #include "cellular_call_register.h"
24 #include "cellular_call_service.h"
25 #include "tel_ril_call_parcel.h"
26 #include "ims_call_callback_proxy.h"
27 #include "ims_call_callback_stub.h"
28 #include "ims_call_client.h"
29 #include "ims_control.h"
30 #include "ims_error.h"
31 #include "securec.h"
32 
33 namespace OHOS {
34 namespace Telephony {
35 using namespace testing::ext;
36 const int32_t SIM1_SLOTID = 0;
37 const int32_t SIM2_SLOTID = 1;
38 const int32_t SLOT_COUNT = 2;
39 const int32_t INVALID_SLOTID = -1;
40 const int32_t INVALID_HANG_UP_TYPE = -1;
41 const int32_t RESULT = 1;
42 const std::string PHONE_NUMBER = "0000000";
43 const std::string PHONE_NUMBER_SECOND = "1111111";
44 const std::string PHONE_NUMBER_THIRD = "2222222";
45 const std::string PHONE_NUMBER_FOUR = "3333333";
46 
47 /**
48  * @tc.number   cellular_call_SetVoNRState_0002
49  * @tc.name     Test for SetVoNRState function
50  * @tc.desc     Function test
51  */
52 HWTEST_F(ImsTest, cellular_call_SetVoNRState_0002, Function | MediumTest | Level2)
53 {
54     AccessToken token;
55     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
56         return;
57     }
58     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
59     ASSERT_TRUE(systemAbilityMgr != nullptr);
60     auto setVoNRRemote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
61     ASSERT_TRUE(setVoNRRemote != nullptr);
62     auto telephonyService = iface_cast<CellularCallInterface>(setVoNRRemote);
63     ASSERT_TRUE(telephonyService != nullptr);
64     if (HasSimCard(SIM1_SLOTID)) {
65         int32_t ret = telephonyService->SetVoNRState(SIM1_SLOTID, 0);
66         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
67     }
68     if (HasSimCard(SIM2_SLOTID)) {
69         int32_t ret = telephonyService->SetVoNRState(SIM2_SLOTID, 0);
70         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
71     }
72 }
73 
74 /**
75  * @tc.number   cellular_call_GetVoNRState_0001
76  * @tc.name     Test for GetVoNRState function
77  * @tc.desc     Function test
78  */
79 HWTEST_F(ImsTest, cellular_call_GetVoNRState_0001, Function | MediumTest | Level2)
80 {
81     AccessToken token;
82     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
83     ASSERT_TRUE(systemAbilityMgr != nullptr);
84     auto getVoNRRemote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
85     ASSERT_TRUE(getVoNRRemote != nullptr);
86     auto telephonyService = iface_cast<CellularCallInterface>(getVoNRRemote);
87     ASSERT_TRUE(telephonyService != nullptr);
88     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
89         return;
90     }
91     if (HasSimCard(SIM1_SLOTID)) {
92         int32_t result;
93         int32_t ret = telephonyService->GetVoNRState(SIM1_SLOTID, result);
94         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
95     }
96     if (HasSimCard(SIM2_SLOTID)) {
97         int32_t result;
98         int32_t ret = telephonyService->GetVoNRState(SIM2_SLOTID, result);
99         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
100     }
101 }
102 
103 /**
104  * @tc.number   cellular_call_StartRtt_0001
105  * @tc.name     Test for StartRtt function
106  * @tc.desc     Function test
107  */
108 HWTEST_F(ImsTest, cellular_call_StartRtt_0001, Function | MediumTest | Level2)
109 {
110     AccessToken token;
111     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
112     ASSERT_TRUE(systemAbilityMgr != nullptr);
113     auto startRttRemote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
114     ASSERT_TRUE(startRttRemote != nullptr);
115     auto telephonyService = iface_cast<CellularCallInterface>(startRttRemote);
116     ASSERT_TRUE(telephonyService != nullptr);
117     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
118         return;
119     }
120     if (HasSimCard(SIM1_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_VOICE)) {
121         int32_t ret = telephonyService->StartRtt(SIM1_SLOTID, PHONE_NUMBER);
122         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
123     }
124     if (HasSimCard(SIM2_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_VOICE)) {
125         int32_t ret = telephonyService->StartRtt(SIM2_SLOTID, PHONE_NUMBER);
126         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
127     }
128 }
129 
130 /**
131  * @tc.number   cellular_call_StopRtt_0001
132  * @tc.name     Test for StopRtt function
133  * @tc.desc     Function test
134  */
135 HWTEST_F(ImsTest, cellular_call_StopRtt_0001, Function | MediumTest | Level2)
136 {
137     AccessToken token;
138     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
139     ASSERT_TRUE(systemAbilityMgr != nullptr);
140     auto stopRttRemote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
141     ASSERT_TRUE(stopRttRemote != nullptr);
142     auto telephonyService = iface_cast<CellularCallInterface>(stopRttRemote);
143     ASSERT_TRUE(telephonyService != nullptr);
144     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
145         return;
146     }
147     if (HasSimCard(SIM1_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_VOICE)) {
148         int32_t ret = telephonyService->StopRtt(SIM1_SLOTID);
149         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
150     }
151     if (HasSimCard(SIM2_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_VOICE)) {
152         int32_t ret = telephonyService->StopRtt(SIM2_SLOTID);
153         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
154     }
155 }
156 
157 /**
158  * @tc.number   cellular_call_SetDomainPreferenceMode_0001
159  * @tc.name     Test for SetDomainPreferenceMode function
160  * @tc.desc     Function test
161  */
162 HWTEST_F(ImsTest, cellular_call_SetDomainPreferenceMode_0001, Function | MediumTest | Level2)
163 {
164     AccessToken token;
165     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
166     ASSERT_TRUE(systemAbilityMgr != nullptr);
167     auto domainPrefModeRemote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
168     ASSERT_TRUE(domainPrefModeRemote != nullptr);
169     auto telephonyService = iface_cast<CellularCallInterface>(domainPrefModeRemote);
170     ASSERT_TRUE(telephonyService != nullptr);
171     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
172         return;
173     }
174     if (HasSimCard(SIM1_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_VOICE)) {
175         int32_t mode = -1;
176         int32_t ret = telephonyService->SetDomainPreferenceMode(SIM1_SLOTID, mode);
177         EXPECT_EQ(ret, CALL_ERR_PARAMETER_OUT_OF_RANGE);
178     }
179     if (HasSimCard(SIM2_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_VOICE)) {
180         int32_t mode = -1;
181         int32_t ret = telephonyService->SetDomainPreferenceMode(SIM2_SLOTID, mode);
182         EXPECT_EQ(ret, CALL_ERR_PARAMETER_OUT_OF_RANGE);
183     }
184 }
185 
186 /**
187  * @tc.number   cellular_call_GetImsConfig_0001
188  * @tc.name     Test for GetImsConfig function
189  * @tc.desc     Function test
190  */
191 HWTEST_F(ImsTest, cellular_call_GetImsConfig_0001, Function | MediumTest | Level2)
192 {
193     AccessToken token;
194     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
195     ASSERT_TRUE(systemAbilityMgr != nullptr);
196     auto getImsConfigRemote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
197     ASSERT_TRUE(getImsConfigRemote != nullptr);
198     auto telephonyService = iface_cast<CellularCallInterface>(getImsConfigRemote);
199     ASSERT_TRUE(telephonyService != nullptr);
200     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
201         return;
202     }
203     if (HasSimCard(SIM1_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_VOICE)) {
204         ImsConfigItem mode = ITEM_IMS_SWITCH_STATUS;
205         int32_t ret = telephonyService->GetImsConfig(SIM1_SLOTID, mode);
206         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
207     }
208     if (HasSimCard(SIM2_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_VOICE)) {
209         ImsConfigItem mode = ITEM_IMS_SWITCH_STATUS;
210         int32_t ret = telephonyService->GetImsConfig(SIM2_SLOTID, mode);
211         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
212     }
213 }
214 
215 /**
216  * @tc.number   cellular_call_GetImsFeatureValue_0001
217  * @tc.name     Test for GetImsFeatureValue function
218  * @tc.desc     Function test
219  */
220 HWTEST_F(ImsTest, cellular_call_GetImsFeatureValue_0001, Function | MediumTest | Level2)
221 {
222     AccessToken token;
223     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
224     ASSERT_TRUE(systemAbilityMgr != nullptr);
225     auto getImsFeatureRemote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
226     ASSERT_TRUE(getImsFeatureRemote != nullptr);
227     auto telephonyService = iface_cast<CellularCallInterface>(getImsFeatureRemote);
228     ASSERT_TRUE(telephonyService != nullptr);
229     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
230         return;
231     }
232     if (HasSimCard(SIM1_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_VOICE)) {
233         FeatureType mode = TYPE_VOICE_OVER_LTE;
234         int32_t ret = telephonyService->GetImsFeatureValue(SIM1_SLOTID, mode);
235         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
236     }
237     if (HasSimCard(SIM2_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_VOICE)) {
238         FeatureType mode = TYPE_VOICE_OVER_LTE;
239         int32_t ret = telephonyService->GetImsFeatureValue(SIM2_SLOTID, mode);
240         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
241     }
242 }
243 
244 /**
245  * @tc.number   cellular_call_SetMute_0001
246  * @tc.name     Test for SetMute function
247  * @tc.desc     Function test
248  */
249 HWTEST_F(ImsTest, cellular_call_SetMute_0001, Function | MediumTest | Level2)
250 {
251     AccessToken token;
252     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
253     ASSERT_TRUE(systemAbilityMgr != nullptr);
254     auto setMuteRemote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
255     ASSERT_TRUE(setMuteRemote != nullptr);
256     auto telephonyService = iface_cast<CellularCallInterface>(setMuteRemote);
257     ASSERT_TRUE(telephonyService != nullptr);
258     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
259         return;
260     }
261     if (HasSimCard(SIM1_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_VOICE)) {
262         int32_t mode = 0;
263         int32_t ret = telephonyService->SetMute(SIM1_SLOTID, mode);
264         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
265     }
266     if (HasSimCard(SIM2_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_VOICE)) {
267         int32_t mode = 0;
268         int32_t ret = telephonyService->SetMute(SIM2_SLOTID, mode);
269         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
270     }
271 }
272 
273 /**
274  * @tc.number   cellular_call_SetCallWaiting_0001
275  * @tc.name     Test for SetCallWaiting function
276  * @tc.desc     Function test
277  */
278 HWTEST_F(ImsTest, cellular_call_SetCallWaiting_0001, Function | MediumTest | Level2)
279 {
280     AccessToken token;
281     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
282     ASSERT_TRUE(systemAbilityMgr != nullptr);
283     auto SetCWRemote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
284     ASSERT_TRUE(SetCWRemote != nullptr);
285     auto telephonyService = iface_cast<CellularCallInterface>(SetCWRemote);
286     ASSERT_TRUE(telephonyService != nullptr);
287     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
288         return;
289     }
290     if (HasSimCard(SIM1_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_UT)) {
291         bool act = true;
292         int32_t ret = telephonyService->SetCallWaiting(SIM1_SLOTID, act);
293         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
294     }
295     if (HasSimCard(SIM2_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_UT)) {
296         bool act = true;
297         int32_t ret = telephonyService->SetCallWaiting(SIM2_SLOTID, act);
298         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
299     }
300 }
301 
302 /**
303  * @tc.number   cellular_call_GetCallWaiting_0001
304  * @tc.name     Test for GetCallWaiting function
305  * @tc.desc     Function test
306  */
307 HWTEST_F(ImsTest, cellular_call_GetCallWaiting_0001, Function | MediumTest | Level2)
308 {
309     AccessToken token;
310     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
311     ASSERT_TRUE(systemAbilityMgr != nullptr);
312     auto getCWRemote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
313     ASSERT_TRUE(getCWRemote != nullptr);
314     auto telephonyService = iface_cast<CellularCallInterface>(getCWRemote);
315     ASSERT_TRUE(telephonyService != nullptr);
316     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
317         return;
318     }
319     if (HasSimCard(SIM1_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_UT)) {
320         int32_t ret = telephonyService->GetCallWaiting(SIM1_SLOTID);
321         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
322     }
323     if (HasSimCard(SIM2_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_UT)) {
324         int32_t ret = telephonyService->GetCallWaiting(SIM2_SLOTID);
325         EXPECT_EQ(ret, TELEPHONY_SUCCESS);
326     }
327 }
328 
329 /**
330  * @tc.number   cellular_call_SetCallRestriction_0001
331  * @tc.name     Test for SetCallRestriction function
332  * @tc.desc     Function test
333  */
334 HWTEST_F(ImsTest, cellular_call_SetCallRestriction_0001, Function | MediumTest | Level2)
335 {
336     AccessToken token;
337     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
338     ASSERT_TRUE(systemAbilityMgr != nullptr);
339     auto setCRRemote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
340     ASSERT_TRUE(setCRRemote != nullptr);
341     auto telephonyService = iface_cast<CellularCallInterface>(setCRRemote);
342     ASSERT_TRUE(telephonyService != nullptr);
343     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
344         return;
345     }
346     if (HasSimCard(SIM1_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_UT)) {
347         CallRestrictionInfo crInfo;
348         int32_t ret = telephonyService->SetCallRestriction(SIM1_SLOTID, crInfo);
349         EXPECT_NE(ret, TELEPHONY_SUCCESS);
350     }
351     if (HasSimCard(SIM2_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_UT)) {
352         CallRestrictionInfo crInfo;
353         int32_t ret = telephonyService->SetCallRestriction(SIM2_SLOTID, crInfo);
354         EXPECT_NE(ret, TELEPHONY_SUCCESS);
355     }
356 }
357 
358 /**
359  * @tc.number   cellular_call_GetCallRestriction_0001
360  * @tc.name     Test for GetCallRestriction function
361  * @tc.desc     Function test
362  */
363 HWTEST_F(ImsTest, cellular_call_GetCallRestriction_0001, Function | MediumTest | Level2)
364 {
365     AccessToken token;
366     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
367     ASSERT_TRUE(systemAbilityMgr != nullptr);
368     auto getCRRemote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
369     ASSERT_TRUE(getCRRemote != nullptr);
370     auto telephonyService = iface_cast<CellularCallInterface>(getCRRemote);
371     ASSERT_TRUE(telephonyService != nullptr);
372     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
373         return;
374     }
375     if (HasSimCard(SIM1_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_UT)) {
376         CallRestrictionType facType = CallRestrictionType::RESTRICTION_TYPE_ALL_INCOMING;
377         int32_t ret = telephonyService->GetCallRestriction(SIM1_SLOTID, facType);
378         EXPECT_NE(ret, TELEPHONY_SUCCESS);
379     }
380     if (HasSimCard(SIM2_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_UT)) {
381         CallRestrictionType facType = CallRestrictionType::RESTRICTION_TYPE_ALL_INCOMING;
382         int32_t ret = telephonyService->GetCallRestriction(SIM2_SLOTID, facType);
383         EXPECT_NE(ret, TELEPHONY_SUCCESS);
384     }
385 }
386 
387 /**
388  * @tc.number   cellular_call_SetCallTransferInfo_0001
389  * @tc.name     Test for SetCallTransferInfo function
390  * @tc.desc     Function test
391  */
392 HWTEST_F(ImsTest, cellular_call_SetCallTransferInfo_0001, Function | MediumTest | Level2)
393 {
394     AccessToken token;
395     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
396     ASSERT_TRUE(systemAbilityMgr != nullptr);
397     auto setTransferRemote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
398     ASSERT_TRUE(setTransferRemote != nullptr);
399     auto telephonyService = iface_cast<CellularCallInterface>(setTransferRemote);
400     ASSERT_TRUE(telephonyService != nullptr);
401     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
402         return;
403     }
404     if (HasSimCard(SIM1_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_UT)) {
405         CallTransferInfo ctInfo;
406         int32_t ret = telephonyService->SetCallTransferInfo(SIM1_SLOTID, ctInfo);
407         EXPECT_NE(ret, TELEPHONY_SUCCESS);
408     }
409     if (HasSimCard(SIM2_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_UT)) {
410         CallTransferInfo ctInfo;
411         int32_t ret = telephonyService->SetCallTransferInfo(SIM2_SLOTID, ctInfo);
412         EXPECT_NE(ret, TELEPHONY_SUCCESS);
413     }
414 }
415 
416 /**
417  * @tc.number   cellular_call_GetCallTransferInfo_0001
418  * @tc.name     Test for GetCallTransferInfo function
419  * @tc.desc     Function test
420  */
421 HWTEST_F(ImsTest, cellular_call_GetCallTransferInfo_0001, Function | MediumTest | Level2)
422 {
423     AccessToken token;
424     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
425     ASSERT_TRUE(systemAbilityMgr != nullptr);
426     auto getTransferRemote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
427     ASSERT_TRUE(getTransferRemote != nullptr);
428     auto telephonyService = iface_cast<CellularCallInterface>(getTransferRemote);
429     ASSERT_TRUE(telephonyService != nullptr);
430     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
431         return;
432     }
433     if (HasSimCard(SIM1_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_UT)) {
434         CallTransferType type = CallTransferType::TRANSFER_TYPE_UNCONDITIONAL;
435         int32_t ret = telephonyService->GetCallTransferInfo(SIM1_SLOTID, type);
436         EXPECT_NE(ret, TELEPHONY_SUCCESS);
437     }
438     if (HasSimCard(SIM2_SLOTID) && CanUseImsService(SIM2_SLOTID, ImsServiceType::TYPE_UT)) {
439         CallTransferType type = CallTransferType::TRANSFER_TYPE_UNCONDITIONAL;
440         int32_t ret = telephonyService->GetCallTransferInfo(SIM2_SLOTID, type);
441         EXPECT_NE(ret, TELEPHONY_SUCCESS);
442     }
443 }
444 
445 /**
446  * @tc.number   cellular_call_ImsControl_0001
447  * @tc.name     Test for ImsControl
448  * @tc.desc     Function test
449  */
450 HWTEST_F(ImsTest, cellular_call_ImsControl_0001, Function | MediumTest | Level3)
451 {
452     AccessToken token;
453     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
454     ASSERT_TRUE(systemAbilityMgr != nullptr);
455     auto imsControlRemote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
456     ASSERT_TRUE(imsControlRemote != nullptr);
457     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
458         return;
459     }
460     auto imsControl = std::make_shared<IMSControl>();
461     CellularCallInfo cellularCallInfo;
462     for (int32_t slotId = 0; slotId < SIM_SLOT_COUNT; slotId++) {
463         if (!HasSimCard(slotId) || !CanUseImsService(slotId, ImsServiceType::TYPE_VOICE)) {
464             continue;
465         }
466         EXPECT_NE(imsControl->Answer(cellularCallInfo), TELEPHONY_SUCCESS);
467         EXPECT_NE(imsControl->Reject(cellularCallInfo), TELEPHONY_SUCCESS);
468         EXPECT_EQ(InitCellularCallInfo(slotId, PHONE_NUMBER, cellularCallInfo), TELEPHONY_SUCCESS);
469         bool enabled = false;
470         EXPECT_EQ(imsControl->Dial(cellularCallInfo, enabled), CALL_ERR_GET_RADIO_STATE_FAILED);
471         CLIRMode mode = CLIRMode::DEFAULT;
472         EXPECT_EQ(imsControl->DialJudgment(slotId, PHONE_NUMBER_SECOND, mode, 0), TELEPHONY_SUCCESS);
473         EXPECT_EQ(imsControl->DialJudgment(slotId, PHONE_NUMBER_THIRD, mode, 0), TELEPHONY_SUCCESS);
474         EXPECT_EQ(InitCellularCallInfo(slotId, PHONE_NUMBER_SECOND, cellularCallInfo), TELEPHONY_SUCCESS);
475         EXPECT_NE(imsControl->Answer(cellularCallInfo), TELEPHONY_SUCCESS);
476         EXPECT_EQ(InitCellularCallInfo(slotId, PHONE_NUMBER_THIRD, cellularCallInfo), TELEPHONY_SUCCESS);
477         EXPECT_NE(imsControl->Answer(cellularCallInfo), TELEPHONY_SUCCESS);
478         EXPECT_EQ(InitCellularCallInfo(slotId, PHONE_NUMBER_FOUR, cellularCallInfo), TELEPHONY_SUCCESS);
479         EXPECT_NE(imsControl->Answer(cellularCallInfo), TELEPHONY_SUCCESS);
480         EXPECT_NE(imsControl->Reject(cellularCallInfo), TELEPHONY_SUCCESS);
481         EXPECT_EQ(imsControl->HoldCall(slotId), TELEPHONY_SUCCESS);
482         std::vector<std::string> numberList;
483         EXPECT_EQ(imsControl->KickOutFromConference(slotId, PHONE_NUMBER, cellularCallInfo.index), TELEPHONY_SUCCESS);
484         EXPECT_EQ(imsControl->InviteToConference(slotId, numberList), TELEPHONY_SUCCESS);
485         EXPECT_EQ(imsControl->StartRtt(slotId, PHONE_NUMBER), TELEPHONY_SUCCESS);
486         EXPECT_EQ(imsControl->StopRtt(slotId), TELEPHONY_SUCCESS);
487         EXPECT_NE(imsControl->HangUp(cellularCallInfo, CallSupplementType::TYPE_DEFAULT), TELEPHONY_SUCCESS);
488         EXPECT_EQ(imsControl->HangUp(cellularCallInfo, CallSupplementType::TYPE_HANG_UP_ACTIVE),
489             CALL_ERR_RESOURCE_UNAVAILABLE);
490         EXPECT_EQ(imsControl->HangUp(cellularCallInfo, CallSupplementType::TYPE_HANG_UP_ALL), TELEPHONY_SUCCESS);
491         EXPECT_EQ(imsControl->HangUp(cellularCallInfo, static_cast<CallSupplementType>(INVALID_HANG_UP_TYPE)),
492             TELEPHONY_ERR_ARGUMENT_INVALID);
493     }
494 }
495 
496 /**
497  * @tc.number   cellular_call_ImsControl_0002
498  * @tc.name     Test for ImsControl
499  * @tc.desc     Function test
500  */
501 HWTEST_F(ImsTest, cellular_call_ImsControl_0002, Function | MediumTest | Level3)
502 {
503     AccessToken token;
504     auto imsControl = std::make_shared<IMSControl>();
505     for (int32_t slotId = 0; slotId < SIM_SLOT_COUNT; slotId++) {
506         if (!HasSimCard(slotId) || !CanUseImsService(slotId, ImsServiceType::TYPE_VOICE)) {
507             continue;
508         }
509         ImsCurrentCallList callList;
510         callList.callSize = 0;
511         CallInfoList callInfoList;
512         EXPECT_EQ(imsControl->ReportCallsData(slotId, callInfoList), TELEPHONY_ERROR);
513         EXPECT_EQ(imsControl->ReportImsCallsData(slotId, callList), TELEPHONY_ERROR);
514         EXPECT_NE(imsControl->ReportUpdateInfo(slotId, callList), TELEPHONY_SUCCESS);
515         ImsCurrentCall callInfo;
516         callList.callSize = 1;
517         callInfo.number = PHONE_NUMBER;
518         callInfo.index = 1;
519         callInfo.state = static_cast<int32_t>(TelCallState::CALL_STATUS_INCOMING);
520         callList.calls.push_back(callInfo);
521         EXPECT_EQ(imsControl->ReportImsCallsData(slotId, callList), TELEPHONY_SUCCESS);
522         EXPECT_EQ(imsControl->HangUpAllConnection(slotId), TELEPHONY_SUCCESS);
523         callList.callSize = 2;
524         callInfo.index = 2;
525         callInfo.state = static_cast<int32_t>(TelCallState::CALL_STATUS_ACTIVE);
526         callInfo.number = PHONE_NUMBER_SECOND;
527         callList.calls.push_back(callInfo);
528         callList.callSize = 3;
529         callInfo.index = 3;
530         callInfo.state = static_cast<int32_t>(TelCallState::CALL_STATUS_WAITING);
531         callInfo.number = PHONE_NUMBER_THIRD;
532         callList.calls.push_back(callInfo);
533         callList.callSize = 4;
534         callInfo.index = 4;
535         callInfo.state = static_cast<int32_t>(TelCallState::CALL_STATUS_DISCONNECTED);
536         callInfo.number = PHONE_NUMBER_FOUR;
537         callList.calls.push_back(callInfo);
538         EXPECT_EQ(imsControl->ReportImsCallsData(slotId, callList), TELEPHONY_SUCCESS);
539         callList.callSize = 0;
540         EXPECT_EQ(imsControl->ReportImsCallsData(slotId, callList), TELEPHONY_SUCCESS);
541     }
542 }
543 
544 /**
545  * @tc.number   cellular_call_CellularCallConnectionIMS_0001
546  * @tc.name     Test for CellularCallConnectionIMS
547  * @tc.desc     Function test
548  */
549 HWTEST_F(ImsTest, cellular_call_CellularCallConnectionIMS_0001, Function | MediumTest | Level3)
550 {
551     AccessToken token;
552     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
553     ASSERT_TRUE(systemAbilityMgr != nullptr);
554     auto remote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
555     ASSERT_TRUE(remote != nullptr);
556     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
557         return;
558     }
559     for (int32_t slotId = 0; slotId < SIM_SLOT_COUNT; slotId++) {
560         if (!HasSimCard(slotId) || !CanUseImsService(slotId, ImsServiceType::TYPE_VOICE)) {
561             continue;
562         }
563         CellularCallConnectionIMS imsConnection;
564         EXPECT_EQ(imsConnection.SendDtmfRequest(slotId, '1', 1), TELEPHONY_SUCCESS);
565         EXPECT_EQ(imsConnection.StartDtmfRequest(slotId, '1', 1), TELEPHONY_SUCCESS);
566         EXPECT_EQ(imsConnection.StopDtmfRequest(slotId, 1), TELEPHONY_SUCCESS);
567         EXPECT_EQ(imsConnection.GetImsCallsDataRequest(slotId, 1), TELEPHONY_SUCCESS);
568         EXPECT_EQ(imsConnection.GetCallFailReasonRequest(slotId), TELEPHONY_SUCCESS);
569         EXPECT_EQ(imsConnection.AnswerRequest(slotId, PHONE_NUMBER, 0, slotId), TELEPHONY_SUCCESS);
570         ImsDialInfoStruct imsDialInfo;
571         imsDialInfo.phoneNum = PHONE_NUMBER_SECOND;
572         EXPECT_EQ(imsConnection.DialRequest(slotId, imsDialInfo), TELEPHONY_SUCCESS);
573         EXPECT_EQ(imsConnection.HangUpRequest(slotId, PHONE_NUMBER_SECOND, slotId), TELEPHONY_SUCCESS);
574         EXPECT_EQ(imsConnection.StartRttRequest(slotId, PHONE_NUMBER_THIRD), TELEPHONY_SUCCESS);
575         EXPECT_EQ(imsConnection.StopRttRequest(slotId), TELEPHONY_SUCCESS);
576     }
577 }
578 
579 /**
580  * @tc.number   cellular_call_CellularCallRegister_0001
581  * @tc.name     Test for CellularCallRegister
582  * @tc.desc     Function test
583  */
584 HWTEST_F(ImsTest, cellular_call_CellularCallRegister_0001, Function | MediumTest | Level3)
585 {
586     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
587     ASSERT_TRUE(systemAbilityMgr != nullptr);
588     auto registerRemote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
589     ASSERT_TRUE(registerRemote != nullptr);
590     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
591         return;
592     }
593     auto callRegister = DelayedSingleton<CellularCallRegister>::GetInstance();
594     ASSERT_TRUE(callRegister != nullptr);
595     GetImsConfigResponse imsConfigResponse;
596     callRegister->ReportGetImsConfigResult(imsConfigResponse);
597     callRegister->ReportSetImsConfigResult(RESULT);
598     GetImsFeatureValueResponse imsFeatureValueResponse;
599     callRegister->ReportGetImsFeatureResult(imsFeatureValueResponse);
600     callRegister->ReportSetImsFeatureResult(RESULT);
601     ImsCallModeReceiveInfo callModeInfo;
602     callRegister->ReceiveUpdateCallMediaModeRequest(-1, callModeInfo);
603     callRegister->ReceiveUpdateCallMediaModeResponse(-1, callModeInfo);
604     ImsCallSessionEventInfo callSessionEventInfo;
605     callRegister->HandleCallSessionEventChanged(callSessionEventInfo);
606     ImsCallPeerDimensionsInfo callPeerDimensionsInfo;
607     callRegister->HandlePeerDimensionsChanged(callPeerDimensionsInfo);
608     ImsCallDataUsageInfo callDataUsageInfo;
609     callRegister->HandleCallDataUsageChanged(callDataUsageInfo);
610     CameraCapabilitiesInfo cameraCapabilitiesInfo;
611     callRegister->HandleCameraCapabilitiesChanged(cameraCapabilitiesInfo);
612 }
613 
614 /**
615  * @tc.number   cellular_call_CellularCallRegister_0002
616  * @tc.name     Test for CellularCallRegister
617  * @tc.desc     Function test
618  */
619 HWTEST_F(ImsTest, cellular_call_CellularCallRegister_0002, Function | MediumTest | Level3)
620 {
621     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
622     ASSERT_TRUE(systemAbilityMgr != nullptr);
623     auto registerRemote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
624     ASSERT_TRUE(registerRemote != nullptr);
625     auto callRegister = DelayedSingleton<CellularCallRegister>::GetInstance();
626     ASSERT_TRUE(callRegister != nullptr);
627     GetImsConfigResponse imsConfigResponse;
628     callRegister->ReportGetImsConfigResult(imsConfigResponse);
629     callRegister->ReportSetImsConfigResult(RESULT);
630     GetImsFeatureValueResponse imsFeatureValueResponse;
631     callRegister->ReportGetImsFeatureResult(imsFeatureValueResponse);
632     callRegister->ReportSetImsFeatureResult(RESULT);
633     ImsCallModeReceiveInfo callModeInfo;
634     callRegister->ReceiveUpdateCallMediaModeRequest(-1, callModeInfo);
635     callRegister->ReceiveUpdateCallMediaModeResponse(-1, callModeInfo);
636     ImsCallSessionEventInfo callSessionEventInfo;
637     callRegister->HandleCallSessionEventChanged(callSessionEventInfo);
638     ImsCallPeerDimensionsInfo callPeerDimensionsInfo;
639     callRegister->HandlePeerDimensionsChanged(callPeerDimensionsInfo);
640     ImsCallDataUsageInfo callDataUsageInfo;
641     callRegister->HandleCallDataUsageChanged(callDataUsageInfo);
642     CameraCapabilitiesInfo cameraCapabilitiesInfo;
643     callRegister->HandleCameraCapabilitiesChanged(cameraCapabilitiesInfo);
644 }
645 
646 /**
647  * @tc.number   cellular_call_CellularCallConfig_0001
648  * @tc.name     Test for CellularCallConfig
649  * @tc.desc     Function test
650  */
651 HWTEST_F(ImsTest, cellular_call_CellularCallConfig_0001, Function | MediumTest | Level3)
652 {
653     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
654         return;
655     }
656 
657     for (int32_t slotId = 0; slotId < SIM_SLOT_COUNT; slotId++) {
658         if (!HasSimCard(slotId)) {
659             continue;
660         }
661         CellularCallConfig cellularCallConfig;
662         ASSERT_TRUE(cellularCallConfig.GetImsSwitchOnByDefaultConfig(INVALID_SLOTID));
663         ASSERT_TRUE(cellularCallConfig.GetImsSwitchOnByDefaultConfig(slotId));
664         ASSERT_FALSE(cellularCallConfig.GethideImsSwitchConfig(INVALID_SLOTID));
665         ASSERT_FALSE(cellularCallConfig.GethideImsSwitchConfig(slotId));
666         ASSERT_FALSE(cellularCallConfig.GetvolteSupportedConfig(INVALID_SLOTID));
667         ASSERT_FALSE(cellularCallConfig.GetvolteSupportedConfig(slotId));
668         cellularCallConfig.GetNrModeSupportedListConfig(INVALID_SLOTID);
669         cellularCallConfig.GetNrModeSupportedListConfig(slotId);
670         ASSERT_FALSE(cellularCallConfig.GetVolteProvisioningSupportedConfig(INVALID_SLOTID));
671         ASSERT_FALSE(cellularCallConfig.GetVolteProvisioningSupportedConfig(slotId));
672         ASSERT_FALSE(cellularCallConfig.GetSsOverUtSupportedConfig(INVALID_SLOTID));
673         ASSERT_FALSE(cellularCallConfig.GetSsOverUtSupportedConfig(slotId));
674         ASSERT_FALSE(cellularCallConfig.GetImsGbaRequiredConfig(INVALID_SLOTID));
675         ASSERT_FALSE(cellularCallConfig.GetImsGbaRequiredConfig(slotId));
676         ASSERT_FALSE(cellularCallConfig.GetUtProvisioningSupportedConfig(INVALID_SLOTID));
677         ASSERT_FALSE(cellularCallConfig.GetUtProvisioningSupportedConfig(slotId));
678         ASSERT_TRUE(cellularCallConfig.GetImsPreferForEmergencyConfig(INVALID_SLOTID));
679         ASSERT_TRUE(cellularCallConfig.GetImsPreferForEmergencyConfig(slotId));
680         cellularCallConfig.GetCallWaitingServiceClassConfig(INVALID_SLOTID);
681         cellularCallConfig.GetCallWaitingServiceClassConfig(slotId);
682         cellularCallConfig.GetImsCallDisconnectResoninfoMappingConfig(INVALID_SLOTID);
683         cellularCallConfig.GetImsCallDisconnectResoninfoMappingConfig(slotId);
684         ASSERT_FALSE(cellularCallConfig.GetForceVolteSwitchOnConfig(INVALID_SLOTID));
685         ASSERT_FALSE(cellularCallConfig.GetForceVolteSwitchOnConfig(slotId));
686     }
687 }
688 
689 /**
690  * @tc.number   cellular_call_CellularCallConfig_0002
691  * @tc.name     Test for CellularCallConfig
692  * @tc.desc     Function test
693  */
694 HWTEST_F(ImsTest, cellular_call_CellularCallConfig_0002, Function | MediumTest | Level3)
695 {
696     for (int32_t slotId = 0; slotId < SIM_SLOT_COUNT; slotId++) {
697         CellularCallConfig cellularCallConfig;
698         ASSERT_TRUE(cellularCallConfig.GetImsSwitchOnByDefaultConfig(INVALID_SLOTID));
699         ASSERT_TRUE(cellularCallConfig.GetImsSwitchOnByDefaultConfig(slotId));
700         ASSERT_FALSE(cellularCallConfig.GethideImsSwitchConfig(INVALID_SLOTID));
701         ASSERT_FALSE(cellularCallConfig.GethideImsSwitchConfig(slotId));
702         ASSERT_FALSE(cellularCallConfig.GetvolteSupportedConfig(INVALID_SLOTID));
703         ASSERT_FALSE(cellularCallConfig.GetvolteSupportedConfig(slotId));
704         cellularCallConfig.GetNrModeSupportedListConfig(INVALID_SLOTID);
705         cellularCallConfig.GetNrModeSupportedListConfig(slotId);
706         ASSERT_FALSE(cellularCallConfig.GetVolteProvisioningSupportedConfig(INVALID_SLOTID));
707         ASSERT_FALSE(cellularCallConfig.GetVolteProvisioningSupportedConfig(slotId));
708         ASSERT_FALSE(cellularCallConfig.GetSsOverUtSupportedConfig(INVALID_SLOTID));
709         ASSERT_FALSE(cellularCallConfig.GetSsOverUtSupportedConfig(slotId));
710         ASSERT_FALSE(cellularCallConfig.GetImsGbaRequiredConfig(INVALID_SLOTID));
711         ASSERT_FALSE(cellularCallConfig.GetImsGbaRequiredConfig(slotId));
712         ASSERT_FALSE(cellularCallConfig.GetUtProvisioningSupportedConfig(INVALID_SLOTID));
713         ASSERT_FALSE(cellularCallConfig.GetUtProvisioningSupportedConfig(slotId));
714         ASSERT_TRUE(cellularCallConfig.GetImsPreferForEmergencyConfig(INVALID_SLOTID));
715         ASSERT_TRUE(cellularCallConfig.GetImsPreferForEmergencyConfig(slotId));
716         cellularCallConfig.GetCallWaitingServiceClassConfig(INVALID_SLOTID);
717         cellularCallConfig.GetCallWaitingServiceClassConfig(slotId);
718         cellularCallConfig.GetImsCallDisconnectResoninfoMappingConfig(INVALID_SLOTID);
719         cellularCallConfig.GetImsCallDisconnectResoninfoMappingConfig(slotId);
720         ASSERT_FALSE(cellularCallConfig.GetForceVolteSwitchOnConfig(INVALID_SLOTID));
721         ASSERT_FALSE(cellularCallConfig.GetForceVolteSwitchOnConfig(slotId));
722     }
723 }
724 
725 /**
726  * @tc.number   cellular_call_CellularCallHandler_0001
727  * @tc.name     Test for CellularCallHandler
728  * @tc.desc     Function test
729  */
730 HWTEST_F(ImsTest, cellular_call_CellularCallHandler_0001, Function | MediumTest | Level3)
731 {
732     EventFwk::MatchingSkills matchingSkills;
733     matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_OPERATOR_CONFIG_CHANGED);
734     EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills);
735     CellularCallHandler handler { subscriberInfo };
736     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
737         return;
738     }
739     for (int32_t slotId = 0; slotId < SIM_SLOT_COUNT; slotId++) {
740         if (!HasSimCard(slotId)) {
741             continue;
742         }
743         handler.SetSlotId(slotId);
744         auto event = AppExecFwk::InnerEvent::Get(0);
745         handler.GetImsCallsDataResponse(event);
746         handler.GetImsCallsDataRequest(event);
747         auto rilRadioResponse = std::make_shared<RadioResponseInfo>();
748         rilRadioResponse->error = ErrType::ERR_GENERIC_FAILURE;
749         auto responseEvent = AppExecFwk::InnerEvent::Get(0, rilRadioResponse);
750         handler.SetDomainPreferenceModeResponse(responseEvent);
751         handler.GetDomainPreferenceModeResponse(event);
752         handler.SetDomainPreferenceModeResponse(event);
753         handler.SetVoNRSwitchStatusResponse(responseEvent);
754         ASSERT_EQ(handler.GetSlotId(), slotId);
755         handler.OnRilAdapterHostDied(event);
756         auto serviceInstance = DelayedSingleton<CellularCallService>::GetInstance();
757         if (serviceInstance != nullptr) {
758             std::shared_ptr<CSControl> csControl;
759             serviceInstance->SetCsControl(slotId, csControl);
760             std::shared_ptr<IMSControl> imsControl;
761             serviceInstance->SetImsControl(slotId, imsControl);
762             handler.OnRilAdapterHostDied(event);
763             ASSERT_TRUE(serviceInstance->GetCsControl(slotId) == nullptr);
764             ASSERT_TRUE(serviceInstance->GetCsControl(slotId) == nullptr);
765         }
766     }
767 }
768 
769 /**
770  * @tc.number   cellular_call_CellularCallHandler_0002
771  * @tc.name     Test for CellularCallHandler
772  * @tc.desc     Function test
773  */
774 HWTEST_F(ImsTest, cellular_call_CellularCallHandler_0002, Function | MediumTest | Level3)
775 {
776     EventFwk::MatchingSkills matchingSkills;
777     matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_OPERATOR_CONFIG_CHANGED);
778     EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills);
779     CellularCallHandler handler { subscriberInfo };
780     if (!HasSimCard(SIM1_SLOTID) && !HasSimCard(SIM2_SLOTID)) {
781         return;
782     }
783     for (int32_t slotId = 0; slotId < SIM_SLOT_COUNT; slotId++) {
784         if (!HasSimCard(slotId)) {
785             continue;
786         }
787         handler.SetSlotId(slotId);
788         auto event = AppExecFwk::InnerEvent::Get(0);
789         handler.ReceiveUpdateCallMediaModeRequest(event);
790         handler.ReceiveUpdateCallMediaModeResponse(event);
791         handler.HandleCallSessionEventChanged(event);
792         handler.HandlePeerDimensionsChanged(event);
793         handler.HandleCallDataUsageChanged(event);
794         handler.HandleCameraCapabilitiesChanged(event);
795     }
796 }
797 
798 /**
799  * @tc.number   cellular_call_CellularCallHandler_0003
800  * @tc.name     Test for CellularCallHandler
801  * @tc.desc     Function test
802  */
803 HWTEST_F(ImsTest, cellular_call_CellularCallHandler_0003, Function | MediumTest | Level3)
804 {
805     EventFwk::MatchingSkills matchingSkills;
806     matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_OPERATOR_CONFIG_CHANGED);
807     EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills);
808     CellularCallHandler handler { subscriberInfo };
809     for (int32_t slotId = 0; slotId < SLOT_COUNT; slotId++) {
810         handler.SetSlotId(slotId);
811         auto event = AppExecFwk::InnerEvent::Get(0);
812         handler.GetImsCallsDataResponse(event);
813         handler.GetImsCallsDataRequest(event);
814         auto rilRadioResponse = std::make_shared<RadioResponseInfo>();
815         rilRadioResponse->error = ErrType::ERR_GENERIC_FAILURE;
816         auto responseEvent = AppExecFwk::InnerEvent::Get(0, rilRadioResponse);
817         handler.SetDomainPreferenceModeResponse(responseEvent);
818         handler.GetDomainPreferenceModeResponse(event);
819         handler.SetDomainPreferenceModeResponse(event);
820         handler.SetVoNRSwitchStatusResponse(responseEvent);
821         ASSERT_EQ(handler.GetSlotId(), slotId);
822         handler.OnRilAdapterHostDied(event);
823         auto serviceInstance = DelayedSingleton<CellularCallService>::GetInstance();
824         if (serviceInstance != nullptr) {
825             std::shared_ptr<CSControl> csControl;
826             serviceInstance->SetCsControl(slotId, csControl);
827             std::shared_ptr<IMSControl> imsControl;
828             serviceInstance->SetImsControl(slotId, imsControl);
829             handler.OnRilAdapterHostDied(event);
830             ASSERT_TRUE(serviceInstance->GetCsControl(slotId) == nullptr);
831             ASSERT_TRUE(serviceInstance->GetCsControl(slotId) == nullptr);
832         }
833     }
834 }
835 
836 /**
837  * @tc.number   cellular_call_CellularCallHandler_0004
838  * @tc.name     Test for CellularCallHandler
839  * @tc.desc     Function test
840  */
841 HWTEST_F(ImsTest, cellular_call_CellularCallHandler_0004, Function | MediumTest | Level3)
842 {
843     EventFwk::MatchingSkills matchingSkills;
844     matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_OPERATOR_CONFIG_CHANGED);
845     EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills);
846     CellularCallHandler handler { subscriberInfo };
847     for (int32_t slotId = 0; slotId < SLOT_COUNT; slotId++) {
848         handler.SetSlotId(slotId);
849         auto event = AppExecFwk::InnerEvent::Get(0);
850         handler.ReceiveUpdateCallMediaModeRequest(event);
851         handler.ReceiveUpdateCallMediaModeResponse(event);
852         handler.HandleCallSessionEventChanged(event);
853         handler.HandlePeerDimensionsChanged(event);
854         handler.HandleCallDataUsageChanged(event);
855         handler.HandleCameraCapabilitiesChanged(event);
856         ASSERT_EQ(handler.GetSlotId(), slotId);
857     }
858 }
859 
860 /**
861  * @tc.number   cellular_call_ImsCallClient_0001
862  * @tc.name     test for ImsCallClient
863  * @tc.desc     Function test
864  */
865 HWTEST_F(ImsTest, cellular_call_ImsCallClient_0001, Function | MediumTest | Level3)
866 {
867     ImsCallClient::SystemAbilityListener listen;
868     int32_t systemAbilityId = 1;
869     std::string deviceId = "123";
870     listen.OnAddSystemAbility(systemAbilityId, deviceId);
871     listen.OnRemoveSystemAbility(systemAbilityId, deviceId);
872     listen.OnAddSystemAbility(COMMON_EVENT_SERVICE_ID, deviceId);
873     listen.OnRemoveSystemAbility(COMMON_EVENT_SERVICE_ID, deviceId);
874 }
875 } // namespace Telephony
876 } // namespace OHOS
877