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