1 /*
2 * Copyright (c) 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
20 #ifdef GTEST_API_
21 #define private public
22 #endif
23
24 #include "net_address.h"
25 #include "netstack_log.h"
26 #include "secure_data.h"
27 #include "socket_error.h"
28 #include "socket_state_base.h"
29 #include "tls.h"
30 #include "tls_certificate.h"
31 #include "tls_configuration.h"
32 #include "tls_key.h"
33 #include "tls_socket.h"
34 #include "tls_socket_server.h"
35
36 namespace OHOS {
37 namespace NetStack {
38 namespace TlsSocket {
39
40 class TLSSecureOptionsBranchTest : public testing::Test {
41 public:
SetUpTestCase()42 static void SetUpTestCase() {}
43
TearDownTestCase()44 static void TearDownTestCase() {}
45
SetUp()46 virtual void SetUp() {}
47
TearDown()48 virtual void TearDown() {}
49 };
50
HWTEST_F(TLSSecureOptionsBranchTest, TLSSecureOptionsBranchTest001, testing::ext::TestSize.Level2)51 HWTEST_F(TLSSecureOptionsBranchTest, TLSSecureOptionsBranchTest001, testing::ext::TestSize.Level2)
52 {
53 TLSSecureOptions secureOption;
54 std::vector<std::string> crlChain = {};
55 secureOption.SetCrlChain(crlChain);
56 auto caChain = secureOption.GetCrlChain();
57 EXPECT_TRUE(crlChain == caChain);
58
59 VerifyMode verifyMode = VerifyMode::ONE_WAY_MODE;
60 secureOption.SetVerifyMode(verifyMode);
61 auto mode = secureOption.GetVerifyMode();
62 EXPECT_EQ(mode, verifyMode);
63
64 TLSConnectOptions connectOptions;
65 CheckServerIdentity checkServerIdentity;
66 connectOptions.SetCheckServerIdentity(checkServerIdentity);
67 auto identity = connectOptions.GetCheckServerIdentity();
68 EXPECT_TRUE(identity == nullptr);
69
70 sockaddr *addr = nullptr;
71 TLSSocket server;
72 auto testString = server.MakeAddressString(addr);
73 EXPECT_TRUE(testString.empty());
74
75 sockaddr addrInfo;
76 addrInfo.sa_family = 0;
77 testString = server.MakeAddressString(&addrInfo);
78 EXPECT_TRUE(testString.empty());
79
80 addrInfo.sa_family = AF_INET;
81 testString = server.MakeAddressString(&addrInfo);
82 EXPECT_FALSE(testString.empty());
83
84 addrInfo.sa_family = AF_INET6;
85 testString = server.MakeAddressString(&addrInfo);
86 EXPECT_FALSE(testString.empty());
87
88 Socket::NetAddress address;
89 sockaddr_in6 addr6 = { 0 };
90 sockaddr_in addr4 = { 0 };
91 socklen_t len;
92 server.GetAddr(address, &addr4, &addr6, &addr, &len);
93 }
94
HWTEST_F(TLSSecureOptionsBranchTest, TLSSecureOptionsBranchTest002, testing::ext::TestSize.Level2)95 HWTEST_F(TLSSecureOptionsBranchTest, TLSSecureOptionsBranchTest002, testing::ext::TestSize.Level2)
96 {
97 TLSSocket server;
98 sa_family_t family = 0;
99 server.MakeIpSocket(family);
100
101 family = AF_INET;
102 server.MakeIpSocket(family);
103
104 family = AF_INET6;
105 server.MakeIpSocket(family);
106
107 std::string data = "";
108 Socket::SocketRemoteInfo remoteInfo;
109 server.CallOnMessageCallback(data, remoteInfo);
110 server.CallOnConnectCallback();
111 server.CallOnCloseCallback();
112
113 int32_t err = 0;
114 BindCallback bindCallback;
115 server.CallBindCallback(err, bindCallback);
116
117 ConnectCallback connectCallback;
118 server.CallConnectCallback(err, connectCallback);
119
120 CloseCallback closeCallback;
121 server.CallCloseCallback(err, closeCallback);
122
123 Socket::NetAddress address;
124 GetRemoteAddressCallback addressCallback;
125 server.CallGetRemoteAddressCallback(err, address, addressCallback);
126
127 Socket::SocketStateBase state;
128 GetStateCallback stateCallback;
129 server.CallGetStateCallback(err, state, stateCallback);
130
131 SetExtraOptionsCallback optionsCallback;
132 server.CallSetExtraOptionsCallback(err, optionsCallback);
133
134 X509CertRawData cert;
135 GetCertificateCallback certificateCallback;
136 server.CallGetCertificateCallback(err, cert, certificateCallback);
137
138 GetRemoteCertificateCallback remoteCertificateCallback;
139 server.CallGetRemoteCertificateCallback(err, cert, remoteCertificateCallback);
140
141 std::string protocol = "";
142 GetProtocolCallback protocolCallback;
143 server.CallGetProtocolCallback(err, protocol, protocolCallback);
144
145 OnMessageCallback onMessageCallback;
146 server.OnMessage(onMessageCallback);
147 server.OffMessage();
148 EXPECT_TRUE(server.onMessageCallback_ == nullptr);
149 }
150
HWTEST_F(TLSSecureOptionsBranchTest, TLSSecureOptionsBranchTest003, testing::ext::TestSize.Level2)151 HWTEST_F(TLSSecureOptionsBranchTest, TLSSecureOptionsBranchTest003, testing::ext::TestSize.Level2)
152 {
153 TLSSocket server;
154 int32_t err = 0;
155 std::vector<std::string> suite = {};
156 GetCipherSuiteCallback cipherSuiteCallback;
157 server.CallGetCipherSuiteCallback(err, suite, cipherSuiteCallback);
158
159 GetSignatureAlgorithmsCallback algorithmsCallback;
160 server.CallGetSignatureAlgorithmsCallback(err, suite, algorithmsCallback);
161
162 Socket::NetAddress address;
163 BindCallback bindCallback;
164 server.Bind(address, bindCallback);
165
166 GetRemoteAddressCallback addressCallback;
167 server.GetRemoteAddress(addressCallback);
168 server.GetIp4RemoteAddress(addressCallback);
169 server.GetIp6RemoteAddress(addressCallback);
170
171 GetStateCallback stateCallback;
172 server.GetState(stateCallback);
173
174 Socket::ExtraOptionsBase option;
175 bool ret = server.SetBaseOptions(option);
176 EXPECT_TRUE(ret);
177
178 TlsSocket::SetExtraOptionsCallback optionsCallback;
179 Socket::TCPExtraOptions tcpExtraOptions;
180 ret = server.SetExtraOptions(tcpExtraOptions);
181 EXPECT_TRUE(ret);
182
183 tcpExtraOptions.SetKeepAlive(true);
184 ret = server.SetExtraOptions(tcpExtraOptions);
185 EXPECT_TRUE(ret);
186
187 tcpExtraOptions.SetOOBInline(true);
188 ret = server.SetExtraOptions(tcpExtraOptions);
189 EXPECT_TRUE(ret);
190
191 tcpExtraOptions.SetTCPNoDelay(true);
192 ret = server.SetExtraOptions(tcpExtraOptions);
193 EXPECT_TRUE(ret);
194
195 OnConnectCallback onConnectCallback;
196 server.OffConnect();
197 server.OnConnect(onConnectCallback);
198 EXPECT_TRUE(server.onConnectCallback_ == nullptr);
199 }
200
HWTEST_F(TLSSecureOptionsBranchTest, TLSSecureOptionsBranchTest004, testing::ext::TestSize.Level2)201 HWTEST_F(TLSSecureOptionsBranchTest, TLSSecureOptionsBranchTest004, testing::ext::TestSize.Level2)
202 {
203 TLSSocket server;
204 server.OffError();
205
206 TLSConfiguration tLSConfiguration;
207 TLSSocket::TLSSocketInternal internal;
208 tLSConfiguration = internal.GetTlsConfiguration();
209 std::vector<std::string> certificate;
210 tLSConfiguration.SetCaCertificate(certificate);
211 EXPECT_TRUE(tLSConfiguration.GetCaCertificate().empty());
212
213 TLSConnectOptions connectOptions;
214 auto ret = internal.StartTlsConnected(connectOptions);
215 EXPECT_FALSE(ret);
216
217 ret = internal.CreatTlsContext();
218 EXPECT_TRUE(ret);
219
220 ret = internal.StartShakingHands(connectOptions);
221 EXPECT_FALSE(ret);
222
223 ret = internal.GetRemoteCertificateFromPeer();
224 EXPECT_FALSE(ret);
225
226 ret = internal.SetRemoteCertRawData();
227 EXPECT_FALSE(ret);
228
229 OnCloseCallback onCloseCallback;
230 server.OnClose(onCloseCallback);
231 server.OffClose();
232 EXPECT_TRUE(server.onCloseCallback_ == nullptr);
233 }
234
HWTEST_F(TLSSecureOptionsBranchTest, TLSSecureOptionsBranchTest005, testing::ext::TestSize.Level2)235 HWTEST_F(TLSSecureOptionsBranchTest, TLSSecureOptionsBranchTest005, testing::ext::TestSize.Level2)
236 {
237 TLSConnectOptions connectOptions;
238 TLSSocket::TLSSocketInternal *tlsSocketInternal = new TLSSocket::TLSSocketInternal();
239 tlsSocketInternal->ssl_ = nullptr;
240 bool ret = tlsSocketInternal->StartShakingHands(connectOptions);
241 NETSTACK_LOGI("TLSSecureOptionsBranchTest005 StartShakingHands = %{public}s", std::to_string(ret).c_str());
242 EXPECT_FALSE(ret);
243 }
244 } // namespace TlsSocket
245 } // namespace NetStack
246 } // namespace OHOS
247