11e934351Sopenharmony_ci/*
21e934351Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
31e934351Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
41e934351Sopenharmony_ci * you may not use this file except in compliance with the License.
51e934351Sopenharmony_ci * You may obtain a copy of the License at
61e934351Sopenharmony_ci *
71e934351Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
81e934351Sopenharmony_ci *
91e934351Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
101e934351Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
111e934351Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121e934351Sopenharmony_ci * See the License for the specific language governing permissions and
131e934351Sopenharmony_ci * limitations under the License.
141e934351Sopenharmony_ci */
151e934351Sopenharmony_ci
161e934351Sopenharmony_ci#include <cstring>
171e934351Sopenharmony_ci
181e934351Sopenharmony_ci#include "gtest/gtest.h"
191e934351Sopenharmony_ci#include "http_request_options.h"
201e934351Sopenharmony_ci#include "netstack_log.h"
211e934351Sopenharmony_ci#include "constant.h"
221e934351Sopenharmony_ci#include "secure_char.h"
231e934351Sopenharmony_ci#include "curl/curl.h"
241e934351Sopenharmony_ci#include "tlv_utils.h"
251e934351Sopenharmony_ci
261e934351Sopenharmony_ciusing namespace OHOS::NetStack;
271e934351Sopenharmony_ciusing namespace OHOS::NetStack::Http;
281e934351Sopenharmony_ci
291e934351Sopenharmony_ciclass HttpRequestOptionsTest : public testing::Test {
301e934351Sopenharmony_cipublic:
311e934351Sopenharmony_ci    static void SetUpTestCase() {}
321e934351Sopenharmony_ci
331e934351Sopenharmony_ci    static void TearDownTestCase() {}
341e934351Sopenharmony_ci
351e934351Sopenharmony_ci    virtual void SetUp() {}
361e934351Sopenharmony_ci
371e934351Sopenharmony_ci    virtual void TearDown() {}
381e934351Sopenharmony_ci};
391e934351Sopenharmony_ci
401e934351Sopenharmony_cinamespace {
411e934351Sopenharmony_ciusing namespace std;
421e934351Sopenharmony_ciusing namespace testing::ext;
431e934351Sopenharmony_ciconstexpr char OTHER_CA_PATH[] = "/etc/ssl/certs/other.pem";
441e934351Sopenharmony_ci
451e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, CaPathTest001, TestSize.Level1)
461e934351Sopenharmony_ci{
471e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
481e934351Sopenharmony_ci
491e934351Sopenharmony_ci    string path = requestOptions.GetCaPath();
501e934351Sopenharmony_ci    EXPECT_EQ(path, "");
511e934351Sopenharmony_ci}
521e934351Sopenharmony_ci
531e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, CaPathTest002, TestSize.Level1)
541e934351Sopenharmony_ci{
551e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
561e934351Sopenharmony_ci
571e934351Sopenharmony_ci    requestOptions.SetCaPath("");
581e934351Sopenharmony_ci    string path = requestOptions.GetCaPath();
591e934351Sopenharmony_ci    EXPECT_EQ(path, "");
601e934351Sopenharmony_ci}
611e934351Sopenharmony_ci
621e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, CaPathTest003, TestSize.Level1)
631e934351Sopenharmony_ci{
641e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
651e934351Sopenharmony_ci
661e934351Sopenharmony_ci    requestOptions.SetCaPath(OTHER_CA_PATH);
671e934351Sopenharmony_ci    string path = requestOptions.GetCaPath();
681e934351Sopenharmony_ci    EXPECT_EQ(path, OTHER_CA_PATH);
691e934351Sopenharmony_ci}
701e934351Sopenharmony_ci
711e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetDnsServersTest, TestSize.Level1)
721e934351Sopenharmony_ci{
731e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
741e934351Sopenharmony_ci
751e934351Sopenharmony_ci    std::vector<std::string> dnsServers = { "8.8.8.8", "8.8.4.4" };
761e934351Sopenharmony_ci    requestOptions.SetDnsServers(dnsServers);
771e934351Sopenharmony_ci
781e934351Sopenharmony_ci    const std::vector<std::string>& retrievedDnsServers = requestOptions.GetDnsServers();
791e934351Sopenharmony_ci    EXPECT_EQ(retrievedDnsServers, dnsServers);
801e934351Sopenharmony_ci}
811e934351Sopenharmony_ci
821e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetDohUrlTest, TestSize.Level1)
831e934351Sopenharmony_ci{
841e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
851e934351Sopenharmony_ci
861e934351Sopenharmony_ci    std::string dohUrl = "https://example.com/dns-query";
871e934351Sopenharmony_ci    requestOptions.SetDohUrl(dohUrl);
881e934351Sopenharmony_ci
891e934351Sopenharmony_ci    const std::string& retrievedDohUrl = requestOptions.GetDohUrl();
901e934351Sopenharmony_ci    EXPECT_EQ(retrievedDohUrl, dohUrl);
911e934351Sopenharmony_ci}
921e934351Sopenharmony_ci
931e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetRangeNumberTest001, TestSize.Level1)
941e934351Sopenharmony_ci{
951e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
961e934351Sopenharmony_ci
971e934351Sopenharmony_ci    uint32_t resumeFromNumber = 10;
981e934351Sopenharmony_ci    uint32_t resumeToNumber = 20;
991e934351Sopenharmony_ci    requestOptions.SetRangeNumber(resumeFromNumber, resumeToNumber);
1001e934351Sopenharmony_ci
1011e934351Sopenharmony_ci    const std::string& rangeString = requestOptions.GetRangeString();
1021e934351Sopenharmony_ci    std::string expectedRangeString = "10-20";
1031e934351Sopenharmony_ci    EXPECT_EQ(rangeString, expectedRangeString);
1041e934351Sopenharmony_ci}
1051e934351Sopenharmony_ci
1061e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetRangeNumberTest002, TestSize.Level1)
1071e934351Sopenharmony_ci{
1081e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
1091e934351Sopenharmony_ci
1101e934351Sopenharmony_ci    uint32_t resumeFromNumber = 0;
1111e934351Sopenharmony_ci    uint32_t resumeToNumber = 20;
1121e934351Sopenharmony_ci    requestOptions.SetRangeNumber(resumeFromNumber, resumeToNumber);
1131e934351Sopenharmony_ci
1141e934351Sopenharmony_ci    const std::string& rangeString = requestOptions.GetRangeString();
1151e934351Sopenharmony_ci    std::string expectedRangeString = "-20";
1161e934351Sopenharmony_ci    EXPECT_EQ(rangeString, expectedRangeString);
1171e934351Sopenharmony_ci}
1181e934351Sopenharmony_ci
1191e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetRangeNumberTest003, TestSize.Level1)
1201e934351Sopenharmony_ci{
1211e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
1221e934351Sopenharmony_ci
1231e934351Sopenharmony_ci    uint32_t resumeFromNumber = 10;
1241e934351Sopenharmony_ci    uint32_t resumeToNumber = 0;
1251e934351Sopenharmony_ci    requestOptions.SetRangeNumber(resumeFromNumber, resumeToNumber);
1261e934351Sopenharmony_ci
1271e934351Sopenharmony_ci    const std::string& rangeString = requestOptions.GetRangeString();
1281e934351Sopenharmony_ci    std::string expectedRangeString = "10-";
1291e934351Sopenharmony_ci    EXPECT_EQ(rangeString, expectedRangeString);
1301e934351Sopenharmony_ci}
1311e934351Sopenharmony_ci
1321e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetRangeNumberTest004, TestSize.Level1)
1331e934351Sopenharmony_ci{
1341e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
1351e934351Sopenharmony_ci
1361e934351Sopenharmony_ci    uint32_t resumeFromNumber = 0;
1371e934351Sopenharmony_ci    uint32_t resumeToNumber = 0;
1381e934351Sopenharmony_ci    requestOptions.SetRangeNumber(resumeFromNumber, resumeToNumber);
1391e934351Sopenharmony_ci
1401e934351Sopenharmony_ci    const std::string& rangeString = requestOptions.GetRangeString();
1411e934351Sopenharmony_ci    std::string expectedRangeString = "";
1421e934351Sopenharmony_ci    EXPECT_EQ(rangeString, expectedRangeString);
1431e934351Sopenharmony_ci}
1441e934351Sopenharmony_ci
1451e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetClientCertTest, TestSize.Level1)
1461e934351Sopenharmony_ci{
1471e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
1481e934351Sopenharmony_ci
1491e934351Sopenharmony_ci    std::string cert = "path_to_cert.pem";
1501e934351Sopenharmony_ci    std::string key = "path_to_key.pem";
1511e934351Sopenharmony_ci    std::string certType = "PEM";
1521e934351Sopenharmony_ci    Secure::SecureChar keyPasswd("password");
1531e934351Sopenharmony_ci
1541e934351Sopenharmony_ci    requestOptions.SetClientCert(cert, certType, key, keyPasswd);
1551e934351Sopenharmony_ci
1561e934351Sopenharmony_ci    std::string retrievedCert;
1571e934351Sopenharmony_ci    std::string retrievedKey;
1581e934351Sopenharmony_ci    std::string retrievedCertType;
1591e934351Sopenharmony_ci    Secure::SecureChar retrievedKeyPasswd;
1601e934351Sopenharmony_ci
1611e934351Sopenharmony_ci    requestOptions.GetClientCert(retrievedCert, retrievedCertType, retrievedKey, retrievedKeyPasswd);
1621e934351Sopenharmony_ci
1631e934351Sopenharmony_ci    EXPECT_EQ(retrievedCert, cert);
1641e934351Sopenharmony_ci    EXPECT_EQ(retrievedKey, key);
1651e934351Sopenharmony_ci    EXPECT_EQ(retrievedCertType, certType);
1661e934351Sopenharmony_ci    EXPECT_EQ(strcmp(retrievedKeyPasswd.Data(), keyPasswd.Data()), 0);
1671e934351Sopenharmony_ci}
1681e934351Sopenharmony_ci
1691e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, AddMultiFormDataTest, TestSize.Level1)
1701e934351Sopenharmony_ci{
1711e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
1721e934351Sopenharmony_ci    for (int i = 0; i < 10; i++) {
1731e934351Sopenharmony_ci        MultiFormData multiFormData;
1741e934351Sopenharmony_ci        multiFormData.name = "name" + std::to_string(i);
1751e934351Sopenharmony_ci        multiFormData.data = "data" + std::to_string(i);
1761e934351Sopenharmony_ci        multiFormData.contentType = "contentType" + std::to_string(i);
1771e934351Sopenharmony_ci        multiFormData.remoteFileName = "remoteFileName" + std::to_string(i);
1781e934351Sopenharmony_ci        multiFormData.filePath = "filePath" + std::to_string(i);
1791e934351Sopenharmony_ci        requestOptions.AddMultiFormData(multiFormData);
1801e934351Sopenharmony_ci    }
1811e934351Sopenharmony_ci    std::vector<MultiFormData> dataList = requestOptions.GetMultiPartDataList();
1821e934351Sopenharmony_ci    EXPECT_EQ(dataList.size(), 10);
1831e934351Sopenharmony_ci    for (int i = 0; i < 10; i++) {
1841e934351Sopenharmony_ci        MultiFormData data = dataList[i];
1851e934351Sopenharmony_ci        EXPECT_EQ(data.name, "name" + std::to_string(i));
1861e934351Sopenharmony_ci        EXPECT_EQ(data.data, "data" + std::to_string(i));
1871e934351Sopenharmony_ci        EXPECT_EQ(data.contentType, "contentType" + std::to_string(i));
1881e934351Sopenharmony_ci        EXPECT_EQ(data.filePath, "filePath" + std::to_string(i));
1891e934351Sopenharmony_ci        EXPECT_EQ(data.remoteFileName, "remoteFileName" + std::to_string(i));
1901e934351Sopenharmony_ci    }
1911e934351Sopenharmony_ci}
1921e934351Sopenharmony_ci
1931e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetUrlTest, TestSize.Level1)
1941e934351Sopenharmony_ci{
1951e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
1961e934351Sopenharmony_ci
1971e934351Sopenharmony_ci    std::string testValue = "Example";
1981e934351Sopenharmony_ci    requestOptions.SetUrl(testValue);
1991e934351Sopenharmony_ci    std::string url = requestOptions.GetUrl();
2001e934351Sopenharmony_ci    EXPECT_EQ(url, testValue);
2011e934351Sopenharmony_ci}
2021e934351Sopenharmony_ci
2031e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetPrioritylTest, TestSize.Level1)
2041e934351Sopenharmony_ci{
2051e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
2061e934351Sopenharmony_ci
2071e934351Sopenharmony_ci    uint32_t testValue = 2;
2081e934351Sopenharmony_ci    requestOptions.SetPriority(testValue);
2091e934351Sopenharmony_ci    uint32_t resultValue = requestOptions.GetPriority();
2101e934351Sopenharmony_ci    EXPECT_EQ(resultValue, testValue);
2111e934351Sopenharmony_ci}
2121e934351Sopenharmony_ci
2131e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetHttpDataTypeTest, TestSize.Level1)
2141e934351Sopenharmony_ci{
2151e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
2161e934351Sopenharmony_ci
2171e934351Sopenharmony_ci    HttpDataType testValue = HttpDataType::ARRAY_BUFFER;
2181e934351Sopenharmony_ci    requestOptions.SetHttpDataType(testValue);
2191e934351Sopenharmony_ci    HttpDataType resultValue = requestOptions.GetHttpDataType();
2201e934351Sopenharmony_ci    EXPECT_EQ(resultValue, testValue);
2211e934351Sopenharmony_ci}
2221e934351Sopenharmony_ci
2231e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetUsingProtocolTest001, TestSize.Level1)
2241e934351Sopenharmony_ci{
2251e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
2261e934351Sopenharmony_ci
2271e934351Sopenharmony_ci    HttpProtocol testValue = HttpProtocol::HTTP1_1;
2281e934351Sopenharmony_ci    requestOptions.SetUsingProtocol(testValue);
2291e934351Sopenharmony_ci    uint32_t resultValue = requestOptions.GetHttpVersion();
2301e934351Sopenharmony_ci    EXPECT_EQ(resultValue, CURL_HTTP_VERSION_1_1);
2311e934351Sopenharmony_ci}
2321e934351Sopenharmony_ci
2331e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetUsingProtocolTest002, TestSize.Level1)
2341e934351Sopenharmony_ci{
2351e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
2361e934351Sopenharmony_ci
2371e934351Sopenharmony_ci    HttpProtocol testValue = HttpProtocol::HTTP2;
2381e934351Sopenharmony_ci    requestOptions.SetUsingProtocol(testValue);
2391e934351Sopenharmony_ci    uint32_t resultValue = requestOptions.GetHttpVersion();
2401e934351Sopenharmony_ci    EXPECT_EQ(resultValue, CURL_HTTP_VERSION_2_0);
2411e934351Sopenharmony_ci}
2421e934351Sopenharmony_ci
2431e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetUsingProtocolTest003, TestSize.Level1)
2441e934351Sopenharmony_ci{
2451e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
2461e934351Sopenharmony_ci
2471e934351Sopenharmony_ci    HttpProtocol testValue = HttpProtocol::HTTP3;
2481e934351Sopenharmony_ci    requestOptions.SetUsingProtocol(testValue);
2491e934351Sopenharmony_ci    uint32_t resultValue = requestOptions.GetHttpVersion();
2501e934351Sopenharmony_ci    EXPECT_EQ(resultValue, CURL_HTTP_VERSION_3);
2511e934351Sopenharmony_ci}
2521e934351Sopenharmony_ci
2531e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetUsingProtocolTest004, TestSize.Level1)
2541e934351Sopenharmony_ci{
2551e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
2561e934351Sopenharmony_ci
2571e934351Sopenharmony_ci    HttpProtocol testValue = HttpProtocol::HTTP_NONE;
2581e934351Sopenharmony_ci    requestOptions.SetUsingProtocol(testValue);
2591e934351Sopenharmony_ci    uint32_t resultValue = requestOptions.GetHttpVersion();
2601e934351Sopenharmony_ci    EXPECT_EQ(resultValue, CURL_HTTP_VERSION_NONE);
2611e934351Sopenharmony_ci}
2621e934351Sopenharmony_ci
2631e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetMaxLimitTest, TestSize.Level1)
2641e934351Sopenharmony_ci{
2651e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
2661e934351Sopenharmony_ci
2671e934351Sopenharmony_ci    uint32_t testValue = 50;
2681e934351Sopenharmony_ci    requestOptions.SetMaxLimit(testValue);
2691e934351Sopenharmony_ci    uint32_t resultValue = requestOptions.GetMaxLimit();
2701e934351Sopenharmony_ci    EXPECT_EQ(resultValue, testValue);
2711e934351Sopenharmony_ci}
2721e934351Sopenharmony_ci
2731e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetConnectTimeoutTest, TestSize.Level1)
2741e934351Sopenharmony_ci{
2751e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
2761e934351Sopenharmony_ci
2771e934351Sopenharmony_ci    uint32_t testValue = 5000;
2781e934351Sopenharmony_ci    requestOptions.SetConnectTimeout(testValue);
2791e934351Sopenharmony_ci    uint32_t resultValue = requestOptions.GetConnectTimeout();
2801e934351Sopenharmony_ci    EXPECT_EQ(resultValue, testValue);
2811e934351Sopenharmony_ci}
2821e934351Sopenharmony_ci
2831e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetReadTimeoutTest, TestSize.Level1)
2841e934351Sopenharmony_ci{
2851e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
2861e934351Sopenharmony_ci
2871e934351Sopenharmony_ci    uint32_t testValue = 5000;
2881e934351Sopenharmony_ci    requestOptions.SetReadTimeout(testValue);
2891e934351Sopenharmony_ci    uint32_t resultValue = requestOptions.GetReadTimeout();
2901e934351Sopenharmony_ci    EXPECT_EQ(resultValue, testValue);
2911e934351Sopenharmony_ci}
2921e934351Sopenharmony_ci
2931e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetHeaderTest, TestSize.Level1)
2941e934351Sopenharmony_ci{
2951e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
2961e934351Sopenharmony_ci
2971e934351Sopenharmony_ci    int testSize = 10;
2981e934351Sopenharmony_ci    for (int i = 0; i < testSize; i++) {
2991e934351Sopenharmony_ci        requestOptions.SetHeader("key" + std::to_string(i), "value" + std::to_string(i));
3001e934351Sopenharmony_ci    }
3011e934351Sopenharmony_ci    const std::map<std::string, std::string> header = requestOptions.GetHeader();
3021e934351Sopenharmony_ci    for (int i = 0; i < testSize; i++) {
3031e934351Sopenharmony_ci        const std::string& value = header.at("key" + std::to_string(i));
3041e934351Sopenharmony_ci        EXPECT_EQ(value, "value" + std::to_string(i));
3051e934351Sopenharmony_ci    }
3061e934351Sopenharmony_ci}
3071e934351Sopenharmony_ci
3081e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetBodyTest, TestSize.Level1)
3091e934351Sopenharmony_ci{
3101e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
3111e934351Sopenharmony_ci
3121e934351Sopenharmony_ci    std::string testValue = "TestBody";
3131e934351Sopenharmony_ci    requestOptions.SetBody(testValue.data(), testValue.size());
3141e934351Sopenharmony_ci    std::string resultValue = requestOptions.GetBody();
3151e934351Sopenharmony_ci    EXPECT_EQ(resultValue, testValue);
3161e934351Sopenharmony_ci}
3171e934351Sopenharmony_ci
3181e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, SetCertificatePinningTest, TestSize.Level1)
3191e934351Sopenharmony_ci{
3201e934351Sopenharmony_ci    HttpRequestOptions requestOptions;
3211e934351Sopenharmony_ci    std::string testPIN = "sha256//YhKJKSzoTt2b5FP18fvpHo7fJYqQCjAa3HWY3tvRMwE=;sha256//t62CeU2tQiqkexU74Gxa2eg7fRbEg";
3221e934351Sopenharmony_ci    requestOptions.SetCertificatePinning(testPIN);
3231e934351Sopenharmony_ci    std::string resultPIN = requestOptions.GetCertificatePinning();
3241e934351Sopenharmony_ci    EXPECT_EQ(testPIN, resultPIN);
3251e934351Sopenharmony_ci}
3261e934351Sopenharmony_ci
3271e934351Sopenharmony_ciHWTEST_F(HttpRequestOptionsTest, TlvEncodeDecodeTest001, TestSize.Level1)
3281e934351Sopenharmony_ci{
3291e934351Sopenharmony_ci    DfxMessage msg{};
3301e934351Sopenharmony_ci    msg.requestBeginTime_ = 0;
3311e934351Sopenharmony_ci    msg.requestEndTime_ = 1;
3321e934351Sopenharmony_ci    msg.requestId_ = "1";
3331e934351Sopenharmony_ci    msg.responseStatusCode_ = 200;
3341e934351Sopenharmony_ci    msg.responseHttpVersion_ = "1.1";
3351e934351Sopenharmony_ci    const int bufferMaxSize = 1 * 256 * 1024;
3361e934351Sopenharmony_ci    void *data = malloc(bufferMaxSize);
3371e934351Sopenharmony_ci    EXPECT_TRUE(data != nullptr);
3381e934351Sopenharmony_ci    uint32_t dataSize = 0;
3391e934351Sopenharmony_ci    auto ret = TlvUtils::Encode(msg, data, dataSize);
3401e934351Sopenharmony_ci    EXPECT_EQ(ret, TLV_OK);
3411e934351Sopenharmony_ci    EXPECT_GT(dataSize, 0);
3421e934351Sopenharmony_ci    DfxMessage result{};
3431e934351Sopenharmony_ci    ret = TlvUtils::Decode(result, data, dataSize);
3441e934351Sopenharmony_ci    EXPECT_EQ(ret, TLV_OK);
3451e934351Sopenharmony_ci    EXPECT_EQ(msg.requestBeginTime_, result.requestBeginTime_);
3461e934351Sopenharmony_ci    EXPECT_EQ(msg.requestEndTime_, result.requestEndTime_);
3471e934351Sopenharmony_ci    EXPECT_EQ(msg.requestId_, result.requestId_);
3481e934351Sopenharmony_ci    EXPECT_EQ(msg.responseStatusCode_, result.responseStatusCode_);
3491e934351Sopenharmony_ci    EXPECT_EQ(msg.responseHttpVersion_, result.responseHttpVersion_);
3501e934351Sopenharmony_ci}
3511e934351Sopenharmony_ci} // namespace