• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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