1e5d0e473Sopenharmony_ci/* 2e5d0e473Sopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd. 3e5d0e473Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e5d0e473Sopenharmony_ci * you may not use this file except in compliance with the License. 5e5d0e473Sopenharmony_ci * You may obtain a copy of the License at 6e5d0e473Sopenharmony_ci * 7e5d0e473Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e5d0e473Sopenharmony_ci * 9e5d0e473Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e5d0e473Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e5d0e473Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e5d0e473Sopenharmony_ci * See the License for the specific language governing permissions and 13e5d0e473Sopenharmony_ci * limitations under the License. 14e5d0e473Sopenharmony_ci */ 15e5d0e473Sopenharmony_ci 16e5d0e473Sopenharmony_ci#define private public 17e5d0e473Sopenharmony_ci#define protected public 18e5d0e473Sopenharmony_ci 19e5d0e473Sopenharmony_ci#include "cdma_sms_message.h" 20e5d0e473Sopenharmony_ci#include "cdma_sms_transport_message.h" 21e5d0e473Sopenharmony_ci#include "core_service_client.h" 22e5d0e473Sopenharmony_ci#include "gtest/gtest.h" 23e5d0e473Sopenharmony_ci#include "i_sms_service_interface.h" 24e5d0e473Sopenharmony_ci#include "if_system_ability_manager.h" 25e5d0e473Sopenharmony_ci#include "iservice_registry.h" 26e5d0e473Sopenharmony_ci#include "radio_event.h" 27e5d0e473Sopenharmony_ci#include "sms_mms_gtest.h" 28e5d0e473Sopenharmony_ci#include "sms_mms_test_helper.h" 29e5d0e473Sopenharmony_ci#include "sms_service.h" 30e5d0e473Sopenharmony_ci#include "sms_service_manager_client.h" 31e5d0e473Sopenharmony_ci#include "string_utils.h" 32e5d0e473Sopenharmony_ci#include "telephony_log_wrapper.h" 33e5d0e473Sopenharmony_ci 34e5d0e473Sopenharmony_cinamespace OHOS { 35e5d0e473Sopenharmony_cinamespace Telephony { 36e5d0e473Sopenharmony_cinamespace { 37e5d0e473Sopenharmony_cisptr<ISmsServiceInterface> g_telephonyService = nullptr; 38e5d0e473Sopenharmony_ci} // namespace 39e5d0e473Sopenharmony_ciusing namespace testing::ext; 40e5d0e473Sopenharmony_ci 41e5d0e473Sopenharmony_ciclass CdmaSmsGtest : public testing::Test { 42e5d0e473Sopenharmony_cipublic: 43e5d0e473Sopenharmony_ci static void SetUpTestCase(); 44e5d0e473Sopenharmony_ci static void TearDownTestCase(); 45e5d0e473Sopenharmony_ci void SetUp(); 46e5d0e473Sopenharmony_ci void TearDown(); 47e5d0e473Sopenharmony_ci static sptr<ISmsServiceInterface> GetProxy(); 48e5d0e473Sopenharmony_ci static bool HasSimCard(int32_t slotId) 49e5d0e473Sopenharmony_ci { 50e5d0e473Sopenharmony_ci bool hasSimCard = false; 51e5d0e473Sopenharmony_ci if (CoreServiceClient::GetInstance().GetProxy() == nullptr) { 52e5d0e473Sopenharmony_ci return hasSimCard; 53e5d0e473Sopenharmony_ci } 54e5d0e473Sopenharmony_ci CoreServiceClient::GetInstance().HasSimCard(slotId, hasSimCard); 55e5d0e473Sopenharmony_ci return hasSimCard; 56e5d0e473Sopenharmony_ci } 57e5d0e473Sopenharmony_ci}; 58e5d0e473Sopenharmony_ci 59e5d0e473Sopenharmony_civoid CdmaSmsGtest::TearDownTestCase() {} 60e5d0e473Sopenharmony_ci 61e5d0e473Sopenharmony_civoid CdmaSmsGtest::SetUp() {} 62e5d0e473Sopenharmony_ci 63e5d0e473Sopenharmony_civoid CdmaSmsGtest::TearDown() {} 64e5d0e473Sopenharmony_ci 65e5d0e473Sopenharmony_ciconst int32_t DEFAULT_SIM_SLOT_ID_1 = 1; 66e5d0e473Sopenharmony_ciconst uint8_t HEX_CHAR_LEN = 2; 67e5d0e473Sopenharmony_ciconst uint8_t UNICODE_CHAR_LEN = 2; 68e5d0e473Sopenharmony_ciconst uint8_t VALUE_INDEX = 2; 69e5d0e473Sopenharmony_ciconst char *CDMA_PDU = "01010101"; 70e5d0e473Sopenharmony_ciconst char *OTHER_CDMA_PDU = "111111"; 71e5d0e473Sopenharmony_ci 72e5d0e473Sopenharmony_civoid CdmaSmsGtest::SetUpTestCase() 73e5d0e473Sopenharmony_ci{ 74e5d0e473Sopenharmony_ci TELEPHONY_LOGI("SetUpTestCase slotId%{public}d", DEFAULT_SIM_SLOT_ID_1); 75e5d0e473Sopenharmony_ci g_telephonyService = GetProxy(); 76e5d0e473Sopenharmony_ci if (g_telephonyService == nullptr) { 77e5d0e473Sopenharmony_ci return; 78e5d0e473Sopenharmony_ci } 79e5d0e473Sopenharmony_ci Singleton<SmsServiceManagerClient>::GetInstance().ResetSmsServiceProxy(); 80e5d0e473Sopenharmony_ci Singleton<SmsServiceManagerClient>::GetInstance().InitSmsServiceProxy(); 81e5d0e473Sopenharmony_ci} 82e5d0e473Sopenharmony_ci 83e5d0e473Sopenharmony_cisptr<ISmsServiceInterface> CdmaSmsGtest::GetProxy() 84e5d0e473Sopenharmony_ci{ 85e5d0e473Sopenharmony_ci auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); 86e5d0e473Sopenharmony_ci if (systemAbilityMgr == nullptr) { 87e5d0e473Sopenharmony_ci return nullptr; 88e5d0e473Sopenharmony_ci } 89e5d0e473Sopenharmony_ci sptr<IRemoteObject> remote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_SMS_MMS_SYS_ABILITY_ID); 90e5d0e473Sopenharmony_ci if (remote) { 91e5d0e473Sopenharmony_ci sptr<ISmsServiceInterface> smsService = iface_cast<ISmsServiceInterface>(remote); 92e5d0e473Sopenharmony_ci return smsService; 93e5d0e473Sopenharmony_ci } 94e5d0e473Sopenharmony_ci return nullptr; 95e5d0e473Sopenharmony_ci} 96e5d0e473Sopenharmony_ci 97e5d0e473Sopenharmony_ci#ifndef TEL_TEST_UNSUPPORT 98e5d0e473Sopenharmony_ci/** 99e5d0e473Sopenharmony_ci * @tc.number Telephony_SmsMmsGtest_CdmaSmsMessage_0001 100e5d0e473Sopenharmony_ci * @tc.name Test CdmaSmsMessage 101e5d0e473Sopenharmony_ci * @tc.desc Function test 102e5d0e473Sopenharmony_ci */ 103e5d0e473Sopenharmony_ciHWTEST_F(CdmaSmsGtest, CdmaSmsMessage_0001, Function | MediumTest | Level1) 104e5d0e473Sopenharmony_ci{ 105e5d0e473Sopenharmony_ci TELEPHONY_LOGI("TelSMSMMSTest::CdmaSmsMessage_0001 -->"); 106e5d0e473Sopenharmony_ci CdmaSmsMessage cdmaSmsMessage; 107e5d0e473Sopenharmony_ci std::string dest = "dest"; 108e5d0e473Sopenharmony_ci std::string sc = "sc"; 109e5d0e473Sopenharmony_ci std::string text = "text"; 110e5d0e473Sopenharmony_ci int32_t port = 10; 111e5d0e473Sopenharmony_ci uint8_t *data; 112e5d0e473Sopenharmony_ci uint32_t dataLen = 10; 113e5d0e473Sopenharmony_ci std::string pdu = "01000B818176251308F4000007E8B0BCFD76E701"; 114e5d0e473Sopenharmony_ci bool bStatusReport = false; 115e5d0e473Sopenharmony_ci DataCodingScheme codingScheme = DATA_CODING_7BIT; 116e5d0e473Sopenharmony_ci cdmaSmsMessage.CreateSubmitTransMsg(dest, sc, text, bStatusReport, codingScheme); 117e5d0e473Sopenharmony_ci cdmaSmsMessage.CreateSubmitTransMsg(dest, sc, port, data, dataLen, bStatusReport); 118e5d0e473Sopenharmony_ci cdmaSmsMessage.GreateTransMsg(); 119e5d0e473Sopenharmony_ci cdmaSmsMessage.CovertEncodingType(codingScheme); 120e5d0e473Sopenharmony_ci cdmaSmsMessage.CreateMessage(pdu); 121e5d0e473Sopenharmony_ci cdmaSmsMessage.PduAnalysis(pdu); 122e5d0e473Sopenharmony_ci CdmaP2PMsg p2pMsg; 123e5d0e473Sopenharmony_ci cdmaSmsMessage.AnalysisP2pMsg(p2pMsg); 124e5d0e473Sopenharmony_ci cdmaSmsMessage.AnalsisDeliverMwi(p2pMsg); 125e5d0e473Sopenharmony_ci bool ret = cdmaSmsMessage.PduAnalysis(""); 126e5d0e473Sopenharmony_ci EXPECT_EQ(false, ret); 127e5d0e473Sopenharmony_ci} 128e5d0e473Sopenharmony_ci 129e5d0e473Sopenharmony_ci/** 130e5d0e473Sopenharmony_ci * @tc.number Telephony_SmsMmsGtest_CdmaSmsReceiveHandler_0001 131e5d0e473Sopenharmony_ci * @tc.name Test CdmaSmsReceiveHandler 132e5d0e473Sopenharmony_ci * @tc.desc Function test 133e5d0e473Sopenharmony_ci */ 134e5d0e473Sopenharmony_ciHWTEST_F(CdmaSmsGtest, CdmaSmsReceiveHandler_0001, Function | MediumTest | Level1) 135e5d0e473Sopenharmony_ci{ 136e5d0e473Sopenharmony_ci TELEPHONY_LOGI("TelSMSMMSTest::CdmaSmsReceiveHandler_0001 -->"); 137e5d0e473Sopenharmony_ci auto smsReceiveManager = std::make_shared<SmsReceiveManager>(DEFAULT_SIM_SLOT_ID); 138e5d0e473Sopenharmony_ci EXPECT_TRUE(smsReceiveManager != nullptr); 139e5d0e473Sopenharmony_ci smsReceiveManager->Init(); 140e5d0e473Sopenharmony_ci EXPECT_TRUE(smsReceiveManager->cdmaSmsReceiveHandler_ != nullptr); 141e5d0e473Sopenharmony_ci int32_t retInt = smsReceiveManager->cdmaSmsReceiveHandler_->HandleSmsByType(nullptr); 142e5d0e473Sopenharmony_ci EXPECT_EQ(AckIncomeCause::SMS_ACK_UNKNOWN_ERROR, retInt); 143e5d0e473Sopenharmony_ci} 144e5d0e473Sopenharmony_ci 145e5d0e473Sopenharmony_ci/** 146e5d0e473Sopenharmony_ci * @tc.number Telephony_SmsMmsGtest_CdmaSmsReceiveHandler_0002 147e5d0e473Sopenharmony_ci * @tc.name Test CdmaSmsReceiveHandler 148e5d0e473Sopenharmony_ci * @tc.desc Function test 149e5d0e473Sopenharmony_ci */ 150e5d0e473Sopenharmony_ciHWTEST_F(CdmaSmsGtest, CdmaSmsReceiveHandler_0002, Function | MediumTest | Level1) 151e5d0e473Sopenharmony_ci{ 152e5d0e473Sopenharmony_ci TELEPHONY_LOGI("TelSMSMMSTest::CdmaSmsReceiveHandler_0002 -->"); 153e5d0e473Sopenharmony_ci auto smsReceiveManager = std::make_shared<SmsReceiveManager>(DEFAULT_SIM_SLOT_ID); 154e5d0e473Sopenharmony_ci EXPECT_TRUE(smsReceiveManager != nullptr); 155e5d0e473Sopenharmony_ci smsReceiveManager->Init(); 156e5d0e473Sopenharmony_ci EXPECT_TRUE(smsReceiveManager->cdmaSmsReceiveHandler_ != nullptr); 157e5d0e473Sopenharmony_ci auto retMsg = std::make_shared<CdmaSmsMessage>(); 158e5d0e473Sopenharmony_ci retMsg = CdmaSmsMessage::CreateMessage(CDMA_PDU); 159e5d0e473Sopenharmony_ci EXPECT_EQ(retMsg, nullptr); 160e5d0e473Sopenharmony_ci auto cdmaMsg = std::make_shared<CdmaSmsMessage>(); 161e5d0e473Sopenharmony_ci cdmaMsg->transMsg_ = std::make_unique<struct CdmaTransportMsg>(); 162e5d0e473Sopenharmony_ci cdmaMsg->transMsg_->type = CdmaTransportMsgType::BROADCAST; 163e5d0e473Sopenharmony_ci int32_t retInt = smsReceiveManager->cdmaSmsReceiveHandler_->HandleSmsByType(cdmaMsg); 164e5d0e473Sopenharmony_ci EXPECT_EQ(AckIncomeCause::SMS_ACK_RESULT_OK, retInt); 165e5d0e473Sopenharmony_ci cdmaMsg->transMsg_->type = CdmaTransportMsgType::P2P; 166e5d0e473Sopenharmony_ci retInt = smsReceiveManager->cdmaSmsReceiveHandler_->HandleSmsByType(cdmaMsg); 167e5d0e473Sopenharmony_ci EXPECT_EQ(AckIncomeCause::SMS_ACK_RESULT_OK, retInt); 168e5d0e473Sopenharmony_ci cdmaMsg->transMsg_->type = CdmaTransportMsgType::ACK; 169e5d0e473Sopenharmony_ci retInt = smsReceiveManager->cdmaSmsReceiveHandler_->HandleSmsByType(cdmaMsg); 170e5d0e473Sopenharmony_ci EXPECT_EQ(AckIncomeCause::SMS_ACK_RESULT_OK, retInt); 171e5d0e473Sopenharmony_ci cdmaMsg->transMsg_->type = CdmaTransportMsgType::RESERVED; 172e5d0e473Sopenharmony_ci retInt = smsReceiveManager->cdmaSmsReceiveHandler_->HandleSmsByType(cdmaMsg); 173e5d0e473Sopenharmony_ci EXPECT_EQ(AckIncomeCause::SMS_ACK_RESULT_OK, retInt); 174e5d0e473Sopenharmony_ci} 175e5d0e473Sopenharmony_ci 176e5d0e473Sopenharmony_ci/** 177e5d0e473Sopenharmony_ci * @tc.number Telephony_SmsMmsGtest_CdmaSmsReceiveHandler_0003 178e5d0e473Sopenharmony_ci * @tc.name Test CdmaSmsReceiveHandler 179e5d0e473Sopenharmony_ci * @tc.desc Function test 180e5d0e473Sopenharmony_ci */ 181e5d0e473Sopenharmony_ciHWTEST_F(CdmaSmsGtest, CdmaSmsReceiveHandler_0003, Function | MediumTest | Level1) 182e5d0e473Sopenharmony_ci{ 183e5d0e473Sopenharmony_ci TELEPHONY_LOGI("TelSMSMMSTest::CdmaSmsReceiveHandler_0003 -->"); 184e5d0e473Sopenharmony_ci auto smsReceiveManager = std::make_shared<SmsReceiveManager>(DEFAULT_SIM_SLOT_ID); 185e5d0e473Sopenharmony_ci EXPECT_TRUE(smsReceiveManager != nullptr); 186e5d0e473Sopenharmony_ci smsReceiveManager->Init(); 187e5d0e473Sopenharmony_ci EXPECT_TRUE(smsReceiveManager->cdmaSmsReceiveHandler_ != nullptr); 188e5d0e473Sopenharmony_ci int32_t retInt = smsReceiveManager->cdmaSmsReceiveHandler_->HandleSmsOtherSvcid(nullptr); 189e5d0e473Sopenharmony_ci EXPECT_NE(AckIncomeCause::SMS_ACK_RESULT_OK, retInt); 190e5d0e473Sopenharmony_ci auto retMsg = CdmaSmsMessage::CreateMessage(OTHER_CDMA_PDU); 191e5d0e473Sopenharmony_ci EXPECT_EQ(retMsg, nullptr); 192e5d0e473Sopenharmony_ci 193e5d0e473Sopenharmony_ci auto cdmaMsg = std::make_shared<CdmaSmsMessage>(); 194e5d0e473Sopenharmony_ci smsReceiveManager->cdmaSmsReceiveHandler_->ReplySmsToSmsc(1); 195e5d0e473Sopenharmony_ci retInt = smsReceiveManager->cdmaSmsReceiveHandler_->HandleSmsOtherSvcid(cdmaMsg); 196e5d0e473Sopenharmony_ci EXPECT_NE(AckIncomeCause::SMS_ACK_RESULT_OK, retInt); 197e5d0e473Sopenharmony_ci cdmaMsg->smsConcat_ = std::make_shared<SmsConcat>(); 198e5d0e473Sopenharmony_ci cdmaMsg->smsConcat_->is8Bits = true; 199e5d0e473Sopenharmony_ci cdmaMsg->smsConcat_->msgRef = 1; 200e5d0e473Sopenharmony_ci cdmaMsg->smsConcat_->seqNum = 1; 201e5d0e473Sopenharmony_ci cdmaMsg->smsConcat_->totalSeg = 1; 202e5d0e473Sopenharmony_ci retInt = smsReceiveManager->cdmaSmsReceiveHandler_->HandleSmsOtherSvcid(cdmaMsg); 203e5d0e473Sopenharmony_ci EXPECT_NE(AckIncomeCause::SMS_ACK_RESULT_OK, retInt); 204e5d0e473Sopenharmony_ci} 205e5d0e473Sopenharmony_ci 206e5d0e473Sopenharmony_ci/** 207e5d0e473Sopenharmony_ci * @tc.number Telephony_SmsMmsGtest_CdmaSmsReceiveHandler_0004 208e5d0e473Sopenharmony_ci * @tc.name Test CdmaSmsReceiveHandler 209e5d0e473Sopenharmony_ci * @tc.desc Function test 210e5d0e473Sopenharmony_ci */ 211e5d0e473Sopenharmony_ciHWTEST_F(CdmaSmsGtest, CdmaSmsReceiveHandler_0004, Function | MediumTest | Level1) 212e5d0e473Sopenharmony_ci{ 213e5d0e473Sopenharmony_ci TELEPHONY_LOGI("TelSMSMMSTest::CdmaSmsReceiveHandler_0004 -->"); 214e5d0e473Sopenharmony_ci auto smsReceiveManager = std::make_shared<SmsReceiveManager>(DEFAULT_SIM_SLOT_ID); 215e5d0e473Sopenharmony_ci EXPECT_TRUE(smsReceiveManager != nullptr); 216e5d0e473Sopenharmony_ci smsReceiveManager->Init(); 217e5d0e473Sopenharmony_ci EXPECT_TRUE(smsReceiveManager->cdmaSmsReceiveHandler_ != nullptr); 218e5d0e473Sopenharmony_ci std::function<void(std::shared_ptr<SmsSendIndexer>)> fun = nullptr; 219e5d0e473Sopenharmony_ci auto smsSender = std::make_shared<CdmaSmsSender>(DEFAULT_SIM_SLOT_ID, fun); 220e5d0e473Sopenharmony_ci smsReceiveManager->cdmaSmsReceiveHandler_->SetCdmaSender(smsSender); 221e5d0e473Sopenharmony_ci auto info = std::make_shared<SmsMessageInfo>(); 222e5d0e473Sopenharmony_ci auto ret = smsReceiveManager->cdmaSmsReceiveHandler_->TransformMessageInfo(info); 223e5d0e473Sopenharmony_ci EXPECT_EQ(ret, nullptr); 224e5d0e473Sopenharmony_ci smsReceiveManager->cdmaSmsReceiveHandler_->SendCBBroadcast(nullptr); 225e5d0e473Sopenharmony_ci auto cdmaMsg = std::make_shared<CdmaSmsMessage>(); 226e5d0e473Sopenharmony_ci EXPECT_EQ(smsReceiveManager->cdmaSmsReceiveHandler_->SendCBBroadcast(cdmaMsg), true); 227e5d0e473Sopenharmony_ci} 228e5d0e473Sopenharmony_ci 229e5d0e473Sopenharmony_ci/** 230e5d0e473Sopenharmony_ci * @tc.number Telephony_CdmaSmsGtest_SmsPduBuffer_0001 231e5d0e473Sopenharmony_ci * @tc.name Test SmsPduBuffer 232e5d0e473Sopenharmony_ci * @tc.desc Function test 233e5d0e473Sopenharmony_ci */ 234e5d0e473Sopenharmony_ciHWTEST_F(CdmaSmsGtest, SmsPduBuffer_0001, Function | MediumTest | Level1) 235e5d0e473Sopenharmony_ci{ 236e5d0e473Sopenharmony_ci auto buffer = std::make_shared<SmsPduBuffer>(); 237e5d0e473Sopenharmony_ci EXPECT_TRUE(buffer->IsEmpty()); 238e5d0e473Sopenharmony_ci EXPECT_EQ(buffer->GetIndex(), 0); 239e5d0e473Sopenharmony_ci EXPECT_FALSE(buffer->SetIndex(1)); 240e5d0e473Sopenharmony_ci EXPECT_EQ(buffer->MoveForward(), 0); 241e5d0e473Sopenharmony_ci EXPECT_EQ(buffer->SkipBits(), 0); 242e5d0e473Sopenharmony_ci 243e5d0e473Sopenharmony_ci std::string pduHex = "00000210020000021002"; 244e5d0e473Sopenharmony_ci std::string pdu = StringUtils::HexToString(pduHex); 245e5d0e473Sopenharmony_ci auto rBuffer = std::make_shared<SmsReadBuffer>(pdu); 246e5d0e473Sopenharmony_ci EXPECT_FALSE(rBuffer->IsEmpty()); 247e5d0e473Sopenharmony_ci rBuffer->SetIndex(0); 248e5d0e473Sopenharmony_ci uint8_t v = 0; 249e5d0e473Sopenharmony_ci uint16_t v2 = 0; 250e5d0e473Sopenharmony_ci EXPECT_TRUE(rBuffer->ReadByte(v)); 251e5d0e473Sopenharmony_ci EXPECT_TRUE(rBuffer->ReadWord(v2)); 252e5d0e473Sopenharmony_ci EXPECT_TRUE(rBuffer->ReadBits(v)); 253e5d0e473Sopenharmony_ci 254e5d0e473Sopenharmony_ci auto wBuffer = std::make_shared<SmsWriteBuffer>(); 255e5d0e473Sopenharmony_ci EXPECT_FALSE(wBuffer->IsEmpty()); 256e5d0e473Sopenharmony_ci wBuffer->SetIndex(0); 257e5d0e473Sopenharmony_ci v = 1; 258e5d0e473Sopenharmony_ci v2 = 0x1234; 259e5d0e473Sopenharmony_ci EXPECT_TRUE(wBuffer->WriteByte(v)); 260e5d0e473Sopenharmony_ci EXPECT_TRUE(wBuffer->WriteWord(v2)); 261e5d0e473Sopenharmony_ci EXPECT_TRUE(wBuffer->InsertByte(v, 1)); 262e5d0e473Sopenharmony_ci EXPECT_TRUE(wBuffer->WriteBits(v)); 263e5d0e473Sopenharmony_ci} 264e5d0e473Sopenharmony_ci 265e5d0e473Sopenharmony_ci/** 266e5d0e473Sopenharmony_ci * @tc.number Telephony_CdmaSmsGtest_CdmaSmsTransportMessage_0001 267e5d0e473Sopenharmony_ci * @tc.name Test CdmaSmsTransportMessage 268e5d0e473Sopenharmony_ci * @tc.desc Function test 269e5d0e473Sopenharmony_ci */ 270e5d0e473Sopenharmony_ciHWTEST_F(CdmaSmsGtest, CdmaSmsTransportMessage_0001, Function | MediumTest | Level1) 271e5d0e473Sopenharmony_ci{ 272e5d0e473Sopenharmony_ci TELEPHONY_LOGI("TelSMSMMSTest::CdmaSmsTransportMessage_0001 -->"); 273e5d0e473Sopenharmony_ci CdmaSmsMessage cdmaSmsMessage; 274e5d0e473Sopenharmony_ci std::string dest = "dest"; 275e5d0e473Sopenharmony_ci std::string sc = "sc"; 276e5d0e473Sopenharmony_ci std::string text = "text"; 277e5d0e473Sopenharmony_ci bool bStatusReport = false; 278e5d0e473Sopenharmony_ci DataCodingScheme codingScheme = DATA_CODING_7BIT; 279e5d0e473Sopenharmony_ci std::unique_ptr<CdmaTransportMsg> transMsg = 280e5d0e473Sopenharmony_ci cdmaSmsMessage.CreateSubmitTransMsg(dest, sc, text, bStatusReport, codingScheme); 281e5d0e473Sopenharmony_ci 282e5d0e473Sopenharmony_ci std::unique_ptr<CdmaSmsTransportMessage> transportMessage = 283e5d0e473Sopenharmony_ci CdmaSmsTransportMessage::CreateTransportMessage(*transMsg.get()); 284e5d0e473Sopenharmony_ci SmsWriteBuffer pduBuffer; 285e5d0e473Sopenharmony_ci EXPECT_NE(transportMessage, nullptr); 286e5d0e473Sopenharmony_ci EXPECT_NE(transportMessage->IsEmpty(), true); 287e5d0e473Sopenharmony_ci EXPECT_EQ(transportMessage->Encode(pduBuffer), true); 288e5d0e473Sopenharmony_ci std::unique_ptr<std::vector<uint8_t>> pdu = pduBuffer.GetPduBuffer(); 289e5d0e473Sopenharmony_ci EXPECT_NE(pdu, nullptr); 290e5d0e473Sopenharmony_ci EXPECT_GT(pdu->size(), static_cast<uint32_t>(0)); 291e5d0e473Sopenharmony_ci} 292e5d0e473Sopenharmony_ci 293e5d0e473Sopenharmony_ci/** 294e5d0e473Sopenharmony_ci * @tc.number Telephony_CdmaSmsGtest_CdmaSmsTransportMessage_0002 295e5d0e473Sopenharmony_ci * @tc.name Test CdmaSmsTransportMessage 296e5d0e473Sopenharmony_ci * @tc.desc Function test 297e5d0e473Sopenharmony_ci */ 298e5d0e473Sopenharmony_ciHWTEST_F(CdmaSmsGtest, CdmaSmsTransportMessage_0002, Function | MediumTest | Level1) 299e5d0e473Sopenharmony_ci{ 300e5d0e473Sopenharmony_ci TELEPHONY_LOGI("TelSMSMMSTest::CdmaSmsTransportMessage_0002 -->"); 301e5d0e473Sopenharmony_ci std::string pduHex = "0000021002040702C48D159E268406010408260003200640011910D61C58F265CD9F469D5AF66DDDBF871E5CFA75E" 302e5d0e473Sopenharmony_ci "DDFC79F400801000A0140"; 303e5d0e473Sopenharmony_ci std::string pdu = StringUtils::HexToString(pduHex); 304e5d0e473Sopenharmony_ci SmsReadBuffer pduBuffer(pdu); 305e5d0e473Sopenharmony_ci CdmaTransportMsg msg; 306e5d0e473Sopenharmony_ci memset_s(&msg, sizeof(msg), 0, sizeof(msg)); 307e5d0e473Sopenharmony_ci std::unique_ptr<CdmaSmsTransportMessage> transportMessage = 308e5d0e473Sopenharmony_ci CdmaSmsTransportMessage::CreateTransportMessage(msg, pduBuffer); 309e5d0e473Sopenharmony_ci EXPECT_NE(transportMessage, nullptr); 310e5d0e473Sopenharmony_ci EXPECT_NE(transportMessage->IsEmpty(), true); 311e5d0e473Sopenharmony_ci EXPECT_EQ(transportMessage->Decode(pduBuffer), true); 312e5d0e473Sopenharmony_ci} 313e5d0e473Sopenharmony_ci 314e5d0e473Sopenharmony_ci/** 315e5d0e473Sopenharmony_ci * @tc.number Telephony_CdmaSmsGtest_CdmaSmsTransportMessage_0003 316e5d0e473Sopenharmony_ci * @tc.name Test CdmaSmsTransportMessage 317e5d0e473Sopenharmony_ci * @tc.desc Function test 318e5d0e473Sopenharmony_ci */ 319e5d0e473Sopenharmony_ciHWTEST_F(CdmaSmsGtest, CdmaSmsTransportMessage_0003, Function | MediumTest | Level1) 320e5d0e473Sopenharmony_ci{ 321e5d0e473Sopenharmony_ci // BROADCAST DELIVER CMASDATA 322e5d0e473Sopenharmony_ci uint8_t cmasTestBearerData[] = { 0x00, 0x03, 0x1C, 0x78, 0x00, 0x01, 0x59, 0x02, 0xB8, 0x00, 0x02, 0x10, 0xAA, 323e5d0e473Sopenharmony_ci 0x68, 0xD3, 0xCD, 0x06, 0x9E, 0x68, 0x30, 0xA0, 0xE9, 0x97, 0x9F, 0x44, 0x1B, 0xF3, 0x20, 0xE9, 0xA3, 0x2A, 324e5d0e473Sopenharmony_ci 0x08, 0x7B, 0xF6, 0xED, 0xCB, 0xCB, 0x1E, 0x9C, 0x3B, 0x10, 0x4D, 0xDF, 0x8B, 0x4E, 0xCC, 0xA8, 0x20, 0xEC, 325e5d0e473Sopenharmony_ci 0xCB, 0xCB, 0xA2, 0x0A, 0x7E, 0x79, 0xF4, 0xCB, 0xB5, 0x72, 0x0A, 0x9A, 0x34, 0xF3, 0x41, 0xA7, 0x9A, 0x0D, 326e5d0e473Sopenharmony_ci 0xFB, 0xB6, 0x79, 0x41, 0x85, 0x07, 0x4C, 0xBC, 0xFA, 0x2E, 0x00, 0x08, 0x20, 0x58, 0x38, 0x88, 0x80, 0x10, 327e5d0e473Sopenharmony_ci 0x54, 0x06, 0x38, 0x20, 0x60, 0x30, 0xA8, 0x81, 0x90, 0x20, 0x08 }; 328e5d0e473Sopenharmony_ci 329e5d0e473Sopenharmony_ci std::stringstream ss; 330e5d0e473Sopenharmony_ci ss.clear(); 331e5d0e473Sopenharmony_ci ss << static_cast<uint8_t>(CdmaTransportMsgType::BROADCAST); 332e5d0e473Sopenharmony_ci ss << static_cast<uint8_t>(CdmaSmsParameterRecord::SERVICE_CATEGORY); 333e5d0e473Sopenharmony_ci ss << static_cast<uint8_t>(0x02); 334e5d0e473Sopenharmony_ci ss << static_cast<uint8_t>(static_cast<uint16_t>(SmsServiceCtg::CMAS_TEST) >> 8); 335e5d0e473Sopenharmony_ci ss << static_cast<uint8_t>(static_cast<uint16_t>(SmsServiceCtg::CMAS_TEST) & 0xff); 336e5d0e473Sopenharmony_ci ss << static_cast<uint8_t>(CdmaSmsParameterRecord::BEARER_DATA); 337e5d0e473Sopenharmony_ci ss << static_cast<uint8_t>(sizeof(cmasTestBearerData)); 338e5d0e473Sopenharmony_ci for (uint8_t i = 0; i < sizeof(cmasTestBearerData); i++) { 339e5d0e473Sopenharmony_ci ss << cmasTestBearerData[i]; 340e5d0e473Sopenharmony_ci } 341e5d0e473Sopenharmony_ci SmsReadBuffer rBuffer(ss.str()); 342e5d0e473Sopenharmony_ci CdmaTransportMsg msg; 343e5d0e473Sopenharmony_ci memset_s(&msg, sizeof(msg), 0, sizeof(msg)); 344e5d0e473Sopenharmony_ci std::unique_ptr<CdmaSmsTransportMessage> message = CdmaSmsTransportMessage::CreateTransportMessage(msg, rBuffer); 345e5d0e473Sopenharmony_ci EXPECT_TRUE(message->Decode(rBuffer)); 346e5d0e473Sopenharmony_ci EXPECT_EQ(msg.data.broadcast.telesvcMsg.data.deliver.msgId.msgId, 0xc780); 347e5d0e473Sopenharmony_ci EXPECT_EQ(msg.data.broadcast.serviceCtg, static_cast<uint16_t>(SmsServiceCtg::CMAS_TEST)); 348e5d0e473Sopenharmony_ci EXPECT_EQ(msg.data.broadcast.telesvcMsg.data.deliver.cmasData.dataLen, 74); 349e5d0e473Sopenharmony_ci EXPECT_EQ(msg.data.broadcast.telesvcMsg.data.deliver.cmasData.urgency, SmsCmaeUrgency::EXPECTED); 350e5d0e473Sopenharmony_ci} 351e5d0e473Sopenharmony_ci 352e5d0e473Sopenharmony_ci/** 353e5d0e473Sopenharmony_ci * @tc.number Telephony_CdmaSmsGtest_CdmaSmsTransportMessage_0004 354e5d0e473Sopenharmony_ci * @tc.name Test CdmaSmsTransportMessage 355e5d0e473Sopenharmony_ci * @tc.desc Function test 356e5d0e473Sopenharmony_ci */ 357e5d0e473Sopenharmony_ciHWTEST_F(CdmaSmsGtest, CdmaSmsTransportMessage_0004, Function | MediumTest | Level1) 358e5d0e473Sopenharmony_ci{ 359e5d0e473Sopenharmony_ci // BROADCAST DELIVER USERDATA(BCCBB) 360e5d0e473Sopenharmony_ci std::string pduHex = "0101020004081300031008d00106102c2870e1420801c00c01c0"; 361e5d0e473Sopenharmony_ci std::string pdu = StringUtils::HexToString(pduHex); 362e5d0e473Sopenharmony_ci SmsReadBuffer pduBuffer(pdu); 363e5d0e473Sopenharmony_ci CdmaTransportMsg msg; 364e5d0e473Sopenharmony_ci memset_s(&msg, sizeof(msg), 0, sizeof(msg)); 365e5d0e473Sopenharmony_ci std::unique_ptr<CdmaSmsTransportMessage> transportMessage = 366e5d0e473Sopenharmony_ci CdmaSmsTransportMessage::CreateTransportMessage(msg, pduBuffer); 367e5d0e473Sopenharmony_ci EXPECT_NE(transportMessage, nullptr); 368e5d0e473Sopenharmony_ci EXPECT_FALSE(transportMessage->IsEmpty()); 369e5d0e473Sopenharmony_ci EXPECT_TRUE(transportMessage->Decode(pduBuffer)); 370e5d0e473Sopenharmony_ci} 371e5d0e473Sopenharmony_ci 372e5d0e473Sopenharmony_cistring GetUserDataString(SmsTeleSvcUserData userData) 373e5d0e473Sopenharmony_ci{ 374e5d0e473Sopenharmony_ci std::stringstream ssUserData; 375e5d0e473Sopenharmony_ci if (userData.encodeType == SmsEncodingType::UNICODE) { 376e5d0e473Sopenharmony_ci char unicodeChar[UNICODE_CHAR_LEN + 1]; 377e5d0e473Sopenharmony_ci unicodeChar[UNICODE_CHAR_LEN] = '\0'; 378e5d0e473Sopenharmony_ci for (uint8_t i = 0; i < userData.userData.length; i += UNICODE_CHAR_LEN) { 379e5d0e473Sopenharmony_ci ssUserData << "\\u"; 380e5d0e473Sopenharmony_ci snprintf_s(unicodeChar, sizeof(unicodeChar), sizeof(unicodeChar) - 1, "%02x", 381e5d0e473Sopenharmony_ci static_cast<uint8_t>(userData.userData.data[i])); 382e5d0e473Sopenharmony_ci ssUserData << unicodeChar; 383e5d0e473Sopenharmony_ci snprintf_s(unicodeChar, sizeof(unicodeChar), sizeof(unicodeChar) - 1, "%02x", 384e5d0e473Sopenharmony_ci static_cast<uint8_t>(userData.userData.data[i + 1])); 385e5d0e473Sopenharmony_ci ssUserData << unicodeChar; 386e5d0e473Sopenharmony_ci } 387e5d0e473Sopenharmony_ci } else { 388e5d0e473Sopenharmony_ci for (uint8_t i = 0; i < userData.userData.length; i++) { 389e5d0e473Sopenharmony_ci ssUserData << static_cast<uint8_t>(userData.userData.data[i]); 390e5d0e473Sopenharmony_ci } 391e5d0e473Sopenharmony_ci } 392e5d0e473Sopenharmony_ci return ssUserData.str(); 393e5d0e473Sopenharmony_ci} 394e5d0e473Sopenharmony_ci 395e5d0e473Sopenharmony_civoid CheckDeliverUserData(string pdu, string userData) 396e5d0e473Sopenharmony_ci{ 397e5d0e473Sopenharmony_ci std::stringstream ss; 398e5d0e473Sopenharmony_ci ss << static_cast<uint8_t>(CdmaSmsParameterRecord::BEARER_DATA); 399e5d0e473Sopenharmony_ci ss << static_cast<uint8_t>(pdu.size() / HEX_CHAR_LEN); 400e5d0e473Sopenharmony_ci ss << StringUtils::HexToString(pdu); 401e5d0e473Sopenharmony_ci 402e5d0e473Sopenharmony_ci CdmaTeleserviceMsg v; 403e5d0e473Sopenharmony_ci memset_s(&v, sizeof(CdmaTeleserviceMsg), 0x00, sizeof(CdmaTeleserviceMsg)); 404e5d0e473Sopenharmony_ci SmsReadBuffer rBuffer(ss.str()); 405e5d0e473Sopenharmony_ci rBuffer.SetIndex(VALUE_INDEX); 406e5d0e473Sopenharmony_ci auto message = std::make_shared<CdmaSmsBearerData>(v, rBuffer); 407e5d0e473Sopenharmony_ci rBuffer.SetIndex(0); 408e5d0e473Sopenharmony_ci EXPECT_TRUE(message->Decode(rBuffer)); 409e5d0e473Sopenharmony_ci EXPECT_STREQ(GetUserDataString(v.data.deliver.userData).c_str(), userData.c_str()); 410e5d0e473Sopenharmony_ci} 411e5d0e473Sopenharmony_ci 412e5d0e473Sopenharmony_civoid CheckSubmitUserData(string pdu, string userData) 413e5d0e473Sopenharmony_ci{ 414e5d0e473Sopenharmony_ci std::stringstream ss; 415e5d0e473Sopenharmony_ci ss << static_cast<uint8_t>(CdmaSmsParameterRecord::BEARER_DATA); 416e5d0e473Sopenharmony_ci ss << static_cast<uint8_t>(pdu.size() / HEX_CHAR_LEN); 417e5d0e473Sopenharmony_ci ss << StringUtils::HexToString(pdu); 418e5d0e473Sopenharmony_ci 419e5d0e473Sopenharmony_ci CdmaTeleserviceMsg v; 420e5d0e473Sopenharmony_ci memset_s(&v, sizeof(CdmaTeleserviceMsg), 0x00, sizeof(CdmaTeleserviceMsg)); 421e5d0e473Sopenharmony_ci SmsReadBuffer rBuffer(ss.str()); 422e5d0e473Sopenharmony_ci rBuffer.SetIndex(VALUE_INDEX); 423e5d0e473Sopenharmony_ci auto message = std::make_shared<CdmaSmsBearerData>(v, rBuffer); 424e5d0e473Sopenharmony_ci rBuffer.SetIndex(0); 425e5d0e473Sopenharmony_ci EXPECT_TRUE(message->Decode(rBuffer)); 426e5d0e473Sopenharmony_ci EXPECT_STREQ(GetUserDataString(v.data.submit.userData).c_str(), userData.c_str()); 427e5d0e473Sopenharmony_ci 428e5d0e473Sopenharmony_ci auto message1 = std::make_shared<CdmaSmsBearerData>(v); 429e5d0e473Sopenharmony_ci SmsWriteBuffer wBuffer; 430e5d0e473Sopenharmony_ci EXPECT_TRUE(message1->Encode(wBuffer)); 431e5d0e473Sopenharmony_ci auto buffer = wBuffer.GetPduBuffer(); 432e5d0e473Sopenharmony_ci EXPECT_GT(buffer->size(), 0); 433e5d0e473Sopenharmony_ci std::stringstream ssEncode; 434e5d0e473Sopenharmony_ci for (uint16_t i = 0; i < buffer->size(); i++) { 435e5d0e473Sopenharmony_ci ssEncode << (*buffer)[i]; 436e5d0e473Sopenharmony_ci } 437e5d0e473Sopenharmony_ci 438e5d0e473Sopenharmony_ci CdmaTeleserviceMsg v2; 439e5d0e473Sopenharmony_ci memset_s(&v2, sizeof(CdmaTeleserviceMsg), 0x00, sizeof(CdmaTeleserviceMsg)); 440e5d0e473Sopenharmony_ci SmsReadBuffer rBuffer2(ssEncode.str()); 441e5d0e473Sopenharmony_ci rBuffer2.SetIndex(VALUE_INDEX); 442e5d0e473Sopenharmony_ci auto message2 = std::make_shared<CdmaSmsBearerData>(v2, rBuffer2); 443e5d0e473Sopenharmony_ci rBuffer2.SetIndex(0); 444e5d0e473Sopenharmony_ci EXPECT_TRUE(message2->Decode(rBuffer2)); 445e5d0e473Sopenharmony_ci EXPECT_STREQ(GetUserDataString(v2.data.submit.userData).c_str(), userData.c_str()); 446e5d0e473Sopenharmony_ci} 447e5d0e473Sopenharmony_ci 448e5d0e473Sopenharmony_ci/** 449e5d0e473Sopenharmony_ci * @tc.number Telephony_CdmaSmsGtest_CdmaSmsBearerData_0001 450e5d0e473Sopenharmony_ci * @tc.name Test CdmaSmsBearerData 451e5d0e473Sopenharmony_ci * @tc.desc Function test 452e5d0e473Sopenharmony_ci */ 453e5d0e473Sopenharmony_ciHWTEST_F(CdmaSmsGtest, CdmaSmsBearerData_0001, Function | MediumTest | Level1) 454e5d0e473Sopenharmony_ci{ 455e5d0e473Sopenharmony_ci // gsm 7bit 456e5d0e473Sopenharmony_ci CheckDeliverUserData("00031040900112488ea794e074d69e1b7392c270326cde9e98", "Test standard SMS"); 457e5d0e473Sopenharmony_ci // ascii 7bit 458e5d0e473Sopenharmony_ci CheckDeliverUserData("0003100160010610262d5ab500", "bjjj"); 459e5d0e473Sopenharmony_ci // ia5 460e5d0e473Sopenharmony_ci CheckDeliverUserData("00031002100109184539b4d052ebb3d0", "SMS Rulz"); 461e5d0e473Sopenharmony_ci // unicode 462e5d0e473Sopenharmony_ci CheckDeliverUserData("000310021001062012716B2C380801000A0140", "\\u4e2d\\u6587"); 463e5d0e473Sopenharmony_ci 464e5d0e473Sopenharmony_ci // gsm 7bit 465e5d0e473Sopenharmony_ci CheckSubmitUserData("00032006400112488ea794e074d69e1b7392c270326cde9e98", "Test standard SMS"); 466e5d0e473Sopenharmony_ci // ascii 7bit 467e5d0e473Sopenharmony_ci CheckSubmitUserData("0003200640010610262d5ab500", "bjjj"); 468e5d0e473Sopenharmony_ci // ia5 469e5d0e473Sopenharmony_ci CheckSubmitUserData("00032006400109184539b4d052ebb3d0", "SMS Rulz"); 470e5d0e473Sopenharmony_ci // unicode 471e5d0e473Sopenharmony_ci CheckSubmitUserData("000320064001062012716B2C380801000A0140", "\\u4e2d\\u6587"); 472e5d0e473Sopenharmony_ci} 473e5d0e473Sopenharmony_ci 474e5d0e473Sopenharmony_ci/** 475e5d0e473Sopenharmony_ci * @tc.number Telephony_CdmaSmsGtest_CdmaSmsBearerData_0002 476e5d0e473Sopenharmony_ci * @tc.name Test CdmaSmsBearerData 477e5d0e473Sopenharmony_ci * @tc.desc Function test 478e5d0e473Sopenharmony_ci */ 479e5d0e473Sopenharmony_ciHWTEST_F(CdmaSmsGtest, CdmaSmsBearerData_0002, Function | MediumTest | Level1) 480e5d0e473Sopenharmony_ci{ 481e5d0e473Sopenharmony_ci std::string dataStr = "0003200010010410168d20020105030608120111015905019206069706180000000801c00901800a01e00b" 482e5d0e473Sopenharmony_ci "01030c01c00d01070e05039acc13880f018011020566"; 483e5d0e473Sopenharmony_ci std::stringstream ss; 484e5d0e473Sopenharmony_ci ss.clear(); 485e5d0e473Sopenharmony_ci ss << static_cast<uint8_t>(CdmaSmsParameterRecord::BEARER_DATA); 486e5d0e473Sopenharmony_ci ss << static_cast<uint8_t>(dataStr.size() / HEX_CHAR_LEN); 487e5d0e473Sopenharmony_ci ss << StringUtils::HexToString(dataStr); 488e5d0e473Sopenharmony_ci 489e5d0e473Sopenharmony_ci CdmaTeleserviceMsg v; 490e5d0e473Sopenharmony_ci memset_s(&v, sizeof(CdmaTeleserviceMsg), 0x00, sizeof(CdmaTeleserviceMsg)); 491e5d0e473Sopenharmony_ci SmsReadBuffer rBuffer(ss.str()); 492e5d0e473Sopenharmony_ci rBuffer.SetIndex(VALUE_INDEX); 493e5d0e473Sopenharmony_ci auto message = std::make_shared<CdmaSmsBearerData>(v, rBuffer); 494e5d0e473Sopenharmony_ci rBuffer.SetIndex(0); 495e5d0e473Sopenharmony_ci EXPECT_TRUE(message->Decode(rBuffer)); 496e5d0e473Sopenharmony_ci EXPECT_EQ(v.type, TeleserviceMsgType::SUBMIT); 497e5d0e473Sopenharmony_ci EXPECT_EQ(v.data.submit.msgId.msgId, 1); 498e5d0e473Sopenharmony_ci EXPECT_EQ(v.data.submit.priority, SmsPriorityIndicator::EMERGENCY); 499e5d0e473Sopenharmony_ci EXPECT_EQ(v.data.submit.privacy, SmsPrivacyIndicator::CONFIDENTIAL); 500e5d0e473Sopenharmony_ci EXPECT_EQ(v.data.submit.callbackNumber.addrLen, 7); 501e5d0e473Sopenharmony_ci char number[] = "3598271"; 502e5d0e473Sopenharmony_ci for (uint8_t i = 0; i < sizeof(number); i++) { 503e5d0e473Sopenharmony_ci EXPECT_EQ(v.data.submit.callbackNumber.szData[i], number[i]); 504e5d0e473Sopenharmony_ci } 505e5d0e473Sopenharmony_ci EXPECT_EQ(v.data.submit.depositId, 1382); 506e5d0e473Sopenharmony_ci EXPECT_EQ(v.data.submit.language, SmsLanguageType::HEBREW); 507e5d0e473Sopenharmony_ci EXPECT_EQ(v.data.submit.alertPriority, SmsAlertPriority::HIGH); 508e5d0e473Sopenharmony_ci EXPECT_EQ(v.data.submit.deferValPeriod.time.absTime.year, 97); 509e5d0e473Sopenharmony_ci EXPECT_EQ(v.data.submit.deferValPeriod.time.absTime.month, 6); 510e5d0e473Sopenharmony_ci EXPECT_EQ(v.data.submit.deferValPeriod.time.absTime.day, 18); 511e5d0e473Sopenharmony_ci} 512e5d0e473Sopenharmony_ci#endif // TEL_TEST_UNSUPPORT 513e5d0e473Sopenharmony_ci} // namespace Telephony 514e5d0e473Sopenharmony_ci} // namespace OHOS