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