• 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 <securec.h>
17 
18 #include <gtest/gtest.h>
19 #include "softbus_def.h"
20 #include "softbus_errcode.h"
21 #include "softbus_log.h"
22 #include "softbus_trans_def.h"
23 #include "softbus_json_utils.h"
24 #include "softbus_app_info.h"
25 #include "softbus_config_type.h"
26 #include "softbus_server_frame.h"
27 #include "softbus_adapter_mem.h"
28 #include "client_trans_message_service.h"
29 #include "client_trans_message_service.c"
30 #include "client_trans_session_manager.h"
31 #include "softbus_common.h"
32 
33 
34 #define TRANS_TEST_SESSION_ID 10
35 #define TRANS_TEST_CHANNEL_ID 1000
36 #define TRANS_TEST_FILE_ENCRYPT 10
37 #define TRANS_TEST_ALGORITHM 1
38 #define TRANS_TEST_CRC 1
39 #define TRANS_TEST_AUTH_DATA "test auth message data"
40 #define TRANS_TEST_MAX_MSG_LEN (1 * 1024)
41 #define TRANS_TEST_MAX_BYTES_LEN (2 * 1024)
42 #define TRANS_TEST_SEND_LEN 123
43 #define TRANS_TEST_FILE_COUNT 2
44 
45 #define TRANS_TEST_INVALID_SEND_LEN (1024 * 1024)
46 
47 using namespace testing::ext;
48 
49 namespace OHOS {
50 
51 const char *g_pkgName = "dms";
52 const char *g_sessionName = "ohos.distributedschedule.dms.test";
53 const char *g_sessionKey = "www.huaweitest.com";
54 const char *g_networkId = "ABCDEF00ABCDEF00ABCDEF00ABCDEF00ABCDEF00ABCDEF00ABCDEF00ABCDEF0";
55 const char *g_deviceId = "ABCDEF00ABCDEF00ABCDEF00ABCDEF00ABCDEF00ABCDEF00ABCDEF00ABCDEF0";
56 const char *g_groupId = "TEST_GROUP_ID";
57 static SessionAttribute g_sessionAttr = {
58     .dataType = TYPE_BYTES,
59 };
60 class TransClientMsgServiceTest : public testing::Test {
61 public:
TransClientMsgServiceTest()62     TransClientMsgServiceTest()
63     {}
~TransClientMsgServiceTest()64     ~TransClientMsgServiceTest()
65     {}
66     static void SetUpTestCase(void);
67     static void TearDownTestCase(void);
SetUp()68     void SetUp() override
69     {}
TearDown()70     void TearDown() override
71     {}
72 };
73 
SetUpTestCase(void)74 void TransClientMsgServiceTest::SetUpTestCase(void)
75 {
76     InitSoftBusServer();
77     int32_t ret = TransClientInit();
78     ASSERT_EQ(ret,  SOFTBUS_OK);
79 }
80 
TearDownTestCase(void)81 void TransClientMsgServiceTest::TearDownTestCase(void)
82 {
83 }
84 
OnSessionOpened(int sessionId,int result)85 static int OnSessionOpened(int sessionId, int result)
86 {
87     LOG_INFO("session opened,sesison id = %d\r\n", sessionId);
88     return SOFTBUS_OK;
89 }
90 
OnSessionClosed(int sessionId)91 static void OnSessionClosed(int sessionId)
92 {
93     LOG_INFO("session closed, session id = %d\r\n", sessionId);
94 }
95 
OnBytesReceived(int sessionId,const void * data,unsigned int len)96 static void OnBytesReceived(int sessionId, const void *data, unsigned int len)
97 {
98     LOG_INFO("session bytes received, session id = %d\r\n", sessionId);
99 }
100 
OnMessageReceived(int sessionId,const void * data,unsigned int len)101 static void OnMessageReceived(int sessionId, const void *data, unsigned int len)
102 {
103     LOG_INFO("session msg received, session id = %d\r\n", sessionId);
104 }
105 
OnStreamReceived(int sessionId,const StreamData * data,const StreamData * ext,const StreamFrameInfo * param)106 static void OnStreamReceived(int sessionId, const StreamData *data, const StreamData *ext, const StreamFrameInfo *param)
107 {
108     LOG_INFO("session stream received, session id = %d\r\n", sessionId);
109 }
110 
OnQosEvent(int sessionId,int eventId,int tvCount,const QosTv * tvList)111 static void OnQosEvent(int sessionId, int eventId, int tvCount, const QosTv *tvList)
112 {
113     LOG_INFO("session Qos event emit, session id = %d\r\n", sessionId);
114 }
115 
116 static ISessionListener g_sessionlistener = {
117     .OnSessionOpened = OnSessionOpened,
118     .OnSessionClosed = OnSessionClosed,
119     .OnBytesReceived = OnBytesReceived,
120     .OnMessageReceived = OnMessageReceived,
121     .OnStreamReceived = OnStreamReceived,
122     .OnQosEvent = OnQosEvent,
123 };
124 
TestGenerateCommParam(SessionParam * sessionParam)125 static void TestGenerateCommParam(SessionParam *sessionParam)
126 {
127     sessionParam->sessionName = g_sessionName;
128     sessionParam->peerSessionName = g_sessionName;
129     sessionParam->peerDeviceId = g_deviceId;
130     sessionParam->groupId = g_groupId;
131     sessionParam->attr = &g_sessionAttr;
132 }
133 
TestGenerateSession(const SessionParam * param)134 static SessionInfo *TestGenerateSession(const SessionParam *param)
135 {
136     SessionInfo *session = (SessionInfo*)SoftBusCalloc(sizeof(SessionInfo));
137     if (session == NULL) {
138         return NULL;
139     }
140 
141     if (strcpy_s(session->info.peerSessionName, SESSION_NAME_SIZE_MAX, param->peerSessionName) != EOK ||
142         strcpy_s(session->info.peerDeviceId, DEVICE_ID_SIZE_MAX, param->peerDeviceId) != EOK ||
143         strcpy_s(session->info.groupId, GROUP_ID_SIZE_MAX, param->groupId) != EOK) {
144         SoftBusFree(session);
145         return NULL;
146     }
147 
148     session->sessionId = TRANS_TEST_SESSION_ID;
149     session->channelId = TRANS_TEST_CHANNEL_ID;
150     session->channelType = CHANNEL_TYPE_BUTT;
151     session->isServer = false;
152     session->isEnable = false;
153     session->routeType = ROUTE_TYPE_ALL;
154     session->info.flag = TYPE_BYTES;
155     session->isEncrypt = true;
156     session->algorithm = TRANS_TEST_ALGORITHM;
157     session->fileEncrypt = TRANS_TEST_FILE_ENCRYPT;
158     session->crc = TRANS_TEST_CRC;
159 
160     return session;
161 }
162 
AddSessionServerAndSession(const char * sessionName,int32_t channelType,int32_t businessType,bool isServer,bool isEnable)163 static int32_t AddSessionServerAndSession(const char *sessionName, int32_t channelType, int32_t businessType,
164                                           bool isServer, bool isEnable)
165 {
166     SessionParam *sessionParam = (SessionParam*)SoftBusCalloc(sizeof(SessionParam));
167     if (sessionParam == NULL) {
168         return SOFTBUS_ERR;
169     }
170 
171     TestGenerateCommParam(sessionParam);
172     sessionParam->sessionName = sessionName;
173     int32_t ret = ClientAddSessionServer(SEC_TYPE_PLAINTEXT, g_pkgName, sessionName, &g_sessionlistener);
174     if (ret != SOFTBUS_OK) {
175         return SOFTBUS_ERR;
176     }
177 
178     SessionInfo *session = TestGenerateSession(sessionParam);
179     if (session == NULL) {
180         return SOFTBUS_ERR;
181     }
182 
183     session->channelType = (ChannelType)channelType;
184     session->businessType = (BusinessType)businessType;
185     session->isServer = isServer;
186     session->isEnable = isEnable;
187     ret = ClientAddNewSession(sessionName, session);
188     if (ret != SOFTBUS_OK) {
189         return SOFTBUS_ERR;
190     }
191 
192     int32_t sessionId = 0;
193     ret = ClientGetSessionIdByChannelId(TRANS_TEST_CHANNEL_ID, channelType, &sessionId);
194     if (ret != SOFTBUS_OK) {
195         return SOFTBUS_ERR;
196     }
197     SoftBusFree(sessionParam);
198     return sessionId;
199 }
200 
DeleteSessionServerAndSession(const char * sessionName,int32_t sessionId)201 static void DeleteSessionServerAndSession(const char *sessionName, int32_t sessionId)
202 {
203     int32_t ret = ClientDeleteSession(sessionId);
204     EXPECT_EQ(ret, SOFTBUS_OK);
205     ret = ClientDeleteSessionServer(SEC_TYPE_PLAINTEXT, sessionName);
206     EXPECT_EQ(ret, SOFTBUS_OK);
207 }
208 
209 /**
210  * @tc.name: TransClientMsgServiceTest01
211  * @tc.desc: Transmission sdk message service check send length with different parameters.
212  * @tc.type: FUNC
213  * @tc.require:
214  */
215 HWTEST_F(TransClientMsgServiceTest, TransClientMsgServiceTest01, TestSize.Level1)
216 {
217     int ret = CheckSendLen(CHANNEL_TYPE_BUTT, BUSINESS_TYPE_MESSAGE, TRANS_TEST_SEND_LEN);
218     EXPECT_EQ(ret, SOFTBUS_GET_CONFIG_VAL_ERR);
219     ret = CheckSendLen(CHANNEL_TYPE_AUTH, BUSINESS_TYPE_MESSAGE, TRANS_TEST_INVALID_SEND_LEN);
220     EXPECT_EQ(ret, SOFTBUS_GET_CONFIG_VAL_ERR);
221     ret = CheckSendLen(CHANNEL_TYPE_AUTH, BUSINESS_TYPE_MESSAGE, TRANS_TEST_SEND_LEN);
222     EXPECT_EQ(ret, SOFTBUS_GET_CONFIG_VAL_ERR);
223 }
224 
225 /**
226  * @tc.name: TransClientMsgServiceTest02
227  * @tc.desc: Transmission sdk message service send bytes with different parameters.
228  * @tc.type: FUNC
229  * @tc.require:
230  */
231 HWTEST_F(TransClientMsgServiceTest, TransClientMsgServiceTest02, TestSize.Level1)
232 {
233     int32_t sessionId = AddSessionServerAndSession(g_sessionName, CHANNEL_TYPE_AUTH, BUSINESS_TYPE_BUTT, false, true);
234     ASSERT_GT(sessionId, 0);
235     int ret = SendBytes(sessionId, TRANS_TEST_AUTH_DATA, (unsigned int)strlen(TRANS_TEST_AUTH_DATA));
236     EXPECT_EQ(ret, SOFTBUS_TRANS_SEND_LEN_BEYOND_LIMIT);
237     DeleteSessionServerAndSession(g_sessionName, sessionId);
238     sessionId = AddSessionServerAndSession(g_sessionName, CHANNEL_TYPE_AUTH, BUSINESS_TYPE_NOT_CARE, false, true);
239     ASSERT_GT(sessionId, 0);
240     ret = SendBytes(sessionId, TRANS_TEST_AUTH_DATA, (unsigned int)strlen(TRANS_TEST_AUTH_DATA));
241     EXPECT_EQ(ret, SOFTBUS_TRANS_SEND_LEN_BEYOND_LIMIT);
242     DeleteSessionServerAndSession(g_sessionName, sessionId);
243 }
244 
245 /**
246  * @tc.name: TransClientMsgServiceTest03
247  * @tc.desc: Transmission sdk message service send message with different parameters.
248  * @tc.type: FUNC
249  * @tc.require:
250  */
251 HWTEST_F(TransClientMsgServiceTest, TransClientMsgServiceTest03, TestSize.Level1)
252 {
253     int32_t sessionId = AddSessionServerAndSession(g_sessionName, CHANNEL_TYPE_UDP, BUSINESS_TYPE_BUTT, false, true);
254     ASSERT_GT(sessionId, 0);
255     int ret = SendMessage(sessionId, TRANS_TEST_AUTH_DATA, (unsigned int)strlen(TRANS_TEST_AUTH_DATA));
256     EXPECT_EQ(ret, SOFTBUS_TRANS_SEND_LEN_BEYOND_LIMIT);
257     DeleteSessionServerAndSession(g_sessionName, sessionId);
258     sessionId = AddSessionServerAndSession(g_sessionName, CHANNEL_TYPE_AUTH, BUSINESS_TYPE_BUTT, false, true);
259     ASSERT_GT(sessionId, 0);
260     ret = SendMessage(sessionId, TRANS_TEST_AUTH_DATA, (unsigned int)strlen(TRANS_TEST_AUTH_DATA));
261     EXPECT_EQ(ret, SOFTBUS_TRANS_SEND_LEN_BEYOND_LIMIT);
262     DeleteSessionServerAndSession(g_sessionName, sessionId);
263     sessionId = AddSessionServerAndSession(g_sessionName, CHANNEL_TYPE_AUTH, BUSINESS_TYPE_NOT_CARE, false, true);
264     ASSERT_GT(sessionId, 0);
265     ret = SendMessage(sessionId, TRANS_TEST_AUTH_DATA, (unsigned int)strlen(TRANS_TEST_AUTH_DATA));
266     EXPECT_EQ(ret, SOFTBUS_TRANS_SEND_LEN_BEYOND_LIMIT);
267     DeleteSessionServerAndSession(g_sessionName, sessionId);
268 }
269 
270 /**
271  * @tc.name: TransClientMsgServiceTest04
272  * @tc.desc: Transmission sdk message service send stream with different parameters.
273  * @tc.type: FUNC
274  * @tc.require:
275  */
276 HWTEST_F(TransClientMsgServiceTest, TransClientMsgServiceTest04, TestSize.Level1)
277 {
278     char dataBuf[TRANS_TEST_MAX_MSG_LEN] = {0};
279     StreamData data = {
280         .buf = dataBuf,
281         .bufLen = TRANS_TEST_MAX_MSG_LEN
282     };
283     char extBuf[TRANS_TEST_MAX_MSG_LEN] = {0};
284     StreamData ext = {
285         .buf = extBuf,
286         .bufLen = TRANS_TEST_MAX_MSG_LEN
287     };
288     StreamFrameInfo streamFrameInfo = {0};
289     int32_t sessionId = AddSessionServerAndSession(g_sessionName, CHANNEL_TYPE_BUTT, BUSINESS_TYPE_BUTT, false, true);
290     ASSERT_GT(sessionId, 0);
291     int ret = SendStream(sessionId, &data, &ext, &streamFrameInfo);
292     EXPECT_EQ(ret, SOFTBUS_TRANS_STREAM_ONLY_UDP_CHANNEL);
293     DeleteSessionServerAndSession(g_sessionName, sessionId);
294     sessionId = AddSessionServerAndSession(g_sessionName, CHANNEL_TYPE_UDP, BUSINESS_TYPE_BUTT, false, false);
295     ASSERT_GT(sessionId, 0);
296     ret = SendStream(sessionId, &data, &ext, &streamFrameInfo);
297     EXPECT_EQ(ret, SOFTBUS_TRANS_SESSION_NO_ENABLE);
298     DeleteSessionServerAndSession(g_sessionName, sessionId);
299     sessionId = AddSessionServerAndSession(g_sessionName, CHANNEL_TYPE_UDP, BUSINESS_TYPE_BUTT, false, true);
300     ASSERT_GT(sessionId, 0);
301     ret = SendStream(sessionId, &data, &ext, &streamFrameInfo);
302     EXPECT_EQ(ret, SOFTBUS_TRANS_BUSINESS_TYPE_NOT_MATCH);
303     DeleteSessionServerAndSession(g_sessionName, sessionId);
304     sessionId = AddSessionServerAndSession(g_sessionName, CHANNEL_TYPE_UDP, BUSINESS_TYPE_STREAM, false, true);
305     ASSERT_GT(sessionId, 0);
306     ret = SendStream(sessionId, &data, &ext, &streamFrameInfo);
307     EXPECT_NE(ret, SOFTBUS_OK);
308     DeleteSessionServerAndSession(g_sessionName, sessionId);
309 }
310 
311 /**
312  * @tc.name: TransClientMsgServiceTest05
313  * @tc.desc: Transmission sdk message service send file with different parameters.
314  * @tc.type: FUNC
315  * @tc.require:
316  */
317 HWTEST_F(TransClientMsgServiceTest, TransClientMsgServiceTest05, TestSize.Level1)
318 {
319     const char *sFileList[TRANS_TEST_FILE_COUNT] = {
320         "/DATA/LOCAL/X",
321         "/DATA/LOCAL/Y"
322     };
323     const char *dFileList[TRANS_TEST_FILE_COUNT] = {
324         "/DATA/LOCAL/X",
325         "/DATA/LOCAL/Y"
326     };
327     int32_t sessionId = AddSessionServerAndSession(g_sessionName, CHANNEL_TYPE_UDP, BUSINESS_TYPE_BUTT, false, true);
328     ASSERT_GT(sessionId, 0);
329     int ret = SendFile(sessionId, sFileList, dFileList, TRANS_TEST_FILE_COUNT);
330     EXPECT_EQ(ret, SOFTBUS_TRANS_BUSINESS_TYPE_NOT_MATCH);
331     DeleteSessionServerAndSession(g_sessionName, sessionId);
332     sessionId = AddSessionServerAndSession(g_sessionName, CHANNEL_TYPE_AUTH, BUSINESS_TYPE_NOT_CARE, false, false);
333     ASSERT_GT(sessionId, 0);
334     ret = SendFile(sessionId, sFileList, dFileList, TRANS_TEST_FILE_COUNT);
335     EXPECT_EQ(ret, SOFTBUS_TRANS_SESSION_NO_ENABLE);
336     DeleteSessionServerAndSession(g_sessionName, sessionId);
337     sessionId = AddSessionServerAndSession(g_sessionName, CHANNEL_TYPE_AUTH, BUSINESS_TYPE_NOT_CARE, false, true);
338     ASSERT_GT(sessionId, 0);
339     ret = SendFile(sessionId, sFileList, dFileList, TRANS_TEST_FILE_COUNT);
340     EXPECT_EQ(ret, SOFTBUS_TRANS_CHANNEL_TYPE_INVALID);
341     DeleteSessionServerAndSession(g_sessionName, sessionId);
342 }
343 }