11e934351Sopenharmony_ci/*
21e934351Sopenharmony_ci * Copyright (c) 2022-2024 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 "accesstoken_kit.h"
171e934351Sopenharmony_ci#include "net_address.h"
181e934351Sopenharmony_ci#include "secure_data.h"
191e934351Sopenharmony_ci#include "socket_error.h"
201e934351Sopenharmony_ci#include "socket_state_base.h"
211e934351Sopenharmony_ci#include "tls.h"
221e934351Sopenharmony_ci#include "tls_certificate.h"
231e934351Sopenharmony_ci#include "tls_configuration.h"
241e934351Sopenharmony_ci#include "tls_key.h"
251e934351Sopenharmony_ci#include "tls_socket.h"
261e934351Sopenharmony_ci#include "tls_utils_test.h"
271e934351Sopenharmony_ci#include "token_setproc.h"
281e934351Sopenharmony_ci
291e934351Sopenharmony_cinamespace OHOS {
301e934351Sopenharmony_cinamespace NetStack {
311e934351Sopenharmony_cinamespace TlsSocket {
321e934351Sopenharmony_cinamespace {
331e934351Sopenharmony_ciusing namespace testing::ext;
341e934351Sopenharmony_ciusing namespace Security::AccessToken;
351e934351Sopenharmony_ci} // namespace
361e934351Sopenharmony_ci
371e934351Sopenharmony_civoid MockConnectionNetAddress(Socket::NetAddress &address)
381e934351Sopenharmony_ci{
391e934351Sopenharmony_ci    address.SetAddress(TlsUtilsTest::GetIp(TlsUtilsTest::ChangeToFile(IP_ADDRESS)));
401e934351Sopenharmony_ci    address.SetPort(std::atoi(TlsUtilsTest::ChangeToFile(PORT).c_str()));
411e934351Sopenharmony_ci    address.SetFamilyBySaFamily(AF_INET);
421e934351Sopenharmony_ci}
431e934351Sopenharmony_ci
441e934351Sopenharmony_civoid MockConnectionParamOptions(Socket::NetAddress &address, TLSSecureOptions &secureOption, TLSConnectOptions &options)
451e934351Sopenharmony_ci{
461e934351Sopenharmony_ci    secureOption.SetKey(SecureData(TlsUtilsTest::ChangeToFile(PRIVATE_KEY_PEM_CHAIN)));
471e934351Sopenharmony_ci    secureOption.SetCert(TlsUtilsTest::ChangeToFile(CLIENT_CRT_CHAIN));
481e934351Sopenharmony_ci
491e934351Sopenharmony_ci    MockConnectionNetAddress(address);
501e934351Sopenharmony_ci    options.SetTlsSecureOptions(secureOption);
511e934351Sopenharmony_ci    options.SetNetAddress(address);
521e934351Sopenharmony_ci}
531e934351Sopenharmony_ci
541e934351Sopenharmony_civoid SetUnilateralHwTestShortParam(TLSSocket &server)
551e934351Sopenharmony_ci{
561e934351Sopenharmony_ci    TLSConnectOptions options;
571e934351Sopenharmony_ci    TLSSecureOptions secureOption;
581e934351Sopenharmony_ci    Socket::NetAddress address;
591e934351Sopenharmony_ci    std::vector<std::string> caVec = { TlsUtilsTest::ChangeToFile(ROOT_CA_PATH_CHAIN),
601e934351Sopenharmony_ci        TlsUtilsTest::ChangeToFile(MID_CA_CHAIN) };
611e934351Sopenharmony_ci    secureOption.SetCaChain(caVec);
621e934351Sopenharmony_ci    MockConnectionParamOptions(address, secureOption, options);
631e934351Sopenharmony_ci
641e934351Sopenharmony_ci    server.Bind(address, [](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
651e934351Sopenharmony_ci    server.Connect(options, [](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
661e934351Sopenharmony_ci}
671e934351Sopenharmony_ci
681e934351Sopenharmony_ciHapInfoParams testInfoParms = {.bundleName = "TlsSocketBranchTest",
691e934351Sopenharmony_ci                               .userID = 1,
701e934351Sopenharmony_ci                               .instIndex = 0,
711e934351Sopenharmony_ci                               .appIDDesc = "test",
721e934351Sopenharmony_ci                               .isSystemApp = true};
731e934351Sopenharmony_ci
741e934351Sopenharmony_ciPermissionDef testPermDef = {
751e934351Sopenharmony_ci    .permissionName = "ohos.permission.INTERNET",
761e934351Sopenharmony_ci    .bundleName = "TlsSocketBranchTest",
771e934351Sopenharmony_ci    .grantMode = 1,
781e934351Sopenharmony_ci    .label = "label",
791e934351Sopenharmony_ci    .labelId = 1,
801e934351Sopenharmony_ci    .description = "Test Tls Socket Branch",
811e934351Sopenharmony_ci    .descriptionId = 1,
821e934351Sopenharmony_ci    .availableLevel = APL_SYSTEM_BASIC,
831e934351Sopenharmony_ci};
841e934351Sopenharmony_ci
851e934351Sopenharmony_ciPermissionStateFull testState = {
861e934351Sopenharmony_ci    .grantFlags = {2},
871e934351Sopenharmony_ci    .grantStatus = {PermissionState::PERMISSION_GRANTED},
881e934351Sopenharmony_ci    .isGeneral = true,
891e934351Sopenharmony_ci    .permissionName = "ohos.permission.INTERNET",
901e934351Sopenharmony_ci    .resDeviceID = {"local"},
911e934351Sopenharmony_ci};
921e934351Sopenharmony_ci
931e934351Sopenharmony_ciHapPolicyParams testPolicyPrams = {
941e934351Sopenharmony_ci    .apl = APL_SYSTEM_BASIC,
951e934351Sopenharmony_ci    .domain = "test.domain",
961e934351Sopenharmony_ci    .permList = {testPermDef},
971e934351Sopenharmony_ci    .permStateList = {testState},
981e934351Sopenharmony_ci};
991e934351Sopenharmony_ci
1001e934351Sopenharmony_ciclass AccessToken {
1011e934351Sopenharmony_cipublic:
1021e934351Sopenharmony_ci    AccessToken() : currentID_(GetSelfTokenID())
1031e934351Sopenharmony_ci    {
1041e934351Sopenharmony_ci        AccessTokenIDEx tokenIdEx = AccessTokenKit::AllocHapToken(testInfoParms, testPolicyPrams);
1051e934351Sopenharmony_ci        accessID_ = tokenIdEx.tokenIdExStruct.tokenID;
1061e934351Sopenharmony_ci        SetSelfTokenID(tokenIdEx.tokenIDEx);
1071e934351Sopenharmony_ci    }
1081e934351Sopenharmony_ci    ~AccessToken()
1091e934351Sopenharmony_ci    {
1101e934351Sopenharmony_ci        AccessTokenKit::DeleteToken(accessID_);
1111e934351Sopenharmony_ci        SetSelfTokenID(currentID_);
1121e934351Sopenharmony_ci    }
1131e934351Sopenharmony_ci
1141e934351Sopenharmony_ciprivate:
1151e934351Sopenharmony_ci    AccessTokenID currentID_;
1161e934351Sopenharmony_ci    AccessTokenID accessID_ = 0;
1171e934351Sopenharmony_ci};
1181e934351Sopenharmony_ci
1191e934351Sopenharmony_ciclass TlsSocketBranchTest : public testing::Test {
1201e934351Sopenharmony_cipublic:
1211e934351Sopenharmony_ci    static void SetUpTestCase() {}
1221e934351Sopenharmony_ci
1231e934351Sopenharmony_ci    static void TearDownTestCase() {}
1241e934351Sopenharmony_ci
1251e934351Sopenharmony_ci    virtual void SetUp() {}
1261e934351Sopenharmony_ci
1271e934351Sopenharmony_ci    virtual void TearDown() {}
1281e934351Sopenharmony_ci};
1291e934351Sopenharmony_ci
1301e934351Sopenharmony_ciHWTEST_F(TlsSocketTest, bindInterface, testing::ext::TestSize.Level2)
1311e934351Sopenharmony_ci{
1321e934351Sopenharmony_ci    if (!TlsUtilsTest::CheckCaPathChainExistence("bindInterface")) {
1331e934351Sopenharmony_ci        return;
1341e934351Sopenharmony_ci    }
1351e934351Sopenharmony_ci
1361e934351Sopenharmony_ci    TLSSocket tlsService;
1371e934351Sopenharmony_ci    Socket::NetAddress address;
1381e934351Sopenharmony_ci    MockConnectionNetAddress(address);
1391e934351Sopenharmony_ci
1401e934351Sopenharmony_ci    AccessToken token;
1411e934351Sopenharmony_ci    tlsService.Bind(address, [](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
1421e934351Sopenharmony_ci}
1431e934351Sopenharmony_ci
1441e934351Sopenharmony_ciHWTEST_F(TlsSocketTest, connectInterface, testing::ext::TestSize.Level2)
1451e934351Sopenharmony_ci{
1461e934351Sopenharmony_ci    if (!TlsUtilsTest::CheckCaPathChainExistence("connectInterface")) {
1471e934351Sopenharmony_ci        return;
1481e934351Sopenharmony_ci    }
1491e934351Sopenharmony_ci    TLSSocket tlsService;
1501e934351Sopenharmony_ci    SetUnilateralHwTestShortParam(tlsService);
1511e934351Sopenharmony_ci
1521e934351Sopenharmony_ci    AccessToken token;
1531e934351Sopenharmony_ci    const std::string data = "GET / HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: keep-alive\r\n\r\n";
1541e934351Sopenharmony_ci    Socket::TCPSendOptions tcpSendOptions;
1551e934351Sopenharmony_ci    tcpSendOptions.SetData(data);
1561e934351Sopenharmony_ci    tlsService.Send(tcpSendOptions, [](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
1571e934351Sopenharmony_ci
1581e934351Sopenharmony_ci    (void)tlsService.Close([](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
1591e934351Sopenharmony_ci}
1601e934351Sopenharmony_ci
1611e934351Sopenharmony_ciHWTEST_F(TlsSocketTest, closeInterface, testing::ext::TestSize.Level2)
1621e934351Sopenharmony_ci{
1631e934351Sopenharmony_ci    if (!TlsUtilsTest::CheckCaPathChainExistence("closeInterface")) {
1641e934351Sopenharmony_ci        return;
1651e934351Sopenharmony_ci    }
1661e934351Sopenharmony_ci    TLSSocket tlsService;
1671e934351Sopenharmony_ci    SetUnilateralHwTestShortParam(tlsService);
1681e934351Sopenharmony_ci
1691e934351Sopenharmony_ci    AccessToken token;
1701e934351Sopenharmony_ci    const std::string data = "GET / HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: keep-alive\r\n\r\n";
1711e934351Sopenharmony_ci    ;
1721e934351Sopenharmony_ci    Socket::TCPSendOptions tcpSendOptions;
1731e934351Sopenharmony_ci    tcpSendOptions.SetData(data);
1741e934351Sopenharmony_ci
1751e934351Sopenharmony_ci    tlsService.Send(tcpSendOptions, [](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
1761e934351Sopenharmony_ci
1771e934351Sopenharmony_ci    (void)tlsService.Close([](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
1781e934351Sopenharmony_ci}
1791e934351Sopenharmony_ci
1801e934351Sopenharmony_ciHWTEST_F(TlsSocketTest, sendInterface, testing::ext::TestSize.Level2)
1811e934351Sopenharmony_ci{
1821e934351Sopenharmony_ci    if (!TlsUtilsTest::CheckCaPathChainExistence("sendInterface")) {
1831e934351Sopenharmony_ci        return;
1841e934351Sopenharmony_ci    }
1851e934351Sopenharmony_ci    TLSSocket tlsService;
1861e934351Sopenharmony_ci    SetUnilateralHwTestShortParam(tlsService);
1871e934351Sopenharmony_ci
1881e934351Sopenharmony_ci    AccessToken token;
1891e934351Sopenharmony_ci    const std::string data = "GET / HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: keep-alive\r\n\r\n";
1901e934351Sopenharmony_ci    Socket::TCPSendOptions tcpSendOptions;
1911e934351Sopenharmony_ci    tcpSendOptions.SetData(data);
1921e934351Sopenharmony_ci
1931e934351Sopenharmony_ci    tlsService.Send(tcpSendOptions, [](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
1941e934351Sopenharmony_ci
1951e934351Sopenharmony_ci    (void)tlsService.Close([](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
1961e934351Sopenharmony_ci}
1971e934351Sopenharmony_ci
1981e934351Sopenharmony_ciHWTEST_F(TlsSocketTest, getRemoteAddressInterface, testing::ext::TestSize.Level2)
1991e934351Sopenharmony_ci{
2001e934351Sopenharmony_ci    if (!TlsUtilsTest::CheckCaPathChainExistence("getRemoteAddressInterface")) {
2011e934351Sopenharmony_ci        return;
2021e934351Sopenharmony_ci    }
2031e934351Sopenharmony_ci    TLSSocket tlsService;
2041e934351Sopenharmony_ci    TLSConnectOptions options;
2051e934351Sopenharmony_ci    TLSSecureOptions secureOption;
2061e934351Sopenharmony_ci    Socket::NetAddress address;
2071e934351Sopenharmony_ci    std::vector<std::string> caVec = { TlsUtilsTest::ChangeToFile(ROOT_CA_PATH_CHAIN),
2081e934351Sopenharmony_ci        TlsUtilsTest::ChangeToFile(MID_CA_CHAIN) };
2091e934351Sopenharmony_ci    secureOption.SetCaChain(caVec);
2101e934351Sopenharmony_ci    MockConnectionParamOptions(address, secureOption, options);
2111e934351Sopenharmony_ci
2121e934351Sopenharmony_ci    tlsService.Bind(address, [](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
2131e934351Sopenharmony_ci    tlsService.Connect(options, [](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
2141e934351Sopenharmony_ci
2151e934351Sopenharmony_ci    AccessToken token;
2161e934351Sopenharmony_ci    Socket::NetAddress netAddress;
2171e934351Sopenharmony_ci    tlsService.GetRemoteAddress([&netAddress](int32_t errCode, const Socket::NetAddress &address) {
2181e934351Sopenharmony_ci        EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS);
2191e934351Sopenharmony_ci        netAddress.SetFamilyBySaFamily(address.GetSaFamily());
2201e934351Sopenharmony_ci        netAddress.SetAddress(address.GetAddress());
2211e934351Sopenharmony_ci        netAddress.SetPort(address.GetPort());
2221e934351Sopenharmony_ci    });
2231e934351Sopenharmony_ci    EXPECT_STREQ(netAddress.GetAddress().c_str(), TlsUtilsTest::GetIp(TlsUtilsTest::ChangeToFile(IP_ADDRESS)).c_str());
2241e934351Sopenharmony_ci    EXPECT_EQ(address.GetPort(), std::atoi(TlsUtilsTest::ChangeToFile(PORT).c_str()));
2251e934351Sopenharmony_ci    EXPECT_EQ(netAddress.GetSaFamily(), AF_INET);
2261e934351Sopenharmony_ci
2271e934351Sopenharmony_ci    const std::string data = "GET / HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: keep-alive\r\n\r\n";
2281e934351Sopenharmony_ci    Socket::TCPSendOptions tcpSendOptions;
2291e934351Sopenharmony_ci    tcpSendOptions.SetData(data);
2301e934351Sopenharmony_ci
2311e934351Sopenharmony_ci    tlsService.Send(tcpSendOptions, [](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
2321e934351Sopenharmony_ci
2331e934351Sopenharmony_ci    (void)tlsService.Close([](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
2341e934351Sopenharmony_ci}
2351e934351Sopenharmony_ci
2361e934351Sopenharmony_ciHWTEST_F(TlsSocketTest, getStateInterface, testing::ext::TestSize.Level2)
2371e934351Sopenharmony_ci{
2381e934351Sopenharmony_ci    if (!TlsUtilsTest::CheckCaPathChainExistence("getRemoteAddressInterface")) {
2391e934351Sopenharmony_ci        return;
2401e934351Sopenharmony_ci    }
2411e934351Sopenharmony_ci
2421e934351Sopenharmony_ci    TLSSocket tlsService;
2431e934351Sopenharmony_ci    SetUnilateralHwTestShortParam(tlsService);
2441e934351Sopenharmony_ci
2451e934351Sopenharmony_ci    AccessToken token;
2461e934351Sopenharmony_ci    Socket::SocketStateBase TlsSocketstate;
2471e934351Sopenharmony_ci    tlsService.GetState([&TlsSocketstate](int32_t errCode, const Socket::SocketStateBase &state) {
2481e934351Sopenharmony_ci        EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS);
2491e934351Sopenharmony_ci        TlsSocketstate = state;
2501e934351Sopenharmony_ci    });
2511e934351Sopenharmony_ci    std::cout << "TlsSocketUnilateralConnection TlsSocketstate.IsClose(): " << TlsSocketstate.IsClose() << std::endl;
2521e934351Sopenharmony_ci    EXPECT_TRUE(TlsSocketstate.IsBound());
2531e934351Sopenharmony_ci    EXPECT_TRUE(!TlsSocketstate.IsClose());
2541e934351Sopenharmony_ci    EXPECT_TRUE(TlsSocketstate.IsConnected());
2551e934351Sopenharmony_ci
2561e934351Sopenharmony_ci    const std::string connectionData = "GET / HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: keep-alive\r\n\r\n";
2571e934351Sopenharmony_ci    Socket::TCPSendOptions tcpSendOptions;
2581e934351Sopenharmony_ci    tcpSendOptions.SetData(connectionData);
2591e934351Sopenharmony_ci    tlsService.Send(tcpSendOptions, [](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
2601e934351Sopenharmony_ci
2611e934351Sopenharmony_ci    (void)tlsService.Close([](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
2621e934351Sopenharmony_ci}
2631e934351Sopenharmony_ci
2641e934351Sopenharmony_ciHWTEST_F(TlsSocketTest, getRemoteCertificateInterface, testing::ext::TestSize.Level2)
2651e934351Sopenharmony_ci{
2661e934351Sopenharmony_ci    if (!TlsUtilsTest::CheckCaPathChainExistence("getRemoteCertificateInterface")) {
2671e934351Sopenharmony_ci        return;
2681e934351Sopenharmony_ci    }
2691e934351Sopenharmony_ci    TLSSocket tlsService;
2701e934351Sopenharmony_ci    SetUnilateralHwTestShortParam(tlsService);
2711e934351Sopenharmony_ci    Socket::TCPSendOptions tcpSendOptions;
2721e934351Sopenharmony_ci    const std::string data = "GET / HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: keep-alive\r\n\r\n";
2731e934351Sopenharmony_ci
2741e934351Sopenharmony_ci    AccessToken token;
2751e934351Sopenharmony_ci    tcpSendOptions.SetData(data);
2761e934351Sopenharmony_ci
2771e934351Sopenharmony_ci    tlsService.Send(tcpSendOptions, [](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
2781e934351Sopenharmony_ci
2791e934351Sopenharmony_ci    tlsService.GetRemoteCertificate(
2801e934351Sopenharmony_ci        [](int32_t errCode, const X509CertRawData &cert) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
2811e934351Sopenharmony_ci
2821e934351Sopenharmony_ci    (void)tlsService.Close([](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
2831e934351Sopenharmony_ci}
2841e934351Sopenharmony_ci
2851e934351Sopenharmony_ciHWTEST_F(TlsSocketTest, protocolInterface, testing::ext::TestSize.Level2)
2861e934351Sopenharmony_ci{
2871e934351Sopenharmony_ci    if (!TlsUtilsTest::CheckCaPathChainExistence("protocolInterface")) {
2881e934351Sopenharmony_ci        return;
2891e934351Sopenharmony_ci    }
2901e934351Sopenharmony_ci
2911e934351Sopenharmony_ci    TLSSocket tlsService;
2921e934351Sopenharmony_ci    TLSConnectOptions options;
2931e934351Sopenharmony_ci    TLSSecureOptions secureOption;
2941e934351Sopenharmony_ci    std::vector<std::string> caVec = { TlsUtilsTest::ChangeToFile(ROOT_CA_PATH_CHAIN),
2951e934351Sopenharmony_ci        TlsUtilsTest::ChangeToFile(MID_CA_CHAIN) };
2961e934351Sopenharmony_ci    secureOption.SetCaChain(caVec);
2971e934351Sopenharmony_ci    std::string protocolV13 = "TLSv1.2";
2981e934351Sopenharmony_ci    std::vector<std::string> protocolVec = { protocolV13 };
2991e934351Sopenharmony_ci    secureOption.SetProtocolChain(protocolVec);
3001e934351Sopenharmony_ci    Socket::NetAddress address;
3011e934351Sopenharmony_ci    MockConnectionParamOptions(address, secureOption, options);
3021e934351Sopenharmony_ci
3031e934351Sopenharmony_ci    AccessToken token;
3041e934351Sopenharmony_ci    tlsService.Bind(address, [](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
3051e934351Sopenharmony_ci
3061e934351Sopenharmony_ci    tlsService.Connect(options, [](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
3071e934351Sopenharmony_ci
3081e934351Sopenharmony_ci    const std::string data = "GET / HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: keep-alive\r\n\r\n";
3091e934351Sopenharmony_ci    Socket::TCPSendOptions tcpSendOptions;
3101e934351Sopenharmony_ci    tcpSendOptions.SetData(data);
3111e934351Sopenharmony_ci
3121e934351Sopenharmony_ci    tlsService.Send(tcpSendOptions, [](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
3131e934351Sopenharmony_ci    std::string getProtocolVal;
3141e934351Sopenharmony_ci    tlsService.GetProtocol([&getProtocolVal](int32_t errCode, const std::string &protocol) {
3151e934351Sopenharmony_ci        EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS);
3161e934351Sopenharmony_ci        getProtocolVal = protocol;
3171e934351Sopenharmony_ci    });
3181e934351Sopenharmony_ci    EXPECT_STREQ(getProtocolVal.c_str(), "TLSv1.2");
3191e934351Sopenharmony_ci
3201e934351Sopenharmony_ci    (void)tlsService.Close([](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
3211e934351Sopenharmony_ci}
3221e934351Sopenharmony_ci
3231e934351Sopenharmony_ciHWTEST_F(TlsSocketTest, getCipherSuiteInterface, testing::ext::TestSize.Level2)
3241e934351Sopenharmony_ci{
3251e934351Sopenharmony_ci    if (!TlsUtilsTest::CheckCaPathChainExistence("getCipherSuiteInterface")) {
3261e934351Sopenharmony_ci        return;
3271e934351Sopenharmony_ci    }
3281e934351Sopenharmony_ci
3291e934351Sopenharmony_ci    TLSConnectOptions options;
3301e934351Sopenharmony_ci    TLSSocket tlsService;
3311e934351Sopenharmony_ci    TLSSecureOptions secureOption;
3321e934351Sopenharmony_ci    std::vector<std::string> caVec = { TlsUtilsTest::ChangeToFile(ROOT_CA_PATH_CHAIN),
3331e934351Sopenharmony_ci        TlsUtilsTest::ChangeToFile(MID_CA_CHAIN) };
3341e934351Sopenharmony_ci    secureOption.SetCaChain(caVec);
3351e934351Sopenharmony_ci    secureOption.SetCipherSuite("ECDHE-RSA-AES128-GCM-SHA256");
3361e934351Sopenharmony_ci    Socket::NetAddress address;
3371e934351Sopenharmony_ci    MockConnectionParamOptions(address, secureOption, options);
3381e934351Sopenharmony_ci
3391e934351Sopenharmony_ci    bool flag = false;
3401e934351Sopenharmony_ci    AccessToken token;
3411e934351Sopenharmony_ci    tlsService.Bind(address, [](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
3421e934351Sopenharmony_ci    tlsService.Connect(options, [](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
3431e934351Sopenharmony_ci
3441e934351Sopenharmony_ci    const std::string data = "GET / HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: keep-alive\r\n\r\n";
3451e934351Sopenharmony_ci    Socket::TCPSendOptions tcpSendOptions;
3461e934351Sopenharmony_ci    tcpSendOptions.SetData(data);
3471e934351Sopenharmony_ci    tlsService.Send(tcpSendOptions, [](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
3481e934351Sopenharmony_ci
3491e934351Sopenharmony_ci    std::vector<std::string> cipherSuite;
3501e934351Sopenharmony_ci    tlsService.GetCipherSuite([&cipherSuite](int32_t errCode, const std::vector<std::string> &suite) {
3511e934351Sopenharmony_ci        EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS);
3521e934351Sopenharmony_ci        cipherSuite = suite;
3531e934351Sopenharmony_ci    });
3541e934351Sopenharmony_ci
3551e934351Sopenharmony_ci    for (auto const &iter : cipherSuite) {
3561e934351Sopenharmony_ci        if (iter == "ECDHE-RSA-AES128-GCM-SHA256") {
3571e934351Sopenharmony_ci            flag = true;
3581e934351Sopenharmony_ci        }
3591e934351Sopenharmony_ci    }
3601e934351Sopenharmony_ci
3611e934351Sopenharmony_ci    EXPECT_TRUE(flag);
3621e934351Sopenharmony_ci
3631e934351Sopenharmony_ci    (void)tlsService.Close([](int32_t errCode) { EXPECT_TRUE(errCode == TLSSOCKET_SUCCESS); });
3641e934351Sopenharmony_ci}
3651e934351Sopenharmony_ci} // namespace TlsSocket
3661e934351Sopenharmony_ci} // namespace NetStack
3671e934351Sopenharmony_ci} // namespace OHOS
368