1e5d0e473Sopenharmony_ci/*
2e5d0e473Sopenharmony_ci * Copyright (C) 2023-2024 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_transport_message.h"
20e5d0e473Sopenharmony_ci#include "core_manager_inner.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 "mms_address.h"
27e5d0e473Sopenharmony_ci#include "mms_apn_info.h"
28e5d0e473Sopenharmony_ci#include "mms_attachment.h"
29e5d0e473Sopenharmony_ci#include "mms_base64.h"
30e5d0e473Sopenharmony_ci#include "mms_body.h"
31e5d0e473Sopenharmony_ci#include "mms_body_part.h"
32e5d0e473Sopenharmony_ci#include "mms_body_part_header.h"
33e5d0e473Sopenharmony_ci#include "mms_charset.h"
34e5d0e473Sopenharmony_ci#include "mms_codec_type.h"
35e5d0e473Sopenharmony_ci#include "mms_decode_buffer.h"
36e5d0e473Sopenharmony_ci#include "mms_header.h"
37e5d0e473Sopenharmony_ci#include "mms_msg.h"
38e5d0e473Sopenharmony_ci#include "mms_persist_helper.h"
39e5d0e473Sopenharmony_ci#include "mms_quoted_printable.h"
40e5d0e473Sopenharmony_ci#include "pdp_profile_data.h"
41e5d0e473Sopenharmony_ci#include "radio_event.h"
42e5d0e473Sopenharmony_ci#include "sms_broadcast_subscriber_gtest.h"
43e5d0e473Sopenharmony_ci#include "sms_mms_gtest.h"
44e5d0e473Sopenharmony_ci#include "sms_mms_test_helper.h"
45e5d0e473Sopenharmony_ci#include "sms_service.h"
46e5d0e473Sopenharmony_ci#include "sms_service_manager_client.h"
47e5d0e473Sopenharmony_ci#include "string_utils.h"
48e5d0e473Sopenharmony_ci#include "telephony_log_wrapper.h"
49e5d0e473Sopenharmony_ci#include "telephony_types.h"
50e5d0e473Sopenharmony_ci#include "uri.h"
51e5d0e473Sopenharmony_ci
52e5d0e473Sopenharmony_cinamespace OHOS {
53e5d0e473Sopenharmony_cinamespace Telephony {
54e5d0e473Sopenharmony_cinamespace {
55e5d0e473Sopenharmony_cisptr<ISmsServiceInterface> g_telephonyService = nullptr;
56e5d0e473Sopenharmony_ci} // namespace
57e5d0e473Sopenharmony_ciusing namespace testing::ext;
58e5d0e473Sopenharmony_ci
59e5d0e473Sopenharmony_ciclass MmsGtest : public testing::Test {
60e5d0e473Sopenharmony_cipublic:
61e5d0e473Sopenharmony_ci    static void SetUpTestCase();
62e5d0e473Sopenharmony_ci    static void TearDownTestCase();
63e5d0e473Sopenharmony_ci    void SetUp();
64e5d0e473Sopenharmony_ci    void TearDown();
65e5d0e473Sopenharmony_ci    static sptr<ISmsServiceInterface> GetProxy();
66e5d0e473Sopenharmony_ci    static bool HasSimCard(int32_t slotId)
67e5d0e473Sopenharmony_ci    {
68e5d0e473Sopenharmony_ci        bool hasSimCard = false;
69e5d0e473Sopenharmony_ci        if (CoreServiceClient::GetInstance().GetProxy() == nullptr) {
70e5d0e473Sopenharmony_ci            return hasSimCard;
71e5d0e473Sopenharmony_ci        }
72e5d0e473Sopenharmony_ci        CoreServiceClient::GetInstance().HasSimCard(slotId, hasSimCard);
73e5d0e473Sopenharmony_ci        return hasSimCard;
74e5d0e473Sopenharmony_ci    }
75e5d0e473Sopenharmony_ci};
76e5d0e473Sopenharmony_ci
77e5d0e473Sopenharmony_civoid MmsGtest::TearDownTestCase() {}
78e5d0e473Sopenharmony_ci
79e5d0e473Sopenharmony_civoid MmsGtest::SetUp() {}
80e5d0e473Sopenharmony_ci
81e5d0e473Sopenharmony_civoid MmsGtest::TearDown() {}
82e5d0e473Sopenharmony_ci
83e5d0e473Sopenharmony_ciconst int32_t DEFAULT_SIM_SLOT_ID_1 = 1;
84e5d0e473Sopenharmony_ciconst uint16_t MESSAGE_TYPE = 4;
85e5d0e473Sopenharmony_ciconst uint16_t WAPPUSH_PDU_LEN = 164;
86e5d0e473Sopenharmony_ciconst uint32_t MAX_MMS_ATTACHMENT_LEN = 10 * 1024 * 1024;
87e5d0e473Sopenharmony_ciconst char PDU_TEST_DATA = 35;
88e5d0e473Sopenharmony_ciconst char MIN_SHORT_OCTET = 30;
89e5d0e473Sopenharmony_ciconst char QUOTE_CHAR_LEN = 0X7F - 1;
90e5d0e473Sopenharmony_ciconst char VALUE_CHAR = 8;
91e5d0e473Sopenharmony_ciconst char PDU_COUNT = 10;
92e5d0e473Sopenharmony_ciconst char PDU_CUSITION = 5;
93e5d0e473Sopenharmony_ciconst char PDU_LENGTH = 4;
94e5d0e473Sopenharmony_ciconst char *ENCODE_CHARSET = "01010101";
95e5d0e473Sopenharmony_ciconst uint32_t ENCODE_CHARSET1 = 0x0100;
96e5d0e473Sopenharmony_ciconst uint32_t ENCODE_CHARSET2 = 0x0001;
97e5d0e473Sopenharmony_ciconst uint32_t MMS_PDU_MAX_SIZE = 300 * 1024;
98e5d0e473Sopenharmony_cistatic constexpr const char *PDU = "pdu";
99e5d0e473Sopenharmony_cistatic constexpr uint32_t MAX_PDU_PAGES = 4;
100e5d0e473Sopenharmony_cistatic constexpr uint8_t HEX_VALUE_0F = 0x0F;
101e5d0e473Sopenharmony_cistatic constexpr uint8_t HEX_VALUE_F0 = 0xF0;
102e5d0e473Sopenharmony_cistatic constexpr uint32_t SPLIT_PDU_LENGTH = 195 * 1024;
103e5d0e473Sopenharmony_cistatic constexpr const char *PDU_CONTENT = "pdu_content";
104e5d0e473Sopenharmony_ciconst std::string PDP_PROFILE_NET_URI = "datashare:///com.ohos.pdpprofileability/net/pdp_profile?simId=";
105e5d0e473Sopenharmony_ciconst std::string MMS_APN_TYPE = "mms";
106e5d0e473Sopenharmony_ciconst std::string ALL_APN_TYPE = "*";
107e5d0e473Sopenharmony_ciconst std::string MMS_FILE_ADDRESS = "/data/app/test.mms";
108e5d0e473Sopenharmony_ciconst std::string SMS_PROFILE_MMS_PDU_URI = "datashare:///com.ohos.smsmmsability/sms_mms/mms_pdu";
109e5d0e473Sopenharmony_ci
110e5d0e473Sopenharmony_civoid MmsGtest::SetUpTestCase()
111e5d0e473Sopenharmony_ci{
112e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("SetUpTestCase slotId%{public}d", DEFAULT_SIM_SLOT_ID_1);
113e5d0e473Sopenharmony_ci    g_telephonyService = GetProxy();
114e5d0e473Sopenharmony_ci    if (g_telephonyService == nullptr) {
115e5d0e473Sopenharmony_ci        return;
116e5d0e473Sopenharmony_ci    }
117e5d0e473Sopenharmony_ci    Singleton<SmsServiceManagerClient>::GetInstance().ResetSmsServiceProxy();
118e5d0e473Sopenharmony_ci    Singleton<SmsServiceManagerClient>::GetInstance().InitSmsServiceProxy();
119e5d0e473Sopenharmony_ci}
120e5d0e473Sopenharmony_ci
121e5d0e473Sopenharmony_cisptr<ISmsServiceInterface> MmsGtest::GetProxy()
122e5d0e473Sopenharmony_ci{
123e5d0e473Sopenharmony_ci    auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
124e5d0e473Sopenharmony_ci    if (systemAbilityMgr == nullptr) {
125e5d0e473Sopenharmony_ci        return nullptr;
126e5d0e473Sopenharmony_ci    }
127e5d0e473Sopenharmony_ci    sptr<IRemoteObject> remote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_SMS_MMS_SYS_ABILITY_ID);
128e5d0e473Sopenharmony_ci    if (remote) {
129e5d0e473Sopenharmony_ci        sptr<ISmsServiceInterface> smsService = iface_cast<ISmsServiceInterface>(remote);
130e5d0e473Sopenharmony_ci        return smsService;
131e5d0e473Sopenharmony_ci    }
132e5d0e473Sopenharmony_ci    return nullptr;
133e5d0e473Sopenharmony_ci}
134e5d0e473Sopenharmony_ci
135e5d0e473Sopenharmony_ci#ifndef TEL_TEST_UNSUPPORT
136e5d0e473Sopenharmony_civoid ReceiveWapPushTestFunc(SmsMmsTestHelper &helper)
137e5d0e473Sopenharmony_ci{
138e5d0e473Sopenharmony_ci    AccessMmsToken token;
139e5d0e473Sopenharmony_ci    auto smsReceiveHandler = std::make_shared<GsmSmsReceiveHandler>(helper.slotId);
140e5d0e473Sopenharmony_ci    auto message = std::make_shared<SmsMessageInfo>();
141e5d0e473Sopenharmony_ci    message->indicationType = MESSAGE_TYPE;
142e5d0e473Sopenharmony_ci    message->size = WAPPUSH_PDU_LEN;
143e5d0e473Sopenharmony_ci    message->pdu = StringUtils::HexToByteVector(
144e5d0e473Sopenharmony_ci        "0891683110205005F0640BA10156455102F1000432109261715023880605040B8423F04C06246170706C69636174696F6E2F766E642E77"
145e5d0e473Sopenharmony_ci        "61702E6D6D732D6D65737361676500B487AF848C829850765030303031365A645430008D9089178031363630373532313930382F545950"
146e5d0e473Sopenharmony_ci        "453D504C4D4E008A808E040001298D"
147e5d0e473Sopenharmony_ci        "8805810303F47B83687474703A2F2F31302E3132332E31382E38303A3138302F76564F455F3000");
148e5d0e473Sopenharmony_ci
149e5d0e473Sopenharmony_ci    AppExecFwk::InnerEvent::Pointer event = AppExecFwk::InnerEvent::Get(RadioEvent::RADIO_GSM_SMS, message);
150e5d0e473Sopenharmony_ci    smsReceiveHandler->ProcessEvent(event);
151e5d0e473Sopenharmony_ci}
152e5d0e473Sopenharmony_ci
153e5d0e473Sopenharmony_civoid GetSendReqDataTest(MmsMsg &encodeMsg, std::string number)
154e5d0e473Sopenharmony_ci{
155e5d0e473Sopenharmony_ci    if (!encodeMsg.SetMmsMessageType(MMS_MSGTYPE_SEND_REQ)) {
156e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("SetMmsMessageType fail");
157e5d0e473Sopenharmony_ci    }
158e5d0e473Sopenharmony_ci    if (!encodeMsg.SetMmsTransactionId("2077.1427358451410")) {
159e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("SetMmsTransactionId fail");
160e5d0e473Sopenharmony_ci    }
161e5d0e473Sopenharmony_ci    if (!encodeMsg.SetMmsVersion(static_cast<uint16_t>(MmsVersionType::MMS_VERSION_1_2))) {
162e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("SetMmsVersion fail");
163e5d0e473Sopenharmony_ci    }
164e5d0e473Sopenharmony_ci    MmsAddress address;
165e5d0e473Sopenharmony_ci    address.SetMmsAddressString(number);
166e5d0e473Sopenharmony_ci    if (!encodeMsg.SetMmsFrom(address)) {
167e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("SetMmsFrom fail");
168e5d0e473Sopenharmony_ci    }
169e5d0e473Sopenharmony_ci    if (!encodeMsg.SetHeaderContentType("application/vnd.wap.multipart.related")) {
170e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("SetHeaderContentType fail");
171e5d0e473Sopenharmony_ci    }
172e5d0e473Sopenharmony_ci    if (!encodeMsg.SetMmsSubject("mms")) {
173e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("SetMmsSubject fail");
174e5d0e473Sopenharmony_ci    }
175e5d0e473Sopenharmony_ci    if (!encodeMsg.SetHeaderOctetValue(MMS_CONTENT_CLASS, static_cast<uint8_t>(MmsContentClass::MMS_TEXT))) {
176e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("SetHeaderOctetValue MMS_CONTENT_CLASS fail");
177e5d0e473Sopenharmony_ci    }
178e5d0e473Sopenharmony_ci}
179e5d0e473Sopenharmony_ci
180e5d0e473Sopenharmony_cibool MmsAddAttachment(MmsMsg &msg, std::string pathName, std::string contentId, std::string contenType, bool isSmil)
181e5d0e473Sopenharmony_ci{
182e5d0e473Sopenharmony_ci    MmsAttachment imageAttachment;
183e5d0e473Sopenharmony_ci    std::size_t pos = pathName.find_last_of('/');
184e5d0e473Sopenharmony_ci    std::string fileName(pathName.substr(pos + 1));
185e5d0e473Sopenharmony_ci    if (!imageAttachment.SetAttachmentFilePath(pathName, isSmil)) {
186e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("MmsAddAttachment SetAttachmentFilePath fail");
187e5d0e473Sopenharmony_ci        return false;
188e5d0e473Sopenharmony_ci    }
189e5d0e473Sopenharmony_ci    if (!imageAttachment.SetFileName(fileName)) {
190e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("MmsAddAttachment SetFileName fail");
191e5d0e473Sopenharmony_ci        return false;
192e5d0e473Sopenharmony_ci    }
193e5d0e473Sopenharmony_ci    if (!imageAttachment.SetContentId(contentId)) {
194e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("MmsAddAttachment SetContentId fail");
195e5d0e473Sopenharmony_ci        return false;
196e5d0e473Sopenharmony_ci    }
197e5d0e473Sopenharmony_ci    if (!imageAttachment.SetContentLocation(fileName)) {
198e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("MmsAddAttachment SetContentLocation fail");
199e5d0e473Sopenharmony_ci        return false;
200e5d0e473Sopenharmony_ci    }
201e5d0e473Sopenharmony_ci    if (!imageAttachment.SetContentType(contenType)) {
202e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("MmsAddAttachment SetContentType fail");
203e5d0e473Sopenharmony_ci        return false;
204e5d0e473Sopenharmony_ci    }
205e5d0e473Sopenharmony_ci    imageAttachment.SetContentDisposition("attachment");
206e5d0e473Sopenharmony_ci    if (!msg.AddAttachment(imageAttachment)) {
207e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("MmsAddAttachment AddAttachment fail");
208e5d0e473Sopenharmony_ci        return false;
209e5d0e473Sopenharmony_ci    }
210e5d0e473Sopenharmony_ci    return true;
211e5d0e473Sopenharmony_ci}
212e5d0e473Sopenharmony_ci
213e5d0e473Sopenharmony_cibool WriteBufferToFile(const std::unique_ptr<char[]> &buff, uint32_t len, const std::string &strPathName)
214e5d0e473Sopenharmony_ci{
215e5d0e473Sopenharmony_ci    FILE *pFile = nullptr;
216e5d0e473Sopenharmony_ci    pFile = fopen(strPathName.c_str(), "wb");
217e5d0e473Sopenharmony_ci    if (!pFile || buff == nullptr) {
218e5d0e473Sopenharmony_ci        return false;
219e5d0e473Sopenharmony_ci    }
220e5d0e473Sopenharmony_ci    uint32_t fileLen = fwrite(buff.get(), len, 1, pFile);
221e5d0e473Sopenharmony_ci    if (fileLen > 0) {
222e5d0e473Sopenharmony_ci        TELEPHONY_LOGD("write mms buffer to file success");
223e5d0e473Sopenharmony_ci    } else {
224e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("write mms buffer to file error");
225e5d0e473Sopenharmony_ci    }
226e5d0e473Sopenharmony_ci    (void)fclose(pFile);
227e5d0e473Sopenharmony_ci    return true;
228e5d0e473Sopenharmony_ci}
229e5d0e473Sopenharmony_ci
230e5d0e473Sopenharmony_cibool GetMmsPduFromFile(const std::string &fileName, std::string &mmsPdu)
231e5d0e473Sopenharmony_ci{
232e5d0e473Sopenharmony_ci    char realPath[PATH_MAX] = { 0 };
233e5d0e473Sopenharmony_ci    if (fileName.empty() || realpath(fileName.c_str(), realPath) == nullptr) {
234e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("path or realPath is nullptr");
235e5d0e473Sopenharmony_ci        return false;
236e5d0e473Sopenharmony_ci    }
237e5d0e473Sopenharmony_ci    FILE *pFile = fopen(realPath, "rb");
238e5d0e473Sopenharmony_ci    if (pFile == nullptr) {
239e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("openFile Error");
240e5d0e473Sopenharmony_ci        return false;
241e5d0e473Sopenharmony_ci    }
242e5d0e473Sopenharmony_ci    (void)fseek(pFile, 0, SEEK_END);
243e5d0e473Sopenharmony_ci    long fileLen = ftell(pFile);
244e5d0e473Sopenharmony_ci    if (fileLen <= 0 || fileLen > static_cast<long>(MMS_PDU_MAX_SIZE)) {
245e5d0e473Sopenharmony_ci        (void)fclose(pFile);
246e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("fileLen Over Max Error");
247e5d0e473Sopenharmony_ci        return false;
248e5d0e473Sopenharmony_ci    }
249e5d0e473Sopenharmony_ci    std::unique_ptr<char[]> pduBuffer = std::make_unique<char[]>(fileLen);
250e5d0e473Sopenharmony_ci    if (!pduBuffer) {
251e5d0e473Sopenharmony_ci        (void)fclose(pFile);
252e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("make unique pduBuffer nullptr Error");
253e5d0e473Sopenharmony_ci        return false;
254e5d0e473Sopenharmony_ci    }
255e5d0e473Sopenharmony_ci    (void)fseek(pFile, 0, SEEK_SET);
256e5d0e473Sopenharmony_ci    int32_t totolLength = static_cast<int32_t>(fread(pduBuffer.get(), 1, MMS_PDU_MAX_SIZE, pFile));
257e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("fread totolLength%{public}d", totolLength);
258e5d0e473Sopenharmony_ci    long i = 0;
259e5d0e473Sopenharmony_ci    while (i < fileLen) {
260e5d0e473Sopenharmony_ci        mmsPdu += pduBuffer[i];
261e5d0e473Sopenharmony_ci        i++;
262e5d0e473Sopenharmony_ci    }
263e5d0e473Sopenharmony_ci    (void)fclose(pFile);
264e5d0e473Sopenharmony_ci    return true;
265e5d0e473Sopenharmony_ci}
266e5d0e473Sopenharmony_ci
267e5d0e473Sopenharmony_cistd::vector<std::string> SplitPdu(const std::string &mmsPdu)
268e5d0e473Sopenharmony_ci{
269e5d0e473Sopenharmony_ci    std::vector<std::string> mmsPdus;
270e5d0e473Sopenharmony_ci    if (mmsPdu.compare(PDU) == 0) {
271e5d0e473Sopenharmony_ci        for (uint32_t locate = 0; locate < MAX_PDU_PAGES; locate++) {
272e5d0e473Sopenharmony_ci            mmsPdus.push_back(PDU);
273e5d0e473Sopenharmony_ci        }
274e5d0e473Sopenharmony_ci        return mmsPdus;
275e5d0e473Sopenharmony_ci    }
276e5d0e473Sopenharmony_ci    std::string targetMmsPdu;
277e5d0e473Sopenharmony_ci    for (size_t i = 0; i < mmsPdu.size(); i++) {
278e5d0e473Sopenharmony_ci        targetMmsPdu += static_cast<char>((mmsPdu[i] & HEX_VALUE_0F) | HEX_VALUE_F0);
279e5d0e473Sopenharmony_ci        targetMmsPdu += static_cast<char>((mmsPdu[i] & HEX_VALUE_F0) | HEX_VALUE_0F);
280e5d0e473Sopenharmony_ci    }
281e5d0e473Sopenharmony_ci    std::string mmsPduData;
282e5d0e473Sopenharmony_ci    for (uint32_t locate = 0; locate * SPLIT_PDU_LENGTH < targetMmsPdu.size(); locate++) {
283e5d0e473Sopenharmony_ci        if ((locate + 1) * SPLIT_PDU_LENGTH < targetMmsPdu.size()) {
284e5d0e473Sopenharmony_ci            mmsPduData = targetMmsPdu.substr(locate * SPLIT_PDU_LENGTH, SPLIT_PDU_LENGTH);
285e5d0e473Sopenharmony_ci            mmsPdus.push_back(mmsPduData);
286e5d0e473Sopenharmony_ci        } else {
287e5d0e473Sopenharmony_ci            mmsPduData = targetMmsPdu.substr(locate * SPLIT_PDU_LENGTH);
288e5d0e473Sopenharmony_ci            mmsPdus.push_back(mmsPduData);
289e5d0e473Sopenharmony_ci            break;
290e5d0e473Sopenharmony_ci        }
291e5d0e473Sopenharmony_ci    }
292e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("pduLen:%{public}zu,targetPduLen:%{public}zu", mmsPdu.size(), targetMmsPdu.size());
293e5d0e473Sopenharmony_ci    return mmsPdus;
294e5d0e473Sopenharmony_ci}
295e5d0e473Sopenharmony_ci
296e5d0e473Sopenharmony_civoid GetPduToFile(int32_t slotId)
297e5d0e473Sopenharmony_ci{
298e5d0e473Sopenharmony_ci    SmsMmsTestHelper smsMmsTestHelper;
299e5d0e473Sopenharmony_ci    smsMmsTestHelper.slotId = slotId;
300e5d0e473Sopenharmony_ci    std::string dest = "10086";
301e5d0e473Sopenharmony_ci    std::u16string simcardNumber;
302e5d0e473Sopenharmony_ci    if (!CoreServiceClient::GetInstance().GetSimTelephoneNumber(smsMmsTestHelper.slotId, simcardNumber) &&
303e5d0e473Sopenharmony_ci        !simcardNumber.empty()) {
304e5d0e473Sopenharmony_ci        dest = StringUtils::ToUtf8(simcardNumber);
305e5d0e473Sopenharmony_ci    }
306e5d0e473Sopenharmony_ci    MmsMsg encodeMsg;
307e5d0e473Sopenharmony_ci    std::vector<MmsAddress> vecAddrs;
308e5d0e473Sopenharmony_ci    std::string toAddr = dest + "/TYPE=PLMN";
309e5d0e473Sopenharmony_ci    MmsAddress toAddrs(toAddr);
310e5d0e473Sopenharmony_ci    GetSendReqDataTest(encodeMsg, toAddr);
311e5d0e473Sopenharmony_ci    vecAddrs.push_back(toAddrs);
312e5d0e473Sopenharmony_ci    if (!encodeMsg.SetMmsTo(vecAddrs)) {
313e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("SetMmsTo fail");
314e5d0e473Sopenharmony_ci    }
315e5d0e473Sopenharmony_ci    const std::string filePathNameText = "/data/app/mms.text";
316e5d0e473Sopenharmony_ci    const char *source = "mms";
317e5d0e473Sopenharmony_ci    size_t sourceLen = std::strlen(source);
318e5d0e473Sopenharmony_ci    std::unique_ptr<char[]> text = std::make_unique<char[]>(sourceLen + 1);
319e5d0e473Sopenharmony_ci    if (snprintf_s(text.get(), sourceLen + 1, sourceLen + 1, "%s", source) < 0) {
320e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("snprintf_s failed");
321e5d0e473Sopenharmony_ci        return;
322e5d0e473Sopenharmony_ci    }
323e5d0e473Sopenharmony_ci    if (!WriteBufferToFile(std::move(text), std::strlen(source) + 1, filePathNameText)) {
324e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("file error.");
325e5d0e473Sopenharmony_ci    }
326e5d0e473Sopenharmony_ci    if (!MmsAddAttachment(encodeMsg, filePathNameText, "<content.text>", "text/plain", false)) {
327e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("MmsAddAttachment text fail");
328e5d0e473Sopenharmony_ci    }
329e5d0e473Sopenharmony_ci    uint32_t len = 0;
330e5d0e473Sopenharmony_ci    std::unique_ptr<char[]> results = encodeMsg.EncodeMsg(len);
331e5d0e473Sopenharmony_ci    if (results == nullptr) {
332e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("encode fail result nullptr !!!!");
333e5d0e473Sopenharmony_ci    }
334e5d0e473Sopenharmony_ci    if (!WriteBufferToFile(std::move(results), len, MMS_FILE_ADDRESS)) {
335e5d0e473Sopenharmony_ci        TELEPHONY_LOGE("Encode write to file error.");
336e5d0e473Sopenharmony_ci    }
337e5d0e473Sopenharmony_ci}
338e5d0e473Sopenharmony_ci
339e5d0e473Sopenharmony_cistd::string GetFileToDb()
340e5d0e473Sopenharmony_ci{
341e5d0e473Sopenharmony_ci    std::string mmsPdu;
342e5d0e473Sopenharmony_ci    GetMmsPduFromFile(MMS_FILE_ADDRESS, mmsPdu);
343e5d0e473Sopenharmony_ci    Uri uri(SMS_PROFILE_MMS_PDU_URI);
344e5d0e473Sopenharmony_ci    std::shared_ptr<MmsPersistHelper> mmsPersistHelper = std::make_shared<MmsPersistHelper>();
345e5d0e473Sopenharmony_ci    if (mmsPersistHelper == nullptr) {
346e5d0e473Sopenharmony_ci        return "";
347e5d0e473Sopenharmony_ci    }
348e5d0e473Sopenharmony_ci    std::shared_ptr<DataShare::DataShareHelper> helper = mmsPersistHelper->CreateSmsHelper();
349e5d0e473Sopenharmony_ci    if (helper == nullptr) {
350e5d0e473Sopenharmony_ci        return "";
351e5d0e473Sopenharmony_ci    }
352e5d0e473Sopenharmony_ci    std::vector<std::string> mmsPdus = SplitPdu(mmsPdu);
353e5d0e473Sopenharmony_ci    std::string dbUrl;
354e5d0e473Sopenharmony_ci    for (std::string mmsPdu : mmsPdus) {
355e5d0e473Sopenharmony_ci        DataShare::DataShareValuesBucket bucket;
356e5d0e473Sopenharmony_ci        bucket.Put(PDU_CONTENT, mmsPdu);
357e5d0e473Sopenharmony_ci        int32_t result = helper->Insert(uri, bucket);
358e5d0e473Sopenharmony_ci        if (result < 0) {
359e5d0e473Sopenharmony_ci            TELEPHONY_LOGE("mms pdu insert fail");
360e5d0e473Sopenharmony_ci        }
361e5d0e473Sopenharmony_ci        dbUrl += std::to_string(result) + ',';
362e5d0e473Sopenharmony_ci    }
363e5d0e473Sopenharmony_ci    helper->Release();
364e5d0e473Sopenharmony_ci    return dbUrl;
365e5d0e473Sopenharmony_ci}
366e5d0e473Sopenharmony_ci
367e5d0e473Sopenharmony_cistd::string GetMmsc(int32_t slotId)
368e5d0e473Sopenharmony_ci{
369e5d0e473Sopenharmony_ci    int32_t simId = CoreManagerInner::GetInstance().GetSimId(slotId);
370e5d0e473Sopenharmony_ci    Uri pdpUri(PDP_PROFILE_NET_URI + std::to_string(simId));
371e5d0e473Sopenharmony_ci    std::vector<std::string> colume;
372e5d0e473Sopenharmony_ci    DataShare::DataSharePredicates predicates;
373e5d0e473Sopenharmony_ci    std::u16string operatorNumeric;
374e5d0e473Sopenharmony_ci    CoreServiceClient::GetInstance().GetSimOperatorNumeric(slotId, operatorNumeric);
375e5d0e473Sopenharmony_ci    std::string mccmnc = StringUtils::ToUtf8(operatorNumeric);
376e5d0e473Sopenharmony_ci    predicates.EqualTo(PdpProfileData::MCCMNC, mccmnc);
377e5d0e473Sopenharmony_ci    std::shared_ptr<MmsApnInfo> mmsApnInfo = std::make_shared<MmsApnInfo>(slotId);
378e5d0e473Sopenharmony_ci    auto pdpHelper = mmsApnInfo->CreatePdpProfileHelper();
379e5d0e473Sopenharmony_ci    if (pdpHelper == nullptr) {
380e5d0e473Sopenharmony_ci        return "";
381e5d0e473Sopenharmony_ci    }
382e5d0e473Sopenharmony_ci    auto resultSet = pdpHelper->Query(pdpUri, predicates, colume);
383e5d0e473Sopenharmony_ci    if (resultSet == nullptr) {
384e5d0e473Sopenharmony_ci        pdpHelper->Release();
385e5d0e473Sopenharmony_ci        return "";
386e5d0e473Sopenharmony_ci    }
387e5d0e473Sopenharmony_ci    int count;
388e5d0e473Sopenharmony_ci    resultSet->GetRowCount(count);
389e5d0e473Sopenharmony_ci    if (count <= 0) {
390e5d0e473Sopenharmony_ci        resultSet->Close();
391e5d0e473Sopenharmony_ci        pdpHelper->Release();
392e5d0e473Sopenharmony_ci        return "";
393e5d0e473Sopenharmony_ci    }
394e5d0e473Sopenharmony_ci    std::string homeUrlVal;
395e5d0e473Sopenharmony_ci    std::string mmsIPAddressVal;
396e5d0e473Sopenharmony_ci    if (!mmsApnInfo->GetMmsApnValue(resultSet, count, homeUrlVal, mmsIPAddressVal)) {
397e5d0e473Sopenharmony_ci        TELEPHONY_LOGI("homeUrlVal and mmsIPAddressVal not matched");
398e5d0e473Sopenharmony_ci        resultSet->Close();
399e5d0e473Sopenharmony_ci        pdpHelper->Release();
400e5d0e473Sopenharmony_ci        return "";
401e5d0e473Sopenharmony_ci    }
402e5d0e473Sopenharmony_ci    resultSet->Close();
403e5d0e473Sopenharmony_ci    pdpHelper->Release();
404e5d0e473Sopenharmony_ci    return homeUrlVal;
405e5d0e473Sopenharmony_ci}
406e5d0e473Sopenharmony_ci
407e5d0e473Sopenharmony_ci/**
408e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsMmsGtest_Receive_Wap_Push_0001
409e5d0e473Sopenharmony_ci * @tc.name     Receive a Wap Push
410e5d0e473Sopenharmony_ci * @tc.desc     Function test
411e5d0e473Sopenharmony_ci */
412e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, Receive_Wap_Push_0001, Function | MediumTest | Level2)
413e5d0e473Sopenharmony_ci{
414e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::Receive_Wap_Push_0001 -->");
415e5d0e473Sopenharmony_ci    int32_t slotId = DEFAULT_SIM_SLOT_ID;
416e5d0e473Sopenharmony_ci    if (!(MmsGtest::HasSimCard(slotId))) {
417e5d0e473Sopenharmony_ci        TELEPHONY_LOGI("TelephonyTestService has no sim card");
418e5d0e473Sopenharmony_ci        ASSERT_FALSE(MmsGtest::HasSimCard(slotId));
419e5d0e473Sopenharmony_ci        return;
420e5d0e473Sopenharmony_ci    }
421e5d0e473Sopenharmony_ci    SmsMmsTestHelper helper;
422e5d0e473Sopenharmony_ci    helper.slotId = slotId;
423e5d0e473Sopenharmony_ci
424e5d0e473Sopenharmony_ci    EventFwk::MatchingSkills matchingSkills;
425e5d0e473Sopenharmony_ci    matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_SMS_WAPPUSH_RECEIVE_COMPLETED);
426e5d0e473Sopenharmony_ci    EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills);
427e5d0e473Sopenharmony_ci    std::shared_ptr<SmsBroadcastSubscriberGtest> subscriberTest =
428e5d0e473Sopenharmony_ci        std::make_shared<SmsBroadcastSubscriberGtest>(subscriberInfo, helper);
429e5d0e473Sopenharmony_ci    ASSERT_NE(subscriberTest, nullptr);
430e5d0e473Sopenharmony_ci    bool subscribeResult = EventFwk::CommonEventManager::SubscribeCommonEvent(subscriberTest);
431e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("subscribeResult is : %{public}d", subscribeResult);
432e5d0e473Sopenharmony_ci
433e5d0e473Sopenharmony_ci    if (!helper.Run(ReceiveWapPushTestFunc, helper)) {
434e5d0e473Sopenharmony_ci        TELEPHONY_LOGI("ReceiveWapPushTestFunc out of time");
435e5d0e473Sopenharmony_ci        ASSERT_TRUE(helper.Run(ReceiveWapPushTestFunc, helper));
436e5d0e473Sopenharmony_ci        return;
437e5d0e473Sopenharmony_ci    }
438e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::Receive_Wap_Push_0001 -->finished");
439e5d0e473Sopenharmony_ci    EXPECT_TRUE(helper.GetBoolResult());
440e5d0e473Sopenharmony_ci}
441e5d0e473Sopenharmony_ci
442e5d0e473Sopenharmony_ci/**
443e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsMmsGtest_Receive_Wap_Push_0002
444e5d0e473Sopenharmony_ci * @tc.name     Receive a Wap Push
445e5d0e473Sopenharmony_ci * @tc.desc     Function test
446e5d0e473Sopenharmony_ci */
447e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, Receive_Wap_Push_0002, Function | MediumTest | Level2)
448e5d0e473Sopenharmony_ci{
449e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::Receive_Wap_Push_0002 -->");
450e5d0e473Sopenharmony_ci    int32_t slotId = DEFAULT_SIM_SLOT_ID_1;
451e5d0e473Sopenharmony_ci    if (!(MmsGtest::HasSimCard(slotId))) {
452e5d0e473Sopenharmony_ci        TELEPHONY_LOGI("TelephonyTestService has no sim card");
453e5d0e473Sopenharmony_ci        ASSERT_FALSE(MmsGtest::HasSimCard(slotId));
454e5d0e473Sopenharmony_ci        return;
455e5d0e473Sopenharmony_ci    }
456e5d0e473Sopenharmony_ci    SmsMmsTestHelper helper;
457e5d0e473Sopenharmony_ci    helper.slotId = slotId;
458e5d0e473Sopenharmony_ci
459e5d0e473Sopenharmony_ci    EventFwk::MatchingSkills matchingSkills;
460e5d0e473Sopenharmony_ci    matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_SMS_WAPPUSH_RECEIVE_COMPLETED);
461e5d0e473Sopenharmony_ci    EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills);
462e5d0e473Sopenharmony_ci    std::shared_ptr<SmsBroadcastSubscriberGtest> subscriberTest =
463e5d0e473Sopenharmony_ci        std::make_shared<SmsBroadcastSubscriberGtest>(subscriberInfo, helper);
464e5d0e473Sopenharmony_ci    ASSERT_NE(subscriberTest, nullptr);
465e5d0e473Sopenharmony_ci    bool subscribeResult = EventFwk::CommonEventManager::SubscribeCommonEvent(subscriberTest);
466e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("subscribeResult is : %{public}d", subscribeResult);
467e5d0e473Sopenharmony_ci
468e5d0e473Sopenharmony_ci    if (!helper.Run(ReceiveWapPushTestFunc, helper)) {
469e5d0e473Sopenharmony_ci        TELEPHONY_LOGI("ReceiveWapPushTestFunc out of time");
470e5d0e473Sopenharmony_ci        ASSERT_FALSE(helper.Run(ReceiveWapPushTestFunc, helper));
471e5d0e473Sopenharmony_ci        return;
472e5d0e473Sopenharmony_ci    }
473e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::Receive_Wap_Push_0002 -->finished");
474e5d0e473Sopenharmony_ci    EXPECT_TRUE(helper.GetBoolResult());
475e5d0e473Sopenharmony_ci}
476e5d0e473Sopenharmony_ci
477e5d0e473Sopenharmony_ci/**
478e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsMmsGtest_MmsAddress_0001
479e5d0e473Sopenharmony_ci * @tc.name     Test MmsAddress
480e5d0e473Sopenharmony_ci * @tc.desc     Function test
481e5d0e473Sopenharmony_ci */
482e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, MmsAddress_0001, Function | MediumTest | Level1)
483e5d0e473Sopenharmony_ci{
484e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::MmsAddress_0001 -->");
485e5d0e473Sopenharmony_ci    MmsAddress address;
486e5d0e473Sopenharmony_ci    address.SetMmsAddressString("12345678/TYPE=PLMN");
487e5d0e473Sopenharmony_ci    address.SetMmsAddressString("12345678/TYPE=IPv4");
488e5d0e473Sopenharmony_ci    address.SetMmsAddressString("12345678/TYPE=IPv6");
489e5d0e473Sopenharmony_ci    address.SetMmsAddressString("12345678/TYPE=UNKNOWN");
490e5d0e473Sopenharmony_ci    address.SetMmsAddressString("12345678/TYPE=EMAIL");
491e5d0e473Sopenharmony_ci    std::string ret = address.GetAddressString();
492e5d0e473Sopenharmony_ci    EXPECT_STREQ(ret.c_str(), "12345678/TYPE=EMAIL");
493e5d0e473Sopenharmony_ci    MmsAddress::MmsAddressType type = address.GetAddressType();
494e5d0e473Sopenharmony_ci    EXPECT_EQ(type, MmsAddress::MmsAddressType::ADDRESS_TYPE_PLMN);
495e5d0e473Sopenharmony_ci    MmsCharSets charset = address.GetAddressCharset();
496e5d0e473Sopenharmony_ci    EXPECT_EQ(charset, MmsCharSets::UTF_8);
497e5d0e473Sopenharmony_ci}
498e5d0e473Sopenharmony_ci
499e5d0e473Sopenharmony_ci/**
500e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsMmsGtest_MmsAttachment_0001
501e5d0e473Sopenharmony_ci * @tc.name     Test MmsAttachment
502e5d0e473Sopenharmony_ci * @tc.desc     Function test
503e5d0e473Sopenharmony_ci */
504e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, MmsAttachment_0001, Function | MediumTest | Level1)
505e5d0e473Sopenharmony_ci{
506e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::MmsAttachment_0001 -->");
507e5d0e473Sopenharmony_ci    const std::string pathName = "/data/app/enSrc/618C0A89.smil";
508e5d0e473Sopenharmony_ci    std::size_t pos = pathName.find_last_of('/');
509e5d0e473Sopenharmony_ci    std::string fileName(pathName.substr(pos + 1));
510e5d0e473Sopenharmony_ci    MmsAttachment attachment;
511e5d0e473Sopenharmony_ci    bool retBool;
512e5d0e473Sopenharmony_ci    std::string retStr;
513e5d0e473Sopenharmony_ci    retBool = attachment.SetAttachmentFilePath("", false);
514e5d0e473Sopenharmony_ci    EXPECT_EQ(false, retBool);
515e5d0e473Sopenharmony_ci    retBool = attachment.SetAttachmentFilePath(pathName, true);
516e5d0e473Sopenharmony_ci    EXPECT_EQ(true, retBool);
517e5d0e473Sopenharmony_ci    retStr = attachment.GetAttachmentFilePath();
518e5d0e473Sopenharmony_ci    EXPECT_STREQ(retStr.c_str(), pathName.c_str());
519e5d0e473Sopenharmony_ci    retBool = attachment.SetContentId("");
520e5d0e473Sopenharmony_ci    EXPECT_EQ(false, retBool);
521e5d0e473Sopenharmony_ci    retBool = attachment.SetContentId("0000");
522e5d0e473Sopenharmony_ci    EXPECT_EQ(true, retBool);
523e5d0e473Sopenharmony_ci    retBool = attachment.SetContentId("<0000>");
524e5d0e473Sopenharmony_ci    EXPECT_EQ(true, retBool);
525e5d0e473Sopenharmony_ci    retStr = attachment.GetContentId();
526e5d0e473Sopenharmony_ci    EXPECT_STREQ(retStr.c_str(), "<0000>");
527e5d0e473Sopenharmony_ci    retBool = attachment.SetContentLocation("");
528e5d0e473Sopenharmony_ci    EXPECT_EQ(false, retBool);
529e5d0e473Sopenharmony_ci    retBool = attachment.SetContentLocation("SetContentLocation");
530e5d0e473Sopenharmony_ci    EXPECT_EQ(true, retBool);
531e5d0e473Sopenharmony_ci    retStr = attachment.GetContentLocation();
532e5d0e473Sopenharmony_ci    EXPECT_STREQ(retStr.c_str(), "SetContentLocation");
533e5d0e473Sopenharmony_ci    retBool = attachment.SetContentDisposition("");
534e5d0e473Sopenharmony_ci    EXPECT_EQ(false, retBool);
535e5d0e473Sopenharmony_ci    retBool = attachment.SetContentDisposition("attachment");
536e5d0e473Sopenharmony_ci    EXPECT_EQ(true, retBool);
537e5d0e473Sopenharmony_ci    retStr = attachment.GetContentDisposition();
538e5d0e473Sopenharmony_ci    EXPECT_STREQ(retStr.c_str(), "attachment");
539e5d0e473Sopenharmony_ci    retBool = attachment.SetContentTransferEncoding("");
540e5d0e473Sopenharmony_ci    EXPECT_EQ(false, retBool);
541e5d0e473Sopenharmony_ci    retBool = attachment.SetFileName(fileName);
542e5d0e473Sopenharmony_ci    EXPECT_EQ(true, retBool);
543e5d0e473Sopenharmony_ci    retStr = attachment.GetFileName();
544e5d0e473Sopenharmony_ci    EXPECT_STREQ(retStr.c_str(), fileName.c_str());
545e5d0e473Sopenharmony_ci    attachment.strFileName_ = "";
546e5d0e473Sopenharmony_ci    retStr = attachment.GetFileName();
547e5d0e473Sopenharmony_ci    EXPECT_STRNE(retStr.c_str(), fileName.c_str());
548e5d0e473Sopenharmony_ci}
549e5d0e473Sopenharmony_ci
550e5d0e473Sopenharmony_ci/**
551e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsMmsGtest_MmsAttachment_0002
552e5d0e473Sopenharmony_ci * @tc.name     Test MmsAttachment
553e5d0e473Sopenharmony_ci * @tc.desc     Function test
554e5d0e473Sopenharmony_ci */
555e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, MmsAttachment_0002, Function | MediumTest | Level1)
556e5d0e473Sopenharmony_ci{
557e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::MmsAttachment_0002 -->");
558e5d0e473Sopenharmony_ci    MmsAttachment attachment;
559e5d0e473Sopenharmony_ci    bool retBool;
560e5d0e473Sopenharmony_ci    std::string retStr;
561e5d0e473Sopenharmony_ci    uint32_t retU32t;
562e5d0e473Sopenharmony_ci    uint32_t len = 10 * 1024 * 1024;
563e5d0e473Sopenharmony_ci    uint32_t charset = 0;
564e5d0e473Sopenharmony_ci    retBool = attachment.SetContentTransferEncoding("SetContentTransferEncoding");
565e5d0e473Sopenharmony_ci    EXPECT_EQ(true, retBool);
566e5d0e473Sopenharmony_ci    retStr = attachment.GetContentTransferEncoding();
567e5d0e473Sopenharmony_ci    EXPECT_STREQ(retStr.c_str(), "SetContentTransferEncoding");
568e5d0e473Sopenharmony_ci    retBool = attachment.SetContentType("");
569e5d0e473Sopenharmony_ci    EXPECT_EQ(false, retBool);
570e5d0e473Sopenharmony_ci    attachment.SetIsSmilFile(true);
571e5d0e473Sopenharmony_ci    retBool = attachment.IsSmilFile();
572e5d0e473Sopenharmony_ci    EXPECT_EQ(true, retBool);
573e5d0e473Sopenharmony_ci    attachment.SetCharSet(charset);
574e5d0e473Sopenharmony_ci    retU32t = attachment.GetCharSet();
575e5d0e473Sopenharmony_ci    EXPECT_EQ(charset, retU32t);
576e5d0e473Sopenharmony_ci    retBool = attachment.SetDataBuffer(nullptr, 0);
577e5d0e473Sopenharmony_ci    retBool = attachment.SetDataBuffer(nullptr, MAX_MMS_ATTACHMENT_LEN + 1);
578e5d0e473Sopenharmony_ci    EXPECT_EQ(false, retBool);
579e5d0e473Sopenharmony_ci    retBool = attachment.SetDataBuffer(std::make_unique<char[]>(len + 1), len + 1);
580e5d0e473Sopenharmony_ci    EXPECT_EQ(false, retBool);
581e5d0e473Sopenharmony_ci    retBool = attachment.SetDataBuffer(std::make_unique<char[]>(len - 1), len - 1);
582e5d0e473Sopenharmony_ci    EXPECT_EQ(true, retBool);
583e5d0e473Sopenharmony_ci    retBool = attachment.SetDataBuffer(std::make_unique<char[]>(len - 1), len + 1);
584e5d0e473Sopenharmony_ci    EXPECT_EQ(false, retBool);
585e5d0e473Sopenharmony_ci    EXPECT_FALSE(attachment.GetDataBuffer(len) == nullptr);
586e5d0e473Sopenharmony_ci    attachment.dataLength_ = MAX_MMS_ATTACHMENT_LEN + 1;
587e5d0e473Sopenharmony_ci    EXPECT_TRUE(attachment.GetDataBuffer(len) == nullptr);
588e5d0e473Sopenharmony_ci    MmsAttachment attachment1(attachment);
589e5d0e473Sopenharmony_ci    attachment1.SetContentType("application/smil");
590e5d0e473Sopenharmony_ci    retStr = attachment1.GetContentType();
591e5d0e473Sopenharmony_ci    EXPECT_STREQ(retStr.c_str(), "application/smil");
592e5d0e473Sopenharmony_ci}
593e5d0e473Sopenharmony_ci
594e5d0e473Sopenharmony_ci/**
595e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsMmsGtest_MmsBodyPartHeader_0001
596e5d0e473Sopenharmony_ci * @tc.name     Test MmsBodyPartHeader
597e5d0e473Sopenharmony_ci * @tc.desc     Function test
598e5d0e473Sopenharmony_ci */
599e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, MmsBodyPartHeader_0001, Function | MediumTest | Level1)
600e5d0e473Sopenharmony_ci{
601e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::MmsBodyPartHeader_0001 -->");
602e5d0e473Sopenharmony_ci    MmsBodyPartHeader mmsBodyPartHeader;
603e5d0e473Sopenharmony_ci    MmsDecodeBuffer decodeBuffer;
604e5d0e473Sopenharmony_ci    std::string testStr;
605e5d0e473Sopenharmony_ci    uint32_t len = 0;
606e5d0e473Sopenharmony_ci    uint32_t lenErr = -1;
607e5d0e473Sopenharmony_ci    uint32_t lenMax = 300 * 1024;
608e5d0e473Sopenharmony_ci    mmsBodyPartHeader.DumpBodyPartHeader();
609e5d0e473Sopenharmony_ci    mmsBodyPartHeader.DecodeContentLocation(decodeBuffer, len);
610e5d0e473Sopenharmony_ci    mmsBodyPartHeader.DecodeContentId(decodeBuffer, len);
611e5d0e473Sopenharmony_ci    mmsBodyPartHeader.DecodeContentDisposition(decodeBuffer, len);
612e5d0e473Sopenharmony_ci    mmsBodyPartHeader.DecodeDispositionParameter(decodeBuffer, lenMax, len);
613e5d0e473Sopenharmony_ci    mmsBodyPartHeader.DecodeDispositionParameter(decodeBuffer, lenErr, len);
614e5d0e473Sopenharmony_ci    mmsBodyPartHeader.DecodeWellKnownHeader(decodeBuffer, len);
615e5d0e473Sopenharmony_ci    mmsBodyPartHeader.DecodeApplicationHeader(decodeBuffer, len);
616e5d0e473Sopenharmony_ci    mmsBodyPartHeader.SetContentId("contentId");
617e5d0e473Sopenharmony_ci    mmsBodyPartHeader.GetContentId(testStr);
618e5d0e473Sopenharmony_ci    EXPECT_STREQ(testStr.c_str(), "contentId");
619e5d0e473Sopenharmony_ci    mmsBodyPartHeader.SetContentTransferEncoding("contentTransferEncoding");
620e5d0e473Sopenharmony_ci    mmsBodyPartHeader.GetContentTransferEncoding(testStr);
621e5d0e473Sopenharmony_ci    EXPECT_STREQ(testStr.c_str(), "contentTransferEncoding");
622e5d0e473Sopenharmony_ci    mmsBodyPartHeader.SetContentLocation("contentLocation");
623e5d0e473Sopenharmony_ci    mmsBodyPartHeader.GetContentLocation(testStr);
624e5d0e473Sopenharmony_ci    EXPECT_STREQ(testStr.c_str(), "contentLocation");
625e5d0e473Sopenharmony_ci    MmsEncodeBuffer encodeBuffer;
626e5d0e473Sopenharmony_ci    mmsBodyPartHeader.EncodeContentLocation(encodeBuffer);
627e5d0e473Sopenharmony_ci    mmsBodyPartHeader.EncodeContentId(encodeBuffer);
628e5d0e473Sopenharmony_ci    mmsBodyPartHeader.EncodeContentDisposition(encodeBuffer);
629e5d0e473Sopenharmony_ci    mmsBodyPartHeader.EncodeContentTransferEncoding(encodeBuffer);
630e5d0e473Sopenharmony_ci    mmsBodyPartHeader.EncodeMmsBodyPartHeader(encodeBuffer);
631e5d0e473Sopenharmony_ci    MmsBodyPartHeader mmsBodyPartHeader2;
632e5d0e473Sopenharmony_ci    MmsBodyPartHeader mmsBodyPartHeader3 = MmsBodyPartHeader(mmsBodyPartHeader);
633e5d0e473Sopenharmony_ci    mmsBodyPartHeader2 = mmsBodyPartHeader;
634e5d0e473Sopenharmony_ci    mmsBodyPartHeader2.SetContentDisposition("contentDisposition");
635e5d0e473Sopenharmony_ci    mmsBodyPartHeader2.GetContentDisposition(testStr);
636e5d0e473Sopenharmony_ci    EXPECT_STREQ(testStr.c_str(), "contentDisposition");
637e5d0e473Sopenharmony_ci}
638e5d0e473Sopenharmony_ci
639e5d0e473Sopenharmony_ci/**
640e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsMmsGtest_MmsBuffer_0001
641e5d0e473Sopenharmony_ci * @tc.name     Test MmsBuffer
642e5d0e473Sopenharmony_ci * @tc.desc     Function test
643e5d0e473Sopenharmony_ci */
644e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, MmsBuffer_0001, Function | MediumTest | Level1)
645e5d0e473Sopenharmony_ci{
646e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::MmsBuffer_0001 -->");
647e5d0e473Sopenharmony_ci    MmsBuffer mmsBuffer;
648e5d0e473Sopenharmony_ci    uint32_t len = 10;
649e5d0e473Sopenharmony_ci    bool retBool;
650e5d0e473Sopenharmony_ci    std::string strPathName = "/data/app/enSrc/618C0A89.smil";
651e5d0e473Sopenharmony_ci    mmsBuffer.ReadDataBuffer(len);
652e5d0e473Sopenharmony_ci    mmsBuffer.ReadDataBuffer(len, len);
653e5d0e473Sopenharmony_ci    retBool = mmsBuffer.WriteDataBuffer(std::make_unique<char[]>(len), 0);
654e5d0e473Sopenharmony_ci    EXPECT_EQ(false, retBool);
655e5d0e473Sopenharmony_ci    retBool = mmsBuffer.WriteDataBuffer(std::make_unique<char[]>(len), len);
656e5d0e473Sopenharmony_ci    EXPECT_EQ(true, retBool);
657e5d0e473Sopenharmony_ci    mmsBuffer.WriteBufferFromFile(strPathName);
658e5d0e473Sopenharmony_ci    mmsBuffer.GetCurPosition();
659e5d0e473Sopenharmony_ci    uint32_t ret = mmsBuffer.GetSize();
660e5d0e473Sopenharmony_ci    EXPECT_GE(ret, 0);
661e5d0e473Sopenharmony_ci}
662e5d0e473Sopenharmony_ci
663e5d0e473Sopenharmony_ci/**
664e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsMmsGtest_MmsContentParam_0001
665e5d0e473Sopenharmony_ci * @tc.name     Test MmsContentParam
666e5d0e473Sopenharmony_ci * @tc.desc     Function test
667e5d0e473Sopenharmony_ci */
668e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, MmsContentParam_0001, Function | MediumTest | Level1)
669e5d0e473Sopenharmony_ci{
670e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::MmsContentParam_0001 -->");
671e5d0e473Sopenharmony_ci    MmsContentParam mmsContentParam;
672e5d0e473Sopenharmony_ci    MmsContentParam mmsContentParam2;
673e5d0e473Sopenharmony_ci    uint8_t field = 1;
674e5d0e473Sopenharmony_ci    uint32_t charset = 10;
675e5d0e473Sopenharmony_ci    std::string testStr;
676e5d0e473Sopenharmony_ci    uint32_t retU32t;
677e5d0e473Sopenharmony_ci    mmsContentParam.DumpContentParam();
678e5d0e473Sopenharmony_ci    mmsContentParam.SetCharSet(charset);
679e5d0e473Sopenharmony_ci    retU32t = mmsContentParam.GetCharSet();
680e5d0e473Sopenharmony_ci    EXPECT_EQ(charset, retU32t);
681e5d0e473Sopenharmony_ci    mmsContentParam.SetType("type");
682e5d0e473Sopenharmony_ci    testStr = mmsContentParam.GetType();
683e5d0e473Sopenharmony_ci    EXPECT_STREQ(testStr.c_str(), "type");
684e5d0e473Sopenharmony_ci    mmsContentParam.SetFileName("");
685e5d0e473Sopenharmony_ci    mmsContentParam.SetStart("");
686e5d0e473Sopenharmony_ci    mmsContentParam.SetStart("start");
687e5d0e473Sopenharmony_ci    mmsContentParam.GetStart(testStr);
688e5d0e473Sopenharmony_ci    EXPECT_STREQ(testStr.c_str(), "start");
689e5d0e473Sopenharmony_ci    mmsContentParam.AddNormalField(field, "value");
690e5d0e473Sopenharmony_ci    mmsContentParam.GetNormalField(field, testStr);
691e5d0e473Sopenharmony_ci    EXPECT_STREQ(testStr.c_str(), "value");
692e5d0e473Sopenharmony_ci    mmsContentParam.GetParamMap();
693e5d0e473Sopenharmony_ci    mmsContentParam2 = mmsContentParam;
694e5d0e473Sopenharmony_ci    mmsContentParam2.SetFileName("fileName");
695e5d0e473Sopenharmony_ci    mmsContentParam2.GetFileName(testStr);
696e5d0e473Sopenharmony_ci    EXPECT_STREQ(testStr.c_str(), "fileName");
697e5d0e473Sopenharmony_ci
698e5d0e473Sopenharmony_ci    mmsContentParam.textMap_.clear();
699e5d0e473Sopenharmony_ci    mmsContentParam.AddNormalField(field, "value");
700e5d0e473Sopenharmony_ci    mmsContentParam.textMap_.clear();
701e5d0e473Sopenharmony_ci    mmsContentParam.GetNormalField(field, testStr);
702e5d0e473Sopenharmony_ci    mmsContentParam.GetStart(testStr);
703e5d0e473Sopenharmony_ci    mmsContentParam2.GetFileName(testStr);
704e5d0e473Sopenharmony_ci    mmsContentParam.DumpContentParam();
705e5d0e473Sopenharmony_ci    EXPECT_STREQ(testStr.c_str(), "fileName");
706e5d0e473Sopenharmony_ci}
707e5d0e473Sopenharmony_ci
708e5d0e473Sopenharmony_ci/**
709e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsMmsGtest_MmsContentType_0001
710e5d0e473Sopenharmony_ci * @tc.name     Test MmsContentType
711e5d0e473Sopenharmony_ci * @tc.desc     Function test
712e5d0e473Sopenharmony_ci */
713e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, MmsContentType_0001, Function | MediumTest | Level1)
714e5d0e473Sopenharmony_ci{
715e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::MmsContentType_0001 -->");
716e5d0e473Sopenharmony_ci    MmsContentType mmsContentType;
717e5d0e473Sopenharmony_ci    MmsDecodeBuffer decodeBuffer;
718e5d0e473Sopenharmony_ci    MmsContentParam contentParam;
719e5d0e473Sopenharmony_ci    int32_t len = 10;
720e5d0e473Sopenharmony_ci    uint8_t type = 10;
721e5d0e473Sopenharmony_ci    std::string testStr;
722e5d0e473Sopenharmony_ci    uint8_t count = 10;
723e5d0e473Sopenharmony_ci    uint8_t index = 0;
724e5d0e473Sopenharmony_ci    while (index < count) {
725e5d0e473Sopenharmony_ci        decodeBuffer.pduBuffer_[index] = '1';
726e5d0e473Sopenharmony_ci        index++;
727e5d0e473Sopenharmony_ci    }
728e5d0e473Sopenharmony_ci    mmsContentType.DumpMmsContentType();
729e5d0e473Sopenharmony_ci
730e5d0e473Sopenharmony_ci    decodeBuffer.curPosition_ = 0;
731e5d0e473Sopenharmony_ci    decodeBuffer.pduBuffer_[decodeBuffer.curPosition_++] = PDU_TEST_DATA;
732e5d0e473Sopenharmony_ci    decodeBuffer.pduBuffer_[decodeBuffer.curPosition_++] = PDU_TEST_DATA;
733e5d0e473Sopenharmony_ci    decodeBuffer.pduBuffer_[decodeBuffer.curPosition_] = PDU_TEST_DATA;
734e5d0e473Sopenharmony_ci    mmsContentType.DecodeMmsContentType(decodeBuffer, len);
735e5d0e473Sopenharmony_ci
736e5d0e473Sopenharmony_ci    decodeBuffer.curPosition_ = 0;
737e5d0e473Sopenharmony_ci    mmsContentType.DecodeMmsCTGeneralForm(decodeBuffer, len);
738e5d0e473Sopenharmony_ci    mmsContentType.GetContentTypeFromInt(type);
739e5d0e473Sopenharmony_ci    mmsContentType.GetContentTypeFromString("");
740e5d0e473Sopenharmony_ci
741e5d0e473Sopenharmony_ci    decodeBuffer.curPosition_ = 0;
742e5d0e473Sopenharmony_ci    mmsContentType.DecodeParameter(decodeBuffer, len);
743e5d0e473Sopenharmony_ci    mmsContentType.SetContentParam(contentParam);
744e5d0e473Sopenharmony_ci    mmsContentType.DecodeTextField(decodeBuffer, type, len);
745e5d0e473Sopenharmony_ci
746e5d0e473Sopenharmony_ci    decodeBuffer.curPosition_ = 0;
747e5d0e473Sopenharmony_ci    mmsContentType.DecodeCharsetField(decodeBuffer, len);
748e5d0e473Sopenharmony_ci    mmsContentType.DecodeTypeField(decodeBuffer, len);
749e5d0e473Sopenharmony_ci
750e5d0e473Sopenharmony_ci    MmsEncodeBuffer encodeBuffer;
751e5d0e473Sopenharmony_ci    mmsContentType.EncodeTextField(encodeBuffer);
752e5d0e473Sopenharmony_ci    mmsContentType.EncodeCharsetField(encodeBuffer);
753e5d0e473Sopenharmony_ci    mmsContentType.EncodeTypeField(encodeBuffer);
754e5d0e473Sopenharmony_ci    mmsContentType.EncodeMmsBodyPartContentParam(encodeBuffer);
755e5d0e473Sopenharmony_ci    mmsContentType.EncodeMmsBodyPartContentType(encodeBuffer);
756e5d0e473Sopenharmony_ci    mmsContentType.GetContentParam();
757e5d0e473Sopenharmony_ci    MmsContentType mmsContentType2(mmsContentType);
758e5d0e473Sopenharmony_ci    mmsContentType2 = mmsContentType;
759e5d0e473Sopenharmony_ci    mmsContentType2.SetContentType("contentType");
760e5d0e473Sopenharmony_ci    mmsContentType2.GetContentType(testStr);
761e5d0e473Sopenharmony_ci    EXPECT_STREQ(testStr.c_str(), "contentType");
762e5d0e473Sopenharmony_ci}
763e5d0e473Sopenharmony_ci
764e5d0e473Sopenharmony_ci/**
765e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsMmsGtest_MmsDecodeBuffer_0001
766e5d0e473Sopenharmony_ci * @tc.name     Test MmsDecodeBuffer
767e5d0e473Sopenharmony_ci * @tc.desc     Function test
768e5d0e473Sopenharmony_ci */
769e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, MmsDecodeBuffer_0001, Function | MediumTest | Level1)
770e5d0e473Sopenharmony_ci{
771e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::MmsDecodeBuffer_0001 -->");
772e5d0e473Sopenharmony_ci    uint8_t byteVar = 1;
773e5d0e473Sopenharmony_ci    uint32_t intVar = PDU_COUNT;
774e5d0e473Sopenharmony_ci    std::string testStr;
775e5d0e473Sopenharmony_ci    MmsDecodeBuffer mmsDecodeBuffer;
776e5d0e473Sopenharmony_ci    uint8_t count = PDU_COUNT;
777e5d0e473Sopenharmony_ci    uint8_t index = 0;
778e5d0e473Sopenharmony_ci    while (index < count) {
779e5d0e473Sopenharmony_ci        mmsDecodeBuffer.pduBuffer_[index] = '1';
780e5d0e473Sopenharmony_ci        index++;
781e5d0e473Sopenharmony_ci    }
782e5d0e473Sopenharmony_ci
783e5d0e473Sopenharmony_ci    mmsDecodeBuffer.PeekOneByte(byteVar);
784e5d0e473Sopenharmony_ci    mmsDecodeBuffer.GetOneByte(byteVar);
785e5d0e473Sopenharmony_ci    mmsDecodeBuffer.IncreasePointer(intVar);
786e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecreasePointer(intVar);
787e5d0e473Sopenharmony_ci    mmsDecodeBuffer.curPosition_ = PDU_CUSITION;
788e5d0e473Sopenharmony_ci    mmsDecodeBuffer.totolLength_ = PDU_LENGTH;
789e5d0e473Sopenharmony_ci    mmsDecodeBuffer.PeekOneByte(byteVar);
790e5d0e473Sopenharmony_ci    mmsDecodeBuffer.GetOneByte(byteVar);
791e5d0e473Sopenharmony_ci    mmsDecodeBuffer.IncreasePointer(intVar);
792e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecreasePointer(intVar);
793e5d0e473Sopenharmony_ci
794e5d0e473Sopenharmony_ci    mmsDecodeBuffer.curPosition_ = 0;
795e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeUintvar(intVar, intVar);
796e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeShortLength(byteVar);
797e5d0e473Sopenharmony_ci
798e5d0e473Sopenharmony_ci    char testChar = MIN_SHORT_OCTET + 1;
799e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = testChar;
800e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeShortLength(byteVar);
801e5d0e473Sopenharmony_ci    mmsDecodeBuffer.curPosition_ = 0;
802e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = MIN_SHORT_OCTET;
803e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeValueLengthReturnLen(intVar, intVar);
804e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = testChar;
805e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeValueLengthReturnLen(intVar, intVar);
806e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = testChar + 1;
807e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeValueLengthReturnLen(intVar, intVar);
808e5d0e473Sopenharmony_ci
809e5d0e473Sopenharmony_ci    uint8_t errVar = -1;
810e5d0e473Sopenharmony_ci    bool ret = mmsDecodeBuffer.CharIsToken(errVar);
811e5d0e473Sopenharmony_ci    EXPECT_EQ(false, ret);
812e5d0e473Sopenharmony_ci}
813e5d0e473Sopenharmony_ci
814e5d0e473Sopenharmony_ci/**
815e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsMmsGtest_MmsDecodeBuffer_0002
816e5d0e473Sopenharmony_ci * @tc.name     Test MmsDecodeBuffer
817e5d0e473Sopenharmony_ci * @tc.desc     Function test
818e5d0e473Sopenharmony_ci */
819e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, MmsDecodeBuffer_0002, Function | MediumTest | Level1)
820e5d0e473Sopenharmony_ci{
821e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::MmsDecodeBuffer_0002 -->");
822e5d0e473Sopenharmony_ci    uint32_t intVar = 10;
823e5d0e473Sopenharmony_ci    std::string testStr;
824e5d0e473Sopenharmony_ci    MmsDecodeBuffer mmsDecodeBuffer;
825e5d0e473Sopenharmony_ci    uint8_t count = 10;
826e5d0e473Sopenharmony_ci    uint8_t index = 0;
827e5d0e473Sopenharmony_ci    while (index < count) {
828e5d0e473Sopenharmony_ci        mmsDecodeBuffer.pduBuffer_[index] = '1';
829e5d0e473Sopenharmony_ci        index++;
830e5d0e473Sopenharmony_ci    }
831e5d0e473Sopenharmony_ci    mmsDecodeBuffer.curPosition_ = 0;
832e5d0e473Sopenharmony_ci    char testChar = MIN_SHORT_OCTET + 1;
833e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = MIN_SHORT_OCTET;
834e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeValueLength(intVar);
835e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = testChar;
836e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeValueLength(intVar);
837e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = testChar + 1;
838e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeValueLength(intVar);
839e5d0e473Sopenharmony_ci
840e5d0e473Sopenharmony_ci    mmsDecodeBuffer.curPosition_ = 0;
841e5d0e473Sopenharmony_ci    testChar += 1;
842e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = testChar;
843e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeTokenText(testStr, intVar);
844e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = testChar + 1;
845e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeTokenText(testStr, intVar);
846e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = QUOTE_CHAR_LEN;
847e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeTokenText(testStr, intVar);
848e5d0e473Sopenharmony_ci
849e5d0e473Sopenharmony_ci    mmsDecodeBuffer.curPosition_ = 0;
850e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = QUOTE_CHAR_LEN - 1;
851e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeText(testStr, intVar);
852e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = QUOTE_CHAR_LEN;
853e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeText(testStr, intVar);
854e5d0e473Sopenharmony_ci
855e5d0e473Sopenharmony_ci    mmsDecodeBuffer.curPosition_ = 0;
856e5d0e473Sopenharmony_ci    testChar += 1;
857e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = testChar;
858e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeQuotedText(testStr, intVar);
859e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = testChar + 1;
860e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeQuotedText(testStr, intVar);
861e5d0e473Sopenharmony_ci
862e5d0e473Sopenharmony_ci    uint8_t errVar = -1;
863e5d0e473Sopenharmony_ci    bool ret = mmsDecodeBuffer.CharIsToken(errVar);
864e5d0e473Sopenharmony_ci    EXPECT_EQ(false, ret);
865e5d0e473Sopenharmony_ci}
866e5d0e473Sopenharmony_ci
867e5d0e473Sopenharmony_ci/**
868e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsMmsGtest_MmsDecodeBuffer_0003
869e5d0e473Sopenharmony_ci * @tc.name     Test MmsDecodeBuffer
870e5d0e473Sopenharmony_ci * @tc.desc     Function test
871e5d0e473Sopenharmony_ci */
872e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, MmsDecodeBuffer_0003, Function | MediumTest | Level1)
873e5d0e473Sopenharmony_ci{
874e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::MmsDecodeBuffer_0003 -->");
875e5d0e473Sopenharmony_ci    uint8_t byteVar = 1;
876e5d0e473Sopenharmony_ci    uint64_t longVar = 10;
877e5d0e473Sopenharmony_ci    std::string testStr;
878e5d0e473Sopenharmony_ci    MmsDecodeBuffer mmsDecodeBuffer;
879e5d0e473Sopenharmony_ci    uint8_t count = 10;
880e5d0e473Sopenharmony_ci    uint8_t index = 0;
881e5d0e473Sopenharmony_ci    while (index < count) {
882e5d0e473Sopenharmony_ci        mmsDecodeBuffer.pduBuffer_[index] = '1';
883e5d0e473Sopenharmony_ci        index++;
884e5d0e473Sopenharmony_ci    }
885e5d0e473Sopenharmony_ci
886e5d0e473Sopenharmony_ci    mmsDecodeBuffer.curPosition_ = 0;
887e5d0e473Sopenharmony_ci    char testChar = QUOTE_CHAR_LEN + 1;
888e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = testChar;
889e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeShortInteger(byteVar);
890e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = testChar + 1;
891e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeShortInteger(byteVar);
892e5d0e473Sopenharmony_ci
893e5d0e473Sopenharmony_ci    mmsDecodeBuffer.curPosition_ = 0;
894e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = VALUE_CHAR;
895e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeLongInteger(longVar);
896e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = VALUE_CHAR + 1;
897e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeLongInteger(longVar);
898e5d0e473Sopenharmony_ci
899e5d0e473Sopenharmony_ci    mmsDecodeBuffer.curPosition_ = 0;
900e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeInteger(longVar);
901e5d0e473Sopenharmony_ci    mmsDecodeBuffer.curPosition_ = 0;
902e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = testChar;
903e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeIsShortInt();
904e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = testChar + 1;
905e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeIsShortInt();
906e5d0e473Sopenharmony_ci
907e5d0e473Sopenharmony_ci    mmsDecodeBuffer.curPosition_ = 0;
908e5d0e473Sopenharmony_ci    char srcChar = MIN_SHORT_OCTET + 1;
909e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = srcChar;
910e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeIsString();
911e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = srcChar + 1;
912e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeIsString();
913e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = testChar + 1;
914e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeIsString();
915e5d0e473Sopenharmony_ci
916e5d0e473Sopenharmony_ci    mmsDecodeBuffer.curPosition_ = 0;
917e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = srcChar;
918e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeIsValueLength();
919e5d0e473Sopenharmony_ci    mmsDecodeBuffer.pduBuffer_[mmsDecodeBuffer.curPosition_] = srcChar + 1;
920e5d0e473Sopenharmony_ci    mmsDecodeBuffer.DecodeIsValueLength();
921e5d0e473Sopenharmony_ci
922e5d0e473Sopenharmony_ci    mmsDecodeBuffer.MarkPosition();
923e5d0e473Sopenharmony_ci    mmsDecodeBuffer.UnMarkPosition();
924e5d0e473Sopenharmony_ci    uint8_t errVar = -1;
925e5d0e473Sopenharmony_ci    bool ret = mmsDecodeBuffer.CharIsToken(errVar);
926e5d0e473Sopenharmony_ci    EXPECT_EQ(false, ret);
927e5d0e473Sopenharmony_ci}
928e5d0e473Sopenharmony_ci
929e5d0e473Sopenharmony_ci/**
930e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsMmsGtest_MmsEncodeString_0001
931e5d0e473Sopenharmony_ci * @tc.name     Test MmsEncodeString
932e5d0e473Sopenharmony_ci * @tc.desc     Function test
933e5d0e473Sopenharmony_ci */
934e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, MmsEncodeString_0001, Function | MediumTest | Level1)
935e5d0e473Sopenharmony_ci{
936e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::MmsEncodeString_0001 -->");
937e5d0e473Sopenharmony_ci    MmsEncodeString mmsEncodeString;
938e5d0e473Sopenharmony_ci    MmsDecodeBuffer decodeBuffer;
939e5d0e473Sopenharmony_ci    MmsEncodeBuffer encodeBuffer;
940e5d0e473Sopenharmony_ci    std::string testStr;
941e5d0e473Sopenharmony_ci    uint32_t charset = PDU_COUNT;
942e5d0e473Sopenharmony_ci    MmsAddress addrsss;
943e5d0e473Sopenharmony_ci    uint32_t len = PDU_COUNT;
944e5d0e473Sopenharmony_ci    std::unique_ptr<char[]> inBuff = std::make_unique<char[]>(len);
945e5d0e473Sopenharmony_ci    for (uint32_t i = 0; i < len; i++) {
946e5d0e473Sopenharmony_ci        inBuff[i] = 1;
947e5d0e473Sopenharmony_ci    }
948e5d0e473Sopenharmony_ci    decodeBuffer.WriteDataBuffer(std::move(inBuff), len);
949e5d0e473Sopenharmony_ci    mmsEncodeString.DecodeEncodeString(decodeBuffer);
950e5d0e473Sopenharmony_ci    decodeBuffer.curPosition_ = MAX_MMS_ATTACHMENT_LEN + 1;
951e5d0e473Sopenharmony_ci    mmsEncodeString.DecodeEncodeString(decodeBuffer);
952e5d0e473Sopenharmony_ci    mmsEncodeString.charset_ = ENCODE_CHARSET1;
953e5d0e473Sopenharmony_ci    mmsEncodeString.EncodeEncodeString(encodeBuffer);
954e5d0e473Sopenharmony_ci    mmsEncodeString.charset_ = ENCODE_CHARSET2;
955e5d0e473Sopenharmony_ci    mmsEncodeString.EncodeEncodeString(encodeBuffer);
956e5d0e473Sopenharmony_ci    mmsEncodeString.GetEncodeString(testStr);
957e5d0e473Sopenharmony_ci    EXPECT_GE(testStr.size(), 0);
958e5d0e473Sopenharmony_ci    mmsEncodeString.SetAddressString(addrsss);
959e5d0e473Sopenharmony_ci    mmsEncodeString.GetStrEncodeString();
960e5d0e473Sopenharmony_ci    MmsEncodeString mmsEncodeString1(mmsEncodeString);
961e5d0e473Sopenharmony_ci    charset = 0;
962e5d0e473Sopenharmony_ci    bool ret = mmsEncodeString1.SetEncodeString(charset, testStr);
963e5d0e473Sopenharmony_ci    EXPECT_EQ(true, ret);
964e5d0e473Sopenharmony_ci    ret = mmsEncodeString1.SetEncodeString(charset, testStr);
965e5d0e473Sopenharmony_ci    EXPECT_EQ(true, ret);
966e5d0e473Sopenharmony_ci}
967e5d0e473Sopenharmony_ci
968e5d0e473Sopenharmony_ci/**
969e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsMmsGtest_MmsHeaderCateg_0001
970e5d0e473Sopenharmony_ci * @tc.name     Test MmsHeaderCateg
971e5d0e473Sopenharmony_ci * @tc.desc     Function test
972e5d0e473Sopenharmony_ci */
973e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, MmsHeaderCateg_0001, Function | MediumTest | Level1)
974e5d0e473Sopenharmony_ci{
975e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::MmsHeaderCateg_0001 -->");
976e5d0e473Sopenharmony_ci    MmsHeaderCateg mmsHeaderCateg;
977e5d0e473Sopenharmony_ci    uint8_t fieldId = 0;
978e5d0e473Sopenharmony_ci    mmsHeaderCateg.FindSendReqOptType(fieldId);
979e5d0e473Sopenharmony_ci    mmsHeaderCateg.FindSendConfOptType(fieldId);
980e5d0e473Sopenharmony_ci    mmsHeaderCateg.FindFieldDes(fieldId);
981e5d0e473Sopenharmony_ci    mmsHeaderCateg.CheckIsValueLen(fieldId);
982e5d0e473Sopenharmony_ci    bool ret = mmsHeaderCateg.CheckIsValueLen(fieldId);
983e5d0e473Sopenharmony_ci    EXPECT_EQ(false, ret);
984e5d0e473Sopenharmony_ci}
985e5d0e473Sopenharmony_ci
986e5d0e473Sopenharmony_ci/**
987e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsMmsGtest_MmsBase64_0001
988e5d0e473Sopenharmony_ci * @tc.name     Test MmsBase64
989e5d0e473Sopenharmony_ci * @tc.desc     Function test
990e5d0e473Sopenharmony_ci */
991e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, MmsBase64_0001, Function | MediumTest | Level1)
992e5d0e473Sopenharmony_ci{
993e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::MmsBase64_0001 -->");
994e5d0e473Sopenharmony_ci    MmsBase64 mmsBase64;
995e5d0e473Sopenharmony_ci    std::string valueStr = "valueStr";
996e5d0e473Sopenharmony_ci    mmsBase64.Encode(valueStr);
997e5d0e473Sopenharmony_ci    std::string ret = mmsBase64.Decode(valueStr);
998e5d0e473Sopenharmony_ci    EXPECT_STRNE(ret.c_str(), "test");
999e5d0e473Sopenharmony_ci}
1000e5d0e473Sopenharmony_ci
1001e5d0e473Sopenharmony_ci/**
1002e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsMmsGtest_MmsCharSet_0001
1003e5d0e473Sopenharmony_ci * @tc.name     Test MmsCharSet
1004e5d0e473Sopenharmony_ci * @tc.desc     Function test
1005e5d0e473Sopenharmony_ci */
1006e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, MmsCharSet_0001, Function | MediumTest | Level1)
1007e5d0e473Sopenharmony_ci{
1008e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::MmsCharSet_0001 -->");
1009e5d0e473Sopenharmony_ci    MmsCharSet mmsCharSet;
1010e5d0e473Sopenharmony_ci    uint32_t charSet = 10;
1011e5d0e473Sopenharmony_ci    std::string strCharSet = "US-ASCII";
1012e5d0e473Sopenharmony_ci    mmsCharSet.GetCharSetStrFromInt(strCharSet, charSet);
1013e5d0e473Sopenharmony_ci    bool ret = mmsCharSet.GetCharSetIntFromString(charSet, strCharSet);
1014e5d0e473Sopenharmony_ci    EXPECT_EQ(true, ret);
1015e5d0e473Sopenharmony_ci}
1016e5d0e473Sopenharmony_ci
1017e5d0e473Sopenharmony_ci/**
1018e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsMmsGtest_MmsQuotedPrintable_0001
1019e5d0e473Sopenharmony_ci * @tc.name     Test MmsQuotedPrintable
1020e5d0e473Sopenharmony_ci * @tc.desc     Function test
1021e5d0e473Sopenharmony_ci */
1022e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, MmsQuotedPrintable_0001, Function | MediumTest | Level1)
1023e5d0e473Sopenharmony_ci{
1024e5d0e473Sopenharmony_ci    TELEPHONY_LOGI("TelSMSMMSTest::MmsQuotedPrintable_0001 -->");
1025e5d0e473Sopenharmony_ci    MmsQuotedPrintable mmsQuotedPrintable;
1026e5d0e473Sopenharmony_ci    std::string valueStr = "123";
1027e5d0e473Sopenharmony_ci    mmsQuotedPrintable.Encode(valueStr);
1028e5d0e473Sopenharmony_ci    std::string destStr = "";
1029e5d0e473Sopenharmony_ci    mmsQuotedPrintable.Decode(valueStr, destStr);
1030e5d0e473Sopenharmony_ci    bool ret = mmsQuotedPrintable.Decode("", valueStr);
1031e5d0e473Sopenharmony_ci    EXPECT_EQ(false, ret);
1032e5d0e473Sopenharmony_ci}
1033e5d0e473Sopenharmony_ci
1034e5d0e473Sopenharmony_ci/**
1035e5d0e473Sopenharmony_ci * @tc.number   Telephony_SmsServiceTest_0001
1036e5d0e473Sopenharmony_ci * @tc.name     Test MmsQuotedPrintable
1037e5d0e473Sopenharmony_ci * @tc.desc     Function test
1038e5d0e473Sopenharmony_ci */
1039e5d0e473Sopenharmony_ciHWTEST_F(MmsGtest, SmsServiceTest_0001, Function | MediumTest | Level1)
1040e5d0e473Sopenharmony_ci{
1041e5d0e473Sopenharmony_ci    AccessMmsToken token;
1042e5d0e473Sopenharmony_ci    int32_t slotId = 0;
1043e5d0e473Sopenharmony_ci    int64_t timeStamp = 0;
1044e5d0e473Sopenharmony_ci    std::string homeUrlVal;
1045e5d0e473Sopenharmony_ci    std::string dbUrl;
1046e5d0e473Sopenharmony_ci    GetPduToFile(slotId);
1047e5d0e473Sopenharmony_ci    dbUrl = GetFileToDb();
1048e5d0e473Sopenharmony_ci    homeUrlVal = GetMmsc(slotId);
1049e5d0e473Sopenharmony_ci    std::u16string mmsc = StringUtils::ToUtf16(homeUrlVal);
1050e5d0e473Sopenharmony_ci    std::u16string data = StringUtils::ToUtf16(dbUrl);
1051e5d0e473Sopenharmony_ci    std::u16string ua = u"";
1052e5d0e473Sopenharmony_ci    std::u16string uaprof = u"";
1053e5d0e473Sopenharmony_ci    Singleton<SmsServiceManagerClient>::GetInstance().SendMms(slotId, mmsc, data, ua, uaprof, timeStamp);
1054e5d0e473Sopenharmony_ci    Singleton<SmsServiceManagerClient>::GetInstance().DownloadMms(slotId, mmsc, data, ua, uaprof);
1055e5d0e473Sopenharmony_ci    EXPECT_GE(dbUrl.length(), 0);
1056e5d0e473Sopenharmony_ci    EXPECT_GE(homeUrlVal.length(), 0);
1057e5d0e473Sopenharmony_ci}
1058e5d0e473Sopenharmony_ci#endif // TEL_TEST_UNSUPPORT
1059e5d0e473Sopenharmony_ci} // namespace Telephony
1060e5d0e473Sopenharmony_ci} // namespace OHOS