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 <string>
17 #include <gtest/gtest.h>
18 #include <securec.h>
19
20 #include "inner_socket.h"
21 #include "socket.h"
22 #include "softbus_error_code.h"
23
24 #define SOCKET_NAME_MAX_LEN 255
25 #define SOCKET_NAME_INVALID_LEN (SOCKET_NAME_MAX_LEN + 1)
26 #define SOCKET_PKG_NAME_MAX_LEN 64
27 #define SOCKET_PKG_NAME_INVALID_LEN (SOCKET_PKG_NAME_MAX_LEN + 1)
28 #define SOCKET_NETWORKID_MAX_LEN 64
29 #define SOCKET_NETWORKID_INVALID_LEN (SOCKET_NETWORKID_MAX_LEN + 1)
30
31 using namespace testing::ext;
32 namespace OHOS {
33 static std::string g_pkgName = "dms";
34 static std::string g_socketName = "ohos.distributedschedule.dms.test.client";
35 static std::string g_socketPeerName = "ohos.distributedschedule.dms.test.server";
36 static std::string g_networkId = "ABCDEF00ABCDEF00ABCDEF00ABCDEF00ABCDEF00ABCDEF00ABCDEF00ABCDEF0";
37
38 class TransClientSocketServiceTest : public testing::Test {
39 public:
TransClientSocketServiceTest()40 TransClientSocketServiceTest() { }
~TransClientSocketServiceTest()41 ~TransClientSocketServiceTest() { }
SetUpTestCase(void)42 static void SetUpTestCase(void) {}
TearDownTestCase(void)43 static void TearDownTestCase(void) {}
SetUp()44 void SetUp() override { }
TearDown()45 void TearDown() override { }
46 };
47
48 /**
49 * @tc.name: SocketName001
50 * @tc.desc: call Socket function with different socket name.
51 * @tc.type: FUNC
52 * @tc.require:
53 */
54 HWTEST_F(TransClientSocketServiceTest, SocketName001, TestSize.Level1)
55 {
56 SocketInfo info;
57 info.peerName = const_cast<char *>(g_socketPeerName.c_str());
58 info.peerNetworkId = const_cast<char *>(g_networkId.c_str());
59 info.pkgName = const_cast<char *>(g_pkgName.c_str());
60 info.dataType = DATA_TYPE_MESSAGE;
61
62 int32_t socketId = -1;
63
64 // socket name is null pointer
65 info.name = nullptr;
66 socketId = Socket(info);
67 ASSERT_EQ(socketId, SOFTBUS_INVALID_PARAM);
68
69 // the length of socket name is zero
70 char socketName[SOCKET_NAME_INVALID_LEN + 1];
71 memset_s(socketName, SOCKET_NAME_INVALID_LEN + 1, 0, SOCKET_NAME_INVALID_LEN + 1);
72 info.name = socketName;
73 socketId = Socket(info);
74 ASSERT_EQ(socketId, SOFTBUS_INVALID_PARAM);
75
76 // the length of socket name greater than 255
77 memset_s(socketName, SOCKET_NAME_INVALID_LEN + 1, 'a', SOCKET_NAME_INVALID_LEN);
78 info.name = socketName;
79 socketId = Socket(info);
80 ASSERT_EQ(socketId, SOFTBUS_INVALID_PARAM);
81 }
82
83 /**
84 * @tc.name: SocketPeerName001
85 * @tc.desc: call Socket function with different socket peerName.
86 * @tc.type: FUNC
87 * @tc.require:
88 */
89 HWTEST_F(TransClientSocketServiceTest, SocketPeerName001, TestSize.Level1)
90 {
91 SocketInfo info;
92 info.name = const_cast<char *>(g_socketName.c_str());
93 info.peerNetworkId = const_cast<char *>(g_networkId.c_str());
94 info.pkgName = const_cast<char *>(g_pkgName.c_str());
95 info.dataType = DATA_TYPE_MESSAGE;
96 int32_t socketId = -1;
97
98 // the length of socket peerName is zero
99 char socketName[SOCKET_NAME_INVALID_LEN + 1];
100 memset_s(socketName, SOCKET_NAME_INVALID_LEN + 1, 0, SOCKET_NAME_INVALID_LEN + 1);
101 info.peerName = socketName;
102 socketId = Socket(info);
103 ASSERT_EQ(socketId, SOFTBUS_INVALID_PARAM);
104
105 // the length of socket name greater than 255
106 memset_s(socketName, SOCKET_NAME_INVALID_LEN + 1, 'a', SOCKET_NAME_INVALID_LEN);
107 info.peerName = socketName;
108 socketId = Socket(info);
109 ASSERT_EQ(socketId, SOFTBUS_INVALID_PARAM);
110 }
111
112 /**
113 * @tc.name: SocketPeerNetworkId001
114 * @tc.desc: call Socket function with different socket peerNetworkId.
115 * @tc.type: FUNC
116 * @tc.require:
117 */
118 HWTEST_F(TransClientSocketServiceTest, SocketPeerNetworkId001, TestSize.Level1)
119 {
120 SocketInfo info;
121 info.name = const_cast<char *>(g_socketName.c_str());
122 info.peerName = const_cast<char *>(g_socketPeerName.c_str());
123 info.pkgName = const_cast<char *>(g_pkgName.c_str());
124 info.dataType = DATA_TYPE_MESSAGE;
125 int32_t socketId = -1;
126
127 // the length of socket peerNetworkId is zero
128 char networkId[SOCKET_NETWORKID_INVALID_LEN + 1];
129 memset_s(networkId, SOCKET_NETWORKID_INVALID_LEN + 1, 0, SOCKET_NETWORKID_INVALID_LEN + 1);
130 info.peerNetworkId = networkId;
131 socketId = Socket(info);
132 ASSERT_EQ(socketId, SOFTBUS_INVALID_PARAM);
133
134 // the length of socket peerNetworkId greater than 65
135 memset_s(networkId, SOCKET_NETWORKID_INVALID_LEN + 1, 'a', SOCKET_NETWORKID_INVALID_LEN);
136 info.peerNetworkId = networkId;
137 socketId = Socket(info);
138 ASSERT_EQ(socketId, SOFTBUS_INVALID_PARAM);
139 }
140
141 /**
142 * @tc.name: SocketPkgName001
143 * @tc.desc: call Socket function with different socket pkgName.
144 * @tc.type: FUNC
145 * @tc.require:
146 */
147 HWTEST_F(TransClientSocketServiceTest, SocketPkgName001, TestSize.Level1)
148 {
149 SocketInfo info;
150 info.name = const_cast<char *>(g_socketName.c_str());
151 info.peerName = const_cast<char *>(g_socketPeerName.c_str());
152 info.peerNetworkId = const_cast<char *>(g_networkId.c_str());
153 info.dataType = DATA_TYPE_MESSAGE;
154
155 int32_t socketId = -1;
156
157 // socket name is null pointer
158 info.pkgName = nullptr;
159 socketId = Socket(info);
160 ASSERT_EQ(socketId, SOFTBUS_INVALID_PARAM);
161
162 // the length of socket name is zero
163 char pkgName[SOCKET_PKG_NAME_INVALID_LEN + 1];
164 memset_s(pkgName, SOCKET_PKG_NAME_INVALID_LEN + 1, 0, SOCKET_PKG_NAME_INVALID_LEN + 1);
165 info.pkgName = pkgName;
166 socketId = Socket(info);
167 ASSERT_EQ(socketId, SOFTBUS_INVALID_PARAM);
168
169 // the length of socket name greater than 255
170 memset_s(pkgName, SOCKET_PKG_NAME_INVALID_LEN + 1, 'a', SOCKET_PKG_NAME_INVALID_LEN);
171 info.name = pkgName;
172 socketId = Socket(info);
173 ASSERT_EQ(socketId, SOFTBUS_INVALID_PARAM);
174 }
175
176 /**
177 * @tc.name: SocketPkgName001
178 * @tc.desc: call Socket function with different data type.
179 * @tc.type: FUNC
180 * @tc.require:
181 */
182 HWTEST_F(TransClientSocketServiceTest, DataType001, TestSize.Level1)
183 {
184 SocketInfo info;
185 info.name = const_cast<char *>(g_socketName.c_str());
186 info.peerName = nullptr;
187 info.peerNetworkId = nullptr;
188 info.pkgName = const_cast<char *>(g_pkgName.c_str());
189
190 for (int32_t type = DATA_TYPE_MESSAGE; type < DATA_TYPE_BUTT; type++) {
191 info.dataType = static_cast<TransDataType>(type);
192 int32_t socketId = Socket(info);
193 EXPECT_EQ(socketId, SOFTBUS_TRANS_SESSION_ADDPKG_FAILED);
194 }
195 }
196
197 /**
198 * @tc.name: DfsBind001
199 * @tc.desc: call DfsBind function with invalid socket or listener.
200 * @tc.type: FUNC
201 * @tc.require:
202 */
203 HWTEST_F(TransClientSocketServiceTest, DfsBind001, TestSize.Level1)
204 {
205 ISocketListener listener;
206 int32_t ret = DfsBind(-1, &listener);
207 EXPECT_EQ(ret, SOFTBUS_INVALID_PARAM);
208
209 ret = DfsBind(1, nullptr);
210 EXPECT_EQ(ret, SOFTBUS_INVALID_PARAM);
211
212 ret = DfsBind(1, &listener);
213 EXPECT_EQ(ret, SOFTBUS_INVALID_PARAM);
214 }
215
OnShutdown(int32_t socket,ShutdownReason reason)216 static void OnShutdown(int32_t socket, ShutdownReason reason)
217 {
218 return;
219 }
220
221 /**
222 * @tc.name: DfsBind002
223 * @tc.desc: call DfsBind function with offline socket.
224 * @tc.type: FUNC
225 * @tc.require:
226 */
227 HWTEST_F(TransClientSocketServiceTest, DfsBind002, TestSize.Level1)
228 {
229 ISocketListener listener = { .OnShutdown = OnShutdown };
230 int32_t ret = DfsBind(1, &listener);
231 EXPECT_EQ(ret, SOFTBUS_TRANS_SESSION_INFO_NOT_FOUND);
232 }
233
234 /**
235 * @tc.name: SetSocketOpt001
236 * @tc.desc: call SetSocketOpt function with with invalid parameter.
237 * @tc.type: FUNC
238 * @tc.require:
239 */
240 HWTEST_F(TransClientSocketServiceTest, SetSocketOpt001, TestSize.Level1)
241 {
242 OptLevel levelInvalid = OPT_LEVEL_BUTT;
243 OptLevel levelValid = OPT_LEVEL_SOFTBUS;
244 OptType optTypeInvalid = (OptType)-1;
245 OptType optTypeValid = OPT_TYPE_MAX_BUFFER;
246 int32_t socket = 1;
247 int32_t optValueValid = 1234;
248 void *temp = &optValueValid;
249 int32_t optValueSizeInvalid = -1;
250 int32_t optValueSizeValid = sizeof(int32_t);
251 int32_t ret = SetSocketOpt(socket, levelInvalid, optTypeInvalid, nullptr, optValueSizeInvalid);
252 ASSERT_EQ(ret, SOFTBUS_INVALID_PARAM);
253 ret = SetSocketOpt(socket, levelValid, optTypeInvalid, nullptr, optValueSizeInvalid);
254 ASSERT_EQ(ret, SOFTBUS_INVALID_PARAM);
255 ret = SetSocketOpt(socket, levelValid, optTypeValid, nullptr, optValueSizeInvalid);
256 ASSERT_EQ(ret, SOFTBUS_INVALID_PARAM);
257 ret = SetSocketOpt(socket, levelValid, optTypeValid, temp, optValueSizeInvalid);
258 ASSERT_EQ(ret, SOFTBUS_INVALID_PARAM);
259 ret = SetSocketOpt(socket, levelValid, optTypeValid, temp, optValueSizeValid);
260 ASSERT_NE(ret, SOFTBUS_INVALID_PARAM);
261 }
262
263 /**
264 * @tc.name: GetSocketOpt001
265 * @tc.desc: call GetSocketOpt function with with invalid parameter.
266 * @tc.type: FUNC
267 * @tc.require:
268 */
269 HWTEST_F(TransClientSocketServiceTest, GetSocketOpt001, TestSize.Level1)
270 {
271 OptLevel levelInvalid = OPT_LEVEL_BUTT;
272 OptLevel levelValid = OPT_LEVEL_SOFTBUS;
273 OptType optTypeInvalid = (OptType)-1;
274 OptType optTypeValid = OPT_TYPE_MAX_BUFFER;
275 int32_t socket = 1;
276 int32_t optValueValid = 0;
277 void *temp = &optValueValid;
278 int32_t valueSize = 0;
279 int32_t *optValueSizeValid = &valueSize;
280 int32_t ret = GetSocketOpt(socket, levelInvalid, optTypeInvalid, nullptr, nullptr);
281 ASSERT_EQ(ret, SOFTBUS_INVALID_PARAM);
282 ret = GetSocketOpt(socket, levelValid, optTypeInvalid, nullptr, nullptr);
283 ASSERT_EQ(ret, SOFTBUS_INVALID_PARAM);
284 ret = GetSocketOpt(socket, levelValid, optTypeValid, nullptr, nullptr);
285 ASSERT_EQ(ret, SOFTBUS_INVALID_PARAM);
286 ret = GetSocketOpt(socket, levelValid, optTypeValid, temp, nullptr);
287 ASSERT_EQ(ret, SOFTBUS_INVALID_PARAM);
288 ret = GetSocketOpt(socket, levelValid, optTypeValid, temp, optValueSizeValid);
289 ASSERT_NE(ret, SOFTBUS_INVALID_PARAM);
290 }
291
292 /**
293 * @tc.name: GetSocketOpt002
294 * @tc.desc: call GetSocketOpt function with with valid parameter.
295 * @tc.type: FUNC
296 * @tc.require:
297 */
298 HWTEST_F(TransClientSocketServiceTest, GetSocketOpt002, TestSize.Level1)
299 {
300 OptLevel level = OPT_LEVEL_SOFTBUS;
301 OptType optType = OPT_TYPE_MAX_BUFFER;
302 int socketId = 1;
303 uint32_t optValueValid = 0;
304 void *temp = &optValueValid;
305 int32_t valueSize = sizeof(uint32_t);
306 int32_t *optValueSizeValid = &valueSize;
307 int32_t ret = SetSocketOpt(socketId, level, optType, temp, valueSize);
308 ASSERT_EQ(ret, SOFTBUS_NOT_IMPLEMENT);
309 ret = GetSocketOpt(socketId, level, optType, temp, optValueSizeValid);
310 ASSERT_EQ(ret, SOFTBUS_NOT_IMPLEMENT);
311 }
312
313 /**
314 * @tc.name: RegisterRelationChecker001
315 * @tc.desc: call RegisterRelationChecker function with with invalid parameter.
316 * @tc.type: FUNC
317 * @tc.require:
318 */
319 HWTEST_F(TransClientSocketServiceTest, RegisterRelationChecker001, TestSize.Level1)
320 {
321 int32_t ret = RegisterRelationChecker(nullptr);
322 ASSERT_EQ(ret, SOFTBUS_INVALID_PARAM);
323 }
324 } // namespace OHOS