• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 <cstdio>
17 #include <cstdlib>
18 #include <unistd.h>
19 
20 #include "securec.h"
21 #include "session.h"
22 #include "softbus_bus_center.h"
23 #include "softbus_def.h"
24 #include "softbus_errcode.h"
25 
26 #define LOG2_DBG(fmt, ...) printf("DEBUG:%s:%s:%d " fmt "\n", __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)
27 #define LOG2_INFO(fmt, ...) printf("INFO:%s:%d " fmt "\n", __FUNCTION__, __LINE__, ##__VA_ARGS__)
28 #define LOG2_WARN(fmt, ...) printf("WARN:%s:%d " fmt "\n", __FUNCTION__, __LINE__, ##__VA_ARGS__)
29 #define LOG2_ERR(fmt, ...)  printf("ERROR:%s:%d " fmt "\n", __FUNCTION__, __LINE__, ##__VA_ARGS__)
30 
31 namespace {
32 const int NETWORK_ID_LEN = 65;
33 const int ARG_NUM = 2;
34 const int FILE_NUM = 4;
35 
36 const char *g_testModuleName   = "com.huawei.plrdtest.dsoftbus";
37 const char *g_testSessionName  = "com.huawei.plrdtest.dsoftbus.JtOnOpenFileSession";
38 const char *g_testSessionNamE2 = "com.huawei.plrdtest.dsoftbus.JtOpenFileSession";
39 const char *g_testGroupId = "g_testGroupId";
40 
41 enum StatusNum {
42     TRANS_STATE_NONE = 0,           // 0
43     TRANS_STATE_INIT,           // 1
44     TRANS_STATE_CREATE_SESSION_SERVER,  // 2
45     TRANS_SET_FILE_SEND_LISTENER, // 3
46     TRANS_STATE_OPEN,           // 4
47     TRANS_STATE_SEND_BYTE,      // 5
48     TRANS_STATE_SEND_MESSAGE,   // 6
49     TRANS_STATE_SEND_FILE,   // 7
50     TRANS_STATE_CLOSE,          // 8
51     TRANS_STATE_REMOVE_SESSION_SERVER, // 9
52     TRANS_STATE_CREATE_PHONE = 10, // 10
53     TRANS_STATE_GET_SESSION_NAME, // 11
54     TRANS_STATE_GET_DEVICE_ID, // 12
55     TRANS_CLEAR_LOG,
56     TRANS_TEST_FIN,
57 
58     LNN_STATE_JOINLNN = 20,     // 20
59     LNN_STATE_LEAVELNN,         // 21
60 };
61 
62 ISessionListener g_sessionlistener;
63 SessionAttribute g_sessionAttr;
64 int32_t g_sessionId = -1;
65 char g_networkId[NETWORK_ID_LEN] = {0};
66 int32_t g_stateDebug = LNN_STATE_JOINLNN;
67 }
68 
TestChangeDebugState(int32_t state)69 static void TestChangeDebugState(int32_t state)
70 {
71     g_stateDebug = state;
72     LOG2_INFO("change to debug state: %d", state);
73 }
74 
OnLeaveLNNDone(const char * networkId,int32_t retCode)75 static void OnLeaveLNNDone(const char *networkId, int32_t retCode)
76 {
77     if (networkId == nullptr) {
78         LOG2_ERR("OnLeaveLNNDone error! retCode = %d", retCode);
79         return;
80     }
81 
82     LOG2_INFO("OnLeaveLNNDone enter networdid = %s, retCode = %d", networkId, retCode);
83 }
84 
OnNodeOnline(NodeBasicInfo * info)85 static void OnNodeOnline(NodeBasicInfo *info)
86 {
87     if (info == nullptr) {
88         return;
89     }
90     if (strcpy_s(g_networkId, NETWORK_ID_LEN, info->networkId) != EOK) {
91         return;
92     }
93     TestChangeDebugState(TRANS_STATE_CREATE_SESSION_SERVER);
94     LOG2_INFO("node online, network id: %s", info->networkId);
95 }
96 
OnNodeOffline(NodeBasicInfo * info)97 static void OnNodeOffline(NodeBasicInfo *info)
98 {
99     if (info == nullptr) {
100         return;
101     }
102     LOG2_INFO("node offline, network id: %s", info->networkId);
103 }
104 
105 static INodeStateCb g_nodeStateCallback = {
106     .events = EVENT_NODE_STATE_ONLINE | EVENT_NODE_STATE_OFFLINE,
107     .onNodeOnline = OnNodeOnline,
108     .onNodeOffline = OnNodeOffline,
109 };
110 
OnSessionOpened(int sessionId,int result)111 static int OnSessionOpened(int sessionId, int result)
112 {
113     LOG2_INFO("############# session opened,sesison id[%d] result[%d]", sessionId, result);
114     if (result == SOFTBUS_OK) {
115         TestChangeDebugState(TRANS_STATE_SEND_FILE);
116     } else {
117         TestChangeDebugState(-1);
118     }
119     return result;
120 }
121 
OnSessionClosed(int sessionId)122 static void OnSessionClosed(int sessionId)
123 {
124     LOG2_INFO("session closed, session id = %d", sessionId);
125     TestChangeDebugState(TRANS_STATE_REMOVE_SESSION_SERVER);
126 }
127 
OnBytesReceived(int sessionId,const void * data,unsigned int len)128 static void OnBytesReceived(int sessionId, const void *data, unsigned int len)
129 {
130     LOG2_INFO("session bytes received, sessionid[%d], dataLen[%u]", sessionId, len);
131 }
132 
OnMessageReceived(int sessionId,const void * data,unsigned int len)133 static void OnMessageReceived(int sessionId, const void *data, unsigned int len)
134 {
135     LOG2_INFO("session msg received, sessionid[%d], dataLen[%u]", sessionId, len);
136 }
137 
TestSessionListenerInit(void)138 static void TestSessionListenerInit(void)
139 {
140     g_sessionlistener.OnSessionOpened = OnSessionOpened;
141     g_sessionlistener.OnSessionClosed = OnSessionClosed;
142     g_sessionlistener.OnBytesReceived = OnBytesReceived;
143     g_sessionlistener.OnMessageReceived = OnMessageReceived;
144 
145     g_sessionAttr.dataType = TYPE_FILE;
146 }
147 
OnSendFileProcess(int sessionId,uint64_t bytesUpload,uint64_t bytesTotal)148 static int OnSendFileProcess(int sessionId, uint64_t bytesUpload, uint64_t bytesTotal)
149 {
150     LOG2_INFO("OnSendFileProcess sessionId = %d, bytesUpload = %" PRIu64 ", total = %" PRIu64 "\n",
151         sessionId, bytesUpload, bytesTotal);
152     return 0;
153 }
154 
OnSendFileFinished(int sessionId,const char * firstFile)155 static int OnSendFileFinished(int sessionId, const char *firstFile)
156 {
157     LOG2_INFO("OnSendFileFinished sessionId = %d, first file = %s\n", sessionId, firstFile);
158     TestChangeDebugState(TRANS_STATE_CLOSE);
159     return 0;
160 }
161 
OnFileTransError(int sessionId)162 static void OnFileTransError(int sessionId)
163 {
164     LOG2_INFO("OnFileTransError sessionId = %d\n", sessionId);
165 }
166 
167 static IFileSendListener g_fileSendListener = {
168     .OnSendFileProcess = OnSendFileProcess,
169     .OnSendFileFinished = OnSendFileFinished,
170     .OnFileTransError = OnFileTransError,
171 };
172 
TestSetFileSendListener(void)173 static void TestSetFileSendListener(void)
174 {
175     LOG2_INFO("*******************SET FILE SEND LISTENER*************");
176     int ret = SetFileSendListener(g_testModuleName, g_testSessionName, &g_fileSendListener);
177     LOG2_INFO("SetFileSendListener ret = %d\n", ret);
178 }
179 
TestSendFile(int sessionId)180 static int TestSendFile(int sessionId)
181 {
182     const char *sfileList[] = {
183         "/data/big.tar",
184         "/data/richu.jpg",
185         "/data/richu-002.jpg",
186         "/data/richu-003.jpg",
187     };
188     int ret = SendFile(sessionId, sfileList, nullptr, FILE_NUM);
189     LOG2_INFO("SendFile ret = %d\n", ret);
190     return ret;
191 }
192 
TestActiveSendFile(int state)193 static void TestActiveSendFile(int state)
194 {
195     switch (state) {
196         case TRANS_STATE_CREATE_SESSION_SERVER: {
197             int ret = CreateSessionServer(g_testModuleName, g_testSessionName, &g_sessionlistener);
198             LOG2_INFO("CreateSessionServer ret: %d ", ret);
199             if (ret != -986 && ret != SOFTBUS_OK) { // -986: SOFTBUS_SERVER_NAME_REPEATED
200                 LOG2_ERR("CreateSessionServer ret: %d ", ret);
201                 return;
202             }
203             TestSetFileSendListener();
204             TestChangeDebugState(TRANS_STATE_OPEN);
205             break;
206         }
207         case TRANS_STATE_OPEN: {
208             g_sessionId = OpenSession(g_testSessionName, g_testSessionName, g_networkId, g_testGroupId, &g_sessionAttr);
209             if (g_sessionId < 0) {
210                 LOG2_ERR("OpenSession ret[%d]", g_sessionId);
211                 return;
212             }
213             break;
214         }
215         case TRANS_STATE_SEND_FILE: {
216             TestSendFile(g_sessionId);
217             TestChangeDebugState(TRANS_TEST_FIN);
218             break;
219         }
220         case TRANS_STATE_CLOSE: {
221             CloseSession(g_sessionId);
222             g_sessionId = -1;
223             TestChangeDebugState(TRANS_STATE_REMOVE_SESSION_SERVER);
224             break;
225         }
226         case TRANS_STATE_REMOVE_SESSION_SERVER: {
227             int ret = RemoveSessionServer(g_testModuleName, g_testSessionName);
228             if (ret != SOFTBUS_OK) {
229                 LOG2_ERR("RemoveSessionServer failed, ret %d ", ret);
230                 return;
231             }
232             LOG2_INFO("RemoveSessionServer success, ret %d ", ret);
233             TestChangeDebugState(LNN_STATE_LEAVELNN);
234             break;
235         }
236         case LNN_STATE_LEAVELNN: {
237             LeaveLNN(g_testModuleName, g_networkId, OnLeaveLNNDone);
238             TestChangeDebugState(-1);
239             break;
240         }
241         default: {
242         }
243     }
244 }
245 
OnSessionOpenRecvFile(int sessionId,int result)246 static int OnSessionOpenRecvFile(int sessionId, int result)
247 {
248     LOG2_INFO("############# recv session opened,sesison id[%d] result[%d]", sessionId, result);
249     return 0;
250 }
251 
OnReceiveFileStarted(int sessionId,const char * files,int fileCnt)252 static int OnReceiveFileStarted(int sessionId, const char *files, int fileCnt)
253 {
254     LOG2_INFO("File receive start sessionId = %d, first file = %s, fileCnt = %d\n", sessionId, files, fileCnt);
255     return 0;
256 }
257 
OnReceiveFileFinished(int sessionId,const char * files,int fileCnt)258 static void OnReceiveFileFinished(int sessionId, const char *files, int fileCnt)
259 {
260     LOG2_INFO("File receive finished sessionId = %d, first file = %s, fileCnt = %d\n", sessionId, files, fileCnt);
261 }
262 
263 static IFileReceiveListener g_fileRecvListener = {
264     .OnReceiveFileStarted = OnReceiveFileStarted,
265     .OnReceiveFileFinished = OnReceiveFileFinished,
266     .OnFileTransError = OnFileTransError,
267 };
268 
TestSetFileRecvListener()269 static void TestSetFileRecvListener()
270 {
271     int ret = SetFileReceiveListener(g_testModuleName, g_testSessionNamE2, &g_fileRecvListener, "/data/");
272     LOG2_INFO("SetFileRecvListener ret = %d\n", ret);
273 }
274 
TestReceiveFile(int state)275 static void TestReceiveFile(int state)
276 {
277     int ret = 0;
278     switch (state) {
279         case TRANS_STATE_CREATE_SESSION_SERVER: {
280             g_sessionlistener.OnSessionOpened = OnSessionOpenRecvFile;
281             ret = CreateSessionServer(g_testModuleName, g_testSessionNamE2, &g_sessionlistener);
282             LOG2_INFO("CreateSessionServer ret: %d ", ret);
283             if (ret != -986 && ret != SOFTBUS_OK) { // -986: SOFTBUS_SERVER_NAME_REPEATED
284                 LOG2_ERR("CreateSessionServer ret: %d ", ret);
285                 return;
286             }
287             TestSetFileRecvListener();
288             TestChangeDebugState(TRANS_TEST_FIN);
289             break;
290         }
291         default: {
292         }
293     }
294 }
295 
main(int argc,char * argv[])296 int main(int argc, char *argv[])
297 {
298     if (argc == 1) {
299         return -1;
300     }
301     int testWay = 0;
302     if (argc >= ARG_NUM) {
303         testWay = atoi(argv[1]);
304     }
305     TestSessionListenerInit();
306 
307     if (RegNodeDeviceStateCb(g_testModuleName, &g_nodeStateCallback) != SOFTBUS_OK) {
308         LOG2_ERR("RegNodeDeviceStateCb error!");
309         return SOFTBUS_ERR;
310     }
311 
312     LOG2_INFO("\n$$$$$$$$$ Start transmission.........");
313     while (1) {
314         sleep(1);
315         if (g_stateDebug == TRANS_TEST_FIN) {
316             continue;
317         }
318         if (testWay == 0) {
319             TestActiveSendFile(g_stateDebug);
320         } else if (testWay == 1) {
321             TestReceiveFile(g_stateDebug);
322         }
323         if (g_stateDebug == -1) {
324             break;
325         }
326     }
327     LOG2_INFO("\n############### TEST PASS ###############\n");
328     return 0;
329 }
330