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