• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <fstream>
17 #include <gtest/gtest.h>
18 #include <iostream>
19 #include <openssl/rsa.h>
20 #include <openssl/ssl.h>
21 #include <sstream>
22 #include <string>
23 #include <string_view>
24 #include <unistd.h>
25 #include <vector>
26 
27 #include "net_address.h"
28 #include "secure_data.h"
29 #include "socket_error.h"
30 #include "socket_state_base.h"
31 #include "tls.h"
32 #include "tls_certificate.h"
33 #include "tls_configuration.h"
34 #include "tls_key.h"
35 #include "tls_socket_server.h"
36 #include "tls_socket.h"
37 
38 namespace OHOS {
39 namespace NetStack {
40 namespace TlsSocketServer {
41 namespace {
42 const std::string_view CA_DER = "/data/ClientCert/ca.crt";
43 const std::string_view IP_ADDRESS = "/data/Ip/address.txt";
44 const std::string_view PORT = "/data/Ip/port.txt";
45 
CheckCaFileExistence(const char * function)46 inline bool CheckCaFileExistence(const char *function)
47 {
48     if (access(CA_DER.data(), 0)) {
49         std::cout << "CA file does not exist! (" << function << ")";
50         return false;
51     }
52     return true;
53 }
54 
ChangeToFile(std::string_view fileName)55 std::string ChangeToFile(std::string_view fileName)
56 {
57     std::ifstream file;
58     file.open(fileName);
59     std::stringstream ss;
60     ss << file.rdbuf();
61     std::string infos = ss.str();
62     file.close();
63     return infos;
64 }
65 
66 
GetIp(std::string ip)67 std::string GetIp(std::string ip)
68 {
69     return ip.substr(0, ip.length() - 1);
70 }
71 
72 } // namespace
73 class TlsSocketServerTest : public testing::Test {
74 public:
SetUpTestCase()75     static void SetUpTestCase() {}
76 
TearDownTestCase()77     static void TearDownTestCase() {}
78 
SetUp()79     virtual void SetUp() {}
80 
TearDown()81     virtual void TearDown() {}
82 };
83 
84 HWTEST_F(TlsSocketServerTest, ListenInterface, testing::ext::TestSize.Level2)
85 {
86     if (!CheckCaFileExistence("ListenInterface")) {
87         return;
88     }
89     TLSSocketServer server;
90     TlsSocket::TLSConnectOptions tlsListenOptions;
91 
__anond4b183950202(int32_t errCode) 92     server.Listen(tlsListenOptions, [](int32_t errCode) { EXPECT_TRUE(errCode == TlsSocket::TLSSOCKET_SUCCESS); });
__anond4b183950302(int32_t errCode) 93     server.Listen(tlsListenOptions, [](int32_t errCode) { EXPECT_TRUE(errCode == TlsSocket::TLSSOCKET_SUCCESS); });
94 }
95 
96 HWTEST_F(TlsSocketServerTest, sendInterface, testing::ext::TestSize.Level2)
97 {
98     if (!CheckCaFileExistence("sendInterface")) {
99         return;
100     }
101 
102     TLSSocketServer server;
103 
104     TLSServerSendOptions tlsServerSendOptions;
105 
106     const std::string data = "how do you do? this is sendInterface";
107     tlsServerSendOptions.SetSendData(data);
__anond4b183950402(int32_t errCode) 108     server.Send(tlsServerSendOptions, [](int32_t errCode) { EXPECT_TRUE(errCode == TlsSocket::TLSSOCKET_SUCCESS); });
109 }
110 
111 HWTEST_F(TlsSocketServerTest, closeInterface, testing::ext::TestSize.Level2)
112 {
113     if (!CheckCaFileExistence("closeInterface")) {
114         return;
115     }
116 
117     TLSSocketServer server;
118 
119     const std::string data = "how do you do? this is closeInterface";
120     TLSServerSendOptions tlsServerSendOptions;
121     tlsServerSendOptions.SetSendData(data);
122     int socketFd =  tlsServerSendOptions.GetSocket();
123 
__anond4b183950502(int32_t errCode) 124     server.Send(tlsServerSendOptions, [](int32_t errCode) { EXPECT_TRUE(errCode == TlsSocket::TLSSOCKET_SUCCESS); });
125     sleep(2);
126 
__anond4b183950602(int32_t errCode) 127     (void)server.Close(socketFd, [](int32_t errCode) { EXPECT_TRUE(errCode == TlsSocket::TLSSOCKET_SUCCESS); });
128 }
129 
130 HWTEST_F(TlsSocketServerTest, stopInterface, testing::ext::TestSize.Level2)
131 {
132     if (!CheckCaFileExistence("stopInterface")) {
133         return;
134     }
135 
136     TLSSocketServer server;
137 
138     TLSServerSendOptions tlsServerSendOptions;
139     int socketFd =  tlsServerSendOptions.GetSocket();
140 
141 
142     const std::string data = "how do you do? this is stopInterface";
143     tlsServerSendOptions.SetSendData(data);
__anond4b183950702(int32_t errCode) 144     server.Send(tlsServerSendOptions, [](int32_t errCode) { EXPECT_TRUE(errCode == TlsSocket::TLSSOCKET_SUCCESS); });
145     sleep(2);
146 
147 
__anond4b183950802(int32_t errCode) 148     (void)server.Close(socketFd, [](int32_t errCode) { EXPECT_TRUE(errCode == TlsSocket::TLSSOCKET_SUCCESS); });
149     sleep(2);
150 
151 
__anond4b183950902(int32_t errCode) 152     server.Stop([](int32_t errCode) { EXPECT_TRUE(errCode == TlsSocket::TLSSOCKET_SUCCESS); });
153 }
154 
155 HWTEST_F(TlsSocketServerTest, getRemoteAddressInterface, testing::ext::TestSize.Level2)
156 {
157     if (!CheckCaFileExistence("getRemoteAddressInterface")) {
158         return;
159     }
160 
161     TLSSocketServer server;
162 
163     TLSServerSendOptions tlsServerSendOptions;
164     int socketFd = tlsServerSendOptions.GetSocket();
165     Socket::NetAddress address;
166 
167     address.SetAddress(GetIp(ChangeToFile(IP_ADDRESS)));
168     address.SetPort(std::atoi(ChangeToFile(PORT).c_str()));
169     address.SetFamilyBySaFamily(AF_INET);
170 
171     Socket::NetAddress netAddress;
172     server.GetRemoteAddress(socketFd, [&netAddress](int32_t errCode,
__anond4b183950a02(int32_t errCode, const Socket::NetAddress &address) 173         const Socket::NetAddress &address) {
174     EXPECT_TRUE(errCode == TlsSocket::TLSSOCKET_SUCCESS);
175     netAddress.SetAddress(address.GetAddress());
176     netAddress.SetPort(address.GetPort());
177     netAddress.SetFamilyBySaFamily(address.GetSaFamily());
178     });
179 
180     const std::string data = "how do you do? this is getRemoteAddressInterface";
181     tlsServerSendOptions.SetSendData(data);
__anond4b183950b02(int32_t errCode) 182     server.Send(tlsServerSendOptions, [](int32_t errCode) { EXPECT_TRUE(errCode == TlsSocket::TLSSOCKET_SUCCESS); });
183     sleep(2);
184 
__anond4b183950c02(int32_t errCode) 185     (void)server.Close(socketFd, [](int32_t errCode) { EXPECT_TRUE(errCode == TlsSocket::TLSSOCKET_SUCCESS); });
186     sleep(2);
187 
__anond4b183950d02(int32_t errCode) 188     server.Stop([](int32_t errCode) { EXPECT_TRUE(errCode == TlsSocket::TLSSOCKET_SUCCESS); });
189 }
190 
191 HWTEST_F(TlsSocketServerTest, getRemoteCertificateInterface, testing::ext::TestSize.Level2)
192 {
193     if (!CheckCaFileExistence("getRemoteCertificateInterface")) {
194         return;
195     }
196 
197     TLSSocketServer server;
198 
199     TLSServerSendOptions tlsServerSendOptions;
200     int socketFd = tlsServerSendOptions.GetSocket();
201 
202 
203     const std::string data = "how do you do? This is UT test getRemoteCertificateInterface";
204     tlsServerSendOptions.SetSendData(data);
__anond4b183950e02(int32_t errCode) 205     server.Send(tlsServerSendOptions, [](int32_t errCode) {
206         EXPECT_TRUE(errCode == TlsSocket::TLSSOCKET_SUCCESS); });
207     sleep(2);
208 
__anond4b183950f02(int32_t errCode, const TlsSocket::X509CertRawData &cert) 209     server.GetRemoteCertificate(socketFd, [](int32_t errCode, const TlsSocket::X509CertRawData &cert) {
210         EXPECT_TRUE(errCode == TlsSocket::TLSSOCKET_SUCCESS); });
211 
__anond4b183951002(int32_t errCode) 212     (void)server.Close(socketFd, [](int32_t errCode) { EXPECT_TRUE(errCode == TlsSocket::TLSSOCKET_SUCCESS); });
213     sleep(2);
214 
__anond4b183951102(int32_t errCode) 215     server.Stop([](int32_t errCode) { EXPECT_TRUE(errCode == TlsSocket::TLSSOCKET_SUCCESS); });
216 }
217 
218 HWTEST_F(TlsSocketServerTest, getCertificateInterface, testing::ext::TestSize.Level2)
219 {
220     if (!CheckCaFileExistence("getCertificateInterface")) {
221         return;
222     }
223     TLSSocketServer server;
224 
225     const std::string data = "how do you do? This is UT test getCertificateInterface";
226     TLSServerSendOptions tlsServerSendOptions;
227     tlsServerSendOptions.SetSendData(data);
228     int socketFd = tlsServerSendOptions.GetSocket();
__anond4b183951202(int32_t errCode) 229     server.Send(tlsServerSendOptions, [](int32_t errCode) { EXPECT_TRUE(TlsSocket::TLSSOCKET_SUCCESS); });
230 
231     server.GetCertificate(
__anond4b183951302(int32_t errCode, const TlsSocket::X509CertRawData &cert) 232         [](int32_t errCode, const TlsSocket::X509CertRawData &cert) { EXPECT_TRUE(TlsSocket::TLSSOCKET_SUCCESS); });
233 
234     sleep(2);
__anond4b183951402(int32_t errCode) 235     (void)server.Close(socketFd, [](int32_t errCode) { EXPECT_TRUE(TlsSocket::TLSSOCKET_SUCCESS); });
236 }
237 
238 HWTEST_F(TlsSocketServerTest, protocolInterface, testing::ext::TestSize.Level2)
239 {
240     if (!CheckCaFileExistence("protocolInterface")) {
241         return;
242     }
243     TLSSocketServer server;
244 
245     const std::string data = "how do you do? this is protocolInterface";
246     TLSServerSendOptions tlsServerSendOptions;
247     tlsServerSendOptions.SetSendData(data);
248 
249     int socketFd = tlsServerSendOptions.GetSocket();
__anond4b183951502(int32_t errCode) 250     server.Send(tlsServerSendOptions, [](int32_t errCode) { EXPECT_TRUE(TlsSocket::TLSSOCKET_SUCCESS); });
251     std::string getProtocolVal;
__anond4b183951602(int32_t errCode, const std::string &protocol) 252     server.GetProtocol([&getProtocolVal](int32_t errCode, const std::string &protocol) {
253         EXPECT_TRUE(TlsSocket::TLSSOCKET_SUCCESS);
254         getProtocolVal = protocol;
255     });
256     EXPECT_STREQ(getProtocolVal.c_str(), "TLSv1.3");
257 
258     Socket::SocketStateBase stateBase;
__anond4b183951702(int32_t errCode, Socket::SocketStateBase state) 259     server.GetState([&stateBase](int32_t errCode, Socket::SocketStateBase state) {
260         if (TlsSocket::TLSSOCKET_SUCCESS) {
261             EXPECT_TRUE(TlsSocket::TLSSOCKET_SUCCESS);
262             stateBase.SetIsBound(state.IsBound());
263             stateBase.SetIsClose(state.IsClose());
264             stateBase.SetIsConnected(state.IsConnected());
265         }
266     });
267     EXPECT_TRUE(stateBase.IsConnected());
268     sleep(2);
269 
__anond4b183951802(int32_t errCode) 270     (void)server.Close(socketFd, [](int32_t errCode) { EXPECT_TRUE(TlsSocket::TLSSOCKET_SUCCESS); });
271 }
272 
273 HWTEST_F(TlsSocketServerTest, getSignatureAlgorithmsInterface, testing::ext::TestSize.Level2)
274 {
275     if (!CheckCaFileExistence("getSignatureAlgorithmsInterface")) {
276         return;
277     }
278 
279     TLSSocketServer server;
280     TlsSocket::TLSSecureOptions secureOption;
281 
282     const std::string data = "how do you do? this is getSigntureAlgorithmsInterface";
283     TLSServerSendOptions tlsServerSendOptions;
284     tlsServerSendOptions.SetSendData(data);
285 
286     int socketFd = tlsServerSendOptions.GetSocket();
__anond4b183951902(int32_t errCode) 287     server.Send(tlsServerSendOptions, [](int32_t errCode) { EXPECT_TRUE(TlsSocket::TLSSOCKET_SUCCESS); });
288     sleep(2);
289 
290     bool testFlag = false;
291     std::string signatureAlgorithmVec = {"rsa_pss_rsae_sha256:ECDSA+SHA256"};
292     secureOption.SetSignatureAlgorithms(signatureAlgorithmVec);
293     std::vector<std::string> testSignatureAlgorithms;
294     server.GetSignatureAlgorithms(socketFd, [&testSignatureAlgorithms](int32_t errCode,
__anond4b183951a02(int32_t errCode, const std::vector<std::string> &algorithms) 295         const std::vector<std::string> &algorithms) {
296         if (errCode == TlsSocket::TLSSOCKET_SUCCESS) {
297             testSignatureAlgorithms = algorithms;
298         }
299     });
300     for (auto const &iter : testSignatureAlgorithms) {
301         if (iter == "ECDSA+SHA256") {
302             testFlag = true;
303         }
304     }
305     EXPECT_TRUE(testFlag);
306     sleep(2);
307 
308 
__anond4b183951b02(int32_t errCode) 309     (void)server.Close(socketFd, [](int32_t errCode) { EXPECT_TRUE(TlsSocket::TLSSOCKET_SUCCESS); });
310 }
311 
312 
313 } //TlsSocketServer
314 } //NetStack
315 } //OHOS
316