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