• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 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 #define private public
16 #define protected public
17 
18 #include "cellular_call_config.h"
19 #include "cellular_call_connection_ims.h"
20 #include "cellular_call_handler.h"
21 #include "cellular_call_proxy.h"
22 #include "cellular_call_register.h"
23 #include "cellular_call_service.h"
24 #include "cellular_call_supplement.h"
25 #include "config_request.h"
26 #include "control_base.h"
27 #include "cs_control.h"
28 #include "gtest/gtest.h"
29 #include "tel_ril_call_parcel.h"
30 #include "ims_call_callback_proxy.h"
31 #include "ims_call_callback_stub.h"
32 #include "ims_call_client.h"
33 #include "ims_control.h"
34 #include "ims_error.h"
35 #include "token.h"
36 #include "securec.h"
37 #include "cellular_call_hisysevent.h"
38 #include "standardize_utils.h"
39 #include "cellular_call_rdb_helper.h"
40 #include "cellular_call_dump_helper.h"
41 #include "emergency_utils.h"
42 #include "satellite_call_client.h"
43 #include "ims_video_call_control.h"
44 
45 namespace OHOS {
46 namespace Telephony {
47 using namespace testing::ext;
48 
49 #ifdef CALL_MANAGER_AUTO_START_OPTIMIZE
50 static const int32_t INVALID_VALUE = -1;
51 #endif
52 
53 namespace {
54 const int32_t INVALID_SLOTID = 2;
55 const int32_t SIM1_SLOTID = 0;
56 const int32_t SIM2_SLOTID = 1;
57 const std::string PHONE_NUMBER = "00000000";
58 const int32_t DEFAULT_INDEX = 1;
59 } // namespace
60 
61 class DemoHandler : public AppExecFwk::EventHandler {
62 public:
DemoHandler(std::shared_ptr<AppExecFwk::EventRunner> & runner)63     explicit DemoHandler(std::shared_ptr<AppExecFwk::EventRunner> &runner) : AppExecFwk::EventHandler(runner) {}
~DemoHandler()64     virtual ~DemoHandler() {}
ProcessEvent(const AppExecFwk::InnerEvent::Pointer & event)65     void ProcessEvent(const AppExecFwk::InnerEvent::Pointer &event) {}
66 };
67 
68 class ZeroBranchTest : public testing::Test {
69 public:
70     static void SetUpTestCase();
71     static void TearDownTestCase();
72     void SetUp();
73     void TearDown();
74     int32_t InitCellularCallInfo(int32_t accountId, std::string phonenumber, CellularCallInfo &callInfo);
75     void InitImsCallInfoList(ImsCurrentCallList &callInfoList, int32_t num);
76     void InitCsCallInfoList(CallInfoList &callInfoList, int32_t num);
77     void MakeCallInfoParcelData(bool isError, MessageParcel &data);
78 };
79 
SetUpTestCase()80 void ZeroBranchTest::SetUpTestCase()
81 {
82     std::cout << "---------- CellularCallService start ------------" << std::endl;
83     DelayedSingleton<CellularCallService>::GetInstance()->Init();
84     DelayedSingleton<ImsCallClient>::GetInstance()->Init();
85 }
86 
TearDownTestCase()87 void ZeroBranchTest::TearDownTestCase() {}
88 
SetUp()89 void ZeroBranchTest::SetUp() {}
90 
TearDown()91 void ZeroBranchTest::TearDown() {}
92 
InitCellularCallInfo(int32_t accountId,std::string phonenumber,CellularCallInfo & callInfo)93 int32_t ZeroBranchTest::InitCellularCallInfo(int32_t accountId, std::string phonenumber, CellularCallInfo &callInfo)
94 {
95     callInfo.accountId = accountId;
96     callInfo.slotId = accountId;
97     callInfo.index = accountId;
98     callInfo.callType = CallType::TYPE_IMS;
99     callInfo.videoState = 0; // 0 means audio
100     if (memset_s(callInfo.phoneNum, kMaxNumberLen, 0, kMaxNumberLen) != EOK) {
101         return TELEPHONY_ERR_MEMSET_FAIL;
102     }
103     if (phonenumber.length() > static_cast<size_t>(kMaxNumberLen)) {
104         return CALL_ERR_NUMBER_OUT_OF_RANGE;
105     }
106     if (memcpy_s(callInfo.phoneNum, kMaxNumberLen, phonenumber.c_str(), phonenumber.length()) != EOK) {
107         return TELEPHONY_ERR_MEMCPY_FAIL;
108     }
109     return TELEPHONY_SUCCESS;
110 }
111 
InitImsCallInfoList(ImsCurrentCallList & callInfoList,int32_t num)112 void ZeroBranchTest::InitImsCallInfoList(ImsCurrentCallList &callInfoList, int32_t num)
113 {
114     callInfoList.callSize = num;
115     ImsCurrentCall call;
116     int32_t callStateSum = 6;
117     for (int32_t i = 0; i < num; ++i) {
118         call.index = i;
119         call.state = i % callStateSum;
120         callInfoList.calls.push_back(call);
121     }
122 }
123 
MakeCallInfoParcelData(bool isError,MessageParcel & data)124 void ZeroBranchTest::MakeCallInfoParcelData(bool isError, MessageParcel &data)
125 {
126     if (isError) {
127         int32_t errorSize = 0;
128         data.WriteInt32(errorSize);
129     } else {
130         CellularCallInfo callInfo;
131         callInfo.slotId = -1;
132         int32_t size = 1;
133         data.WriteInt32(size);
134         data.WriteRawData(static_cast<const void *>(&callInfo), sizeof(CellularCallInfo));
135     }
136 }
137 
InitCsCallInfoList(CallInfoList & callInfoList,int32_t num)138 void ZeroBranchTest::InitCsCallInfoList(CallInfoList &callInfoList, int32_t num)
139 {
140     callInfoList.callSize = num;
141     CallInfo call;
142     int32_t callStateSum = 9;
143     for (int32_t i = 0; i < num; ++i) {
144         call.index = i;
145         call.state = i % callStateSum;
146         callInfoList.calls.push_back(call);
147     }
148 }
149 
150 /**
151  * @tc.number   Telephony_CellularCallConfig_001
152  * @tc.name     Test error branch
153  * @tc.desc     Function test
154  */
155 HWTEST_F(ZeroBranchTest, Telephony_CellularCallConfig_001, Function | MediumTest | Level3)
156 {
157     AccessToken token;
158     CellularCallConfig config;
159     config.SetDomainPreferenceMode(SIM1_SLOTID, 1);
160     config.SetDomainPreferenceMode(SIM1_SLOTID, -1);
161     config.GetDomainPreferenceMode(SIM1_SLOTID);
162     bool enabled = false;
163     config.SetImsSwitchStatus(INVALID_SLOTID, enabled);
164     config.SetImsSwitchStatus(SIM1_SLOTID, enabled);
165     config.volteSupported_[SIM1_SLOTID] = true;
166     config.volteSupported_[INVALID_SLOTID] = true;
167     config.volteProvisioningSupported_[SIM1_SLOTID] = true;
168     config.volteProvisioningSupported_[INVALID_SLOTID] = true;
169     config.SetImsSwitchStatus(INVALID_SLOTID, enabled);
170     config.SetImsSwitchStatus(SIM1_SLOTID, true);
171     config.volteSupported_[SIM1_SLOTID] = enabled;
172     config.volteSupported_[INVALID_SLOTID] = enabled;
173     config.volteProvisioningSupported_[SIM1_SLOTID] = enabled;
174     config.volteProvisioningSupported_[INVALID_SLOTID] = enabled;
175     config.GetImsSwitchStatus(SIM1_SLOTID, enabled);
176     config.saveImsSwitchStatusToLocalForPowerOn(SIM1_SLOTID);
177     config.saveImsSwitchStatusToLocal(SIM1_SLOTID, true);
178     config.GetImsSwitchStatus(SIM1_SLOTID, enabled);
179     int32_t state = 0;
180     config.SetVoNRSwitchStatus(SIM1_SLOTID, state);
181     config.SetVoNRSwitchStatus(INVALID_SLOTID, state);
182     config.GetVoNRSwitchStatus(SIM1_SLOTID, state);
183     config.GetVoNRSwitchStatus(SIM2_SLOTID, state);
184     config.GetDomainPreferenceModeResponse(SIM1_SLOTID, 1);
185     config.GetImsSwitchStatusResponse(SIM1_SLOTID, 1);
186     config.GetPreferenceMode(SIM1_SLOTID);
187     std::string value = "";
188     config.SetImsConfig(ImsConfigItem::ITEM_VIDEO_QUALITY, value);
189     config.SetImsConfig(ImsConfigItem::ITEM_VIDEO_QUALITY, 1);
190     config.GetImsConfig(ImsConfigItem::ITEM_VIDEO_QUALITY);
191     config.SetImsFeatureValue(FeatureType::TYPE_VOICE_OVER_LTE, 1);
192     int32_t res = config.GetImsFeatureValue(FeatureType::TYPE_VOICE_OVER_LTE);
193     config.HandleFactoryReset(0);
194     config.HandleFactoryReset(1);
195 #ifdef CALL_MANAGER_AUTO_START_OPTIMIZE
196     ASSERT_EQ(res, CALL_ERR_RESOURCE_UNAVAILABLE);
197 #else
198     ASSERT_EQ(res, TELEPHONY_SUCCESS);
199 #endif
200 }
201 
202 /**
203  * @tc.number   Telephony_CellularCallConfig_002
204  * @tc.name     Test error branch
205  * @tc.desc     Function test
206  */
207 HWTEST_F(ZeroBranchTest, Telephony_CellularCallConfig_002, Function | MediumTest | Level3)
208 {
209     AccessToken token;
210     CellularCallConfig config;
211     config.SetMute(SIM1_SLOTID, 0);
212     config.GetMute(SIM1_SLOTID);
213     config.GetEmergencyCallList(SIM1_SLOTID);
214     std::vector<EmergencyCall> eccVec = {};
215     config.SetEmergencyCallList(SIM1_SLOTID, eccVec);
216     config.SetTempMode(SIM1_SLOTID);
217     config.InitModeActive();
218     EmergencyInfoList eccList;
219     config.UpdateEmergencyCallFromRadio(SIM1_SLOTID, eccList);
220     config.GetEccCallList(SIM1_SLOTID);
221     config.GetMcc(SIM1_SLOTID);
222     config.SetReadyToCall(SIM1_SLOTID, true);
223     config.SetReadyToCall(INVALID_SLOTID, true);
224     config.IsReadyToCall(SIM1_SLOTID);
225     config.IsReadyToCall(INVALID_SLOTID);
226 
227     config.HandleSimStateChanged(SIM1_SLOTID);
228     config.HandleSetLteImsSwitchResult(SIM1_SLOTID, ErrType::NONE);
229     config.HandleSetVoNRSwitchResult(SIM1_SLOTID, ErrType::NONE);
230     config.HandleSimRecordsLoaded(SIM1_SLOTID);
231     config.HandleOperatorConfigChanged(SIM1_SLOTID, 0);
232     config.UpdateImsConfiguration(SIM1_SLOTID, -1, false);
233     OperatorConfig poc;
234     config.ParseAndCacheOperatorConfigs(SIM1_SLOTID, poc);
235     config.UpdateImsCapabilities(SIM1_SLOTID, true, false, -1);
236     bool enabled = false;
237     config.SaveImsSwitch(SIM1_SLOTID, true);
238     config.IsUtProvisioned(SIM1_SLOTID);
239     config.utProvisioningSupported_[SIM1_SLOTID] = true;
240     config.IsUtProvisioned(SIM1_SLOTID);
241     config.utProvisioningSupported_[SIM1_SLOTID] = enabled;
242     config.ResetImsSwitch(SIM1_SLOTID);
243     config.HandleSimAccountLoaded(SIM1_SLOTID);
244     ASSERT_FALSE(config.utProvisioningSupported_[SIM1_SLOTID]);
245 }
246 
247 /**
248  * @tc.number   Telephony_CellularCallSupplement_001
249  * @tc.name     Test error branch
250  * @tc.desc     Function test
251  */
252 HWTEST_F(ZeroBranchTest, Telephony_CellularCallSupplement_001, Function | MediumTest | Level3)
253 {
254     AccessToken token;
255     CellularCallSupplement callSup;
256     MMIData mmiDataEmp = {};
257     MMIData mmiDataAct = { .actionString = "*" };
258     MMIData mmiDataDeact = { .actionString = "#" };
259     MMIData mmiDataInterrogate = { .actionString = "*#" };
260     callSup.HandleClip(SIM1_SLOTID, mmiDataEmp);
261     callSup.HandleClip(SIM1_SLOTID, mmiDataAct);
262     callSup.HandleClip(SIM1_SLOTID, mmiDataDeact);
263     callSup.HandleClip(SIM1_SLOTID, mmiDataInterrogate);
264     callSup.HandleClir(SIM1_SLOTID, mmiDataEmp);
265     callSup.HandleClir(SIM1_SLOTID, mmiDataAct);
266     callSup.HandleClir(SIM1_SLOTID, mmiDataDeact);
267     callSup.HandleClir(SIM1_SLOTID, mmiDataInterrogate);
268     callSup.HandleColr(SIM1_SLOTID, mmiDataEmp);
269     callSup.HandleColr(SIM1_SLOTID, mmiDataAct);
270     callSup.HandleColr(SIM1_SLOTID, mmiDataDeact);
271     callSup.HandleColr(SIM1_SLOTID, mmiDataInterrogate);
272     callSup.HandleColp(SIM1_SLOTID, mmiDataEmp);
273     callSup.HandleColp(SIM1_SLOTID, mmiDataAct);
274     callSup.HandleColp(SIM1_SLOTID, mmiDataDeact);
275     callSup.HandleColp(SIM1_SLOTID, mmiDataInterrogate);
276     callSup.HandleCallTransfer(SIM1_SLOTID, mmiDataEmp);
277     callSup.HandleCallTransfer(SIM1_SLOTID, mmiDataInterrogate);
278     callSup.HandleCallTransfer(SIM1_SLOTID, mmiDataAct);
279     callSup.HandleCallRestriction(SIM1_SLOTID, mmiDataEmp);
280     callSup.HandleCallRestriction(SIM1_SLOTID, mmiDataAct);
281     callSup.HandleCallRestriction(SIM1_SLOTID, mmiDataDeact);
282     callSup.HandleCallRestriction(SIM1_SLOTID, mmiDataInterrogate);
283     callSup.HandleCallWaiting(SIM1_SLOTID, mmiDataEmp);
284     callSup.HandleCallWaiting(SIM1_SLOTID, mmiDataAct);
285     callSup.HandleCallWaiting(SIM1_SLOTID, mmiDataDeact);
286     ASSERT_FALSE(mmiDataAct.actionString.empty());
287 }
288 
289 /**
290  * @tc.number   Telephony_CellularCallSupplement_002
291  * @tc.name     Test error branch
292  * @tc.desc     Function test
293  */
294 HWTEST_F(ZeroBranchTest, Telephony_CellularCallSupplement_002, Function | MediumTest | Level3)
295 {
296     AccessToken token;
297     CellularCallSupplement callSup;
298     callSup.SendUssd(SIM1_SLOTID, "*#21#");
299     PinPukResponse pinPuk;
300     callSup.EventSetPinPuk(pinPuk);
301     MMIData mmiDataPin = { .serviceInfoA = "1234", .serviceInfoB = "1111", .serviceInfoC = "1111" };
302     callSup.AlterPinPassword(SIM1_SLOTID, mmiDataPin);
303     callSup.UnlockPuk(SIM1_SLOTID, mmiDataPin);
304     callSup.AlterPin2Password(SIM1_SLOTID, mmiDataPin);
305     callSup.UnlockPuk2(SIM1_SLOTID, mmiDataPin);
306     mmiDataPin = { .serviceInfoA = "1234", .serviceInfoB = "1111", .serviceInfoC = "1112" };
307     callSup.AlterPinPassword(SIM1_SLOTID, mmiDataPin);
308     callSup.UnlockPuk(SIM1_SLOTID, mmiDataPin);
309     callSup.AlterPin2Password(SIM1_SLOTID, mmiDataPin);
310     callSup.UnlockPuk2(SIM1_SLOTID, mmiDataPin);
311     mmiDataPin = { .serviceInfoA = "1234", .serviceInfoB = "1111", .serviceInfoC = "111111111" };
312     callSup.AlterPinPassword(SIM1_SLOTID, mmiDataPin);
313     callSup.UnlockPuk(SIM1_SLOTID, mmiDataPin);
314     callSup.AlterPin2Password(SIM1_SLOTID, mmiDataPin);
315     callSup.UnlockPuk2(SIM1_SLOTID, mmiDataPin);
316     callSup.CloseUnFinishedUssd(SIM1_SLOTID);
317     GetClipResult getClipResult;
318     std::string message = "";
319     callSup.EventGetClip(getClipResult, message, 0);
320     callSup.EventGetClip(getClipResult, message, 1);
321     callSup.EventSetClip(0, message, 0, 1);
322     callSup.EventSetClip(0, message, 1, 1);
323     GetClirResult getClirResult;
324     callSup.EventGetClir(getClirResult, message, 0);
325     callSup.EventGetClir(getClirResult, message, 1);
326     callSup.EventSetClir(0, message, 0, 1);
327     callSup.EventSetClir(0, message, 1, 1);
328     GetColrResult getColrResult;
329     callSup.EventGetColr(getColrResult, message, 0);
330     callSup.EventGetColr(getColrResult, message, 1);
331     callSup.EventSetColr(0, message, 0, 1);
332     callSup.EventSetColr(0, message, 1, 1);
333     ASSERT_TRUE(mmiDataPin.actionString.empty());
334 }
335 
336 /**
337  * @tc.number   Telephony_CellularCallSupplement_003
338  * @tc.name     Test error branch
339  * @tc.desc     Function test
340  */
341 HWTEST_F(ZeroBranchTest, Telephony_CellularCallSupplement_003, Function | MediumTest | Level3)
342 {
343     AccessToken token;
344     CellularCallSupplement callSup;
345     GetColpResult getColpResult;
346     std::string message = "";
347     callSup.EventGetColp(getColpResult, message, 0);
348     callSup.EventGetColp(getColpResult, message, 1);
349     callSup.EventSetColp(0, message, 0, 1);
350     callSup.EventSetColp(0, message, 1, 1);
351     CallRestrictionResult callResResult;
352     callSup.EventGetCallRestriction(callResResult, message, 0);
353     callSup.EventGetCallRestriction(callResResult, message, 1);
354     callResResult.status = 1;
355     callSup.EventGetCallRestriction(callResResult, message, 0);
356     callResResult.result.result = 1;
357     callSup.EventGetCallRestriction(callResResult, message, 0);
358     callSup.EventSetCallRestriction(0, message, 0, 1);
359     callSup.EventSetCallRestriction(0, message, 1, 1);
360     callSup.EventSetBarringPassword(0, message, 0);
361     callSup.EventSetBarringPassword(0, message, 1);
362     callSup.EventSetCallWaiting(0, message, 0, 1);
363     callSup.EventSetCallWaiting(0, message, 1, 1);
364     CallForwardQueryInfoList cFQueryList;
365     callSup.EventGetCallTransferInfo(cFQueryList, message, 0);
366     CallForwardQueryResult queryResult;
367     callSup.BuildCallForwardQueryInfo(queryResult, message, 0);
368     callSup.BuildCallForwardQueryInfo(queryResult, message, 1);
369     queryResult.classx = 1;
370     callSup.BuildCallForwardQueryInfo(queryResult, message, 0);
371     queryResult.status = 1;
372     callSup.BuildCallForwardQueryInfo(queryResult, message, 0);
373     queryResult.reason = 2;
374     callSup.BuildCallForwardQueryInfo(queryResult, message, 0);
375     callSup.EventSetCallTransferInfo(0, message, 0, 1);
376     callSup.EventSetCallTransferInfo(0, message, 1, 1);
377     RadioResponseInfo responseInfo;
378     callSup.EventSendUssd(responseInfo);
379     SsNoticeInfo ssNoticeInfo;
380     callSup.EventSsNotify(ssNoticeInfo);
381     UssdNoticeInfo ussdNoticeInfo;
382     callSup.EventUssdNotify(ussdNoticeInfo, SIM1_SLOTID);
383     RadioResponseInfo response;
384     callSup.EventCloseUnFinishedUssd(response);
385     callSup.GetCallTransferInfo(SIM1_SLOTID, CallTransferType::TRANSFER_TYPE_UNCONDITIONAL);
386     ASSERT_NE(callSup.GetCallTransferInfo(SIM2_SLOTID, CallTransferType::TRANSFER_TYPE_UNCONDITIONAL),
387         TELEPHONY_SUCCESS);
388 }
389 
390 /**
391  * @tc.number   Telephony_CellularCallSupplement_004
392  * @tc.name     Test error branch
393  * @tc.desc     Function test
394  */
395 HWTEST_F(ZeroBranchTest, Telephony_CellularCallSupplement_004, Function | MediumTest | Level3)
396 {
397     AccessToken token;
398     CellularCallSupplement callSup;
399     CallWaitResult waitingInfo;
400     std::string message = "";
401     callSup.EventGetCallWaiting(waitingInfo, message, 0);
402     callSup.EventGetCallWaiting(waitingInfo, message, 1);
403     waitingInfo.status =1;
404     callSup.EventGetCallWaiting(waitingInfo, message, 0);
405     waitingInfo.classCw =1;
406     callSup.EventGetCallWaiting(waitingInfo, message, 0);
407     waitingInfo.classCw =4;
408     callSup.EventGetCallWaiting(waitingInfo, message, 0);
409     waitingInfo.classCw =8;
410     callSup.EventGetCallWaiting(waitingInfo, message, 0);
411     waitingInfo.classCw =16;
412     callSup.EventGetCallWaiting(waitingInfo, message, 0);
413     waitingInfo.classCw =32;
414     callSup.EventGetCallWaiting(waitingInfo, message, 0);
415     waitingInfo.classCw =64;
416     callSup.EventGetCallWaiting(waitingInfo, message, 0);
417     waitingInfo.classCw =128;
418     callSup.EventGetCallWaiting(waitingInfo, message, 0);
419     CallTransferInfo cfInfo;
420     callSup.SetCallTransferInfo(SIM1_SLOTID, cfInfo);
421     strcpy_s(cfInfo.transferNum, kMaxNumberLen + 1, "111");
422     callSup.SetCallTransferInfo(SIM1_SLOTID, cfInfo);
423     callSup.SetCallTransferInfo(SIM2_SLOTID, cfInfo);
424     auto utCommand = std::make_shared<SsRequestCommand>();
425     callSup.SetCallTransferInfoByIms(SIM1_SLOTID, cfInfo, utCommand);
426     callSup.SetCallTransferInfoByIms(SIM2_SLOTID, cfInfo, utCommand);
427     bool activate = false;
428     callSup.SetCallWaiting(SIM1_SLOTID, activate);
429     callSup.SetCallWaiting(SIM2_SLOTID, activate);
430     callSup.GetCallWaiting(SIM1_SLOTID);
431     callSup.GetCallWaiting(SIM2_SLOTID);
432     CallRestrictionInfo crInfo;
433     callSup.SetCallRestriction(SIM1_SLOTID, crInfo);
434     callSup.SetCallRestriction(SIM2_SLOTID, crInfo);
435     auto crCommand = std::make_shared<SsRequestCommand>();
436     std::string info(crInfo.password);
437     std::string fac("AO");
438     callSup.SetCallRestrictionByIms(SIM1_SLOTID, fac, static_cast<int32_t>(crInfo.mode), info, crCommand);
439     callSup.SetCallRestrictionByIms(SIM2_SLOTID, fac, static_cast<int32_t>(crInfo.mode), info, crCommand);
440     callSup.GetCallRestriction(SIM1_SLOTID, CallRestrictionType::RESTRICTION_TYPE_ALL_INCOMING);
441     callSup.GetCallRestriction(SIM2_SLOTID, CallRestrictionType::RESTRICTION_TYPE_ALL_INCOMING);
442     callSup.SetBarringPassword(SIM1_SLOTID, CallRestrictionType::RESTRICTION_TYPE_ALL_INCOMING, "1111", "0000");
443     ASSERT_NE(callSup.SetBarringPassword(SIM2_SLOTID, CallRestrictionType::RESTRICTION_TYPE_ALL_INCOMING,
444         "1111", "0000"), TELEPHONY_SUCCESS);
445 }
446 
447 /**
448  * @tc.number   Telephony_CellularCallSupplement_005
449  * @tc.name     Test error branch
450  * @tc.desc     Function test
451  */
452 HWTEST_F(ZeroBranchTest, Telephony_CellularCallSupplement_005, Function | MediumTest | Level3)
453 {
454     AccessToken token;
455     CellularCallSupplement callSup;
456     MMIData mmiDataEmp = {};
457     MMIData mmiDataAct = { .actionString = "*" };
458     MMIData mmiDataDeact = { .actionString = "#" };
459     MMIData mmiDataInterrogate = { .actionString = "*#" };
460     callSup.HandleClip(SIM2_SLOTID, mmiDataEmp);
461     callSup.HandleClip(SIM2_SLOTID, mmiDataAct);
462     callSup.HandleClip(SIM2_SLOTID, mmiDataDeact);
463     callSup.HandleClip(SIM2_SLOTID, mmiDataInterrogate);
464     callSup.HandleColr(SIM2_SLOTID, mmiDataEmp);
465     callSup.HandleColr(SIM2_SLOTID, mmiDataAct);
466     callSup.HandleColr(SIM2_SLOTID, mmiDataDeact);
467     callSup.HandleColr(SIM2_SLOTID, mmiDataInterrogate);
468     callSup.HandleColp(SIM2_SLOTID, mmiDataEmp);
469     callSup.HandleColp(SIM2_SLOTID, mmiDataAct);
470     callSup.HandleColp(SIM2_SLOTID, mmiDataDeact);
471     callSup.HandleColp(SIM2_SLOTID, mmiDataInterrogate);
472     callSup.HandleCallTransfer(SIM2_SLOTID, mmiDataEmp);
473     callSup.HandleCallTransfer(SIM2_SLOTID, mmiDataInterrogate);
474     callSup.HandleCallTransfer(SIM2_SLOTID, mmiDataAct);
475     callSup.HandleCallRestriction(SIM2_SLOTID, mmiDataEmp);
476     callSup.HandleCallRestriction(SIM2_SLOTID, mmiDataAct);
477     callSup.HandleCallRestriction(SIM2_SLOTID, mmiDataDeact);
478     callSup.HandleCallRestriction(SIM2_SLOTID, mmiDataInterrogate);
479     callSup.HandleCallWaiting(SIM2_SLOTID, mmiDataEmp);
480     callSup.HandleCallWaiting(SIM2_SLOTID, mmiDataAct);
481     callSup.HandleCallWaiting(SIM2_SLOTID, mmiDataDeact);
482     bool enable = false;
483 #ifdef CALL_MANAGER_AUTO_START_OPTIMIZE
484     ASSERT_EQ(callSup.CanSetCallTransferTime(SIM1_SLOTID, enable), CALL_ERR_RESOURCE_UNAVAILABLE);
485 #else
486     ASSERT_EQ(callSup.CanSetCallTransferTime(SIM1_SLOTID, enable), TELEPHONY_SUCCESS);
487 #endif
488 }
489 
490 /**
491  * @tc.number   Telephony_CellularCallSupplement_006
492  * @tc.name     Test error branch
493  * @tc.desc     Function test
494  */
495 HWTEST_F(ZeroBranchTest, Telephony_CellularCallSupplement_006, Function | MediumTest | Level3)
496 {
497     AccessToken token;
498     CellularCallSupplement callSup;
499     MMIData mmiDataEmp = {};
500     MMIData mmiDataAct = { .actionString = "*" };
501     MMIData mmiDataDeact = { .actionString = "#" };
502     MMIData mmiDataInterrogate = { .actionString = "*#" };
503     EventFwk::MatchingSkills matchingSkills;
504     matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_OPERATOR_CONFIG_CHANGED);
505     EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills);
506     auto handler = std::make_shared<CellularCallHandler>(subscriberInfo);
507     auto callClient = DelayedSingleton<SatelliteCallClient>::GetInstance();
508     ASSERT_EQ(callClient->RegisterSatelliteCallCallbackHandler(SIM1_SLOTID, handler), TELEPHONY_SUCCESS);
509     callSup.HandleClip(SIM1_SLOTID, mmiDataAct);
510     callSup.HandleClip(SIM1_SLOTID, mmiDataDeact);
511     callSup.HandleClip(SIM1_SLOTID, mmiDataInterrogate);
512     callSup.HandleColr(SIM1_SLOTID, mmiDataAct);
513     callSup.HandleColr(SIM1_SLOTID, mmiDataDeact);
514     callSup.HandleColr(SIM1_SLOTID, mmiDataInterrogate);
515     callSup.HandleColp(SIM1_SLOTID, mmiDataAct);
516     callSup.HandleColp(SIM1_SLOTID, mmiDataDeact);
517     callSup.HandleColp(SIM1_SLOTID, mmiDataInterrogate);
518     int32_t cause = 0;
519     callSup.HandleGetCallTransfer(SIM1_SLOTID, cause);
520     int32_t serviceCode = 0;
521     std::string phoneNumber("1234567890");
522     CallTransferSettingType callTransferAction = CallTransferSettingType::CALL_TRANSFER_DISABLE;
523     callSup.HandleSetCallTransfer(SIM1_SLOTID, serviceCode, cause, phoneNumber, callTransferAction);
524     callSup.HandleCallRestriction(SIM1_SLOTID, mmiDataAct);
525     callSup.HandleCallRestriction(SIM1_SLOTID, mmiDataDeact);
526     callSup.HandleCallRestriction(SIM1_SLOTID, mmiDataInterrogate);
527     callSup.HandleCallWaiting(SIM1_SLOTID, mmiDataAct);
528     callSup.HandleCallWaiting(SIM1_SLOTID, mmiDataDeact);
529     callSup.HandleCallWaiting(SIM1_SLOTID, mmiDataInterrogate);
530 }
531 
532 /**
533  * @tc.number   Telephony_CellularCallSupplement_007
534  * @tc.name     Test error branch
535  * @tc.desc     Function test
536  */
537 HWTEST_F(ZeroBranchTest, Telephony_CellularCallSupplement_007, Function | MediumTest | Level3)
538 {
539     AccessToken token;
540     CellularCallSupplement callSup;
541     MMIData mmiDataEmp = {};
542     MMIData mmiDataAct = { .actionString = "*" };
543     MMIData mmiDataDeact = { .actionString = "#" };
544     MMIData mmiDataInterrogate = { .actionString = "*#" };
545     EventFwk::MatchingSkills matchingSkills;
546     matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_OPERATOR_CONFIG_CHANGED);
547     EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills);
548     auto handler = std::make_shared<CellularCallHandler>(subscriberInfo);
549     auto callClient = DelayedSingleton<SatelliteCallClient>::GetInstance();
550     ASSERT_EQ(callClient->RegisterSatelliteCallCallbackHandler(SIM1_SLOTID, handler), TELEPHONY_SUCCESS);
551     std::string serviceInfoB("10");
552     ASSERT_EQ(callSup.ObtainServiceCode(serviceInfoB), 13);
553     serviceInfoB = "11";
554     ASSERT_EQ(callSup.ObtainServiceCode(serviceInfoB), 1);
555     serviceInfoB = "12";
556     ASSERT_EQ(callSup.ObtainServiceCode(serviceInfoB), 12);
557     serviceInfoB = "13";
558     ASSERT_EQ(callSup.ObtainServiceCode(serviceInfoB), 4);
559     serviceInfoB = "16";
560     ASSERT_EQ(callSup.ObtainServiceCode(serviceInfoB), 8);
561     serviceInfoB = "19";
562     ASSERT_EQ(callSup.ObtainServiceCode(serviceInfoB), 5);
563     serviceInfoB = "20";
564     ASSERT_EQ(callSup.ObtainServiceCode(serviceInfoB), 48);
565     serviceInfoB = "21";
566     ASSERT_EQ(callSup.ObtainServiceCode(serviceInfoB), 160);
567     serviceInfoB = "22";
568     ASSERT_EQ(callSup.ObtainServiceCode(serviceInfoB), 80);
569     serviceInfoB = "24";
570     ASSERT_EQ(callSup.ObtainServiceCode(serviceInfoB), 16);
571     serviceInfoB = "25";
572     ASSERT_EQ(callSup.ObtainServiceCode(serviceInfoB), 32);
573     serviceInfoB = "99";
574     ASSERT_EQ(callSup.ObtainServiceCode(serviceInfoB), 64);
575     std::string phoneNumber("1234");
576     CallTransferSettingType callTransferAction;
577     ASSERT_EQ(callSup.ObtainCallTrasferAction("*", phoneNumber, callTransferAction), TELEPHONY_SUCCESS);
578     ASSERT_EQ(callSup.ObtainCallTrasferAction("**", phoneNumber, callTransferAction), TELEPHONY_SUCCESS);
579     ASSERT_EQ(callSup.ObtainCallTrasferAction("#", phoneNumber, callTransferAction), TELEPHONY_SUCCESS);
580     ASSERT_EQ(callSup.ObtainCallTrasferAction("##", phoneNumber, callTransferAction), TELEPHONY_SUCCESS);
581     ASSERT_EQ(callSup.ObtainCause("21"), static_cast<int32_t>(CallTransferType::TRANSFER_TYPE_UNCONDITIONAL));
582     ASSERT_EQ(callSup.ObtainCause("61"), static_cast<int32_t>(CallTransferType::TRANSFER_TYPE_NO_REPLY));
583     ASSERT_EQ(callSup.ObtainCause("62"), static_cast<int32_t>(CallTransferType::TRANSFER_TYPE_NOT_REACHABLE));
584     ASSERT_EQ(callSup.ObtainCause("67"), static_cast<int32_t>(CallTransferType::TRANSFER_TYPE_BUSY));
585     ASSERT_EQ(callSup.ObtainCause("99"), TELEPHONY_ERROR);
586 }
587 
588 /**
589  * @tc.number   Telephony_CellularCallSupplement_008
590  * @tc.name     Test error branch
591  * @tc.desc     Function test
592  */
593 HWTEST_F(ZeroBranchTest, Telephony_CellularCallSupplement_008, Function | MediumTest | Level3)
594 {
595     AccessToken token;
596     CellularCallSupplement callSup;
597     EventFwk::MatchingSkills matchingSkills;
598     matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_OPERATOR_CONFIG_CHANGED);
599     EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills);
600     auto handler = std::make_shared<CellularCallHandler>(subscriberInfo);
601     auto callClient = DelayedSingleton<SatelliteCallClient>::GetInstance();
602     ASSERT_EQ(callClient->RegisterSatelliteCallCallbackHandler(SIM1_SLOTID, handler), TELEPHONY_SUCCESS);
603     ASSERT_EQ(callSup.ObtainBarringInstallation("33"), "AO");
604     ASSERT_EQ(callSup.ObtainBarringInstallation("331"), "OI");
605     ASSERT_EQ(callSup.ObtainBarringInstallation("332"), "OX");
606     ASSERT_EQ(callSup.ObtainBarringInstallation("351"), "IR");
607     ASSERT_EQ(callSup.ObtainBarringInstallation("35"), "AI");
608     ASSERT_EQ(callSup.ObtainBarringInstallation("330"), "AB");
609     ASSERT_EQ(callSup.ObtainBarringInstallation("333"), "AG");
610     ASSERT_EQ(callSup.ObtainBarringInstallation("353"), "AC");
611     ASSERT_EQ(callSup.ObtainBarringInstallation("1000"), "");
612     std::string fac;
613     ASSERT_EQ(callSup.CheckCallRestrictionType(fac, CallRestrictionType::RESTRICTION_TYPE_ALL_OUTGOING),
614         TELEPHONY_SUCCESS);
615     ASSERT_EQ(callSup.CheckCallRestrictionType(fac, CallRestrictionType::RESTRICTION_TYPE_INTERNATIONAL),
616         TELEPHONY_SUCCESS);
617     ASSERT_EQ(callSup.CheckCallRestrictionType(fac,
618         CallRestrictionType::RESTRICTION_TYPE_INTERNATIONAL_EXCLUDING_HOME), TELEPHONY_SUCCESS);
619     ASSERT_EQ(callSup.CheckCallRestrictionType(fac, CallRestrictionType::RESTRICTION_TYPE_ALL_INCOMING),
620         TELEPHONY_SUCCESS);
621     ASSERT_EQ(callSup.CheckCallRestrictionType(fac, CallRestrictionType::RESTRICTION_TYPE_ROAMING_INCOMING),
622         TELEPHONY_SUCCESS);
623     ASSERT_EQ(callSup.CheckCallRestrictionType(fac, CallRestrictionType::RESTRICTION_TYPE_ALL_CALLS),
624         TELEPHONY_SUCCESS);
625     ASSERT_EQ(callSup.CheckCallRestrictionType(fac, CallRestrictionType::RESTRICTION_TYPE_OUTGOING_SERVICES),
626         TELEPHONY_SUCCESS);
627     ASSERT_EQ(callSup.CheckCallRestrictionType(fac, CallRestrictionType::RESTRICTION_TYPE_INCOMING_SERVICES),
628         TELEPHONY_SUCCESS);
629     MmiCodeInfo mmiCodeInfo;
630     SsNoticeInfo ssNoticeInfo;
631     ssNoticeInfo.result = 0;
632     callSup.GetMessage(mmiCodeInfo, ssNoticeInfo);
633     ssNoticeInfo.result = 1;
634     ssNoticeInfo.serviceType = static_cast<int32_t>(CallTransferType::TRANSFER_TYPE_UNCONDITIONAL);
635     callSup.GetMessage(mmiCodeInfo, ssNoticeInfo);
636     ssNoticeInfo.serviceType = static_cast<int32_t>(CallTransferType::TRANSFER_TYPE_BUSY);
637     callSup.GetMessage(mmiCodeInfo, ssNoticeInfo);
638     ssNoticeInfo.serviceType = static_cast<int32_t>(CallTransferType::TRANSFER_TYPE_NO_REPLY);
639     callSup.GetMessage(mmiCodeInfo, ssNoticeInfo);
640     ssNoticeInfo.serviceType = static_cast<int32_t>(CallTransferType::TRANSFER_TYPE_NOT_REACHABLE);
641     callSup.GetMessage(mmiCodeInfo, ssNoticeInfo);
642 }
643 
644 /**
645  * @tc.number   Telephony_CellularCallSupplement_009
646  * @tc.name     Test error branch
647  * @tc.desc     Function test
648  */
649 HWTEST_F(ZeroBranchTest, Telephony_CellularCallSupplement_009, Function | MediumTest | Level3)
650 {
651     AccessToken token;
652     CellularCallSupplement callSup;
653     MMIData mmiDataAct = { .actionString = "*" };
654     auto command = std::make_shared<SsRequestCommand>();
655     CallTransferInfo cfInfo;
656 #ifdef CALL_MANAGER_AUTO_START_OPTIMIZE
657     ASSERT_EQ(callSup.SetCallTransferInfoByIms(SIM1_SLOTID, cfInfo, command), TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL);
658 #else
659     ASSERT_EQ(callSup.SetCallTransferInfoByIms(SIM1_SLOTID, cfInfo, command), TELEPHONY_SUCCESS);
660 #endif
661     ASSERT_EQ(callSup.SetCallTransferInfo(SIM1_SLOTID, cfInfo), TELEPHONY_ERR_ARGUMENT_INVALID);
662     ASSERT_EQ(callSup.GetCallTransferInfo(SIM1_SLOTID, CallTransferType::TRANSFER_TYPE_UNCONDITIONAL),
663         CALL_ERR_UNSUPPORTED_NETWORK_TYPE);
664     bool activate = true;
665     ASSERT_EQ(callSup.SetCallWaiting(SIM1_SLOTID, activate), CALL_ERR_UNSUPPORTED_NETWORK_TYPE);
666     ASSERT_EQ(callSup.GetCallWaiting(SIM1_SLOTID), CALL_ERR_UNSUPPORTED_NETWORK_TYPE);
667     CallRestrictionInfo cRInfo;
668     std::string info(cRInfo.password);
669     std::string fac("AO");
670 #ifdef CALL_MANAGER_AUTO_START_OPTIMIZE
671     ASSERT_EQ(callSup.SetCallRestrictionByIms(SIM1_SLOTID, fac, static_cast<int32_t>(cRInfo.mode), info, command),
672         TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL);
673 #else
674     ASSERT_EQ(callSup.SetCallRestrictionByIms(SIM1_SLOTID, fac, static_cast<int32_t>(cRInfo.mode), info, command),
675         TELEPHONY_SUCCESS);
676 #endif
677     ASSERT_EQ(callSup.GetCallRestriction(SIM1_SLOTID, CallRestrictionType::RESTRICTION_TYPE_ALL_INCOMING),
678         CALL_ERR_UNSUPPORTED_NETWORK_TYPE);
679     ASSERT_EQ(callSup.SetBarringPassword(SIM1_SLOTID, CallRestrictionType::RESTRICTION_TYPE_ALL_INCOMING,
680         "1111", "0000"), CALL_ERR_UNSUPPORTED_NETWORK_TYPE);
681     ASSERT_EQ(callSup.SetCallRestriction(SIM1_SLOTID, cRInfo), CALL_ERR_UNSUPPORTED_NETWORK_TYPE);
682     callSup.AlterPinPassword(SIM1_SLOTID, mmiDataAct);
683     callSup.UnlockPuk(SIM1_SLOTID, mmiDataAct);
684     callSup.AlterPin2Password(SIM1_SLOTID, mmiDataAct);
685     callSup.UnlockPuk2(SIM1_SLOTID, mmiDataAct);
686     ASSERT_FALSE(callSup.IsVaildPinOrPuk("123", "123"));
687     ASSERT_FALSE(callSup.IsVaildPinOrPuk("1234567", "123"));
688     ASSERT_TRUE(callSup.IsVaildPinOrPuk("1234567", "1234567"));
689 }
690 
691 /**
692  * @tc.number   Telephony_CellularCallCsControl_001
693  * @tc.name     Test error branch
694  * @tc.desc     Function test
695  */
696 HWTEST_F(ZeroBranchTest, Telephony_CellularCallCsControl_001, Function | MediumTest | Level3)
697 {
698     AccessToken token;
699     CSControl csControl;
700     CellularCallInfo cellularCallInfo;
701     InitCellularCallInfo(SIM1_SLOTID, PHONE_NUMBER, cellularCallInfo);
702     CallInfoList callInfoList;
703     csControl.ReportCallsData(SIM1_SLOTID, callInfoList);
704     csControl.connectionMap_.insert(std::make_pair(1, CellularCallConnectionCS()));
705     csControl.ReportCallsData(SIM1_SLOTID, callInfoList);
706     csControl.connectionMap_.insert(std::make_pair(1, CellularCallConnectionCS()));
707     InitCsCallInfoList(callInfoList, 5);
708     csControl.ReportCallsData(SIM1_SLOTID, callInfoList);
709     csControl.connectionMap_.clear();
710     csControl.ReportCallsData(SIM1_SLOTID, callInfoList);
711     bool enabled = false;
712     csControl.Dial(cellularCallInfo, enabled);
713     csControl.DialCdma(cellularCallInfo);
714     csControl.DialGsm(cellularCallInfo);
715     csControl.CalculateInternationalRoaming(SIM1_SLOTID);
716     csControl.Answer(cellularCallInfo);
717     csControl.Reject(cellularCallInfo);
718     csControl.SeparateConference(SIM1_SLOTID, PHONE_NUMBER, 1);
719     csControl.SeparateConference(SIM1_SLOTID, "", 1);
720     int32_t invlaidCallType = -1;
721     csControl.HangUp(cellularCallInfo, CallSupplementType::TYPE_DEFAULT);
722     csControl.HangUp(cellularCallInfo, CallSupplementType::TYPE_HANG_UP_ACTIVE);
723     csControl.HangUp(cellularCallInfo, CallSupplementType::TYPE_HANG_UP_ALL);
724     csControl.HangUp(cellularCallInfo, static_cast<CallSupplementType>(invlaidCallType));
725     csControl.HoldCall(SIM1_SLOTID);
726     csControl.UnHoldCall(SIM1_SLOTID);
727     csControl.SwitchCall(SIM1_SLOTID);
728     csControl.CombineConference(SIM1_SLOTID);
729     csControl.HangUpAllConnection(SIM1_SLOTID);
730     csControl.GetConnectionMap();
731     csControl.ReportHangUpInfo(SIM1_SLOTID);
732     csControl.ReportIncomingInfo(SIM1_SLOTID, callInfoList);
733     csControl.ReportUpdateInfo(SIM1_SLOTID, callInfoList);
734     CallInfo callInfo;
735     csControl.EncapsulationCallReportInfo(SIM1_SLOTID, callInfo);
736     std::string phoneNum = "00000000";
737     CLIRMode clirMode = CLIRMode::DEFAULT;
738     int res = csControl.EncapsulateDialCommon(SIM1_SLOTID, phoneNum, clirMode);
739     CallsReportInfo callsReportInfo;
740     csControl.DeleteConnection(callsReportInfo, callInfoList);
741     csControl.ReleaseAllConnection();
742     ASSERT_EQ(res, TELEPHONY_SUCCESS);
743 }
744 
745 /**
746  * @tc.number   Telephony_CellularCallCsControl_002
747  * @tc.name     Test error branch
748  * @tc.desc     Function test
749  */
750 HWTEST_F(ZeroBranchTest, Telephony_CellularCallCsControl_002, Function | MediumTest | Level3)
751 {
752     AccessToken token;
753     CSControl csControl;
754     CellularCallInfo cellularCallInfo;
755     InitCellularCallInfo(SIM1_SLOTID, PHONE_NUMBER, cellularCallInfo);
756     CellularCallInfo cellularCallInfo_new;
757     cellularCallInfo_new.callType = CallType::TYPE_CS;
758     std::vector<CellularCallInfo> infos;
759     bool enabled = false;
760     infos.emplace_back(cellularCallInfo);
761     infos.emplace_back(cellularCallInfo_new);
762     csControl.PostDialProceed(cellularCallInfo, true);
763     csControl.PostDialProceed(cellularCallInfo, enabled);
764     csControl.ExecutePostDial(SIM1_SLOTID, 0);
765     csControl.connectionMap_.insert(std::make_pair(1, CellularCallConnectionCS()));
766     cellularCallInfo.index = 1;
767     csControl.Answer(cellularCallInfo);
768     csControl.PostDialProceed(cellularCallInfo, true);
769     csControl.ExecutePostDial(SIM1_SLOTID, 0);
770     csControl.ExecutePostDial(SIM1_SLOTID, 1);
771     csControl.connectionMap_.clear();
772     for (uint16_t i = 0; i <= 7; ++i) {
773         csControl.connectionMap_.insert(std::make_pair(i, CellularCallConnectionCS()));
774     }
775     csControl.DialCdma(cellularCallInfo);
776     csControl.DialGsm(cellularCallInfo);
777     csControl.connectionMap_.clear();
778     ASSERT_EQ(csControl.ReportHangUp(infos, SIM1_SLOTID), TELEPHONY_SUCCESS);
779 }
780 
781 /**
782  * @tc.number   Telephony_CellularCallImsControl_001
783  * @tc.name     Test error branch
784  * @tc.desc     Function test
785  */
786 HWTEST_F(ZeroBranchTest, Telephony_CellularCallImsControl_001, Function | MediumTest | Level3)
787 {
788     AccessToken token;
789     IMSControl imsControl;
790     CellularCallInfo cellularCallInfo;
791     std::vector<CellularCallInfo> infos;
792     infos.emplace_back(cellularCallInfo);
793     CellularCallInfo cellularCallInfo_new;
794     bool enabled = false;
795     int32_t invalidSupType = -1;
796     ImsCurrentCallList ImsCallList;
797     InitCellularCallInfo(SIM1_SLOTID, PHONE_NUMBER, cellularCallInfo);
798     imsControl.ReportImsCallsData(SIM1_SLOTID, ImsCallList);
799     InitImsCallInfoList(ImsCallList, 5);
800     imsControl.ReportImsCallsData(SIM1_SLOTID, ImsCallList);
801     imsControl.Dial(cellularCallInfo, true);
802     cellularCallInfo_new.slotId = 1;
803     imsControl.Dial(cellularCallInfo_new, true);
804     cellularCallInfo_new.callType = CallType::TYPE_IMS;
805     infos.emplace_back(cellularCallInfo_new);
806     imsControl.HangUp(cellularCallInfo, CallSupplementType::TYPE_DEFAULT);
807     imsControl.HangUp(cellularCallInfo, CallSupplementType::TYPE_HANG_UP_HOLD_WAIT);
808     imsControl.HangUp(cellularCallInfo, CallSupplementType::TYPE_HANG_UP_ACTIVE);
809     imsControl.HangUp(cellularCallInfo, CallSupplementType::TYPE_HANG_UP_ALL);
810     imsControl.HangUp(cellularCallInfo, static_cast<CallSupplementType>(invalidSupType));
811     imsControl.Answer(cellularCallInfo);
812     imsControl.Reject(cellularCallInfo);
813     imsControl.PostDialProceed(cellularCallInfo, true);
814     imsControl.PostDialProceed(cellularCallInfo, enabled);
815     imsControl.RestoreConnection(infos, SIM1_SLOTID);
816     imsControl.RestoreConnection(infos, SIM2_SLOTID);
817     imsControl.ReportHangUp(infos, SIM1_SLOTID);
818     imsControl.ReportHangUp(infos, SIM2_SLOTID);
819     imsControl.HoldCall(SIM1_SLOTID);
820     imsControl.UnHoldCall(SIM1_SLOTID);
821     imsControl.SwitchCall(SIM1_SLOTID);
822     imsControl.CombineConference(SIM1_SLOTID);
823     std::vector<std::string> numberList;
824     imsControl.InviteToConference(SIM1_SLOTID, numberList);
825     std::string kickOutStr = "";
826     imsControl.KickOutFromConference(SIM1_SLOTID, kickOutStr, 0);
827     kickOutStr = "111";
828     imsControl.KickOutFromConference(SIM1_SLOTID, kickOutStr, 0);
829     imsControl.HangUpAllConnection(SIM1_SLOTID);
830 }
831 
832 /**
833  * @tc.number   Telephony_CellularCallImsControl_002
834  * @tc.name     Test error branch
835  * @tc.desc     Function test
836  */
837 HWTEST_F(ZeroBranchTest, Telephony_CellularCallImsControl_002, Function | MediumTest | Level3)
838 {
839     AccessToken token;
840     IMSControl imsControl;
841     ImsCurrentCallList ImsCallList;
842     imsControl.ReportImsCallsData(SIM1_SLOTID, ImsCallList);
843     InitImsCallInfoList(ImsCallList, 5);
844     imsControl.ReportImsCallsData(SIM1_SLOTID, ImsCallList);
845     CallInfoList callInfoList;
846     imsControl.ReportCallsData(SIM1_SLOTID, callInfoList);
847     imsControl.ReportHangUpInfo(SIM1_SLOTID);
848     imsControl.ReportIncomingInfo(SIM1_SLOTID, ImsCallList);
849     imsControl.ReportUpdateInfo(SIM1_SLOTID, ImsCallList);
850     ImsCurrentCall ImsCallInfo;
851     imsControl.EncapsulationCallReportInfo(SIM1_SLOTID, ImsCallInfo);
852     CallsReportInfo callsReportInfo;
853     imsControl.DeleteConnection(callsReportInfo, ImsCallList);
854     imsControl.ReleaseAllConnection();
855     imsControl.DialAfterHold(SIM1_SLOTID);
856     std::string msg = "";
857     imsControl.StartRtt(SIM1_SLOTID, msg);
858     imsControl.GetConnectionMap();
859     imsControl.ReleaseAllConnection();
860     CLIRMode clirMode = CLIRMode::DEFAULT;
861     int32_t videoState = 0;
862     imsControl.DialJudgment(SIM1_SLOTID, PHONE_NUMBER, clirMode, videoState);
863 #ifdef CALL_MANAGER_AUTO_START_OPTIMIZE
864     ASSERT_EQ(imsControl.StopRtt(SIM1_SLOTID), INVALID_VALUE);
865     ASSERT_EQ(imsControl.EncapsulateDial(SIM1_SLOTID, PHONE_NUMBER, clirMode, videoState),
866         TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL);
867 #else
868     ASSERT_EQ(imsControl.StopRtt(SIM1_SLOTID), TELEPHONY_SUCCESS);
869     ASSERT_EQ(imsControl.EncapsulateDial(SIM1_SLOTID, PHONE_NUMBER, clirMode, videoState), TELEPHONY_SUCCESS);
870 #endif
871 }
872 
873 /**
874  * @tc.number   Telephony_CellularCallImsControl_003
875  * @tc.name     Test error branch
876  * @tc.desc     Function test
877  */
878 HWTEST_F(ZeroBranchTest, Telephony_CellularCallImsControl_003, Function | MediumTest | Level3)
879 {
880     AccessToken token;
881     IMSControl imsControl;
882     imsControl.connectionMap_.insert(std::make_pair(1, CellularCallConnectionIMS()));
883     imsControl.RecoverPendingHold();
884     imsControl.DialAfterHold(SIM1_SLOTID);
885     imsControl.HangUpAllConnection(SIM1_SLOTID);
886     ImsCurrentCallList imsCallList;
887     CallsReportInfo callsReportInfo;
888     imsControl.DeleteConnection(callsReportInfo, imsCallList);
889     ASSERT_EQ(imsControl.ReportHangUpInfo(SIM1_SLOTID), TELEPHONY_SUCCESS);
890 }
891 
892 /**
893  * @tc.number   Telephony_ImsVideoCallControl_001
894  * @tc.name     Test error branch
895  * @tc.desc     Function test
896  */
897 HWTEST_F(ZeroBranchTest, Telephony_ImsVideoCallControl_001, Function | MediumTest | Level3)
898 {
899     AccessToken token;
900     auto imsVideoCallControl = DelayedSingleton<ImsVideoCallControl>::GetInstance();
901     ASSERT_NE(imsVideoCallControl, nullptr);
902     std::string cameraId = "";
903     std::string surfaceId = "";
904     std::string path = "";
905     CellularCallInfo cellularCallInfo;
906     InitCellularCallInfo(SIM1_SLOTID, PHONE_NUMBER, cellularCallInfo);
907 #ifdef CALL_MANAGER_AUTO_START_OPTIMIZE
908     ASSERT_EQ(imsVideoCallControl->ControlCamera(SIM1_SLOTID, DEFAULT_INDEX, cameraId), INVALID_VALUE);
909     ASSERT_EQ(imsVideoCallControl->SetPreviewWindow(SIM1_SLOTID, DEFAULT_INDEX, surfaceId, nullptr),
910         INVALID_VALUE);
911     ASSERT_EQ(imsVideoCallControl->SetDisplayWindow(SIM1_SLOTID, DEFAULT_INDEX, surfaceId, nullptr),
912         INVALID_VALUE);
913     ASSERT_EQ(imsVideoCallControl->SetCameraZoom(1.0), INVALID_VALUE);
914     ASSERT_EQ(imsVideoCallControl->SetPausePicture(SIM1_SLOTID, DEFAULT_INDEX, path), INVALID_VALUE);
915     ASSERT_EQ(imsVideoCallControl->SetDeviceDirection(SIM1_SLOTID, DEFAULT_INDEX, 0), INVALID_VALUE);
916     ASSERT_EQ(imsVideoCallControl->SendUpdateCallMediaModeRequest(cellularCallInfo, ImsCallMode::CALL_MODE_AUDIO_ONLY),
917         INVALID_VALUE);
918     ASSERT_EQ(imsVideoCallControl->SendUpdateCallMediaModeResponse(cellularCallInfo, ImsCallMode::CALL_MODE_AUDIO_ONLY),
919         INVALID_VALUE);
920     ASSERT_EQ(imsVideoCallControl->CancelCallUpgrade(SIM1_SLOTID, DEFAULT_INDEX), INVALID_VALUE);
921     ASSERT_EQ(imsVideoCallControl->RequestCameraCapabilities(SIM1_SLOTID, DEFAULT_INDEX), INVALID_VALUE);
922 #else
923     ASSERT_EQ(imsVideoCallControl->ControlCamera(SIM1_SLOTID, DEFAULT_INDEX, cameraId), TELEPHONY_SUCCESS);
924     ASSERT_EQ(imsVideoCallControl->SetPreviewWindow(SIM1_SLOTID, DEFAULT_INDEX, surfaceId, nullptr),
925         TELEPHONY_SUCCESS);
926     ASSERT_EQ(imsVideoCallControl->SetDisplayWindow(SIM1_SLOTID, DEFAULT_INDEX, surfaceId, nullptr),
927         TELEPHONY_SUCCESS);
928     ASSERT_EQ(imsVideoCallControl->SetCameraZoom(1.0), TELEPHONY_SUCCESS);
929     ASSERT_EQ(imsVideoCallControl->SetPausePicture(SIM1_SLOTID, DEFAULT_INDEX, path), TELEPHONY_SUCCESS);
930     ASSERT_EQ(imsVideoCallControl->SetDeviceDirection(SIM1_SLOTID, DEFAULT_INDEX, 0), TELEPHONY_SUCCESS);
931     ASSERT_EQ(imsVideoCallControl->SendUpdateCallMediaModeRequest(cellularCallInfo, ImsCallMode::CALL_MODE_AUDIO_ONLY),
932         TELEPHONY_ERR_FAIL);
933     ASSERT_EQ(imsVideoCallControl->SendUpdateCallMediaModeResponse(cellularCallInfo, ImsCallMode::CALL_MODE_AUDIO_ONLY),
934         TELEPHONY_ERR_FAIL);
935     ASSERT_EQ(imsVideoCallControl->CancelCallUpgrade(SIM1_SLOTID, DEFAULT_INDEX), TELEPHONY_SUCCESS);
936     ASSERT_EQ(imsVideoCallControl->RequestCameraCapabilities(SIM1_SLOTID, DEFAULT_INDEX), TELEPHONY_SUCCESS);
937 #endif
938 }
939 
940 /**
941  * @tc.number   Telephony_ImsVideoCallControl_002
942  * @tc.name     Test error branch
943  * @tc.desc     Function test
944  */
945 HWTEST_F(ZeroBranchTest, Telephony_ImsVideoCallControl_002, Function | MediumTest | Level3)
946 {
947     AccessToken token;
948     auto imsVideoCallControl = DelayedSingleton<ImsVideoCallControl>::GetInstance();
949     ASSERT_NE(imsVideoCallControl, nullptr);
950     ImsCallMode mode = ImsCallMode::CALL_MODE_AUDIO_ONLY;
951     ASSERT_EQ(imsVideoCallControl->ConverToImsCallType(mode), ImsCallType::TEL_IMS_CALL_TYPE_VOICE);
952     mode = ImsCallMode::CALL_MODE_RECEIVE_ONLY;
953     ASSERT_EQ(imsVideoCallControl->ConverToImsCallType(mode), ImsCallType::TEL_IMS_CALL_TYPE_VT_RX);
954     mode = ImsCallMode::CALL_MODE_SEND_ONLY;
955     ASSERT_EQ(imsVideoCallControl->ConverToImsCallType(mode), ImsCallType::TEL_IMS_CALL_TYPE_VT_TX);
956     mode = ImsCallMode::CALL_MODE_SEND_RECEIVE;
957     ASSERT_EQ(imsVideoCallControl->ConverToImsCallType(mode), ImsCallType::TEL_IMS_CALL_TYPE_VT);
958     mode = ImsCallMode::CALL_MODE_VIDEO_PAUSED;
959     ASSERT_EQ(imsVideoCallControl->ConverToImsCallType(mode), ImsCallType::TEL_IMS_CALL_TYPE_PAUSE);
960 }
961 
962 /**
963  * @tc.number   Telephony_CellularCallConnectionIms_001
964  * @tc.name     Test error branch
965  * @tc.desc     Function test
966  */
967 HWTEST_F(ZeroBranchTest, Telephony_CellularCallConnectionIms_001, Function | MediumTest | Level3)
968 {
969     AccessToken token;
970     CellularCallConnectionIMS callConn;
971     ImsDialInfoStruct dialRequest;
972     std::vector<std::string> numberList = {};
973     std::string msg = "";
974     int32_t videoState = 0;
975 #ifdef CALL_MANAGER_AUTO_START_OPTIMIZE
976     ASSERT_EQ(callConn.DialRequest(SIM1_SLOTID, dialRequest), TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL);
977     ASSERT_EQ(callConn.HangUpRequest(SIM1_SLOTID, PHONE_NUMBER, 0), INVALID_VALUE);
978     ASSERT_EQ(callConn.AnswerRequest(SIM1_SLOTID, PHONE_NUMBER, 0, 0), INVALID_VALUE);
979     ASSERT_EQ(callConn.RejectRequest(SIM1_SLOTID, PHONE_NUMBER, 0), INVALID_VALUE);
980     ASSERT_EQ(callConn.HoldCallRequest(SIM1_SLOTID), INVALID_VALUE);
981     ASSERT_EQ(callConn.UnHoldCallRequest(SIM1_SLOTID), INVALID_VALUE);
982     ASSERT_EQ(callConn.SwitchCallRequest(SIM1_SLOTID, videoState), INVALID_VALUE);
983     ASSERT_EQ(callConn.CombineConferenceRequest(SIM1_SLOTID, 0), INVALID_VALUE);
984     ASSERT_EQ(callConn.InviteToConferenceRequest(SIM1_SLOTID, numberList), INVALID_VALUE);
985     ASSERT_EQ(callConn.KickOutFromConferenceRequest(SIM1_SLOTID, 0), INVALID_VALUE);
986     ASSERT_EQ(callConn.CallSupplementRequest(SIM1_SLOTID, CallSupplementType::TYPE_DEFAULT), TELEPHONY_SUCCESS);
987     ASSERT_EQ(callConn.StartRttRequest(SIM1_SLOTID, msg), INVALID_VALUE);
988     ASSERT_EQ(callConn.StopRttRequest(SIM1_SLOTID), INVALID_VALUE);
989     ASSERT_EQ(callConn.GetImsCallsDataRequest(SIM1_SLOTID, 0), INVALID_VALUE);
990     ASSERT_EQ(callConn.SendDtmfRequest(SIM1_SLOTID, '*', 0), INVALID_VALUE);
991     ASSERT_EQ(callConn.StartDtmfRequest(SIM1_SLOTID, '*', 0), INVALID_VALUE);
992     ASSERT_EQ(callConn.StopDtmfRequest(SIM1_SLOTID, 0), INVALID_VALUE);
993     ASSERT_EQ(callConn.GetCallFailReasonRequest(SIM1_SLOTID), INVALID_VALUE);
994 #else
995     ASSERT_EQ(callConn.DialRequest(SIM1_SLOTID, dialRequest), TELEPHONY_SUCCESS);
996     ASSERT_EQ(callConn.HangUpRequest(SIM1_SLOTID, PHONE_NUMBER, 0), TELEPHONY_SUCCESS);
997     ASSERT_EQ(callConn.AnswerRequest(SIM1_SLOTID, PHONE_NUMBER, 0, 0), TELEPHONY_SUCCESS);
998     ASSERT_EQ(callConn.RejectRequest(SIM1_SLOTID, PHONE_NUMBER, 0), TELEPHONY_SUCCESS);
999     ASSERT_EQ(callConn.HoldCallRequest(SIM1_SLOTID), TELEPHONY_SUCCESS);
1000     ASSERT_EQ(callConn.UnHoldCallRequest(SIM1_SLOTID), TELEPHONY_SUCCESS);
1001     ASSERT_EQ(callConn.SwitchCallRequest(SIM1_SLOTID, videoState), TELEPHONY_SUCCESS);
1002     ASSERT_EQ(callConn.CombineConferenceRequest(SIM1_SLOTID, 0), TELEPHONY_SUCCESS);
1003     ASSERT_EQ(callConn.InviteToConferenceRequest(SIM1_SLOTID, numberList), TELEPHONY_SUCCESS);
1004     ASSERT_EQ(callConn.KickOutFromConferenceRequest(SIM1_SLOTID, 0), TELEPHONY_SUCCESS);
1005     ASSERT_EQ(callConn.CallSupplementRequest(SIM1_SLOTID, CallSupplementType::TYPE_DEFAULT), TELEPHONY_SUCCESS);
1006     ASSERT_EQ(callConn.StartRttRequest(SIM1_SLOTID, msg), TELEPHONY_SUCCESS);
1007     ASSERT_EQ(callConn.StopRttRequest(SIM1_SLOTID), TELEPHONY_SUCCESS);
1008     ASSERT_EQ(callConn.GetImsCallsDataRequest(SIM1_SLOTID, 0), TELEPHONY_SUCCESS);
1009     ASSERT_EQ(callConn.SendDtmfRequest(SIM1_SLOTID, '*', 0), TELEPHONY_SUCCESS);
1010     ASSERT_EQ(callConn.StartDtmfRequest(SIM1_SLOTID, '*', 0), TELEPHONY_SUCCESS);
1011     ASSERT_EQ(callConn.StopDtmfRequest(SIM1_SLOTID, 0), TELEPHONY_SUCCESS);
1012     ASSERT_EQ(callConn.GetCallFailReasonRequest(SIM1_SLOTID), TELEPHONY_SUCCESS);
1013 #endif
1014 }
1015 
1016 /**
1017  * @tc.number   Telephony_CellularCallConfigRequest_001
1018  * @tc.name     Test error branch
1019  * @tc.desc     Function test
1020  */
1021 HWTEST_F(ZeroBranchTest, Telephony_CellularCallConfigRequest_001, Function | MediumTest | Level3)
1022 {
1023     AccessToken token;
1024     ConfigRequest configReq;
1025     configReq.SetDomainPreferenceModeRequest(SIM1_SLOTID, 1);
1026     configReq.GetDomainPreferenceModeRequest(SIM1_SLOTID);
1027     configReq.SetDomainPreferenceModeRequest(SIM2_SLOTID, 1);
1028     configReq.GetDomainPreferenceModeRequest(SIM2_SLOTID);
1029     bool enabled = false;
1030     configReq.SetImsSwitchStatusRequest(SIM1_SLOTID, enabled);
1031     configReq.GetImsSwitchStatusRequest(SIM1_SLOTID);
1032     int32_t state = 0;
1033     configReq.SetVoNRSwitchStatusRequest(SIM1_SLOTID, state);
1034     configReq.SetVoNRSwitchStatusRequest(SIM2_SLOTID, state);
1035     std::string value = "";
1036     configReq.SetImsConfigRequest(ImsConfigItem::ITEM_VIDEO_QUALITY, value);
1037     configReq.SetImsConfigRequest(ImsConfigItem::ITEM_VIDEO_QUALITY, 1);
1038     configReq.GetImsConfigRequest(ImsConfigItem::ITEM_VIDEO_QUALITY);
1039     configReq.SetImsFeatureValueRequest(FeatureType::TYPE_VOICE_OVER_LTE, 1);
1040     int32_t imsFeature = 0;
1041     configReq.GetImsFeatureValueRequest(FeatureType::TYPE_VOICE_OVER_LTE, imsFeature);
1042     configReq.SetMuteRequest(SIM1_SLOTID, 0);
1043     configReq.GetMuteRequest(SIM1_SLOTID);
1044     configReq.SetMuteRequest(SIM2_SLOTID, 0);
1045     configReq.GetMuteRequest(SIM2_SLOTID);
1046     std::vector<EmergencyCall> eccVec = {};
1047     configReq.GetEmergencyCallListRequest(SIM1_SLOTID);
1048     configReq.SetEmergencyCallListRequest(SIM1_SLOTID, eccVec);
1049     configReq.GetEmergencyCallListRequest(SIM2_SLOTID);
1050     configReq.SetEmergencyCallListRequest(SIM2_SLOTID, eccVec);
1051     ImsCapabilityList imsCapabilityList;
1052 #ifdef CALL_MANAGER_AUTO_START_OPTIMIZE
1053     ASSERT_EQ(configReq.UpdateImsCapabilities(SIM1_SLOTID, imsCapabilityList), CALL_ERR_RESOURCE_UNAVAILABLE);
1054 #else
1055     ASSERT_EQ(configReq.UpdateImsCapabilities(SIM1_SLOTID, imsCapabilityList), TELEPHONY_SUCCESS);
1056 #endif
1057 }
1058 } // namespace Telephony
1059 } // namespace OHOS