• 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 <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 }