• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 "net_trans_common.h"
19 #include "wifi_utils.h"
20 
21 using namespace std;
22 using namespace testing::ext;
23 
24 static INodeStateCb* g_nodeStateCallback = NULL;
25 static ISessionListener* g_sessionlist4Data = NULL;
26 static ISessionListener* g_sessionlist4Ctrl = NULL;
27 static ISessionListener* g_sessionlist4Perf = NULL;
28 static ISessionListener* g_sessionlist4Pass = NULL;
29 static ISessionListener* g_sessionlist4File = NULL;
30 static ISessionListener* g_sessionlist4Proxy = NULL;
31 static ISessionListener  *g_sessionlist4Stream  = NULL;
32 
33 static uint64_t g_transTimeEnd;
34 
35 static const char* def_passwd = "OH2022@xa";
36 static const char* def_ssid = "OpenHarmony_Private_Net_01";
37 static const char* slave_ssid = "OpenHarmony_Private_Net_02";
38 
39 static const int three_seconds = 3;
40 static const int six_seconds = 6;
41 static const int ten_seconds = 10;
42 
43 static void SetupCallback(void);
44 static void TeardownCallback(void);
45 
46 class dsoftbusTest : public testing::Test {
47 public:
48     static void SetUpTestCase();
49     static void TearDownTestCase();
50     void SetUp();
51     void TearDown();
52 };
53 
SetUp()54 void dsoftbusTest ::SetUp() {}
55 
TearDown()56 void dsoftbusTest ::TearDown() {}
57 
SetUpTestCase()58 void dsoftbusTest ::SetUpTestCase()
59 {
60     LOG("SetUpTestCase");
61     AddPermission();
62     sleep(1);
63     system("pidof accesstoken_ser | xargs kill -9");
64     sleep(1);
65     TestSetUp();
66     SetupCallback();
67     int ret = RegNodeDeviceStateCb(DEF_PKG_NAME, g_nodeStateCallback);
68     EXPECT_EQ(SOFTBUS_OK, ret) << "call reg node state callback fail";
69 }
70 
TearDownTestCase()71 void dsoftbusTest::TearDownTestCase()
72 {
73     LOG("TearDownTestCase");
74     int ret = UnregNodeDeviceStateCb(g_nodeStateCallback);
75     EXPECT_EQ(SOFTBUS_OK, ret) << "call unReg node state callback fail";
76     TeardownCallback();
77     TestTearDown();
78 }
79 
OnFileSessionOpened(int sessionId,int result)80 static int OnFileSessionOpened(int sessionId, int result)
81 {
82     LOG("[cb][file]open session sid[%d],rst[%d]", sessionId, result);
83     return SOFTBUS_OK;
84 }
85 
OnFileSessionClosed(int sessionId)86 static void OnFileSessionClosed(int sessionId)
87 {
88     LOG("[cb][file]close session sid[%d]", sessionId);
89 }
90 
OnFileBytesReceived(int sessionId,const void * data,unsigned int dataLen)91 static void OnFileBytesReceived(int sessionId, const void* data, unsigned int dataLen)
92 {
93     LOG("[cb][file]ByteRec sid:%d, data len:%d", sessionId, dataLen);
94     if (data == NULL) {
95         LOG("[cb][file]ByteRec invalid data=null sid[%d]", sessionId);
96     }
97 }
98 
OnFileMessageReceived(int sessionId,const void * data,unsigned int dataLen)99 static void OnFileMessageReceived(int sessionId, const void* data, unsigned int dataLen)
100 {
101     LOG("[cb][file]MessageRec sid:%d, data len:%d", sessionId, dataLen);
102     if (data == NULL) {
103         LOG("[cb][file]MessageRec invalid data=null sid[%d]", sessionId);
104     }
105 }
106 
OnStreamSessionOpened(int sessionId,int result)107 static int OnStreamSessionOpened(int sessionId, int result)
108 {
109     LOG("[cb][stream]open session sid[%d],rst[%d]", sessionId, result);
110     return SOFTBUS_OK;
111 }
112 
OnStreamSessionClosed(int sessionId)113 static void OnStreamSessionClosed(int sessionId)
114 {
115     LOG("[cb][stream]close session sid[%d]", sessionId);
116 }
117 
GetNumberInStreamData(const char * streamData)118 static inline int GetNumberInStreamData(const char *streamData)
119 {
120     if (streamData[0] == '1') {
121         return (streamData[1] - '0');
122     } else if (streamData[0] == '2') {
123         return (streamData[1] - '0') * 10 + (streamData[2] - '0');
124     } else if (streamData[0] == '3') {
125         return (streamData[1] - '0') * 100 + (streamData[2] - '0') * 10 + (streamData[3] - '0');
126     } else if (streamData[0] == '4') {
127         return (streamData[1] - '0') * 1000 + (streamData[2] - '0') * 100 + (streamData[3] - '0' * 10 + (streamData[4] - '0'));
128     }
129     return -1;
130 }
131 
StreamReceived(int sessionId,const StreamData * data,const StreamData * ext,const StreamFrameInfo * frame)132 static void StreamReceived(int sessionId, const StreamData *data, const StreamData *ext, const StreamFrameInfo *frame)
133 {
134     g_transTimeEnd = GetCurrentTimeOfMs();
135     int i = GetNumberInStreamData((const char *)data->buf);
136     if (i < 0) {
137         return;
138     }
139     if (i % 60 == 0)
140     {
141         LOG("### RECV counts = %d ", i );
142     } else
143     {
144         LOG("### RECV counts = %d ", i );
145     }
146     if (data != NULL) {
147         LOG("[cb][stream]Rec sid:%d, data= %.*s.\n", sessionId, data->bufLen, data->buf);
148     }
149 }
150 
151 /* session callback for data */
OnDataSessionOpened(int sessionId,int result)152 static int OnDataSessionOpened(int sessionId, int result)
153 {
154     LOG("[cb][data]session opened  sid:%d,ret:%d", sessionId, result);
155     return SOFTBUS_OK;
156 }
157 
OnDataSessionClosed(int sessionId)158 static void OnDataSessionClosed(int sessionId)
159 {
160     LOG("[cb][data]session closed  sid:%d", sessionId);
161 }
162 
OnDataBytesReceived(int sessionId,const void * data,unsigned int dataLen)163 static void OnDataBytesReceived(int sessionId, const void* data, unsigned int dataLen)
164 {
165     if (sessionId < 0) {
166         LOG("[cb][data]byte received invalid session id[%d]", sessionId);
167         return;
168     }
169     LOG("[cb][data]byte received   sid:%d, data-len:%d", sessionId, dataLen);
170     int ret = SendBytes(sessionId, data, dataLen);
171     LOG("[cb][data]byte received   send back:%d", ret);
172 }
173 
OnDataMessageReceived(int sessionId,const void * data,unsigned int dataLen)174 static void OnDataMessageReceived(int sessionId, const void* data, unsigned int dataLen)
175 {
176     if (sessionId < 0) {
177         LOG("[cb][data]mesg received   invalid session id[%d]", sessionId);
178         return;
179     }
180     LOG("[cb][data]mesg received   sid:%d, data-len:%d", sessionId, dataLen);
181     int ret = SendMessage(sessionId, data, dataLen);
182     LOG("[cb][data]mesg received   send back:%d", ret);
183 }
184 
185 /* session callback for control */
GetCodeByMsg(const string & msg)186 static int GetCodeByMsg(const string& msg)
187 {
188     LOG("[ctrl] recv msg content[%s]", msg.c_str());
189     int ret = -1;
190     if (strncmp(msg.c_str(), CTRL_MSG_CLOSE_WIFI_TEN_SEC, strlen(CTRL_MSG_CLOSE_WIFI_TEN_SEC)) == 0) {
191         ret = CTRL_CODE_CLOSE_WIFI_TEN_SEC;
192     } else if (strncmp(msg.c_str(), CTRL_MSG_CLOSE_WIFI_THREE_SEC, strlen(CTRL_MSG_CLOSE_WIFI_THREE_SEC)) == 0) {
193         ret = CTRL_CODE_CLOSE_WIFI_THREE_SEC;
194     } else if (strncmp(msg.c_str(), CTRL_MSG_CLOSE_WIFI_TEN_MIN, strlen(CTRL_MSG_CLOSE_WIFI_TEN_MIN)) == 0) {
195         ret = CTRL_CODE_CLOSE_WIFI_TEN_MIN;
196     } else if (strncmp(msg.c_str(), CTRL_MSG_CLOSE_WIFI_FIVE_MIN, strlen(CTRL_MSG_CLOSE_WIFI_FIVE_MIN)) == 0) {
197         ret = CTRL_CODE_CLOSE_WIFI_FIVE_MIN;
198     } else if (strncmp(msg.c_str(), CTRL_MSG_CHANGE_WIFI_TEN_SEC, strlen(CTRL_MSG_CHANGE_WIFI_TEN_SEC)) == 0) {
199         ret = CTRL_CODE_CHANGE_WIFI_TEN_SEC;
200     } else if (strncmp(msg.c_str(), CTRL_MSG_CHANGE_WIFI_SIXTY_SEC, strlen(CTRL_MSG_CHANGE_WIFI_SIXTY_SEC)) == 0) {
201         ret = CTRL_CODE_CHANGE_WIFI_SIXTY_SEC;
202     } else if (strncmp(msg.c_str(), CTRL_MSG_CLOSE_BR, strlen(CTRL_MSG_CLOSE_BR)) == 0) {
203         ret = CTRL_CODE_CLOSE_BR;
204     } else if (strncmp(msg.c_str(), CTRL_MSG_CLOSE_OPEN_BR, strlen(CTRL_MSG_CLOSE_OPEN_BR)) == 0) {
205         ret = CTRL_CODE_CLOSE_OPEN_BR;
206     } else if (strncmp(msg.c_str(), CTRL_MSG_OPEN_SESSION, strlen(CTRL_MSG_OPEN_SESSION)) == 0) {
207         ret = CTRL_CODE_OPEN_SESSION;
208     } else if (strncmp(msg.c_str(), CTRL_MSG_OPEN_SESSION_MSG, strlen(CTRL_MSG_OPEN_SESSION_MSG)) == 0) {
209         ret = CTRL_CODE_OPEN_SESSION_MSG;
210     } else if (strncmp(msg.c_str(), CTRL_MSG_OPEN_SESSION_NOT_EXIST, strlen(CTRL_MSG_OPEN_SESSION_NOT_EXIST)) == 0) {
211         ret = CTRL_CODE_OPEN_SESSION_NOT_EXIST;
212     }
213     return ret;
214 }
215 
CtrlOperateTask(void * param)216 void* CtrlOperateTask(void* param)
217 {
218     LOG("[operate] start...");
219     int code = -1;
220     if (param != NULL) {
221         code = *((int*)param);
222     }
223     LOG("[operate] code:%d", code);
224     int ret;
225     int sleepTime;
226     switch (code) {
227         case CTRL_CODE_CLOSE_WIFI_TEN_SEC:
228             WiFiUtils ::DisableThenEnableAndConnect(ten_seconds, def_ssid, def_passwd);
229             break;
230         case CTRL_CODE_CLOSE_WIFI_THREE_SEC:
231             WiFiUtils ::DisableThenEnableAndConnect(three_seconds, def_ssid, def_passwd);
232             break;
233         case CTRL_CODE_CLOSE_WIFI_TEN_MIN:
234             sleepTime = six_seconds * ten_seconds * ten_seconds;
235             WiFiUtils ::DisableWifi();
236             while (sleepTime > 0) {
237                 sleep(ten_seconds);
238                 sleepTime -= ten_seconds;
239                 LOG("[operate][close wifi 10mins] wait:%d", sleepTime);
240             }
241             WiFiUtils ::EnableThenConnect(def_ssid, def_passwd);
242             break;
243         case CTRL_CODE_CLOSE_WIFI_FIVE_MIN:
244             sleepTime = three_seconds * ten_seconds * ten_seconds;
245             WiFiUtils ::DisableWifi();
246             while (sleepTime > 0) {
247                 sleep(ten_seconds);
248                 sleepTime -= ten_seconds;
249                 LOG("[operate][close wifi 5mins] wait:%d", sleepTime);
250             }
251             WiFiUtils ::EnableThenConnect(def_ssid, def_passwd);
252             break;
253         case CTRL_CODE_CHANGE_WIFI_TEN_SEC:
254             sleepTime = ten_seconds;
255             ret = WiFiUtils ::ConnectToNew(slave_ssid, def_passwd);
256             LOG("[operate]connect to salve ret:%d", ret);
257             LOG("[operate]start sleep:%d", sleepTime);
258             sleep(sleepTime);
259             ret = WiFiUtils ::ConnectToNew(def_ssid, def_passwd);
260             LOG("[operate]connect to default ret:%d", ret);
261             break;
262         case CTRL_CODE_CHANGE_WIFI_SIXTY_SEC:
263             sleepTime = six_seconds * ten_seconds;
264             ret = WiFiUtils ::ConnectToNew(slave_ssid, def_passwd);
265             LOG("[operate]connect to salve ret:%d", ret);
266             LOG("[operate]start sleep:%d", sleepTime);
267             sleep(sleepTime);
268             ret = WiFiUtils ::ConnectToNew(def_ssid, def_passwd);
269             LOG("[operate]connect to default ret:%d", ret);
270             break;
271         case CTRL_CODE_CLOSE_BR:
272             // close br
273             LOG("[operate]close br TODO...");
274             break;
275         case CTRL_CODE_CLOSE_OPEN_BR:
276             // close open br
277             LOG("[operate]close-open br TODO...");
278             break;
279         case CTRL_CODE_OPEN_SESSION:
280             // open session and send byte
281             LOG("[operate]open session TODO...");
282             break;
283         case CTRL_CODE_OPEN_SESSION_NOT_EXIST:
284             // open session not exist
285             LOG("[operate]open session not exist TODO...");
286             break;
287         case CTRL_CODE_OPEN_SESSION_MSG:
288             // open session and send msg
289             LOG("[operate]open session not exist TODO...");
290             break;
291         default:
292             LOG("[operate]not support this code");
293             break;
294     }
295     free(param);
296     LOG("[operate] end");
297     return nullptr;
298 }
299 
OnCtrlSessionOpened(int sessionId,int result)300 static int OnCtrlSessionOpened(int sessionId, int result)
301 {
302     LOG("[cb][ctrl]session opened sid:%d, ret:%d", sessionId, result);
303     return SOFTBUS_OK;
304 }
305 
OnCtrlSessionClosed(int sessionId)306 static void OnCtrlSessionClosed(int sessionId)
307 {
308     LOG("[cb][ctrl]session closed sid:%d", sessionId);
309 }
310 
OnCtrlBytesReceived(int sessionId,const void * data,unsigned int dataLen)311 static void OnCtrlBytesReceived(int sessionId, const void* data, unsigned int dataLen)
312 {
313     if (sessionId < 0) {
314         LOG("[cb][ctrl]byte received invalid session id[%d]", sessionId);
315         return;
316     }
317     LOG("[cb][ctrl]byte received sid:%d, data-len:%d", sessionId, dataLen);
318     int ret = SendBytes(sessionId, data, dataLen);
319     LOG("[cb][ctrl]byte received send back:%d", ret);
320 }
321 
OnCtrlMessageReceived(int sessionId,const void * data,unsigned int dataLen)322 static void OnCtrlMessageReceived(int sessionId, const void* data, unsigned int dataLen)
323 {
324     if (sessionId < 0) {
325         LOG("[cb][ctrl]mesg received invalid session id[%d]", sessionId);
326         return;
327     }
328     LOG("[cb][ctrl]mesg received sid:%d, data-len:%d", sessionId, dataLen);
329     int ret = SendMessage(sessionId, data, dataLen);
330     LOG("[cb][ctrl]mesg received send back:%d", ret);
331 
332     // operate
333     unsigned int maxCtrlLen = 25;
334     if (dataLen < maxCtrlLen) {
335         int* code = (int*)malloc(sizeof(int));
336         *code = GetCodeByMsg((char*)data);
337         LOG("[cb][ctrl]GetCodeByMsg is:%d", *code);
338         if (*code != -1) {
339             pthread_t ctrlThread;
340             ret = pthread_create(&ctrlThread, nullptr, CtrlOperateTask, code);
341             LOG("[cb][ctrl]create ctrl thread ret:%d", ret);
342         } else {
343             free(code);
344         }
345     }
346 }
347 
348 /* session callback for performance */
OnPerfSessionOpened(int sessionId,int result)349 static int OnPerfSessionOpened(int sessionId, int result)
350 {
351     LOG("[cb][perf]session opened sid:%d, ret:%d", sessionId, result);
352     return SOFTBUS_OK;
353 }
354 
OnPerfSessionClosed(int sessionId)355 static void OnPerfSessionClosed(int sessionId)
356 {
357     LOG("[cb][perf]session closed sid:%d", sessionId);
358 }
359 
OnPerfBytesReceived(int sessionId,const void * data,unsigned int dataLen)360 static void OnPerfBytesReceived(int sessionId, const void* data, unsigned int dataLen)
361 {
362     if (sessionId < 0) {
363         LOG("[cb][perf]byte received invalid session id[%d]", sessionId);
364         return;
365     }
366     LOG("[cb][perf]byte received sid:%d, data-len:%d", sessionId, dataLen);
367     int ret = SendBytes(sessionId, data, dataLen);
368     LOG("[cb][perf]byte received send back:%d", ret);
369 }
370 
OnPerfMessageReceived(int sessionId,const void * data,unsigned int dataLen)371 static void OnPerfMessageReceived(int sessionId, const void* data, unsigned int dataLen)
372 {
373     if (sessionId < 0) {
374         LOG("[cb][perf]mesg received invalid session id[%d]", sessionId);
375         return;
376     }
377     LOG("[cb][perf]mesg received sid:%d, data-len:%d", sessionId, dataLen);
378     int ret = SendMessage(sessionId, data, dataLen);
379     LOG("[cb][perf]mesg received send back:%d", ret);
380 }
381 
OnPassSessionOpened(int sessionId,int result)382 static int OnPassSessionOpened(int sessionId, int result)
383 {
384     LOG("[cb][pass]session opened sid:%d, ret:%d", sessionId, result);
385     return SOFTBUS_OK;
386 }
387 
OnPassSessionClosed(int sessionId)388 static void OnPassSessionClosed(int sessionId)
389 {
390     LOG("[cb][pass]session closed sid:%d", sessionId);
391 }
392 
OnPassBytesReceived(int sessionId,const void * data,unsigned int dataLen)393 static void OnPassBytesReceived(int sessionId, const void* data, unsigned int dataLen)
394 {
395     if (sessionId < 0) {
396         LOG("[cb][pass]byte received invalid session id[%d]", sessionId);
397         return;
398     }
399     LOG("[cb][pass]byte received sid:%d, data-len:%d", sessionId, dataLen);
400 }
401 
OnPassMessageReceived(int sessionId,const void * data,unsigned int dataLen)402 static void OnPassMessageReceived(int sessionId, const void* data, unsigned int dataLen)
403 {
404     if (sessionId < 0) {
405         LOG("[cb][pass]mesg received invalid session id[%d]", sessionId);
406         return;
407     }
408     LOG("[cb][pass]mesg received sid:%d, data-len:%d", sessionId, dataLen);
409 }
410 
OnProxySessionOpened(int sessionId,int result)411 static int OnProxySessionOpened(int sessionId, int result)
412 {
413     LOG("[cb][Proxy]session opened sid:%d, ret:%d", sessionId, result);
414     return SOFTBUS_OK;
415 }
416 
OnProxySessionClosed(int sessionId)417 static void OnProxySessionClosed(int sessionId)
418 {
419     LOG("[cb][Proxy]session closed sid:%d", sessionId);
420 }
421 
OnProxyBytesReceived(int sessionId,const void * data,unsigned int dataLen)422 static void OnProxyBytesReceived(int sessionId, const void* data, unsigned int dataLen)
423 {
424     if (sessionId < 0) {
425         LOG("[cb][Proxy]byte received invalid session id[%d]", sessionId);
426         return;
427     }
428     LOG("[cb][Proxy]byte received sid:%d, data-len:%d", sessionId, dataLen);
429     int ret = SendBytes(sessionId, data, dataLen);
430     LOG("[cb][Proxy]byte received send back:%d", ret);
431 }
432 
OnProxyMessageReceived(int sessionId,const void * data,unsigned int dataLen)433 static void OnProxyMessageReceived(int sessionId, const void* data, unsigned int dataLen)
434 {
435    if (sessionId < 0) {
436         LOG("[cb][Proxy]mesg received   invalid session id[%d]", sessionId);
437         return;
438     }
439     LOG("[cb][Proxy]mesg received   sid:%d, data-len:%d", sessionId, dataLen);
440     int ret = SendMessage(sessionId, data, dataLen);
441     LOG("[cb][Proxy]mesg received   send back:%d", ret);
442 }
443 
444 /* net state callback */
OnNodeOnline(NodeBasicInfo * info)445 static void OnNodeOnline(NodeBasicInfo* info)
446 {
447     if (info == NULL) {
448         LOG("[cb]Online: info is null");
449     }
450 
451     LOG("[cb]Online id:%s, name:%s ,type id:%u", info->networkId, info->deviceName, info->deviceTypeId);
452 }
453 
OnNodeOffline(NodeBasicInfo * info)454 static void OnNodeOffline(NodeBasicInfo* info)
455 {
456     if (info == NULL) {
457         LOG("[cb]Offline: info is null");
458         return;
459     }
460 
461     LOG("[cb]Offline id:%s, name:%s ,type id:%u", info->networkId, info->deviceName, info->deviceTypeId);
462 }
463 
OnNodeBasicInfoChanged(NodeBasicInfoType type,NodeBasicInfo * info)464 static void OnNodeBasicInfoChanged(NodeBasicInfoType type, NodeBasicInfo* info)
465 {
466     if (info == NULL) {
467         LOG("[cb]InfoChanged: info is null, type[%d]", type);
468         return;
469     }
470     LOG("[cb]InfoChanged id: %s, name: %s", info->networkId, info->deviceName);
471 }
472 
SetupCallback(void)473 static void SetupCallback(void)
474 {
475     if (g_sessionlist4Data == NULL) {
476         g_sessionlist4Data = (ISessionListener*)calloc(1, sizeof(ISessionListener));
477         g_sessionlist4Data->OnSessionOpened = OnDataSessionOpened;
478         g_sessionlist4Data->OnSessionClosed = OnDataSessionClosed;
479         g_sessionlist4Data->OnMessageReceived = OnDataMessageReceived;
480         g_sessionlist4Data->OnBytesReceived = OnDataBytesReceived;
481     }
482 
483     if (g_sessionlist4Ctrl == NULL) {
484         g_sessionlist4Ctrl = (ISessionListener*)calloc(1, sizeof(ISessionListener));
485         g_sessionlist4Ctrl->OnSessionOpened = OnCtrlSessionOpened;
486         g_sessionlist4Ctrl->OnSessionClosed = OnCtrlSessionClosed;
487         g_sessionlist4Ctrl->OnMessageReceived = OnCtrlMessageReceived;
488         g_sessionlist4Ctrl->OnBytesReceived = OnCtrlBytesReceived;
489     }
490 
491     if (g_sessionlist4Perf == NULL) {
492         g_sessionlist4Perf = (ISessionListener*)calloc(1, sizeof(ISessionListener));
493         g_sessionlist4Perf->OnSessionOpened = OnPerfSessionOpened;
494         g_sessionlist4Perf->OnSessionClosed = OnPerfSessionClosed;
495         g_sessionlist4Perf->OnMessageReceived = OnPerfMessageReceived;
496         g_sessionlist4Perf->OnBytesReceived = OnPerfBytesReceived;
497     }
498 
499     if (g_sessionlist4Pass == NULL) {
500         g_sessionlist4Pass = (ISessionListener*)calloc(1, sizeof(ISessionListener));
501         g_sessionlist4Pass->OnSessionOpened = OnPassSessionOpened;
502         g_sessionlist4Pass->OnSessionClosed = OnPassSessionClosed;
503         g_sessionlist4Pass->OnMessageReceived = OnPassMessageReceived;
504         g_sessionlist4Pass->OnBytesReceived = OnPassBytesReceived;
505     }
506 
507     if (g_sessionlist4Proxy == NULL) {
508         g_sessionlist4Proxy = (ISessionListener*)calloc(1, sizeof(ISessionListener));
509         g_sessionlist4Proxy->OnSessionOpened = OnProxySessionOpened;
510         g_sessionlist4Proxy->OnSessionClosed = OnProxySessionClosed;
511         g_sessionlist4Proxy->OnMessageReceived = OnProxyMessageReceived;
512         g_sessionlist4Proxy->OnBytesReceived = OnProxyBytesReceived;
513     }
514 
515     if (g_sessionlist4File == NULL) {
516         g_sessionlist4File = (ISessionListener*)calloc(1, sizeof(ISessionListener));
517         g_sessionlist4File->OnSessionOpened = OnFileSessionOpened;
518         g_sessionlist4File->OnSessionClosed = OnFileSessionClosed;
519         g_sessionlist4File->OnMessageReceived = OnFileMessageReceived;
520         g_sessionlist4File->OnBytesReceived = OnFileBytesReceived;
521     }
522 
523     if (g_nodeStateCallback == NULL) {
524         g_nodeStateCallback = (INodeStateCb*)calloc(1, sizeof(INodeStateCb));
525         g_nodeStateCallback->events = EVENT_NODE_STATE_MASK;
526         g_nodeStateCallback->onNodeOnline = OnNodeOnline;
527         g_nodeStateCallback->onNodeOffline = OnNodeOffline;
528         g_nodeStateCallback->onNodeBasicInfoChanged = OnNodeBasicInfoChanged;
529     }
530 
531     if (g_sessionlist4Stream == NULL) {
532         g_sessionlist4Stream= (ISessionListener*)calloc(1, sizeof(ISessionListener));
533         g_sessionlist4Stream->OnSessionOpened = OnStreamSessionOpened;
534         g_sessionlist4Stream->OnSessionClosed = OnStreamSessionClosed;
535         g_sessionlist4Stream->OnStreamReceived = StreamReceived;
536     }
537 }
538 
TeardownCallback(void)539 static void TeardownCallback(void)
540 {
541     if (g_sessionlist4Data != NULL) {
542         free(g_sessionlist4Data);
543         g_sessionlist4Data = NULL;
544     }
545     if (g_sessionlist4Ctrl != NULL) {
546         free(g_sessionlist4Ctrl);
547         g_sessionlist4Ctrl = NULL;
548     }
549     if (g_sessionlist4Perf != NULL) {
550         free(g_sessionlist4Perf);
551         g_sessionlist4Perf = NULL;
552     }
553     if (g_sessionlist4Pass != NULL) {
554         free(g_sessionlist4Pass);
555         g_sessionlist4Pass = NULL;
556     }
557     if (g_sessionlist4Proxy != NULL) {
558         free(g_sessionlist4Proxy);
559         g_sessionlist4Proxy = NULL;
560     }
561     if (g_sessionlist4File != NULL) {
562         free(g_sessionlist4File);
563         g_sessionlist4File = NULL;
564     }
565     if (g_nodeStateCallback != NULL) {
566         free(g_nodeStateCallback);
567         g_nodeStateCallback = NULL;
568     }
569     if (g_sessionlist4Stream != NULL) {
570         free(g_sessionlist4Stream);
571         g_sessionlist4Stream = NULL;
572     }
573 }
574 
575 /**
576  * @tc.number : SUB_Softbus_Trans_SelfNet_0100
577  * @tc.name     : 创建SS,等待opensession和消息传输
578  * @tc.desc       : 测试自组网下传输功能,模拟服务端
579  * @tc.type       : FUNC
580  * @tc.size        : MediumTest
581  */
582 HWTEST_F(dsoftbusTest, test_create_ss, TestSize.Level3)
583 {
584     int dataRet = CreateSessionServer(DEF_PKG_NAME, SESSION_NAME_DATA, g_sessionlist4Data);
585     LOG("CreateSs[data] ret:%d", dataRet);
586     int ctrlRet = CreateSessionServer(DEF_PKG_NAME, SESSION_NAME_CTL, g_sessionlist4Ctrl);
587     LOG("CreateSs[ctrl] ret:%d", ctrlRet);
588     int perfRet = CreateSessionServer(DEF_PKG_NAME, SESSION_NAME_PERF, g_sessionlist4Perf);
589     LOG("CreateSs[perf] ret:%d", perfRet);
590     int passRet = CreateSessionServer(DEF_PKG_NAME, SESSION_NAME_PASS, g_sessionlist4Pass);
591     LOG("CreateSs[pass] ret:%d", passRet);
592     int proxyRet = CreateSessionServer(DEF_PKG_NAME, SESSION_NAME_PROXY, g_sessionlist4Proxy);
593     LOG("CreateSs[Proxy] ret:%d", proxyRet);
594     int fileRet = CreateSessionServer(DEF_PKG_NAME, SESSION_NAME_FILE, g_sessionlist4File);
595     LOG("CreateSs[file] ret:%d", fileRet);
596     int streamRet = CreateSessionServer(DEF_PKG_NAME, SESSION_NAME_STREAM, g_sessionlist4Stream);
597     LOG("CreateSs[stream] ret:%d", streamRet);
598 
599     int runtime = 0;
600     if (dataRet == SOFTBUS_OK && ctrlRet == SOFTBUS_OK && perfRet == SOFTBUS_OK
601     && passRet == SOFTBUS_OK && fileRet == SOFTBUS_OK && streamRet == SOFTBUS_OK && proxyRet == SOFTBUS_OK) {
602         LOG("CreateSs ok");
603     }
604 
605     int ret = SetFileSendListener(DEF_PKG_NAME, SESSION_NAME_FILE, GetSendFileListener());
606     if (ret != SOFTBUS_OK) {
607         LOG("##set send listener fail:%d", ret);
608     }
609     ret = SetFileReceiveListener(DEF_PKG_NAME, SESSION_NAME_FILE, GetRecvFileListener(), RECV_FILE_PATH);
610     if (ret != SOFTBUS_OK) {
611         LOG("##set recv listener fail:%d", ret);
612     }
613 
614     while (1) {
615         sleep(1);
616         runtime += 1;
617         if (runtime % 60 == 0) {
618             LOG("### test run:%d s", runtime);
619         }
620     }
621 
622     ret = RemoveSessionServer(DEF_PKG_NAME, SESSION_NAME_DATA);
623     LOG("RemoveSs[data] ret:%d", ret);
624     ret = RemoveSessionServer(DEF_PKG_NAME, SESSION_NAME_CTL);
625     LOG("RemoveSs[ctrl] ret:%d", ret);
626     ret = RemoveSessionServer(DEF_PKG_NAME, SESSION_NAME_PERF);
627     LOG("RemoveSs[perf] ret:%d", ret);
628     ret = RemoveSessionServer(DEF_PKG_NAME, SESSION_NAME_PASS);
629     LOG("RemoveSs[pass] ret:%d", ret);
630     ret = RemoveSessionServer(DEF_PKG_NAME, SESSION_NAME_PROXY);
631     LOG("RemoveSs[Proxy] ret:%d", ret);
632     ret = RemoveSessionServer(DEF_PKG_NAME, SESSION_NAME_FILE);
633     LOG("RemoveSs[file] ret:%d", ret);
634     ret = RemoveSessionServer(DEF_PKG_NAME, SESSION_NAME_FILE);
635     LOG("RemoveSs[stram] ret:%d", ret);
636 }
637