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 }