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 #include "channel_manager_test.h"
16 #include "channel_manager.h"
17 #include "dtbcollabmgr_log.h"
18 #include "securec.h"
19 #include "ichannel_listener_mock.h"
20 #include <chrono>
21 #include <thread>
22
23 namespace OHOS {
24 namespace DistributedCollab {
25 namespace {
26 static const std::string TAG = "DSchedCollabChannelManagerTest";
27 using namespace testing;
28 using namespace testing::ext;
29 static constexpr int32_t NUM_1234 = 1234;
30 static constexpr int32_t NUM_MINUS_1 = -1;
31 static constexpr int32_t MESSAGE_START_ID = 1001;
32 static constexpr int32_t BYTES_START_ID = 2001;
33 static constexpr int32_t STREAM_START_ID = 3001;
34 static constexpr int32_t CHANNGE_GAP = 1000;
35 static constexpr int32_t INVALID_CHANNEL = 9999;
36 static constexpr int32_t SLEEP_FOR_INIT = 2000;
37 static constexpr int32_t NUM_1024 = 1024;
38 static constexpr int32_t NUM_1 = 1;
39 static constexpr int32_t NUM_200 = 200;
40 constexpr int32_t MAX_LEN = 10 * 1024;
41 }
42
SetUpTestCase()43 void ChannelManagerTest::SetUpTestCase()
44 {
45 HILOGI("ChannelManagerTest::SetUpTestCase");
46 }
47
TearDownTestCase()48 void ChannelManagerTest::TearDownTestCase()
49 {
50 HILOGI("ChannelManagerTest::TearDownTestCase");
51 }
52
SetUp()53 void ChannelManagerTest::SetUp()
54 {
55 HILOGI("ChannelManagerTest::SetUp");
56 }
57
TearDown()58 void ChannelManagerTest::TearDown()
59 {
60 HILOGI("ChannelManagerTest::TearDown");
61 std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_FOR_INIT));
62 ChannelManager::GetInstance().DeInit();
63 }
64
65 /**
66 * @tc.name: TestInit_Success
67 * @tc.desc: Test for Init when all conditions are successful
68 * @tc.type: FUNC
69 */
70 HWTEST_F(ChannelManagerTest, TestInit_Success, TestSize.Level1)
71 {
72 EXPECT_CALL(mockSoftbus, Socket(testing::_))
73 .WillOnce(testing::Return(NUM_1234));
74
75 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
76 .WillOnce(testing::Return(ERR_OK));
77
78 int32_t result = ChannelManager::GetInstance().Init(ownerName);
79
80 EXPECT_EQ(result, ERR_OK);
81 }
82
83 /**
84 * @tc.name: TestInit_SocketFailure
85 * @tc.desc: Test for Init when CreateServerSocket fails
86 * @tc.type: FUNC
87 */
88 HWTEST_F(ChannelManagerTest, TestInit_SocketFailure, TestSize.Level1)
89 {
90 EXPECT_CALL(mockSoftbus, Socket(testing::_))
91 .WillOnce(testing::Return(NUM_MINUS_1));
92
93 int32_t result = ChannelManager::GetInstance().Init(ownerName);
94
95 EXPECT_EQ(result, CREATE_SOCKET_FAILED);
96 }
97
98 /**
99 * @tc.name: TestInit_ListenFailure
100 * @tc.desc: Test for Init when Listen fails
101 * @tc.type: FUNC
102 */
103 HWTEST_F(ChannelManagerTest, TestInit_ListenFailure, TestSize.Level1)
104 {
105 EXPECT_CALL(mockSoftbus, Socket(testing::_))
106 .WillOnce(testing::Return(NUM_1234));
107
108 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
109 .WillOnce(testing::Return(-2));
110
111 int32_t result = ChannelManager::GetInstance().Init(ownerName);
112
113 EXPECT_EQ(result, LISTEN_SOCKET_FAILED);
114 }
115
116 /**
117 * @tc.name: CreateServerChannel_Success
118 * @tc.desc: Test for CreateServerChannel when the base channel is successfully created
119 * @tc.type: FUNC
120 */
121 HWTEST_F(ChannelManagerTest, CreateServerChannel_Success, TestSize.Level1)
122 {
123 std::string channelName = "TestChannel";
124 ChannelDataType dataType = ChannelDataType::MESSAGE;
125 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
126
127 int32_t channelId = ChannelManager::GetInstance().CreateServerChannel(channelName, dataType, peerInfo);
128 EXPECT_EQ(channelId, MESSAGE_START_ID);
129 }
130
131 /**
132 * @tc.name: CreateServerChannel_ExceedMax_Failed
133 * @tc.desc: Test for CreateServerChannel when the base channel is ExceedMax_Failed
134 * @tc.type: FUNC
135 */
136 HWTEST_F(ChannelManagerTest, CreateServerChannel_ExceedMax_Failed, TestSize.Level1)
137 {
138 std::string channelName = "TestChannel";
139 ChannelDataType dataType = ChannelDataType::MESSAGE;
140 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
141
142 int32_t channelId = 0;
143 for (int32_t i = 0; i < CHANNGE_GAP + 1; i++)
144 {
145 channelId = ChannelManager::GetInstance().CreateServerChannel(channelName, dataType, peerInfo);
146 }
147 EXPECT_EQ(channelId, CREATE_SERVER_CHANNEL_FAILED);
148 }
149
150 /**
151 * @tc.name: CreateClientChannel_Success
152 * @tc.desc: Test for CreateClientChannel when CreateBaseChannel and RegisterSocket succeed
153 * @tc.type: FUNC
154 */
155 HWTEST_F(ChannelManagerTest, CreateClientChannel_Success, TestSize.Level1)
156 {
157 // Setup the test data
158 std::string channelName = "testClientChannel";
159 ChannelDataType dataType = ChannelDataType::MESSAGE;
160 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
161
162 EXPECT_CALL(mockSoftbus, Socket(testing::_))
163 .WillOnce(testing::Return(NUM_1234));
164
165 // Call CreateClientChannel and check the result
166 int32_t result = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
167 EXPECT_EQ(result, MESSAGE_START_ID); // Should return valid channelId
168 }
169
170 /**
171 * @tc.name: CreateClientChannel_CreateSocket_Fail
172 * @tc.desc: Test for CreateClientChannel when CreateBaseChannel fails
173 * @tc.type: FUNC
174 */
175 HWTEST_F(ChannelManagerTest, CreateClientChannel_CreateSocket_Fail, TestSize.Level1)
176 {
177 // Setup the test data
178 std::string channelName = "testClientChannel";
179 ChannelDataType dataType = ChannelDataType::MESSAGE;
180 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
181
182 EXPECT_CALL(mockSoftbus, Socket(testing::_))
183 .WillOnce(testing::Return(NUM_MINUS_1));
184
185 // Call CreateClientChannel and check the result
186 int32_t result = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
187 EXPECT_EQ(result, CREATE_SOCKET_FAILED); // Should return valid channelId
188 }
189
190 /**
191 * @tc.name: CreateClientChannel_LoneName_Fail
192 * @tc.desc: Test for CreateClientChannel when RegisterSocket fails
193 * @tc.type: FUNC
194 */
195 HWTEST_F(ChannelManagerTest, CreateClientChannel_LoneName_Fail, TestSize.Level1)
196 {
197 // Setup the test data
198 std::string channelName = "ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss";
199 ChannelDataType dataType = ChannelDataType::MESSAGE;
200 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
201
202 // Call CreateClientChannel and check the result
203 int32_t result = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
204 EXPECT_EQ(result, CREATE_SOCKET_FAILED); // Should return valid channelId
205 }
206
207 /**
208 * @tc.name: CreateClientChannel_ExceedNum_Fail
209 * @tc.desc: Test for CreateClientChannel when RegisterSocket fails
210 * @tc.type: FUNC
211 */
212 HWTEST_F(ChannelManagerTest, CreateClientChannel_ExceedNum_Fail, TestSize.Level1)
213 {
214 // Setup the test data
215 std::string channelName = "testClientChannel";
216 ChannelDataType dataType = ChannelDataType::MESSAGE;
217 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
218
219 int32_t channelId = 0;
220 for (int32_t i = 0; i < CHANNGE_GAP + 1; i++)
221 {
222 channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
223 }
224 EXPECT_EQ(channelId, CREATE_CLIENT_CHANNEL_FAILED);
225 }
226
227 /**
228 * @tc.name: DeleteChannel_Success
229 * @tc.desc: Test for DeleteChannel when valid channelId is provided and socket resources are cleared successfully
230 * @tc.type: FUNC
231 */
232 HWTEST_F(ChannelManagerTest, DeleteChannel_Success, TestSize.Level1)
233 {
234 // Setup the test data
235 std::string channelName = "testDeleteChannel";
236 ChannelDataType dataType = ChannelDataType::MESSAGE;
237 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
238
239 EXPECT_CALL(mockSoftbus, Socket(testing::_))
240 .WillOnce(testing::Return(NUM_1234));
241
242 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
243 ASSERT_EQ(channelId, MESSAGE_START_ID); // Ensure the channel is created successfully
244
245 int32_t deleteResult = ChannelManager::GetInstance().DeleteChannel(channelId);
246 EXPECT_EQ(deleteResult, channelId);
247 }
248
249 /**
250 * @tc.name: DeleteChannel_InvalidChannelId
251 * @tc.desc: Test for DeleteChannel when invalid channelId is provided
252 * @tc.type: FUNC
253 */
254 HWTEST_F(ChannelManagerTest, DeleteChannel_InvalidChannelId, TestSize.Level1)
255 {
256 int32_t invalidChannelId = -1;
257 int32_t result = ChannelManager::GetInstance().DeleteChannel(invalidChannelId);
258 EXPECT_EQ(result, INVALID_CHANNEL_ID);
259 }
260
261 /**
262 * @tc.name: RegisterChannelListener_NullListener
263 * @tc.desc: Test for RegisterChannelListener when listener is nullptr
264 * @tc.type: FUNC
265 */
266 HWTEST_F(ChannelManagerTest, RegisterChannelListener_NullListener, TestSize.Level1)
267 {
268 int32_t channelId = MESSAGE_START_ID;
269 std::shared_ptr<IChannelListener> nullListener = nullptr;
270 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, nullListener);
271 EXPECT_EQ(result, INVALID_LISTENER);
272 }
273
274 /**
275 * @tc.name: RegisterChannelListener_ChannelIdNotExist
276 * @tc.desc: Test for RegisterChannelListener when channelId is not present in listenersMap_
277 * @tc.type: FUNC
278 */
279 HWTEST_F(ChannelManagerTest, RegisterChannelListener_ChannelIdNotExist, TestSize.Level1)
280 {
281 int32_t channelId = MESSAGE_START_ID;
282 std::shared_ptr<IChannelListener> listener = std::make_shared<MockChannelListener>();
283 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, listener);
284 EXPECT_EQ(result, ERR_OK);
285 }
286
287 /**
288 * @tc.name: RegisterChannelListener_ListenerExist
289 * @tc.desc: Test for RegisterChannelListener when Listener already has listeners
290 * @tc.type: FUNC
291 */
292 HWTEST_F(ChannelManagerTest, RegisterChannelListener_ListenerExist, TestSize.Level1)
293 {
294 int32_t channelId = MESSAGE_START_ID;
295 std::shared_ptr<IChannelListener> listener = std::make_shared<MockChannelListener>();
296 ChannelManager::GetInstance().RegisterChannelListener(channelId, listener);
297 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, listener);
298 EXPECT_EQ(result, ERR_OK);
299 }
300
301 /**
302 * @tc.name: ConnectChannel_Success
303 * @tc.desc: Test for ConnectChannel when valid channelId and client sockets are present
304 * @tc.type: FUNC
305 */
306 HWTEST_F(ChannelManagerTest, ConnectChannel_Success, TestSize.Level1)
307 {
308 // Init
309 EXPECT_CALL(mockSoftbus, Socket(testing::_))
310 .WillRepeatedly(testing::Return(NUM_1234));
311 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
312 .WillOnce(testing::Return(ERR_OK));
313 int32_t result = ChannelManager::GetInstance().Init(ownerName);
314 EXPECT_EQ(result, ERR_OK);
315
316 // CreateClient
317 // Setup the test data
318 std::string channelName = "testClientChannel";
319 ChannelDataType dataType = ChannelDataType::MESSAGE;
320 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
321
322 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
323 EXPECT_EQ(channelId, MESSAGE_START_ID); // Should return valid channelId
324
325 // Step 3: Mock Bind to succeed
326 EXPECT_CALL(mockSoftbus, Bind(testing::_, testing::_, testing::_, testing::_))
327 .WillOnce(testing::Return(ERR_OK)); // Mock Bind to succeed
328
329 // Call ConnectChannel and check the result
330 result = ChannelManager::GetInstance().ConnectChannel(channelId);
331 EXPECT_EQ(result, ERR_OK);
332 }
333
334 /**
335 * @tc.name: ConnectChannel_BindFailed
336 * @tc.desc: Test for ConnectChannel when Bind fails.
337 * @tc.type: FUNC
338 */
339 HWTEST_F(ChannelManagerTest, ConnectChannel_BindFailed, TestSize.Level1)
340 {
341 // Init
342 EXPECT_CALL(mockSoftbus, Socket(testing::_))
343 .WillRepeatedly(testing::Return(NUM_1234));
344 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
345 .WillOnce(testing::Return(ERR_OK));
346 int32_t result = ChannelManager::GetInstance().Init(ownerName);
347 EXPECT_EQ(result, ERR_OK);
348
349 // CreateClient
350 // Setup the test data
351 std::string channelName = "testClientChannel";
352 ChannelDataType dataType = ChannelDataType::MESSAGE;
353 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
354
355 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
356 EXPECT_EQ(channelId, MESSAGE_START_ID); // Should return valid channelId
357
358 // Step 3: Mock Bind to succeed
359 EXPECT_CALL(mockSoftbus, Bind(testing::_, testing::_, testing::_, testing::_))
360 .WillOnce(testing::Return(NUM_MINUS_1)); // Mock Bind to succeed
361
362 // Call ConnectChannel and check the result
363 result = ChannelManager::GetInstance().ConnectChannel(channelId);
364 EXPECT_EQ(result, CONNECT_CHANNEL_FAILED);
365 }
366
367 /**
368 * @tc.name: ConnectChannel_InvalidChannelId
369 * @tc.desc: Test for ConnectChannel when channelId is invalid (not found in channelInfoMap_).
370 * @tc.type: FUNC
371 */
372 HWTEST_F(ChannelManagerTest, ConnectChannel_InvalidChannelId, TestSize.Level1)
373 {
374 // Simulate channelId not being in the channelInfoMap_
375 int32_t invalidChannelId = INVALID_CHANNEL; // Invalid channel ID
376 int32_t connectResult = ChannelManager::GetInstance().ConnectChannel(invalidChannelId);
377
378 // Verify that ConnectChannel returns INVALID_CHANNEL_ID for an invalid channelId
379 EXPECT_EQ(connectResult, INVALID_CHANNEL_ID);
380 }
381
382 /**
383 * @tc.name: ConnectChannel_RepeatConnection
384 * @tc.desc: Test for ConnectChannel when the channelId is already connected.
385 * @tc.type: FUNC
386 */
387 HWTEST_F(ChannelManagerTest, ConnectChannel_RepeatConnection, TestSize.Level1)
388 {
389 // Step 1: Initialize the ChannelManager
390 EXPECT_CALL(mockSoftbus, Socket(testing::_))
391 .WillRepeatedly(testing::Return(NUM_1234));
392 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
393 .WillOnce(testing::Return(ERR_OK)); // Mock Listen to return success
394
395 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
396 EXPECT_EQ(initResult, ERR_OK); // Ensure Init was successful
397
398 // Step 2: Create Client Channel
399 std::string channelName = "testClientChannel";
400 ChannelDataType dataType = ChannelDataType::MESSAGE;
401 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
402
403 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
404 EXPECT_EQ(channelId, MESSAGE_START_ID); // Verify the channel ID is correctly returned
405
406 // Step 3: Mock Bind to succeed
407 EXPECT_CALL(mockSoftbus, Bind(testing::_, testing::_, testing::_, testing::_))
408 .WillOnce(testing::Return(ERR_OK)); // Mock Bind to succeed
409
410 // Call ConnectChannel and check the result
411 int32_t result = ChannelManager::GetInstance().ConnectChannel(channelId);
412 EXPECT_EQ(result, ERR_OK);
413
414 // Step 4: Test ConnectChannel with already connected channelId
415 // When channelId is already connected, ConnectChannel should return ERR_OK
416 int32_t connectResult = ChannelManager::GetInstance().ConnectChannel(channelId);
417 EXPECT_EQ(connectResult, ERR_OK); // Already connected, no need to connect again
418 }
419
420 /**
421 * @tc.name: OnSocketConnected_Success_WithCallback
422 * @tc.desc: Test for OnSocketConnected when the socket is successfully connected and valid channel is found,
423 * and callback methods are invoked correctly.
424 * @tc.type: FUNC
425 */
426 HWTEST_F(ChannelManagerTest, OnSocketConnected_Success_WithCallback, TestSize.Level1)
427 {
428 // Step 1: Initialize the ChannelManager
429 EXPECT_CALL(mockSoftbus, Socket(testing::_))
430 .WillRepeatedly(testing::Return(NUM_1234));
431 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
432 .WillOnce(testing::Return(ERR_OK)); // Mock Listen to return success
433
434 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
435 EXPECT_EQ(initResult, ERR_OK); // Ensure Init was successful
436
437 std::string channelName = "TestChannel";
438 ChannelDataType dataType = ChannelDataType::MESSAGE;
439 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
440 int32_t channelId = ChannelManager::GetInstance().CreateServerChannel(channelName, dataType, peerInfo);
441 EXPECT_EQ(channelId, MESSAGE_START_ID); // Assuming MESSAGE_START_ID is defined
442
443 // Step 2: Prepare PeerSocketInfo with correctly formatted name
444 std::string prefix = "ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss";
445 std::string name = prefix + "_M_" + channelName;
446 PeerSocketInfo info = {
447 .name = const_cast<char*>(name.c_str()), // valid name
448 .networkId = nullptr, // network ID
449 .pkgName = nullptr, // package name
450 .dataType = DATA_TYPE_MESSAGE // channel data type
451 };
452
453 int32_t socketId = NUM_1234; // valid socketId
454
455 // Mock the listener and expect the OnConnect callback to be triggered
456 auto mockListener = std::make_shared<MockChannelListener>();
457 EXPECT_CALL(*mockListener, OnConnect(channelId)).Times(1);
458
459 // Register listener for the channelId
460 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, mockListener);
461 EXPECT_EQ(result, ERR_OK);
462
463 // Call OnSocketConnected, which should trigger the OnConnect callback
464 ChannelManager::GetInstance().OnSocketConnected(socketId, info);
465 std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_FOR_INIT));
466 }
467
468 /**
469 * @tc.name: OnSocketConnected_InvalidChannelNameFormat_WithCallback
470 * @tc.desc: Test for OnSocketConnected when the channel name Format is invalid and cannot be parsed,
471 * and the OnError callback is triggered.
472 * @tc.type: FUNC
473 */
474 HWTEST_F(ChannelManagerTest, OnSocketConnected_InvalidChannelNameFormat_WithCallback, TestSize.Level1)
475 {
476 // Step 1: Create Server Channel
477 std::string channelName = "TestChannel";
478 ChannelDataType dataType = ChannelDataType::MESSAGE;
479 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
480 int32_t channelId = ChannelManager::GetInstance().CreateServerChannel(channelName, dataType, peerInfo);
481 EXPECT_EQ(channelId, MESSAGE_START_ID); // Assuming MESSAGE_START_ID is defined
482
483 // Step 2: Prepare PeerSocketInfo with invalid name
484 std::string name = "ohos.distributedschedule.dms.InvalidChannelName";
485 PeerSocketInfo info = {
486 .name = const_cast<char*>(name.c_str()), // invalid name
487 .networkId = nullptr, // network ID
488 .pkgName = nullptr, // package name
489 .dataType = DATA_TYPE_MESSAGE // channel data type
490 };
491
492 int32_t socketId = NUM_1234; // valid socketId
493
494 // Mock the listener and expect
495 auto mockListener = std::make_shared<MockChannelListener>();
496 EXPECT_CALL(*mockListener, OnConnect(channelId)).Times(0);
497
498 // Register listener for the channelId
499 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, mockListener);
500 EXPECT_EQ(result, ERR_OK);
501
502 // Call OnSocketConnected, which should trigger the OnError callback due to invalid channel name
503 ChannelManager::GetInstance().OnSocketConnected(socketId, info);
504 }
505
506 /**
507 * @tc.name: OnSocketConnected_InvalidChannelType_WithCallback
508 * @tc.desc: Test for OnSocketConnected when the channelId Type invalid, and the OnError callback is triggered.
509 * @tc.type: FUNC
510 */
511 HWTEST_F(ChannelManagerTest, OnSocketConnected_InvalidChannelType_WithCallback, TestSize.Level1)
512 {
513 // Step 1: Create Server Channel
514 std::string channelName = "TestChannel";
515 ChannelDataType dataType = ChannelDataType::MESSAGE;
516 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
517 int32_t channelId = ChannelManager::GetInstance().CreateServerChannel(channelName, dataType, peerInfo);
518 EXPECT_EQ(channelId, MESSAGE_START_ID); // Assuming MESSAGE_START_ID is defined
519
520 // Step 2: Prepare PeerSocketInfo with valid name but invalid channelId
521 std::string prefix = "ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss";
522 std::string name = prefix + "_IVA_" + channelName;
523 PeerSocketInfo info = {
524 .name = const_cast<char*>(name.c_str()), // invalid type
525 .networkId = nullptr, // network ID
526 .pkgName = nullptr, // package name
527 .dataType = DATA_TYPE_MESSAGE // channel data type
528 };
529
530 int32_t socketId = NUM_1234; // valid socketId
531
532 // Mock the listener and expect the OnError callback to be triggered
533 auto mockListener = std::make_shared<MockChannelListener>();
534 EXPECT_CALL(*mockListener, OnConnect(channelId)).Times(0);
535
536 // Register listener for the channelId
537 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, mockListener);
538 EXPECT_EQ(result, ERR_OK);
539
540 // Call OnSocketConnected, which should trigger the OnError callback due to invalid channelId
541 ChannelManager::GetInstance().OnSocketConnected(socketId, info);
542 }
543
544 /**
545 * @tc.name: OnSocketConnected_InvalidChannelName_WithCallback
546 * @tc.desc: Test for OnSocketConnected when registering the socket fails,
547 * and verify if the OnError callback is triggered.
548 * @tc.type: FUNC
549 */
550 HWTEST_F(ChannelManagerTest, OnSocketConnected_InvalidChannelName_WithCallback, TestSize.Level1)
551 {
552 // Step 1: Create Server Channel
553 std::string channelName = "TestChannel";
554 ChannelDataType dataType = ChannelDataType::MESSAGE;
555 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
556 int32_t channelId = ChannelManager::GetInstance().CreateServerChannel(channelName, dataType, peerInfo);
557 EXPECT_EQ(channelId, MESSAGE_START_ID); // Assuming MESSAGE_START_ID is defined
558
559 // Step 2: Prepare PeerSocketInfo with correct name
560 std::string prefix = "ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss";
561 std::string name = prefix + "_M_" + channelName + "invalid";
562 PeerSocketInfo info = {
563 .name = const_cast<char*>(name.c_str()), // invalid name
564 .networkId = nullptr, // network ID
565 .pkgName = nullptr, // package name
566 .dataType = DATA_TYPE_MESSAGE // channel data type
567 };
568
569 int32_t socketId = NUM_1234; // valid socketId
570
571 // Mock the listener and expect the OnError callback to be triggered
572 auto mockListener = std::make_shared<MockChannelListener>();
573 EXPECT_CALL(*mockListener, OnConnect(channelId)).Times(0);
574
575 // Register listener for the channelId
576 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, mockListener);
577 EXPECT_EQ(result, ERR_OK);
578
579 ChannelManager::GetInstance().OnSocketConnected(socketId, info);
580 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().OnSocketConnected(-1, info));
581 }
582
583 /**
584 * @tc.name: OnSocketClosed_CallbackInvokedAndChannelDeleted
585 * @tc.desc: Test for OnSocketClosed when the socket is closed and callback is invoked, and channel is deleted.
586 * @tc.type: FUNC
587 */
588 HWTEST_F(ChannelManagerTest, OnSocketClosed_CallbackInvokedAndChannelDeleted, TestSize.Level1)
589 {
590 // Step 1: Initialize the ChannelManager
591 EXPECT_CALL(mockSoftbus, Socket(testing::_))
592 .WillRepeatedly(testing::Return(NUM_1234));
593 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
594 .WillOnce(testing::Return(ERR_OK)); // Mock Listen to return success
595
596 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
597 EXPECT_EQ(initResult, ERR_OK); // Ensure Init was successful
598
599 // CreateClient
600 // Setup the test data
601 std::string channelName = "testClientChannel";
602 ChannelDataType dataType = ChannelDataType::MESSAGE;
603 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
604 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
605 EXPECT_EQ(channelId, MESSAGE_START_ID); // Should return valid channelId
606
607 auto mockListener = std::make_shared<MockChannelListener>();
608 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, mockListener);
609 EXPECT_EQ(result, ERR_OK);
610
611 // Step 3: Mock Bind to succeed
612 EXPECT_CALL(mockSoftbus, Bind(testing::_, testing::_, testing::_, testing::_))
613 .WillOnce(testing::Return(ERR_OK)); // Mock Bind to succeed
614
615 // Call ConnectChannel and check the result
616 result = ChannelManager::GetInstance().ConnectChannel(channelId);
617 EXPECT_EQ(result, ERR_OK);
618
619 ChannelManager::GetInstance().OnSocketClosed(NUM_1234, ShutdownReason::SHUTDOWN_REASON_LNN_OFFLINE);
620 std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_FOR_INIT));
621 }
622
623 /**
624 * @tc.name: OnSocketClosed_WhenNoChannelID
625 * @tc.desc: Test for OnSocketClosed when the socket is WhenNoChannelID.
626 * @tc.type: FUNC
627 */
628 HWTEST_F(ChannelManagerTest, OnSocketClosed_WhenNoChannelID, TestSize.Level1)
629 {
630 EXPECT_CALL(mockSoftbus, Socket(testing::_))
631 .WillRepeatedly(testing::Return(NUM_1234));
632 // CreateClient
633 // Setup the test data
634 std::string channelName = "testClientChannel";
635 ChannelDataType dataType = ChannelDataType::MESSAGE;
636 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
637 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
638 EXPECT_EQ(channelId, MESSAGE_START_ID); // Should return valid channelId
639
640 auto mockListener = std::make_shared<MockChannelListener>();
641 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, mockListener);
642 EXPECT_EQ(result, ERR_OK);
643 EXPECT_CALL(*mockListener, OnDisConnect(channelId, ShutdownReason::SHUTDOWN_REASON_LNN_OFFLINE)).Times(0);
644
645 ChannelManager::GetInstance().OnSocketClosed(INVALID_CHANNEL_ID, ShutdownReason::SHUTDOWN_REASON_LNN_OFFLINE);
646 }
647
648 /**
649 * @tc.name: OnSocketClosed_InvalidSocketIdWithChannelId
650 * @tc.desc: Test for OnSocketClosed when the socket is InvalidSocketIdWithChannelId.
651 * @tc.type: FUNC
652 */
653 HWTEST_F(ChannelManagerTest, OnSocketClosed_InvalidSocketIdWithChannelId, TestSize.Level1)
654 {
655 // Step 1: Initialize the ChannelManager
656 EXPECT_CALL(mockSoftbus, Socket(testing::_))
657 .WillRepeatedly(testing::Return(NUM_1234));
658 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
659 .WillOnce(testing::Return(ERR_OK)); // Mock Listen to return success
660
661 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
662 EXPECT_EQ(initResult, ERR_OK); // Ensure Init was successful
663
664 // CreateClient
665 // Setup the test data
666 std::string channelName = "testClientChannel";
667 ChannelDataType dataType = ChannelDataType::MESSAGE;
668 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
669 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
670 EXPECT_EQ(channelId, MESSAGE_START_ID); // Should return valid channelId
671
672 auto mockListener = std::make_shared<MockChannelListener>();
673 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, mockListener);
674 EXPECT_EQ(result, ERR_OK);
675 EXPECT_CALL(*mockListener, OnDisConnect(channelId, ShutdownReason::SHUTDOWN_REASON_LNN_OFFLINE)).Times(0);
676
677 ChannelManager::GetInstance().OnSocketClosed(INVALID_CHANNEL_ID, ShutdownReason::SHUTDOWN_REASON_LNN_OFFLINE);
678 }
679
680 /**
681 * @tc.name: SendBytes_Success
682 * @tc.desc: Test for SendBytes when both channel and connection are successfully established.
683 * @tc.type: FUNC
684 */
685 HWTEST_F(ChannelManagerTest, SendBytes_Success, TestSize.Level1)
686 {
687 // Step 1: Initialize the ChannelManager
688 EXPECT_CALL(mockSoftbus, Socket(testing::_))
689 .WillRepeatedly(testing::Return(NUM_1234)); // Mock Socket to return a valid socket ID
690 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
691 .WillOnce(testing::Return(ERR_OK)); // Mock Listen to return success
692
693 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
694 EXPECT_EQ(initResult, ERR_OK); // Ensure Init was successful
695
696 // Step 2: Create Client Channel
697 std::string channelName = "TestChannel";
698 ChannelDataType dataType = ChannelDataType::MESSAGE; // Use TransDataType for the data type
699 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
700
701 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
702 EXPECT_EQ(channelId, MESSAGE_START_ID); // Verify the channel ID is correctly returned
703
704 // Step 3: Mock Bind to succeed
705 EXPECT_CALL(mockSoftbus, Bind(testing::_, testing::_, testing::_, testing::_))
706 .WillOnce(testing::Return(ERR_OK)); // Mock Bind to succeed
707
708 // Step 4: Call ConnectChannel to establish the connection
709 int32_t result = ChannelManager::GetInstance().ConnectChannel(channelId);
710 EXPECT_EQ(result, ERR_OK); // Verify the connection was established
711
712 // Step 5: Prepare data to send
713 std::shared_ptr<AVTransDataBuffer> dataBuffer = std::make_shared<AVTransDataBuffer>(NUM_1234);
714 EXPECT_CALL(mockSoftbus, GetSessionOption(NUM_1234, testing::_, testing::_, sizeof(uint32_t)))
715 .WillOnce(testing::Invoke([&](int sessionId, SessionOption option,
__anonc2847fdb0202(int sessionId, SessionOption option, void* optionValue, uint32_t valueSize) 716 void* optionValue, uint32_t valueSize) {
717 *reinterpret_cast<uint32_t*>(optionValue) = 4 * 1024 * 1024;
718 return ERR_OK;
719 }));
720
721 EXPECT_CALL(mockSoftbus, SendBytes(NUM_1234, testing::_, dataBuffer->Size() + SessionDataHeader::HEADER_LEN))
722 .WillOnce(testing::Return(ERR_OK));
723
724 // Step 6: Send the data
725 result = ChannelManager::GetInstance().SendBytes(channelId, dataBuffer);
726 std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_FOR_INIT));
727 // Validate the result of SendBytes - it should return ERR_OK as everything is valid
728 EXPECT_EQ(result, ERR_OK);
729 }
730
731 /**
732 * @tc.name: SendBytes_InvalidChannelId
733 * @tc.desc: Test for SendBytes when channelId is invalid.
734 * @tc.type: FUNC
735 */
736 HWTEST_F(ChannelManagerTest, SendBytes_InvalidChannelId, TestSize.Level1)
737 {
738 // Prepare an invalid channelId
739 int32_t invalidChannelId = INVALID_CHANNEL; // Invalid channelId
740 std::shared_ptr<AVTransDataBuffer> dataBuffer = std::make_shared<AVTransDataBuffer>(NUM_1234);
741
742 // Step 1: Call SendBytes with invalid channelId
743 int32_t result = ChannelManager::GetInstance().SendBytes(invalidChannelId, dataBuffer);
744
745 // Validate result - should return INVALID_CHANNEL_ID
746 EXPECT_EQ(result, INVALID_CHANNEL_ID);
747 }
748
749 /**
750 * @tc.name: SendBytes_NullData
751 * @tc.desc: Test for SendBytes when data is nullptr.
752 * @tc.type: FUNC
753 */
754 HWTEST_F(ChannelManagerTest, SendBytes_NullData, TestSize.Level1)
755 {
756 std::shared_ptr<AVTransDataBuffer> nullData = nullptr;
757 int32_t result = ChannelManager::GetInstance().SendBytes(MESSAGE_START_ID, nullData);
758
759 // Validate the result - should return INVALID_CHANNEL_ID as data is null
760 EXPECT_EQ(result, INVALID_CHANNEL_ID);
761 }
762
763 /**
764 * @tc.name: SendBytes_NotConnect
765 * @tc.desc: Test for SendBytes when NotConnect.
766 * @tc.type: FUNC
767 */
768 HWTEST_F(ChannelManagerTest, SendBytes_NotConnect, TestSize.Level1)
769 {
770 // Step 1: Initialize the ChannelManager
771 EXPECT_CALL(mockSoftbus, Socket(testing::_))
772 .WillRepeatedly(testing::Return(NUM_1234)); // Mock Socket to return a valid socket ID
773 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
774 .WillOnce(testing::Return(ERR_OK)); // Mock Listen to return success
775
776 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
777 EXPECT_EQ(initResult, ERR_OK); // Ensure Init was successful
778
779 // Step 2: Create Client Channel
780 std::string channelName = "TestChannel";
781 ChannelDataType dataType = ChannelDataType::MESSAGE;
782 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
783
784 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
785 EXPECT_EQ(channelId, MESSAGE_START_ID); // Verify the channel ID is correctly returned
786
787 // Step 3: Mock Bind to succeed
788 EXPECT_CALL(mockSoftbus, Bind(testing::_, testing::_, testing::_, testing::_))
789 .WillOnce(testing::Return(-1)); // Mock Bind to succeed
790
791 // Step 4: Call ConnectChannel to establish the connection
792 int32_t result = ChannelManager::GetInstance().ConnectChannel(channelId);
793 EXPECT_EQ(result, CONNECT_CHANNEL_FAILED); // Verify the connection was established
794
795 std::shared_ptr<AVTransDataBuffer> dataBuffer = std::make_shared<AVTransDataBuffer>(NUM_1234);
796
797 result = ChannelManager::GetInstance().SendBytes(channelId, dataBuffer);
798 }
799
800 /**
801 * @tc.name: SendStream_Success
802 * @tc.desc: Test for SendStream when both channel and connection are successfully established.
803 * @tc.type: FUNC
804 */
805 HWTEST_F(ChannelManagerTest, SendStream_Success, TestSize.Level1)
806 {
807 // Step 1: Initialize the ChannelManager
808 EXPECT_CALL(mockSoftbus, Socket(testing::_))
809 .WillRepeatedly(testing::Return(NUM_1234)); // Mock Socket to return a valid socket ID
810 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
811 .WillOnce(testing::Return(ERR_OK)); // Mock Listen to return success
812
813 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
814 EXPECT_EQ(initResult, ERR_OK); // Ensure Init was successful
815
816 // Step 2: Create Client Channel
817 std::string channelName = "TestStreamChannel";
818 ChannelDataType dataType = ChannelDataType::MESSAGE; // Using raw stream type for the data
819 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
820
821 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
822 EXPECT_EQ(channelId, MESSAGE_START_ID); // Verify the channel ID is correctly returned
823
824 // Step 3: Mock Bind to succeed
825 EXPECT_CALL(mockSoftbus, Bind(testing::_, testing::_, testing::_, testing::_))
826 .WillOnce(testing::Return(ERR_OK)); // Mock Bind to succeed
827
828 // Step 4: Call ConnectChannel to establish the connection
829 int32_t result = ChannelManager::GetInstance().ConnectChannel(channelId);
830 EXPECT_EQ(result, ERR_OK); // Verify the connection was established
831
832 // Step 5: Prepare data for stream
833 std::shared_ptr<AVTransDataBuffer> dataBuffer = std::make_shared<AVTransDataBuffer>(NUM_1024);
834
835 AVTransStreamDataExt extData;
836 extData.flag_ = AvCodecBufferFlag::AVCODEC_BUFFER_FLAG_CODEC_DATA;
837 extData.index_ = NUM_1;
838 extData.pts_ = NUM_200;
839 extData.startEncodeT_ = NUM_200;
840 extData.finishEncodeT_ = NUM_200;
841 extData.sendEncodeT_ = NUM_200;
842
843 std::shared_ptr<AVTransStreamData> streamData = std::make_shared<AVTransStreamData>(dataBuffer, extData);
844
845 // Step 6: Call SendStream
846 EXPECT_CALL(mockSoftbus, SendStream(NUM_1234, testing::_, testing::_, testing::_))
847 .WillRepeatedly(testing::Return(ERR_OK));
848 result = ChannelManager::GetInstance().SendStream(channelId, streamData);
849 std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_FOR_INIT));
850 // Validate the result - it should return ERR_OK as everything is valid
851 EXPECT_EQ(result, ERR_OK);
852 }
853
854 /**
855 * @tc.name: SendStream_InvalidChannelId
856 * @tc.desc: Test for SendStream when channelId is invalid.
857 * @tc.type: FUNC
858 */
859 HWTEST_F(ChannelManagerTest, SendStream_InvalidChannelId, TestSize.Level1)
860 {
861 // Prepare an invalid channelId
862 int32_t invalidChannelId = -1; // Invalid channelId
863 std::shared_ptr<AVTransDataBuffer> dataBuffer = std::make_shared<AVTransDataBuffer>(NUM_1024);
864
865 AVTransStreamDataExt extData;
866 extData.flag_ = AvCodecBufferFlag::AVCODEC_BUFFER_FLAG_CODEC_DATA;
867 extData.index_ = NUM_1;
868 extData.pts_ = NUM_200;
869 extData.startEncodeT_ = NUM_200;
870 extData.finishEncodeT_ = NUM_200;
871 extData.sendEncodeT_ = NUM_200;
872
873 std::shared_ptr<AVTransStreamData> streamData = std::make_shared<AVTransStreamData>(dataBuffer, extData);
874
875 // Step 1: Call SendStream with invalid channelId
876 int32_t result = ChannelManager::GetInstance().SendStream(invalidChannelId, streamData);
877
878 // Validate result - should return INVALID_CHANNEL_ID
879 EXPECT_EQ(result, INVALID_CHANNEL_ID);
880 }
881
882 /**
883 * @tc.name: SendStream_NullData
884 * @tc.desc: Test for SendStream when data is nullptr.
885 * @tc.type: FUNC
886 */
887 HWTEST_F(ChannelManagerTest, SendStream_NullData, TestSize.Level1)
888 {
889 // Prepare valid channelId
890 int32_t validChannelId = MESSAGE_START_ID; // Valid channelId
891 std::shared_ptr<AVTransDataBuffer> dataBuffer = nullptr; // Set data to nullptr
892
893 // Step 1: Call SendStream with nullptr data
894 int32_t result = ChannelManager::GetInstance().SendStream(validChannelId, nullptr);
895
896 // Validate result - should return INVALID_CHANNEL_ID as data is null
897 EXPECT_EQ(result, INVALID_CHANNEL_ID);
898 }
899
900 /**
901 * @tc.name: SendStream_NotConnect
902 * @tc.desc: Test for SendStream when NotConnect.
903 * @tc.type: FUNC
904 */
905 HWTEST_F(ChannelManagerTest, SendStream_NotConnect, TestSize.Level1)
906 {
907 // Step 1: Initialize the ChannelManager
908 EXPECT_CALL(mockSoftbus, Socket(testing::_))
909 .WillRepeatedly(testing::Return(NUM_1234)); // Mock Socket to return a valid socket ID
910 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
911 .WillOnce(testing::Return(ERR_OK)); // Mock Listen to return success
912
913 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
914 EXPECT_EQ(initResult, ERR_OK); // Ensure Init was successful
915
916 // Step 2: Create Client Channel
917 std::string channelName = "TestStreamChannel";
918 ChannelDataType dataType = ChannelDataType::MESSAGE; // Using raw stream type for the data
919 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
920
921 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
922 EXPECT_EQ(channelId, MESSAGE_START_ID); // Verify the channel ID is correctly returned
923
924 // Step 3: Mock Bind to succeed
925 EXPECT_CALL(mockSoftbus, Bind(testing::_, testing::_, testing::_, testing::_))
926 .WillOnce(testing::Return(-1)); // Mock Bind to succeed
927
928 // Step 4: Call ConnectChannel to establish the connection
929 int32_t result = ChannelManager::GetInstance().ConnectChannel(channelId);
930 EXPECT_EQ(result, CONNECT_CHANNEL_FAILED); // Verify the connection was established
931
932
933 // Step 6: Prepare data for stream
934 std::shared_ptr<AVTransDataBuffer> dataBuffer = std::make_shared<AVTransDataBuffer>(NUM_1024);
935
936 AVTransStreamDataExt extData;
937 extData.flag_ = AvCodecBufferFlag::AVCODEC_BUFFER_FLAG_CODEC_DATA;
938 extData.index_ = NUM_1;
939 extData.pts_ = NUM_200;
940 extData.startEncodeT_ = NUM_200;
941 extData.finishEncodeT_ = NUM_200;
942 extData.sendEncodeT_ = NUM_200;
943
944 std::shared_ptr<AVTransStreamData> streamData = std::make_shared<AVTransStreamData>(dataBuffer, extData);
945
946 // Step 7: Call SendStream
947 result = ChannelManager::GetInstance().SendStream(channelId, streamData);
948 }
949
950 /**
951 * @tc.name: SendMessage_Success
952 * @tc.desc: Test for SendMessage when channelId is valid and PostTask succeeds.
953 * @tc.type: FUNC
954 */
955 HWTEST_F(ChannelManagerTest, SendMessage_Success, TestSize.Level1)
956 {
957 // Step 1: Initialize the ChannelManager
958 EXPECT_CALL(mockSoftbus, Socket(testing::_))
959 .WillRepeatedly(testing::Return(NUM_1234)); // Mock Socket to return a valid socket ID
960 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
961 .WillOnce(testing::Return(ERR_OK)); // Mock Listen to return success
962
963 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
964 EXPECT_EQ(initResult, ERR_OK); // Ensure Init was successful
965
966 // Step 2: Create Client Channel
967 std::string channelName = "TestMessageChannel";
968 ChannelDataType dataType = ChannelDataType::MESSAGE; // Using message type for the data
969 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
970
971 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
972 EXPECT_EQ(channelId, MESSAGE_START_ID); // Verify the channel ID is correctly returned
973
974 // Step 3: Mock Bind to succeed
975 EXPECT_CALL(mockSoftbus, Bind(testing::_, testing::_, testing::_, testing::_))
976 .WillOnce(testing::Return(ERR_OK)); // Mock Bind to succeed
977
978 // Step 4: Call ConnectChannel to establish the connection
979 int32_t result = ChannelManager::GetInstance().ConnectChannel(channelId);
980 EXPECT_EQ(result, ERR_OK); // Verify the connection is established
981
982 // Step 5: Prepare data for message
983 std::shared_ptr<AVTransDataBuffer> dataBuffer = std::make_shared<AVTransDataBuffer>(NUM_1024); // Set buffer size
984 EXPECT_CALL(mockSoftbus, SendMessage(NUM_1234, testing::_, testing::_))
985 .WillOnce(testing::Return(ERR_OK));
986
987 // Step 6: Call SendMessage
988 result = ChannelManager::GetInstance().SendMessage(channelId, dataBuffer);
989 std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_FOR_INIT));
990
991 EXPECT_EQ(result, ERR_OK); // Verify that message was sent successfully
992 }
993
994 /**
995 * @tc.name: SendMessage_InvalidChannelId
996 * @tc.desc: Test for SendMessage when channelId is invalid.
997 * @tc.type: FUNC
998 */
999 HWTEST_F(ChannelManagerTest, SendMessage_InvalidChannelId, TestSize.Level1)
1000 {
1001 int32_t invalidChannelId = -1; // Simulating an invalid channelId
1002
1003 // Step 3: Prepare data for message
1004 std::shared_ptr<AVTransDataBuffer> dataBuffer = std::make_shared<AVTransDataBuffer>(NUM_1024); // Set buffer size
1005
1006 // Step 4: Call SendMessage with invalid channelId
1007 int32_t result = ChannelManager::GetInstance().SendMessage(invalidChannelId, dataBuffer);
1008 EXPECT_EQ(result, INVALID_CHANNEL_ID); // Verify that invalid channelId returns INVALID_CHANNEL_ID
1009 }
1010
1011 /**
1012 * @tc.name: SendMessage_NullData
1013 * @tc.desc: Test for SendMessage when data is nullptr.
1014 * @tc.type: FUNC
1015 */
1016 HWTEST_F(ChannelManagerTest, SendMessage_NullData, TestSize.Level1)
1017 {
1018 int32_t result = ChannelManager::GetInstance().SendMessage(MESSAGE_START_ID, nullptr);
1019 EXPECT_EQ(result, INVALID_CHANNEL_ID); // Verify that passing nullptr data returns INVALID_CHANNEL_ID
1020 }
1021
1022 /**
1023 * @tc.name: SendMessage_NotConnect
1024 * @tc.desc: Test for SendMessage when NotConnect
1025 * @tc.type: FUNC
1026 */
1027 HWTEST_F(ChannelManagerTest, SendMessage_NotConnect, TestSize.Level1)
1028 {
1029 // Step 1: Initialize the ChannelManager
1030 EXPECT_CALL(mockSoftbus, Socket(testing::_))
1031 .WillRepeatedly(testing::Return(NUM_1234)); // Mock Socket to return a valid socket ID
1032 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
1033 .WillOnce(testing::Return(ERR_OK)); // Mock Listen to return success
1034
1035 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
1036 EXPECT_EQ(initResult, ERR_OK); // Ensure Init was successful
1037
1038 // Step 2: Create Client Channel
1039 std::string channelName = "TestMessageChannel";
1040 ChannelDataType dataType = ChannelDataType::MESSAGE; // Using message type for the data
1041 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
1042
1043 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
1044 EXPECT_EQ(channelId, MESSAGE_START_ID); // Verify the channel ID is correctly returned
1045
1046 // Step 3: Mock Bind to succeed
1047 EXPECT_CALL(mockSoftbus, Bind(testing::_, testing::_, testing::_, testing::_))
1048 .WillOnce(testing::Return(-1)); // Mock Bind to succeed
1049
1050 // Step 4: Call ConnectChannel to establish the connection
1051 int32_t result = ChannelManager::GetInstance().ConnectChannel(channelId);
1052 EXPECT_EQ(result, CONNECT_CHANNEL_FAILED); // Verify the connection is established
1053
1054 // Step 6: Call SendMessage
1055 result = ChannelManager::GetInstance().SendMessage(channelId, nullptr);
1056 }
1057
1058 /**
1059 * @tc.name: OnMessageReceived_Success_WithCallback
1060 * @tc.desc: Test for OnMessageReceived when the socket is valid and data is received successfully,
1061 * and the OnMessage callback is triggered correctly with the received data.
1062 * @tc.type: FUNC
1063 */
1064 HWTEST_F(ChannelManagerTest, OnMessageReceived_Success_WithCallback, TestSize.Level1)
1065 {
1066 // Step 1: Initialize the ChannelManager
1067 EXPECT_CALL(mockSoftbus, Socket(testing::_))
1068 .WillRepeatedly(testing::Return(NUM_1234)); // 模拟返回一个有效的 socketId
1069 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
1070 .WillOnce(testing::Return(ERR_OK)); // 模拟监听成功
1071
1072 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
1073 EXPECT_EQ(initResult, ERR_OK); // 确保初始化成功
1074
1075 // Step 2: Create a server channel
1076 std::string channelName = "TestChannel"; // 定义测试的通道名称
1077 ChannelDataType dataType = ChannelDataType::MESSAGE; // 设置通道数据类型为 MESSAGE
1078 ChannelPeerInfo peerInfo = { "peerName", "networkId" }; // 创建测试用的 peer 信息
1079 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
1080 EXPECT_EQ(channelId, MESSAGE_START_ID); // 假设 MESSAGE_START_ID 已定义,验证通道创建成功
1081
1082 int32_t socketId = NUM_1234;
1083
1084 // Step 4: Mock the listener and expect the OnMessage callback to be triggered
1085 auto mockListener = std::make_shared<MockChannelListener>();
1086 EXPECT_CALL(*mockListener, OnMessage(channelId, testing::_)).Times(1); // 确保 OnMessage 被调用一次
1087
1088 // 注册监听器
1089 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, mockListener);
1090 EXPECT_EQ(result, ERR_OK); // 确保注册监听器成功
1091
1092 // Step 5: Prepare test data for OnMessageReceived
1093 const char* testData = "Hello, ChannelManager!"; // 模拟消息数据
1094 uint32_t dataLen = static_cast<uint32_t>(strlen(testData) + 1); // 数据长度,包括结束符
1095
1096 // Step 6: Call OnMessageReceived and expect OnMessage callback
1097 ChannelManager::GetInstance().OnMessageReceived(socketId, testData, dataLen);
1098 }
1099
1100 /**
1101 * @tc.name: OnMessageReceived_Failure_InvalidData
1102 * @tc.desc: Test for OnMessageReceived when invalid data (nullptr or zero length) is provided,
1103 * and the OnError callback is triggered correctly with the appropriate error code.
1104 * @tc.type: FUNC
1105 */
1106 HWTEST_F(ChannelManagerTest, OnMessageReceived_Failure_InvalidData, TestSize.Level1)
1107 {
1108 // Step 1: Initialize the ChannelManager
1109 EXPECT_CALL(mockSoftbus, Socket(testing::_))
1110 .WillRepeatedly(testing::Return(NUM_1234)); // 模拟返回一个有效的 socketId
1111 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
1112 .WillOnce(testing::Return(ERR_OK)); // 模拟监听成功
1113
1114 // 初始化 ChannelManager,验证初始化结果为 ERR_OK
1115 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
1116 EXPECT_EQ(initResult, ERR_OK); // 确保初始化成功
1117
1118 // Step 2: Create a server channel
1119 std::string channelName = "TestChannel";
1120 ChannelDataType dataType = ChannelDataType::MESSAGE;
1121 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
1122 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
1123 EXPECT_EQ(channelId, MESSAGE_START_ID);
1124
1125 int32_t socketId = NUM_1234; // 使用模拟的有效 socketId
1126
1127 // Step 4: Mock the listener and expect the OnError callback to be triggered on failure
1128 auto mockListener = std::make_shared<MockChannelListener>();
1129 EXPECT_CALL(*mockListener, OnMessage(channelId, testing::_)).Times(0);
1130
1131 // 注册监听器
1132 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, mockListener);
1133 EXPECT_EQ(result, ERR_OK);
1134
1135 // Step 5: Simulate invalid data (nullptr or zero length)
1136 const void* invalidData = nullptr;
1137 uint32_t invalidDataLen = 0;
1138
1139 // Step 6: Call OnMessageReceived with invalid data, expecting an error callback
1140 ChannelManager::GetInstance().OnMessageReceived(socketId, invalidData, invalidDataLen);
1141 }
1142
1143 /**
1144 * @tc.name: OnMessageReceived_InvalidChannelId
1145 * @tc.desc: Test for OnMessageReceived when InvalidChannelId.
1146 * @tc.type: FUNC
1147 */
1148 HWTEST_F(ChannelManagerTest, OnMessageReceived_InvalidChannelId, TestSize.Level1)
1149 {
1150 // Step 1: Initialize the ChannelManager
1151 EXPECT_CALL(mockSoftbus, Socket(testing::_))
1152 .WillRepeatedly(testing::Return(NUM_1234)); // 模拟返回一个有效的 socketId
1153 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
1154 .WillOnce(testing::Return(ERR_OK)); // 模拟监听成功
1155
1156 // 初始化 ChannelManager,验证初始化结果为 ERR_OK
1157 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
1158 EXPECT_EQ(initResult, ERR_OK); // 确保初始化成功
1159
1160 const char* testData = "Hello, ChannelManager!"; // 模拟消息数据
1161 uint32_t dataLen = static_cast<uint32_t>(strlen(testData) + 1); // 数据长度,包括结束符
1162
1163 ChannelManager::GetInstance().OnMessageReceived(NUM_1234, testData, dataLen);
1164 }
1165
1166 /**
1167 * @tc.name: OnStreamReceived_Success
1168 * @tc.desc: Test for OnStreamReceived when valid data is received and processed successfully,
1169 * and the DoStreamReceiveCallback is triggered correctly with the received data.
1170 * @tc.type: FUNC
1171 */
1172 HWTEST_F(ChannelManagerTest, OnStreamReceived_Success, TestSize.Level1)
1173 {
1174 // Step 1: Initialize the ChannelManager
1175 EXPECT_CALL(mockSoftbus, Socket(testing::_))
1176 .WillRepeatedly(testing::Return(NUM_1234)); // 模拟返回一个有效的 socketId
1177 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
1178 .WillOnce(testing::Return(ERR_OK)); // 模拟监听成功
1179
1180 // 初始化 ChannelManager,验证初始化结果为 ERR_OK
1181 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
1182 EXPECT_EQ(initResult, ERR_OK); // 确保初始化成功
1183
1184 // Step 2: Create a server channel
1185 std::string channelName = "TestChannel";
1186 ChannelDataType dataType = ChannelDataType::VIDEO_STREAM;
1187 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
1188 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
1189 EXPECT_EQ(channelId, STREAM_START_ID);
1190
1191 int32_t socketId = NUM_1234;
1192 std::shared_ptr<AVTransDataBuffer> dataBuffer = std::make_shared<AVTransDataBuffer>(NUM_1024);
1193
1194 AVTransStreamDataExt extData;
1195 extData.flag_ = AvCodecBufferFlag::AVCODEC_BUFFER_FLAG_CODEC_DATA;
1196 extData.index_ = NUM_1;
1197 extData.pts_ = NUM_200;
1198 extData.startEncodeT_ = NUM_200;
1199 extData.finishEncodeT_ = NUM_200;
1200 extData.sendEncodeT_ = NUM_200;
1201
1202 std::shared_ptr<AVTransStreamData> streamData = std::make_shared<AVTransStreamData>(dataBuffer, extData);
1203 StreamData data = {
1204 .buf = reinterpret_cast<char*>(streamData->StreamData()->Data()),
1205 .bufLen = streamData->StreamData()->Size()
1206 };
1207 cJSON* extInfo = streamData->SerializeStreamDataExt();
1208 char* jsonString = cJSON_PrintUnformatted(extInfo);
1209 const StreamData ext = {
1210 .buf = jsonString,
1211 .bufLen = strlen(jsonString)
1212 };
1213 StreamFrameInfo param = {
1214 .frameType = NUM_1,
1215 .timeStamp = NUM_200,
1216 .seqNum = NUM_1,
1217 .seqSubNum = NUM_1,
1218 .level = NUM_1,
1219 .bitMap = NUM_1,
1220 .tvCount = NUM_1
1221 };
1222
1223 // Step 4: Mock the listener and expect the DoStreamReceiveCallback to be triggered
1224 auto mockListener = std::make_shared<MockChannelListener>();
1225 EXPECT_CALL(*mockListener, OnStream(channelId, testing::_)).Times(1); // 确保 OnStreamReceived 被调用一次
1226
1227 // 注册监听器
1228 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, mockListener);
1229 EXPECT_EQ(result, ERR_OK); // 确保注册监听器成功
1230
1231 // Step 5: Call OnStreamReceived and expect the callback
1232 ChannelManager::GetInstance().OnStreamReceived(socketId, &data, &ext, ¶m);
1233 }
1234
1235 /**
1236 * @tc.name: OnStreamReceived_Failure_RecvDataEmpty
1237 * @tc.desc: Test for OnStreamReceived when data copy to buffer fails,
1238 * and the error callback is triggered with RecvDataEmpty.
1239 * @tc.type: FUNC
1240 */
1241 HWTEST_F(ChannelManagerTest, OnStreamReceived_Failure_RecvDataEmpty, TestSize.Level1)
1242 {
1243 // Step 1: Initialize the ChannelManager
1244 EXPECT_CALL(mockSoftbus, Socket(testing::_))
1245 .WillRepeatedly(testing::Return(NUM_1234)); // 模拟返回一个有效的 socketId
1246 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
1247 .WillOnce(testing::Return(ERR_OK)); // 模拟监听成功
1248
1249 // 初始化 ChannelManager,验证初始化结果为 ERR_OK
1250 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
1251 EXPECT_EQ(initResult, ERR_OK); // 确保初始化成功
1252
1253 // Step 2: Create a server channel
1254 std::string channelName = "TestChannel";
1255 ChannelDataType dataType = ChannelDataType::VIDEO_STREAM;
1256 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
1257 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
1258 EXPECT_EQ(channelId, STREAM_START_ID);
1259
1260 int32_t socketId = NUM_1234;
1261 std::shared_ptr<AVTransDataBuffer> dataBuffer = std::make_shared<AVTransDataBuffer>(NUM_1024);
1262
1263 AVTransStreamDataExt extData;
1264 extData.flag_ = AvCodecBufferFlag::AVCODEC_BUFFER_FLAG_CODEC_DATA;
1265 extData.index_ = NUM_1;
1266 extData.pts_ = NUM_200;
1267 extData.startEncodeT_ = NUM_200;
1268 extData.finishEncodeT_ = NUM_200;
1269 extData.sendEncodeT_ = NUM_200;
1270
1271 std::shared_ptr<AVTransStreamData> streamData = std::make_shared<AVTransStreamData>(dataBuffer, extData);
1272 cJSON* extInfo = streamData->SerializeStreamDataExt();
1273 char* jsonString = cJSON_PrintUnformatted(extInfo);
1274 const StreamData ext = {
1275 .buf = jsonString,
1276 .bufLen = strlen(jsonString)
1277 };
1278 StreamFrameInfo param = {
1279 .frameType = NUM_1,
1280 .timeStamp = NUM_200,
1281 .seqNum = NUM_1,
1282 .seqSubNum = NUM_1,
1283 .level = NUM_1,
1284 .bitMap = NUM_1,
1285 .tvCount = NUM_1
1286 };
1287
1288 auto mockListener = std::make_shared<MockChannelListener>();
1289 EXPECT_CALL(*mockListener, OnStream(channelId, testing::_)).Times(0); // 确保 OnStreamReceived 被调用一次
1290
1291 // 注册监听器
1292 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, mockListener);
1293 EXPECT_EQ(result, ERR_OK); // 确保注册监听器成功
1294
1295 ChannelManager::GetInstance().OnStreamReceived(socketId, nullptr, &ext, ¶m);
1296 }
1297
1298 /**
1299 * @tc.name: OnStreamReceived_Failure_ParseStreamExtFailed
1300 * @tc.desc: Test for OnStreamReceived when parsing the stream extension fails,
1301 * and the error callback is triggered with PARSE_AV_TRANS_STREAM_EXT_FAILED.
1302 * @tc.type: FUNC
1303 */
1304 HWTEST_F(ChannelManagerTest, OnStreamReceived_Failure_ParseStreamExtFailed, TestSize.Level1)
1305 {
1306 // Step 1: Initialize the ChannelManager
1307 EXPECT_CALL(mockSoftbus, Socket(testing::_))
1308 .WillRepeatedly(testing::Return(NUM_1234)); // 模拟返回一个有效的 socketId
1309 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
1310 .WillOnce(testing::Return(ERR_OK)); // 模拟监听成功
1311
1312 // 初始化 ChannelManager,验证初始化结果为 ERR_OK
1313 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
1314 EXPECT_EQ(initResult, ERR_OK); // 确保初始化成功
1315
1316 // Step 2: Create a server channel
1317 std::string channelName = "TestChannel";
1318 ChannelDataType dataType = ChannelDataType::VIDEO_STREAM;
1319 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
1320 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
1321 EXPECT_EQ(channelId, STREAM_START_ID);
1322
1323 int32_t socketId = NUM_1234;
1324 std::shared_ptr<AVTransDataBuffer> dataBuffer = std::make_shared<AVTransDataBuffer>(NUM_1024);
1325
1326 AVTransStreamDataExt extData;
1327 extData.flag_ = AvCodecBufferFlag::AVCODEC_BUFFER_FLAG_CODEC_DATA;
1328 extData.index_ = NUM_1;
1329 extData.pts_ = NUM_200;
1330 extData.startEncodeT_ = NUM_200;
1331 extData.finishEncodeT_ = NUM_200;
1332 extData.sendEncodeT_ = NUM_200;
1333
1334 std::shared_ptr<AVTransStreamData> streamData = std::make_shared<AVTransStreamData>(dataBuffer, extData);
1335 StreamData data = {
1336 .buf = reinterpret_cast<char*>(streamData->StreamData()->Data()),
1337 .bufLen = streamData->StreamData()->Size()
1338 };
1339 const StreamData ext = {
1340 .buf = nullptr,
1341 .bufLen = NUM_1
1342 };
1343 StreamFrameInfo param = {
1344 .frameType = NUM_1,
1345 .timeStamp = NUM_200,
1346 .seqNum = NUM_1,
1347 .seqSubNum = NUM_1,
1348 .level = NUM_1,
1349 .bitMap = NUM_1,
1350 .tvCount = NUM_1
1351 };
1352
1353 // 模拟反序列化失败
1354 auto mockListener = std::make_shared<MockChannelListener>();
1355 EXPECT_CALL(*mockListener, OnStream(channelId, testing::_)).Times(0); // 确保 OnStreamReceived 被调用一次
1356
1357 // 注册监听器
1358 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, mockListener);
1359 EXPECT_EQ(result, ERR_OK); // 确保注册监听器成功
1360
1361 // Step 4: Call OnStreamReceived and expect error callback to be triggered
1362 ChannelManager::GetInstance().OnStreamReceived(socketId, &data, &ext, ¶m);
1363 }
1364
1365 /**
1366 * @tc.name: OnBytesReceived_Success
1367 * @tc.desc: Test for OnBytesReceived when valid data is received and processed successfully,
1368 * and the DoBytesReceiveCallback is triggered correctly with the processed data.
1369 * @tc.type: FUNC
1370 */
1371 HWTEST_F(ChannelManagerTest, OnBytesReceived_Success, TestSize.Level1)
1372 {
1373 // Step 1: Initialize the ChannelManager
1374 EXPECT_CALL(mockSoftbus, Socket(testing::_))
1375 .WillRepeatedly(testing::Return(NUM_1234)); // 模拟返回一个有效的 socketId
1376 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
1377 .WillOnce(testing::Return(ERR_OK)); // 模拟监听成功
1378
1379 // 初始化 ChannelManager,验证初始化结果为 ERR_OK
1380 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
1381 EXPECT_EQ(initResult, ERR_OK); // 确保初始化成功
1382
1383 // Step 2: Create a server channel
1384 std::string channelName = "TestChannel";
1385 ChannelDataType dataType = ChannelDataType::BYTES;
1386 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
1387 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
1388 EXPECT_EQ(channelId, BYTES_START_ID);
1389
1390 int32_t socketId = NUM_1234;
1391
1392 // Step 3: Prepare test data for OnBytesReceived
1393 auto buffer = std::make_unique<AVTransDataBuffer>(NUM_1024);
1394 uint32_t dataLen = buffer->Size();
1395
1396 // 构造发送的数据包头(使用 SessionDataHeader 格式)
1397 SessionDataHeader headerPara(
1398 NUM_1,
1399 FRAG_TYPE::FRAG_START_END,
1400 static_cast<int32_t>(ChannelDataType::BYTES), // 这里的 dataType 应该与发送的数据类型一致
1401 0, // seqNum
1402 dataLen + SessionDataHeader::HEADER_LEN, // totalLen
1403 dataLen + SessionDataHeader::HEADER_LEN, // packetLen
1404 dataLen, // payloadLen
1405 0 // subSeq
1406 );
1407
1408 auto headerBuffer = headerPara.Serialize();
1409 auto sendBuffer = std::make_unique<AVTransDataBuffer>(SessionDataHeader::HEADER_LEN + dataLen);
1410 uint8_t* header = sendBuffer->Data();
1411
1412 // copy header
1413 memcpy_s(header, sendBuffer->Size(),
1414 headerBuffer->Data(), SessionDataHeader::HEADER_LEN);
1415
1416 // copy data
1417 memcpy_s(header + SessionDataHeader::HEADER_LEN,
1418 sendBuffer->Size() - SessionDataHeader::HEADER_LEN,
1419 buffer->Data(), dataLen);
1420
1421 // Step 4: Prepare the mock listener for verifying callback
1422 auto mockListener = std::make_shared<MockChannelListener>();
1423 EXPECT_CALL(*mockListener, OnBytes(channelId, testing::_)).Times(1); // 确保回调被调用一次
1424
1425 // 注册监听器
1426 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, mockListener);
1427 EXPECT_EQ(result, ERR_OK); // 确保注册监听器成功
1428
1429 // Step 5: Call OnBytesReceived and expect the callback
1430 ChannelManager::GetInstance().OnBytesReceived(socketId, header, dataLen);
1431 }
1432
1433 /**
1434 * @tc.name: OnBytesReceived_Failure_DataEmpty
1435 * @tc.desc: Test for OnBytesReceived when an invalid channel ID is provided,
1436 * and the error callback is triggered with DataEmpty.
1437 * @tc.type: FUNC
1438 */
1439 HWTEST_F(ChannelManagerTest, OnBytesReceived_Failure_DataEmpty, TestSize.Level1)
1440 {
1441 // Step 1: Initialize the ChannelManager
1442 EXPECT_CALL(mockSoftbus, Socket(testing::_))
1443 .WillRepeatedly(testing::Return(NUM_1234)); // 模拟返回一个有效的 socketId
1444 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
1445 .WillOnce(testing::Return(ERR_OK)); // 模拟监听成功
1446
1447 // 初始化 ChannelManager,验证初始化结果为 ERR_OK
1448 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
1449 EXPECT_EQ(initResult, ERR_OK); // 确保初始化成功
1450
1451 // Step 2: Create a server channel
1452 std::string channelName = "TestChannel";
1453 ChannelDataType dataType = ChannelDataType::BYTES;
1454 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
1455 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
1456 EXPECT_EQ(channelId, BYTES_START_ID);
1457
1458 int32_t socketId = NUM_1234;
1459
1460 // Step 4: Prepare the mock listener for verifying callback
1461 auto mockListener = std::make_shared<MockChannelListener>();
1462 EXPECT_CALL(*mockListener, OnBytes(channelId, testing::_)).Times(0); // 确保回调被调用一次
1463
1464 // 注册监听器
1465 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, mockListener);
1466 EXPECT_EQ(result, ERR_OK); // 确保注册监听器成功
1467
1468 // Step 4: Mock error callback for invalid channelId
1469
1470 // Step 5: Call OnBytesReceived with invalid channelId and expect error callback
1471 ChannelManager::GetInstance().OnBytesReceived(socketId, nullptr, NUM_1024);
1472 }
1473
1474 /**
1475 * @tc.name: OnBytesReceived_Failure_PackRecvPacketDataFailed
1476 * @tc.desc: Test for OnBytesReceived when the packet data processing fails in ProcessRecvData,
1477 * and the error callback is triggered with the appropriate error code.
1478 * @tc.type: FUNC
1479 */
1480 HWTEST_F(ChannelManagerTest, OnBytesReceived_Failure_PackRecvPacketDataFailed, TestSize.Level1)
1481 {
1482 // Step 1: Initialize the ChannelManager
1483 EXPECT_CALL(mockSoftbus, Socket(testing::_))
1484 .WillRepeatedly(testing::Return(NUM_1234)); // 模拟返回一个有效的 socketId
1485 EXPECT_CALL(mockSoftbus, Listen(testing::_, testing::_, testing::_, testing::_))
1486 .WillOnce(testing::Return(ERR_OK)); // 模拟监听成功
1487
1488 // 初始化 ChannelManager,验证初始化结果为 ERR_OK
1489 int32_t initResult = ChannelManager::GetInstance().Init(ownerName);
1490 EXPECT_EQ(initResult, ERR_OK); // 确保初始化成功
1491
1492 // Step 2: Create a server channel
1493 std::string channelName = "TestChannel";
1494 ChannelDataType dataType = ChannelDataType::BYTES;
1495 ChannelPeerInfo peerInfo = { "peerName", "networkId" };
1496 int32_t channelId = ChannelManager::GetInstance().CreateClientChannel(channelName, dataType, peerInfo);
1497 EXPECT_EQ(channelId, BYTES_START_ID);
1498
1499 int32_t socketId = NUM_1234;
1500 auto buffer = std::make_unique<AVTransDataBuffer>(NUM_1024);
1501 uint32_t dataLen = buffer->Size();
1502 // Step 3: Prepare test data for OnBytesReceived
1503 SessionDataHeader headerPara(
1504 NUM_1,
1505 FRAG_TYPE::FRAG_START_END,
1506 static_cast<int32_t>(ChannelDataType::BYTES), // 这里的 dataType 应该与发送的数据类型一致
1507 10, // seqNum
1508 dataLen + SessionDataHeader::HEADER_LEN, // totalLen
1509 dataLen + SessionDataHeader::HEADER_LEN, // packetLen
1510 dataLen, // payloadLen
1511 0 // subSeq
1512 );
1513
1514 auto headerBuffer = headerPara.Serialize();
1515 auto sendBuffer = std::make_unique<AVTransDataBuffer>(SessionDataHeader::HEADER_LEN + dataLen);
1516 uint8_t* header = sendBuffer->Data();
1517
1518 // copy header
1519 memcpy_s(header, sendBuffer->Size(),
1520 headerBuffer->Data(), SessionDataHeader::HEADER_LEN);
1521
1522 // copy data
1523 memcpy_s(header + SessionDataHeader::HEADER_LEN,
1524 sendBuffer->Size() - SessionDataHeader::HEADER_LEN,
1525 buffer->Data(), dataLen);
1526
1527 // Step 4: Prepare the mock listener for verifying callback
1528 auto mockListener = std::make_shared<MockChannelListener>();
1529 EXPECT_CALL(*mockListener, OnBytes(channelId, testing::_)).Times(0); // 确保回调被调用一次
1530
1531 // 注册监听器
1532 int32_t result = ChannelManager::GetInstance().RegisterChannelListener(channelId, mockListener);
1533 EXPECT_EQ(result, ERR_OK); // 确保注册监听器成功
1534 // Step 5: Simulate failure in `PackRecvPacketData` and call OnBytesReceived
1535 ChannelManager::GetInstance().OnBytesReceived(socketId, header, dataLen);
1536 }
1537
1538 /**
1539 * @tc.name: SendFile_Failed_001
1540 * @tc.desc: Test for SendBytes when both channel and connection are successfully established.
1541 * @tc.type: FUNC
1542 */
1543 HWTEST_F(ChannelManagerTest, SendFile_Failed_001, TestSize.Level1)
1544 {
1545 int32_t channelId = ChannelManager::CHANNEL_ID_GAP;
1546 std::vector<std::string> sFiles;
1547 std::vector<std::string> dFiles;
1548
1549 auto ret = ChannelManager::GetInstance().SendFile(channelId, sFiles, dFiles);
1550 EXPECT_EQ(ret, INVALID_PARAMETERS_ERR);
1551
1552 channelId = ChannelManager::FILE_START_ID + ChannelManager::CHANNEL_ID_GAP + 1;
1553 ret = ChannelManager::GetInstance().SendFile(channelId, sFiles, dFiles);
1554 EXPECT_EQ(ret, INVALID_PARAMETERS_ERR);
1555
1556 channelId = ChannelManager::CHANNEL_ID_GAP + 1;
1557 ret = ChannelManager::GetInstance().SendFile(channelId, sFiles, dFiles);
1558 EXPECT_EQ(ret, INVALID_PARAMETERS_ERR);
1559
1560 sFiles.push_back("test");
1561 ret = ChannelManager::GetInstance().SendFile(channelId, sFiles, dFiles);
1562 EXPECT_EQ(ret, INVALID_PARAMETERS_ERR);
1563
1564 dFiles.push_back("test");
1565 ret = ChannelManager::GetInstance().SendFile(channelId, sFiles, dFiles);
1566 EXPECT_NE(ret, ERR_OK);
1567
1568 std::vector<std::string> sFile(ChannelManager::MAX_FILE_COUNT + 1, "test");
1569 std::vector<std::string> dFile(ChannelManager::MAX_FILE_COUNT + 1, "test");
1570 ret = ChannelManager::GetInstance().SendFile(channelId, sFile, dFile);
1571 EXPECT_NE(ret, ERR_OK);
1572 }
1573
1574 /**
1575 * @tc.name: OnMessageReceived_Failed_001
1576 * @tc.desc: Test for SendBytes when both channel and connection are successfully established.
1577 * @tc.type: FUNC
1578 */
1579 HWTEST_F(ChannelManagerTest, OnMessageReceived_Failed_001, TestSize.Level1)
1580 {
1581 int32_t socketId = -1;
1582 char *data = nullptr;
1583 uint32_t dataLen = 0;
1584
1585 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().OnMessageReceived(socketId, data, dataLen));
1586 socketId = 1;
1587 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().OnMessageReceived(socketId, data, dataLen));
1588
1589 SessionDataHeader sessionData;
1590 auto avData = sessionData.Serialize();
1591 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().OnMessageReceived(socketId, avData->Data(), dataLen));
1592 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().OnMessageReceived(
1593 socketId, avData->Data(), avData->Size()));
1594 dataLen = MAX_LEN + 1;
1595 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().OnMessageReceived(socketId, avData->Data(), dataLen));
1596 }
1597
1598 /**
1599 * @tc.name: DispatchProcessFileEvent_001
1600 * @tc.desc: Test for DispatchProcessFileEvent
1601 * @tc.type: FUNC
1602 */
1603 HWTEST_F(ChannelManagerTest, DispatchProcessFileEvent_001, TestSize.Level1)
1604 {
1605 int32_t channelId = 30;
1606 FileEvent event;
1607 event.type = FileEventType::FILE_EVENT_SEND_PROCESS;
1608 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().DispatchProcessFileEvent(channelId, &event));
1609
1610 event.type = FileEventType::FILE_EVENT_SEND_FINISH;
1611 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().DispatchProcessFileEvent(channelId, &event));
1612
1613 event.type = FileEventType::FILE_EVENT_SEND_PROCESS;
1614 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().DispatchProcessFileEvent(channelId, &event));
1615
1616 event.type = FileEventType::FILE_EVENT_RECV_START;
1617 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().DispatchProcessFileEvent(channelId, &event));
1618
1619 event.type = FileEventType::FILE_EVENT_RECV_PROCESS;
1620 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().DispatchProcessFileEvent(channelId, &event));
1621
1622 event.type = FileEventType::FILE_EVENT_RECV_FINISH;
1623 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().DispatchProcessFileEvent(channelId, &event));
1624
1625 event.type = FileEventType::FILE_EVENT_BUTT;
1626 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().DispatchProcessFileEvent(channelId, &event));
1627
1628 event.type = FileEventType::FILE_EVENT_SEND_ERROR;
1629 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().DispatchProcessFileEvent(channelId, &event));
1630
1631 event.type = FileEventType::FILE_EVENT_RECV_ERROR;
1632 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().DispatchProcessFileEvent(channelId, &event));
1633
1634 event.type = FileEventType::FILE_EVENT_RECV_UPDATE_PATH;
1635 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().DispatchProcessFileEvent(channelId, &event));
1636
1637 int32_t validType = 999999;
1638 event.type = static_cast<FileEventType>(validType);
1639 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().DispatchProcessFileEvent(channelId, &event));
1640 }
1641
1642 /**
1643 * @tc.name: OnFileEventReceived_001
1644 * @tc.desc: Test for OnFileEventReceived
1645 * @tc.type: FUNC
1646 */
1647 HWTEST_F(ChannelManagerTest, OnFileEventReceived_001, TestSize.Level1)
1648 {
1649 int32_t socketId = -1;
1650 FileEvent *pEvent = nullptr;
1651 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().OnFileEventReceived(socketId, pEvent));
1652
1653 socketId = 1;
1654 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().OnFileEventReceived(socketId, pEvent));
1655
1656 FileEvent event;
1657 event.type = FileEventType::FILE_EVENT_RECV_UPDATE_PATH;
1658 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().OnFileEventReceived(socketId, &event));
1659
1660 event.type = FileEventType::FILE_EVENT_SEND_PROCESS;
1661 EXPECT_NO_FATAL_FAILURE(ChannelManager::GetInstance().OnFileEventReceived(socketId, &event));
1662 }
1663 } // namespace DistributedCollab
1664 } // namespace OHOS
1665