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 <gtest/gtest.h>
17
18 #include "socket_common.h"
19 #include "accesstoken_kit.h"
20 #include "socket.h"
21
22 using namespace testing::ext;
23
24 class SocketTransFuncTest : public testing::Test {
25 public:
26 // 测试套前置和后置操作
27 static void SetUpTestCase();
28 static void TearDownTestCase();
29
30 // 测试用例前置和后置操作
31 void SetUp();
32 void TearDown();
33 };
34
SetUp()35 void SocketTransFuncTest::SetUp() {}
36
TearDown()37 void SocketTransFuncTest::TearDown() {}
38
SetUpTestCase()39 void SocketTransFuncTest::SetUpTestCase()
40 {
41 LOG("SetUp begin");
42 AddPermission();
43 sleep(1);
44 OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
45 sleep(1);
46 TestSetUp();
47
48 int ret = RegisterDeviceStateDefCallback();
49 EXPECT_EQ(SOFTBUS_OK, ret) << "call reg node state callback fail";
50 ret = CheckRemoteDeviceIsNull(BOOL_TRUE);
51 ASSERT_EQ(SOFTBUS_OK, ret) << "get node fail,please check network";
52
53 system(" truncate -s 4M /data/4M.tar");
54 system(" truncate -s 8M /data/8M.tar");
55 LOG("SetUp end");
56 }
57
TearDownTestCase()58 void SocketTransFuncTest::TearDownTestCase()
59 {
60 int ret = UnRegisterDeviceStateDefCallback();
61 EXPECT_EQ(SOFTBUS_OK, ret) << "call unReg node state callback fail";
62
63 TestTearDown();
64 }
65
SetNumberInStreamData(char * streamData,int i)66 static inline void SetNumberInStreamData(char *streamData, int i)
67 {
68 if (i < FRAME_10) {
69 streamData[INDEX_0] = '1';
70 streamData[INDEX_1] = '0' + i;
71 } else if (i < FRAME_100) {
72 streamData[INDEX_0] = '2';
73 streamData[INDEX_1] = '0' + (i / TEN_PLACE);
74 streamData[INDEX_2] = '0' + (i % TEN_PLACE);
75 } else if (i < FRAME_1000) {
76 streamData[INDEX_0] = '3';
77 streamData[INDEX_1] = '0' + (i / HUNDRED_PLACE);
78 streamData[INDEX_2] = '0' + ((i / TEN_PLACE) % TEN_PLACE);
79 streamData[INDEX_3] = '0' + ((i % HUNDRED_PLACE) % TEN_PLACE);
80 } else {
81 streamData[INDEX_0] = '4';
82 streamData[INDEX_1] = '0' + (i / THOUSAND_PLACE);
83 streamData[INDEX_2] = '0' + ((i % THOUSAND_PLACE) / HUNDRED_PLACE);
84 streamData[INDEX_3] = '0' + (((i % THOUSAND_PLACE) % HUNDRED_PLACE) / TEN_PLACE);
85 streamData[INDEX_4] = '0' + (((i % THOUSAND_PLACE) % HUNDRED_PLACE) % TEN_PLACE);
86 }
87 }
88
89 SocketInfo socketByteInfo = {
90 .name = (char *)SOCKET_NAME_BYTE,
91 .pkgName = (char *)DEF_PKG_NAME,
92 .peerName = (char *)SOCKET_NAME_BYTE,
93 .dataType = DATA_TYPE_BYTES,
94 .peerNetworkId = (char *)GetNetworkId(),
95 };
96
97 SocketInfo socketMessageInfo = {
98 .name = (char *)SOCKET_NAME_MESSAGE,
99 .pkgName = (char *)DEF_PKG_NAME,
100 .peerName = (char *)SOCKET_NAME_MESSAGE,
101 .dataType = DATA_TYPE_MESSAGE,
102 .peerNetworkId = (char *)GetNetworkId(),
103 };
104
105 SocketInfo socketFileInfo = {
106 .name = (char *)SOCKET_NAME_FILE,
107 .pkgName = (char *)DEF_PKG_NAME,
108 .peerName = (char *)SOCKET_NAME_FILE,
109 .dataType = DATA_TYPE_FILE,
110 .peerNetworkId = (char *)GetNetworkId(),
111 };
112
113 SocketInfo socketStreamInfo = {
114 .name = (char *)SOCKET_NAME_STREAM,
115 .pkgName = (char *)DEF_PKG_NAME,
116 .peerName = (char *)SOCKET_NAME_STREAM,
117 .dataType = DATA_TYPE_VIDEO_STREAM,
118 .peerNetworkId = (char *)GetNetworkId(),
119 };
120
121 QosTV info_wifi[] = {
122 {.qos = QOS_TYPE_MIN_BW, .value = 64 * 1024, },
123 {.qos = QOS_TYPE_MIN_LATENCY, .value = 800, },
124 {.qos = QOS_TYPE_MAX_LATENCY, .value = 5000, },
125 };
126
127 QosTV info_p2p[] = {
128 {.qos = QOS_TYPE_MIN_BW, .value = 160 * 1024 * 1024, },
129 {.qos = QOS_TYPE_MIN_LATENCY, .value = 2000, },
130 {.qos = QOS_TYPE_MAX_LATENCY, .value = 10000, },
131 };
132
133 /**
134 * @tc.number : SUB_DSoftbus_Spec_DCTS_Socket_SendBytes_0100
135 * @tc.name : SendByte Packet size 1B, send and receive successful
136 * @tc.desc : Test the SendByte specification
137 * @tc.type : FUNC
138 * @tc.size : MediumTest
139 */
140 HWTEST_F(SocketTransFuncTest, SUB_DSoftbus_Spec_DCTS_Socket_SendBytes_0100, TestSize.Level3)
141 {
142 int ret;
143 int32_t socket = Socket(socketByteInfo);
144 EXPECT_GT(socket, 0) << "create socket[data] fail";
145 ret = Bind(socket, (const QosTV *)info_wifi, sizeof(info_wifi) / sizeof(info_wifi[0]), GetSocketListnerData());
146 EXPECT_EQ(SOFTBUS_OK, ret) << "Bind faild ret: "<< ret;
147 SetCurrentSocket4Data(socket);
148 LOG("###SendData socket = %d ", socket);
149 int size = 1;
150 ret = SendSocket4Data(DATA_TYPE_BYTE, size);
151 EXPECT_EQ(SOFTBUS_OK, ret) << "SendData4Data(byte, 1B) fail";
152 Shutdown(socket);
153 }
154
155 /**
156 * @tc.number : SUB_DSoftbus_Spec_DCTS_Socket_SendMessage_0100
157 * @tc.name : SendMessage Packet size 1B, send and receive successful
158 * @tc.desc : Test the SendMessage specification
159 * @tc.type : FUNC
160 * @tc.size : MediumTest
161 */
162 HWTEST_F(SocketTransFuncTest, SUB_DSoftbus_Spec_DCTS_Socket_SendMessage_0100, TestSize.Level3)
163 {
164 int ret;
165 int32_t socket = Socket(socketMessageInfo);
166 EXPECT_GT(socket, 0) << "create socket[data] fail";
167 ret = Bind(socket, (const QosTV *)info_wifi, sizeof(info_wifi) / sizeof(info_wifi[0]), GetSocketListnerData());
168 EXPECT_EQ(SOFTBUS_OK, ret) << "Bind faild ret: "<< ret;
169 SetCurrentSocket4Data(socket);
170 int size = 1;
171 ret = SendSocket4Data(DATA_TYPE_MSG, size);
172 EXPECT_EQ(SOFTBUS_OK, ret) << "SendData4Data(byte, 1B) fail";
173 Shutdown(socket);
174 }
175
176 /**
177 * @tc.number : SUB_DSoftbus_Spec_DCTS_Socket_SendFile_0100
178 * @tc.name : SendFile size 8MB, send and receive successful
179 * @tc.desc : Test the SendFile specification
180 * @tc.type : FUNC
181 * @tc.size : MediumTest
182 */
183 HWTEST_F(SocketTransFuncTest, SUB_DSoftbus_Spec_DCTS_Socket_SendFile_0100, TestSize.Level3)
184 {
185 int ret;
186 static const char* gFileOne[] = {
187 "/data/4M.tar",
188 };
189
190 static const char *dFileList[] = {
191 "/data/4M.tar",
192 };
193
194 int32_t socket = Socket(socketFileInfo);
195 EXPECT_GT(socket, 0) << "create socket[data] fail";
196 ret = Bind(socket, (const QosTV *)info_wifi, sizeof(info_wifi) / sizeof(info_wifi[0]), GetSocketListnerData());
197 EXPECT_EQ(SOFTBUS_OK, ret) << "Bind faild ret: "<< ret;
198
199 ResetWaitFlag4File();
200
201 ret = SendFile(socket, gFileOne, dFileList, sizeof(gFileOne) / sizeof(gFileOne[0]));
202 EXPECT_EQ(SOFTBUS_OK, ret) << "SendData4Data(byte, 1B) fail";
203 ret = Wait4Socket(20, SOCKET_FILE);
204 EXPECT_EQ(SOFTBUS_OK, ret) << "wait SendFile faild ";
205 Shutdown(socket);
206 }
207
208 /**
209 * @tc.number : SUB_DSoftbus_Spec_DCTS_Socket_SendStream_0100
210 * @tc.name : Video stream 1080P60 I150K P30K
211 * @tc.desc : Test the SendStream specification
212 * @tc.type : FUNC
213 * @tc.size : MediumTest
214 */
215 HWTEST_F(SocketTransFuncTest, SUB_DSoftbus_Spec_DCTS_Socket_SendStream_0100, TestSize.Level3)
216 {
217 int ret;
218 char *sendIFrame = (char *)malloc(I_FRAME_SIZE3);
219 EXPECT_NE(sendIFrame, nullptr);
220 (void)memset_s(sendIFrame, sizeof(sendIFrame), 0, I_FRAME_SIZE3);
221 char *sendPFrame = (char *)malloc(P_FRAME_SIZE3);
222 EXPECT_NE(sendPFrame, nullptr);
223 (void)memset_s(sendPFrame, sizeof(sendPFrame), 0, P_FRAME_SIZE3);
224
225 StreamData extStreamData = {0};
226 StreamData streamIData = {
227 .buf = sendIFrame,
228 .bufLen = I_FRAME_SIZE3 + 1,
229 };
230 StreamFrameInfo iFrame = {
231 .frameType = I_FRAME_TYPE,
232 };
233 StreamData streamPData = {
234 .buf = sendPFrame,
235 .bufLen = P_FRAME_SIZE3 + 1,
236 };
237 StreamFrameInfo pFrame = {
238 .frameType = P_FRAME_TYPE,
239 };
240
241 int32_t socket = Socket(socketStreamInfo);
242 EXPECT_GT(socket, 0) << "create socket[data] fail";
243 ret = Bind(socket, (const QosTV *)info_wifi, sizeof(info_wifi) / sizeof(info_wifi[0]), GetSocketListnerData());
244 EXPECT_EQ(SOFTBUS_OK, ret) << "Bind faild ret: "<< ret;
245
246 for (int i = 0; i < 600; i++) {
247 if (i % 60 == 0) {
248 //I_Fream
249 SetNumberInStreamData(sendIFrame, i);
250 iFrame.seqNum = i;
251 iFrame.bitMap |= 0x00000002;
252 LOG("###SendStream %.*s", streamIData.bufLen, streamIData.buf);
253 ret = SendStream(socket, &streamIData, &extStreamData, &iFrame);
254 EXPECT_EQ(SOFTBUS_OK, ret) << "call SendStream fail";
255 LOG("###SendStream IFREAM counts = %d ", i);
256 } else {
257 //P Fream
258 SetNumberInStreamData(sendPFrame, i);
259 pFrame.seqNum = i;
260 pFrame.bitMap |= 0x00000002;
261 LOG("###SendStream %.*s", streamIData.bufLen, streamIData.buf);
262 ret = SendStream(socket, &streamPData, &extStreamData, &pFrame);
263 EXPECT_EQ(SOFTBUS_OK, ret) << "call SendStream fail";
264 LOG("###SendStream PFREAM counts = %d ", i);
265 }
266 usleep(16666); //sleep 100ms
267 }
268 free(sendIFrame);
269 sendIFrame = nullptr;
270 free(sendPFrame);
271 sendPFrame = nullptr;
272 Shutdown(socket);
273 }
274
275 /**
276 * @tc.number : SUB_DSoftbus_Spec_DCTS_Socket_SendBytes_P2P_0100
277 * @tc.name : SendByte Packet size 1B, send and receive successful
278 * @tc.desc : Test the SendByte specification
279 * @tc.type : FUNC
280 * @tc.size : MediumTest
281 */
282 HWTEST_F(SocketTransFuncTest, SUB_DSoftbus_Spec_DCTS_Socket_SendBytes_P2P_0100, TestSize.Level3)
283 {
284 int ret;
285 int32_t socket = Socket(socketByteInfo);
286 EXPECT_GT(socket, 0) << "create socket[data] fail";
287 ret = Bind(socket, (const QosTV *)info_p2p, sizeof(info_p2p) / sizeof(info_p2p[0]), GetSocketListnerData());
288 EXPECT_EQ(SOFTBUS_OK, ret) << "Bind faild ret: "<< ret;
289 SetCurrentSocket4Data(socket);
290 LOG("###SendData socket = %d ", socket);
291 int size = 1;
292 ret = SendSocket4Data(DATA_TYPE_BYTE, size);
293 EXPECT_EQ(SOFTBUS_OK, ret) << "SendData4Data(byte, 1B) fail";
294 Shutdown(socket);
295 }
296
297 /**
298 * @tc.number : SUB_DSoftbus_Spec_DCTS_Socket_SendMessage_P2P_0100
299 * @tc.name : SendMessage Packet size 1B, send and receive successful
300 * @tc.desc : Test the SendMessage specification
301 * @tc.type : FUNC
302 * @tc.size : MediumTest
303 */
304 HWTEST_F(SocketTransFuncTest, SUB_DSoftbus_Spec_DCTS_Socket_SendMessage_P2P_0100, TestSize.Level3)
305 {
306 int ret;
307 int32_t socket = Socket(socketMessageInfo);
308 EXPECT_GT(socket, 0) << "create socket[data] fail";
309 ret = Bind(socket, (const QosTV *)info_p2p, sizeof(info_p2p) / sizeof(info_p2p[0]), GetSocketListnerData());
310 EXPECT_EQ(SOFTBUS_OK, ret) << "Bind faild ret: "<< ret;
311 SetCurrentSocket4Data(socket);
312 int size = 1;
313 ret = SendSocket4Data(DATA_TYPE_MSG, size);
314 EXPECT_EQ(SOFTBUS_OK, ret) << "SendData4Data(byte, 1B) fail";
315 Shutdown(socket);
316 }
317
318 /**
319 * @tc.number : SUB_DSoftbus_Spec_DCTS_Socket_SendFile_P2P_0100
320 * @tc.name : SendFile size 8MB, send and receive successful
321 * @tc.desc : Test the SendFile specification
322 * @tc.type : FUNC
323 * @tc.size : MediumTest
324 */
325 HWTEST_F(SocketTransFuncTest, SUB_DSoftbus_Spec_DCTS_Socket_SendFile_P2P_0100, TestSize.Level3)
326 {
327 int ret;
328 static const char* gFileOne[] = {
329 "/data/8M.tar",
330 };
331
332 static const char *dFileList[] = {
333 "/data/8M.tar",
334 };
335
336 int32_t socket = Socket(socketFileInfo);
337 EXPECT_GT(socket, 0) << "create socket[data] fail";
338 ret = Bind(socket, (const QosTV *)info_p2p, sizeof(info_p2p) / sizeof(info_p2p[0]), GetSocketListnerData());
339 EXPECT_EQ(SOFTBUS_OK, ret) << "Bind faild ret: "<< ret;
340
341 ResetWaitFlag4File();
342
343 ret = SendFile(socket, gFileOne, dFileList, sizeof(gFileOne) / sizeof(gFileOne[0]));
344 EXPECT_EQ(SOFTBUS_OK, ret) << "SendFile 8M fail";
345 ret = Wait4Socket(10, SOCKET_FILE);
346 EXPECT_EQ(SOFTBUS_OK, ret) << "wait SendFile faild ";
347 Shutdown(socket);
348 }
349
350 /**
351 * @tc.number : SUB_DSoftbus_Spec_DCTS_Socket_SendStream_P2P_0100
352 * @tc.name : Video stream 1080P60 I150K P30K
353 * @tc.desc : Test the SendStream specification
354 * @tc.type : FUNC
355 * @tc.size : MediumTest
356 */
357 HWTEST_F(SocketTransFuncTest, SUB_DSoftbus_Spec_DCTS_Socket_SendStream_P2P_0100, TestSize.Level3)
358 {
359 int ret;
360 char *sendIFrame = (char *)malloc(I_FRAME_SIZE3);
361 EXPECT_NE(sendIFrame, nullptr);
362 (void)memset_s(sendIFrame, sizeof(sendIFrame), 0, I_FRAME_SIZE3);
363 char *sendPFrame = (char *)malloc(P_FRAME_SIZE3);
364 EXPECT_NE(sendPFrame, nullptr);
365 (void)memset_s(sendPFrame, sizeof(sendPFrame), 0, P_FRAME_SIZE3);
366
367 StreamData extStreamData = {0};
368 StreamData streamIData = {
369 .buf = sendIFrame,
370 .bufLen = I_FRAME_SIZE3 + 1,
371 };
372 StreamFrameInfo iFrame = {
373 .frameType = I_FRAME_TYPE,
374 };
375
376 StreamData streamPData = {
377 .buf = sendPFrame,
378 .bufLen = P_FRAME_SIZE3 + 1,
379 };
380 StreamFrameInfo pFrame = {
381 .frameType = P_FRAME_TYPE,
382 };
383
384 int32_t socket = Socket(socketStreamInfo);
385 EXPECT_GT(socket, 0) << "create socket[data] fail";
386 ret = Bind(socket, (const QosTV *)info_p2p, sizeof(info_p2p) / sizeof(info_p2p[0]), GetSocketListnerData());
387 EXPECT_EQ(SOFTBUS_OK, ret) << "Bind faild ret: "<< ret;
388
389 for (int i = 0; i < 600; i++) {
390 if (i % 60 == 0) {
391 //I_Fream
392 SetNumberInStreamData(sendIFrame, i);
393 iFrame.seqNum = i;
394 iFrame.bitMap |= 0x00000002;
395 LOG("###SendStream %.*s", streamIData.bufLen, streamIData.buf);
396 ret = SendStream(socket, &streamIData, &extStreamData, &iFrame);
397 EXPECT_EQ(SOFTBUS_OK, ret) << "call SendStream fail";
398 LOG("###SendStream IFREAM counts = %d ", i);
399 } else {
400 //P Fream
401 SetNumberInStreamData(sendPFrame, i);
402 pFrame.seqNum = i;
403 pFrame.bitMap |= 0x00000002;
404 LOG("###SendStream %.*s", streamIData.bufLen, streamIData.buf);
405 ret = SendStream(socket, &streamPData, &extStreamData, &pFrame);
406 EXPECT_EQ(SOFTBUS_OK, ret) << "call SendStream fail";
407 LOG("###SendStream PFREAM counts = %d ", i);
408 }
409 usleep(16666); //sleep 100ms
410 }
411
412 free(sendIFrame);
413 sendIFrame = nullptr;
414 free(sendPFrame);
415 sendPFrame = nullptr;
416 Shutdown(socket);
417 }