• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-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 
16 #include <gtest/gtest.h>
17 #include <sys/types.h>
18 #include <sys/stat.h>
19 #include <fcntl.h>
20 #include "securec.h"
21 
22 #include "client_trans_proxy_file_manager.c"
23 #include "client_trans_proxy_file_helper.c"
24 #include "client_trans_proxy_manager.c"
25 #include "client_trans_session_manager.c"
26 #include "client_trans_socket_manager.c"
27 #include "client_trans_file_listener.h"
28 #include "softbus_def.h"
29 #include "softbus_error_code.h"
30 #include "softbus_server_frame.h"
31 #include "session.h"
32 #include "softbus_app_info.h"
33 #include "softbus_access_token_test.h"
34 
35 #define TEST_FILE_LENGTH 10
36 #define TEST_FILE_CNT 2
37 #define TEST_CHANNEL_ID 2
38 #define TEST_SESSION_ID 1
39 #define TEST_SEQ 1020
40 #define TEST_SEQ_SECOND 2
41 #define TEST_HEADER_LENGTH 24
42 #define TEST_HEADER_LENGTH_MIN 13
43 #define TEST_FILE_PATH "/data/file.txt"
44 #define TEST_DATA_LENGTH 6
45 #define TEST_FILE_SIZE 1000
46 #define TEST_PATH_SIZE 50
47 #define TEST_FILE_TEST_TXT_FILE 16
48 #define TEST_FILE_MAGIC_OFFSET 0
49 #define TEST_FRAME_NUMBER 2
50 #define TEST_FRAME_DATA_LENGTH 10
51 #define TEST_FILEPATH_LENGTH 4
52 #define TEST_SEQ8 8
53 #define TEST_SEQ16 16
54 #define TEST_SEQ32 32
55 #define TEST_SEQ126 126
56 #define TEST_SEQ128 128
57 #define TEST_OS_TYPE 10
58 #define TEST_PACKET_SIZE 1024
59 #define TEST_INVALID_LEN (-1)
60 
61 using namespace std;
62 using namespace testing::ext;
63 
64 namespace OHOS {
65 const char *g_pkgName = "dms";
66 const char *g_sessionName = "ohos.distributedschedule.dms.test";
67 const char *g_peerNetworkId = "1234567789";
68 const char *g_groupId = "123";
69 FILE *g_fileTest = nullptr;
70 FILE *g_fileSs = nullptr;
71 int32_t g_fd = 0;
72 char g_writeData[128] = "test111111111111111111111111111111111111111111111111111111111111";
73 const char *g_rootDir = "/data";
74 const char *g_destFile = "test.txt";
75 char g_recvFile[] = "/data/test.txt";
76 const char *g_sessionKey = "www.test.com";
77 
78 SessionAttribute g_attr = {
79     .dataType = TYPE_MESSAGE,
80     .linkTypeNum = LINK_TYPE_WIFI_WLAN_5G,
81 };
82 
83 SessionParam g_param = {
84     .sessionName = g_sessionName,
85     .peerSessionName = g_sessionName,
86     .peerDeviceId = g_peerNetworkId,
87     .groupId = g_groupId,
88     .attr = &g_attr,
89 };
90 
91 const char *g_testProxyFileList[] = {
92     "/data/test.txt",
93     "/data/ss.txt",
94 };
95 
96 const char *g_fileList[] = {
97     "/data/data/test.txt",
98     "/path/max/length/512/"
99     "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
100     "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
101     "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
102     "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
103     "111111111111111111111111111111111111111111111111111",
104 };
105 
OnSessionOpened(int32_t sessionId,int32_t result)106 static int32_t OnSessionOpened(int32_t sessionId, int32_t result)
107 {
108     return SOFTBUS_OK;
109 }
110 
OnSessionClosed(int32_t sessionId)111 static void OnSessionClosed(int32_t sessionId)
112 {
113 }
114 
OnBytesReceived(int32_t sessionId,const void * data,unsigned int len)115 static void OnBytesReceived(int32_t sessionId, const void *data, unsigned int len)
116 {
117 }
118 
OnMessageReceived(int32_t sessionId,const void * data,unsigned int len)119 static void OnMessageReceived(int32_t sessionId, const void *data, unsigned int len)
120 {
121 }
122 
123 static ISessionListener g_sessionlistener = {
124     .OnSessionOpened = OnSessionOpened,
125     .OnSessionClosed = OnSessionClosed,
126     .OnBytesReceived = OnBytesReceived,
127     .OnMessageReceived = OnMessageReceived,
128 };
129 
OnSendFileProcess(int32_t sessionId,uint64_t bytesUpload,uint64_t bytesTotal)130 static int32_t OnSendFileProcess(int32_t sessionId, uint64_t bytesUpload, uint64_t bytesTotal)
131 {
132     return SOFTBUS_OK;
133 }
134 
OnSendFileFinished(int32_t sessionId,const char * firstFile)135 static int32_t OnSendFileFinished(int32_t sessionId, const char *firstFile)
136 {
137     return SOFTBUS_OK;
138 }
139 
OnFileTransError(int32_t sessionId)140 void OnFileTransError(int32_t sessionId)
141 {
142     return;
143 }
144 
OnReceiveFileStarted(int32_t sessionId,const char * files,int32_t fileCnt)145 static int32_t OnReceiveFileStarted(int32_t sessionId, const char *files, int32_t fileCnt)
146 {
147     return SOFTBUS_OK;
148 }
149 
OnReceiveFileProcess(int32_t sessionId,const char * firstFile,uint64_t bytesUpload,uint64_t bytesTotal)150 static int32_t OnReceiveFileProcess(int32_t sessionId, const char *firstFile, uint64_t bytesUpload, uint64_t bytesTotal)
151 {
152     return SOFTBUS_OK;
153 }
OnReceiveFileFinished(int32_t sessionId,const char * files,int32_t fileCnt)154 static void OnReceiveFileFinished(int32_t sessionId, const char *files, int32_t fileCnt)
155 {
156     return;
157 }
158 
159 const IFileSendListener g_listener = {
160     .OnSendFileProcess = OnSendFileProcess,
161     .OnSendFileFinished = OnSendFileFinished,
162     .OnFileTransError = OnFileTransError,
163 };
164 
165 const IFileReceiveListener g_fileRecvListener = {
166     .OnReceiveFileStarted = OnReceiveFileStarted,
167     .OnReceiveFileProcess = OnReceiveFileProcess,
168     .OnReceiveFileFinished = OnReceiveFileFinished,
169     .OnFileTransError = OnFileTransError,
170 };
171 
172 class ClientTransProxyFileManagerTest : public testing::Test {
173 public:
ClientTransProxyFileManagerTest()174     ClientTransProxyFileManagerTest() {}
~ClientTransProxyFileManagerTest()175     ~ClientTransProxyFileManagerTest() {}
176     static void SetUpTestCase(void);
177     static void TearDownTestCase(void);
SetUp()178     void SetUp() override {}
TearDown()179     void TearDown() override {}
180 };
181 
SetUpTestCase(void)182 void ClientTransProxyFileManagerTest::SetUpTestCase(void)
183 {
184     SetAccessTokenPermission("dsoftbusTransTest");
185     g_fileTest = fopen(g_testProxyFileList[0], "w+");
186     EXPECT_NE(g_fileTest, nullptr);
187 
188     g_fileSs = fopen(g_testProxyFileList[1], "w+");
189     EXPECT_NE(g_fileSs, nullptr);
190     int32_t ret = fprintf(g_fileSs, "%s", "Hello world!\n");
191     EXPECT_LT(0, ret);
192     g_fd = open(TEST_FILE_PATH, O_RDWR | O_CREAT, S_IRWXU);
193     EXPECT_NE(g_fd, -1);
194     write(g_fd, g_writeData, sizeof(g_writeData));
195     ClientTransProxyListInit();
196 }
197 
TearDownTestCase(void)198 void ClientTransProxyFileManagerTest::TearDownTestCase(void)
199 {
200     int32_t ret = fclose(g_fileTest);
201     EXPECT_EQ(ret, 0);
202     g_fileTest = nullptr;
203     ret = fclose(g_fileSs);
204     EXPECT_EQ(ret, 0);
205     g_fileSs = nullptr;
206     close(g_fd);
207     g_fd = -1;
208     ret = remove(g_testProxyFileList[0]);
209     EXPECT_EQ(SOFTBUS_OK, ret);
210 
211     ret = remove(g_testProxyFileList[1]);
212     EXPECT_EQ(SOFTBUS_OK, ret);
213 
214     ret = remove(TEST_FILE_PATH);
215     EXPECT_EQ(SOFTBUS_OK, ret);
216     ClinetTransProxyFileManagerDeinit();
217     ClientTransProxyListDeinit();
218 }
219 
220 /**
221  * @tc.name: ClinetTransProxySendFileTest001
222  * @tc.desc: client trans proxy send file test, use the wrong parameter.
223  * @tc.type: FUNC
224  * @tc.require:
225  */
226 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxySendFileTest001, TestSize.Level1)
227 {
228     int32_t channelId = 1;
229     int32_t ret = ProxyChannelSendFile(channelId, g_testProxyFileList, g_testProxyFileList, 0);
230     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
231 
232     ret = ProxyChannelSendFile(channelId, nullptr, g_testProxyFileList, TEST_FILE_CNT);
233     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
234 
235     const char *proxyNullFileList[] = {
236         nullptr,
237         "/path/max/length/512",
238     };
239     ret = ProxyChannelSendFile(channelId, proxyNullFileList, g_testProxyFileList, TEST_FILE_CNT);
240     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
241 
242     const char *proxyZeroLileList[] = {
243         "",
244         "/path/max/length/512",
245     };
246     ret = ProxyChannelSendFile(channelId, proxyZeroLileList, g_testProxyFileList, TEST_FILE_CNT);
247     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
248 
249     const char *proxyLengthFileList[] = {
250         "/path/max/length/512",
251         "/path/max/length/512/"
252         "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
253         "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
254         "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
255         "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
256         "111111111111111111111111111111111111111111111111111",
257     };
258     ret = ProxyChannelSendFile(channelId, proxyLengthFileList, g_testProxyFileList, TEST_FILE_CNT);
259     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
260 
261     ret = ProxyChannelSendFile(channelId, g_testProxyFileList, nullptr, TEST_FILE_CNT);
262     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
263 
264     ret = ProxyChannelSendFile(channelId, g_testProxyFileList, proxyNullFileList, TEST_FILE_CNT);
265     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
266 
267     ret = ProxyChannelSendFile(channelId, g_testProxyFileList, g_testProxyFileList, TEST_FILE_CNT);
268     EXPECT_EQ(SOFTBUS_LOCK_ERR, ret);
269 }
270 
271 /**
272  * @tc.name: ClinetTransRecvFileFrameDataTest001
273  * @tc.desc: clent trans recv file frame data test, use the wrong parameter.
274  * @tc.type: FUNC
275  * @tc.require:
276  */
277 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransRecvFileFrameDataTest001, TestSize.Level1)
278 {
279     int32_t channelId = 1;
280     int32_t sessionId = 1;
281     int32_t ret = ProcessRecvFileFrameData(sessionId, channelId, nullptr);
282     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
283 
284     ChannelInfo *channel = (ChannelInfo *)SoftBusMalloc(sizeof(ChannelInfo));
285     ASSERT_TRUE(channel != nullptr);
286     channel->channelId = 1;
287     channel->isEncrypt = 0;
288     channel->linkType = LANE_BR;
289     channel->sessionKey = (char *)g_sessionKey;
290     channel->osType = OH_TYPE;
291     channel->keyLen = TEST_SEQ32;
292     ret = ClientTransProxyAddChannelInfo(ClientTransProxyCreateChannelInfo(channel));
293     EXPECT_EQ(SOFTBUS_OK, ret);
294     SoftBusFree(channel);
295     FileFrame fileFrame;
296     fileFrame.frameLength = PROXY_BR_MAX_PACKET_SIZE + 1;
297     ret = ProcessRecvFileFrameData(sessionId, channelId, &fileFrame);
298     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
299 
300     fileFrame.frameType = TRANS_SESSION_FILE_FIRST_FRAME;
301     ret = ProcessRecvFileFrameData(sessionId, channelId, &fileFrame);
302     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
303     ret = ClientTransProxyDelChannelInfo(1);
304     EXPECT_EQ(SOFTBUS_OK, ret);
305 }
306 
307 /**
308  * @tc.name: ClientTransProxyCreateChannelInfoTest001
309  * @tc.desc: clent trans recv file frame data test, use the wrong parameter.
310  * @tc.type: FUNC
311  * @tc.require:
312  */
313 HWTEST_F(ClientTransProxyFileManagerTest, ClientTransProxyCreateChannelInfoTest001, TestSize.Level1)
314 {
315     ChannelInfo *channel = (ChannelInfo *)SoftBusMalloc(sizeof(ChannelInfo));
316     ASSERT_TRUE(channel != nullptr);
317     channel->channelId = 1;
318     channel->isEncrypt = 0;
319     channel->linkType = LANE_BR;
320     channel->sessionKey = (char *)g_sessionKey;
321     channel->osType = OH_TYPE;
322     channel->isD2D = 1;
323     channel->dataLen = 0;
324     channel->isServer = 1;
325     channel->pagingNonce = (char *)g_sessionKey;
326     channel->pagingSessionkey = (char *)g_sessionKey;
327     channel->extraData = (char *)g_sessionKey;
328     channel->pagingAccountId = (char *)g_sessionKey;
329     channel->keyLen = TEST_SEQ32;
330     ClientProxyChannelInfo *info = ClientTransProxyCreateChannelInfo(channel);
331     ASSERT_TRUE(info != nullptr);
332     SoftBusFree(info);
333     channel->dataLen = EXTRA_DATA_MAX_LEN + 1;
334     channel->isServer = 0;
335     ClientProxyChannelInfo *testInfo = ClientTransProxyCreateChannelInfo(channel);
336     ASSERT_TRUE(testInfo != nullptr);
337     SoftBusFree(testInfo);
338     channel->dataLen = EXTRA_DATA_MAX_LEN - 1;
339     ClientProxyChannelInfo *testInfoTest = ClientTransProxyCreateChannelInfo(channel);
340     ASSERT_TRUE(testInfoTest != nullptr);
341     SoftBusFree(testInfoTest);
342     SoftBusFree(channel);
343 }
344 
345 /**
346  * @tc.name: ClinetTransRecvFileFrameDataTest002
347  * @tc.desc: client trans recv file frame data test, use the wrong parameter.
348  * @tc.type: FUNC
349  * @tc.require:
350  */
351 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransRecvFileFrameDataTest002, TestSize.Level1)
352 {
353     int32_t channelId = 1;
354     int32_t sessionId = 1;
355 
356     ChannelInfo *channel = (ChannelInfo *)SoftBusMalloc(sizeof(ChannelInfo));
357     ASSERT_TRUE(channel != nullptr);
358     channel->channelId = 1;
359     channel->isEncrypt = 0;
360     channel->linkType = LANE_BR;
361     channel->sessionKey = (char *)g_sessionKey;
362     channel->keyLen = TEST_SEQ32;
363     int32_t ret = ClientTransProxyAddChannelInfo(ClientTransProxyCreateChannelInfo(channel));
364     EXPECT_EQ(SOFTBUS_OK, ret);
365     SoftBusFree(channel);
366     FileFrame fileFrame;
367     fileFrame.frameLength = PROXY_BR_MAX_PACKET_SIZE - 1;
368 
369     fileFrame.frameType = TRANS_SESSION_FILE_FIRST_FRAME;
370     ret = ProcessRecvFileFrameData(sessionId, channelId, &fileFrame);
371     EXPECT_EQ(SOFTBUS_NO_INIT, ret);
372 
373     fileFrame.frameType = TRANS_SESSION_FILE_ONGOINE_FRAME;
374     ret = ProcessRecvFileFrameData(sessionId, channelId, &fileFrame);
375     EXPECT_EQ(SOFTBUS_NOT_FIND, ret);
376 
377     fileFrame.frameType = TRANS_SESSION_FILE_ONLYONE_FRAME;
378     ret = ProcessRecvFileFrameData(sessionId, channelId, &fileFrame);
379     EXPECT_EQ(SOFTBUS_NOT_FIND, ret);
380 
381     fileFrame.frameType = TRANS_SESSION_FILE_LAST_FRAME;
382     ret = ProcessRecvFileFrameData(sessionId, channelId, &fileFrame);
383     EXPECT_EQ(SOFTBUS_NOT_FIND, ret);
384 
385     fileFrame.frameType = TRANS_SESSION_FILE_ACK_REQUEST_SENT;
386     ret = ProcessRecvFileFrameData(sessionId, channelId, &fileFrame);
387     EXPECT_EQ(SOFTBUS_NOT_FIND, ret);
388 
389     fileFrame.frameType = TRANS_SESSION_FILE_ACK_RESPONSE_SENT;
390     ret = ProcessRecvFileFrameData(sessionId, channelId, &fileFrame);
391     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
392 
393     fileFrame.frameType = TRANS_SESSION_FILE_CRC_CHECK_FRAME;
394     ret = ProcessRecvFileFrameData(sessionId, channelId, &fileFrame);
395     EXPECT_EQ(SOFTBUS_NOT_FIND, ret);
396 
397     fileFrame.frameType = TRANS_SESSION_FILE_RESULT_FRAME;
398     ret = ProcessRecvFileFrameData(sessionId, channelId, &fileFrame);
399     EXPECT_EQ(SOFTBUS_TRANS_INVALID_DATA_LENGTH, ret);
400 
401     fileFrame.frameType = TRANS_SESSION_FILE_ALLFILE_SENT;
402     ret = ProcessRecvFileFrameData(sessionId, channelId, &fileFrame);
403     EXPECT_EQ(SOFTBUS_NOT_FIND, ret);
404 
405     fileFrame.frameType = -1;
406     ret = ProcessRecvFileFrameData(sessionId, channelId, &fileFrame);
407     EXPECT_EQ(SOFTBUS_FILE_ERR, ret);
408     ret = ClientTransProxyDelChannelInfo(1);
409     EXPECT_EQ(SOFTBUS_OK, ret);
410 }
411 
412 /**
413  * @tc.name: ClinetTransProxyFileManagerInitDataTest001
414  * @tc.desc: client trans proxy file manager init data test, use the wrong or normal parameter.
415  * @tc.type: FUNC
416  * @tc.require:
417  */
418 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyFileManagerInitDataTest001, TestSize.Level1)
419 {
420     int32_t ret = ClinetTransProxyFileManagerInit();
421     EXPECT_EQ(SOFTBUS_OK, ret);
422 
423     int32_t channelId = 1;
424     uint32_t seq = TEST_SEQ;
425     int32_t result = 0;
426     uint32_t side = 0;
427     ret = SendFileTransResult(channelId, seq, result, side);
428     EXPECT_EQ(SOFTBUS_TRANS_PROXY_CHANNEL_NOT_FOUND, ret);
429 
430     uint32_t data = 0;
431     const uint8_t *data1 = (const uint8_t *)&data;
432     uint32_t len = TEST_HEADER_LENGTH;
433     ret = UnpackFileTransResultFrame(data1, len, nullptr, &result, &side);
434     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
435 
436     ret = UnpackFileTransResultFrame(nullptr, len, &seq, &result, &side);
437     EXPECT_NE(SOFTBUS_OK, ret);
438 
439     ret = UnpackFileTransResultFrame(data1, len, &seq, &result, &side);
440     EXPECT_NE(SOFTBUS_OK, ret);
441 
442     data = FILE_MAGIC_NUMBER;
443     const uint8_t *data2 = (const uint8_t *)&data;
444     ret = UnpackFileTransResultFrame(data2, len, &seq, &result, &side);
445     EXPECT_NE(SOFTBUS_OK, ret);
446 }
447 
448 /**
449  * @tc.name: ClinetTransProxyGetSessionFileLockTest001
450  * @tc.desc: client trans proxy get session file lock test, use the wrong or normal parameter.
451  * @tc.type: FUNC
452  * @tc.require:
453  */
454 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyGetSessionFileLockTest001, TestSize.Level1)
455 {
456     int32_t channelId = 1;
457     ProxyFileMutexLock *sessionLock = GetSessionFileLock(channelId);
458     EXPECT_NE(nullptr, sessionLock);
459 
460     sessionLock = GetSessionFileLock(channelId);
461     EXPECT_NE(nullptr, sessionLock);
462 
463     DelSessionFileLock(nullptr);
464     sessionLock->count = 1;
465     DelSessionFileLock(sessionLock);
466 
467     sessionLock->count = 2;
468     DelSessionFileLock(sessionLock);
469 }
470 
471 /**
472  * @tc.name: ClinetTransProxyCreateSendListenerInfoTest001
473  * @tc.desc: client trans proxy create send listener info test, use the wrong or normal parameter.
474  * @tc.type: FUNC
475  * @tc.require:
476  */
477 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyCreateSendListenerInfoTest001, TestSize.Level1)
478 {
479     int32_t ret = CreateSessionServer(g_pkgName, g_sessionName, &g_sessionlistener);
480     ASSERT_EQ(SOFTBUS_TRANS_SESSION_SERVER_NOINIT, ret);
481 
482     int32_t sessionId = 1;
483     SessionEnableStatus isEnabled = ENABLE_STATUS_INIT;
484 
485     ret = ClientAddSession(&g_param, &sessionId, &isEnabled);
486     ASSERT_EQ(SOFTBUS_TRANS_SESSION_SERVER_NOINIT, ret);
487 
488     SendListenerInfo *sendListenerInfo;
489     ret = CreateSendListenerInfo(&sendListenerInfo, TEST_CHANNEL_ID, 0);
490     EXPECT_EQ(SOFTBUS_TRANS_SESSION_SERVER_NOINIT, ret);
491 
492     int32_t channelId = 1;
493     int32_t osType = TEST_OS_TYPE;
494     SessionInfo sessionInfo;
495     sessionInfo.sessionId = sessionId;
496     sessionInfo.channelId = channelId;
497     sessionInfo.channelType = CHANNEL_TYPE_PROXY;
498     ret = TransClientInit();
499     ASSERT_EQ(SOFTBUS_OK, ret);
500     ret = AddSession(g_sessionName, &sessionInfo);
501     ASSERT_EQ(SOFTBUS_TRANS_SESSIONSERVER_NOT_CREATED, ret);
502 
503     ret = TransSetFileSendListener(g_sessionName, &g_listener);
504     ASSERT_EQ(SOFTBUS_OK, ret);
505 
506     ret = TransSetFileReceiveListener(g_sessionName, &g_fileRecvListener, g_rootDir);
507     ASSERT_EQ(SOFTBUS_OK, ret);
508 
509     ret = CreateSendListenerInfo(&sendListenerInfo, channelId, 0);
510     EXPECT_EQ(SOFTBUS_TRANS_SESSION_INFO_NOT_FOUND, ret);
511 
512     ret = CreateSendListenerInfo(&sendListenerInfo, channelId, 0);
513     EXPECT_EQ(SOFTBUS_TRANS_SESSION_INFO_NOT_FOUND, ret);
514 
515     ret = AddSendListenerInfo(nullptr);
516     EXPECT_NE(SOFTBUS_OK, ret);
517 
518     FileRecipientInfo *result = CreateNewRecipient(sessionId, channelId, osType);
519     EXPECT_EQ(nullptr, result);
520 }
521 
522 /**
523  * @tc.name: ClinetTransProxyGetAndCheckFileSizeTest001
524  * @tc.desc: improve branch coverage, use the wrong or normal parameter.
525  * @tc.type: FUNC
526  * @tc.require:
527  */
528 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyGetAndCheckFileSizeTest001, TestSize.Level1)
529 {
530     uint64_t fileSize = 0;
531     uint64_t frameNum = 0;
532     int32_t ret =
533         GetAndCheckFileSize(nullptr, &fileSize, &frameNum, APP_INFO_FILE_FEATURES_SUPPORT, PROXY_BLE_MAX_PACKET_SIZE);
534     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
535 
536     ret = GetAndCheckFileSize(
537         g_testProxyFileList[0], &fileSize, &frameNum, APP_INFO_FILE_FEATURES_SUPPORT, PROXY_BLE_MAX_PACKET_SIZE);
538     EXPECT_EQ(SOFTBUS_OK, ret);
539 
540     ret = GetAndCheckFileSize(
541         g_testProxyFileList[1], &fileSize, &frameNum, APP_INFO_FILE_FEATURES_NO_SUPPORT, PROXY_BLE_MAX_PACKET_SIZE);
542     EXPECT_EQ(SOFTBUS_OK, ret);
543 }
544 
545 /**
546  * @tc.name: ClinetTransProxySendOneFrameTest001
547  * @tc.desc: client trans proxy send one frame test, use the wrong or normal parameter.
548  * @tc.type: FUNC
549  * @tc.require:
550  */
551 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxySendOneFrameTest001, TestSize.Level1)
552 {
553     SendListenerInfo info;
554     info.sessionId = TEST_SESSION_ID;
555     info.crc = APP_INFO_FILE_FEATURES_SUPPORT;
556     info.channelId = TEST_CHANNEL_ID;
557 
558     FileFrame fileFrame = {
559         .frameType = TRANS_SESSION_BYTES,
560         .data = nullptr,
561     };
562     int32_t ret = SendOneFrame(nullptr, &fileFrame);
563     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
564 
565     ret = SendOneFrame(&info, &fileFrame);
566     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
567 
568     info.crc = APP_INFO_FILE_FEATURES_NO_SUPPORT;
569     uint32_t dataTest = TEST_DATA_LENGTH;
570     fileFrame.data = (uint8_t *)&dataTest;
571     ret = SendOneFrame(&info, &fileFrame);
572     EXPECT_EQ(SOFTBUS_TRANS_PROXY_CHANNEL_NOT_FOUND, ret);
573 
574     fileFrame.frameType = TRANS_SESSION_FILE_FIRST_FRAME;
575     ret = SendOneFrame(&info, &fileFrame);
576     EXPECT_EQ(SOFTBUS_TRANS_PROXY_CHANNEL_NOT_FOUND, ret);
577 
578     ret = SendOneFrameFront(nullptr, fileFrame.frameType);
579     EXPECT_NE(SOFTBUS_OK, ret);
580 
581     SendListenerInfo infoMiddle;
582     infoMiddle.sessionId = 1;
583     infoMiddle.channelId = 1;
584     infoMiddle.crc = APP_INFO_FILE_FEATURES_NO_SUPPORT;
585     ret = SendOneFrameMiddle(nullptr, TRANS_SESSION_FILE_ONGOINE_FRAME);
586     EXPECT_NE(SOFTBUS_OK, ret);
587 
588     ret = SendOneFrameMiddle(&infoMiddle, TRANS_SESSION_FILE_ONGOINE_FRAME);
589     EXPECT_EQ(SOFTBUS_OK, ret);
590 
591     ret = SendOneFrameFront(&infoMiddle, TRANS_SESSION_FILE_ONGOINE_FRAME);
592     EXPECT_EQ(SOFTBUS_OK, ret);
593 
594     infoMiddle.crc = APP_INFO_FILE_FEATURES_SUPPORT;
595     infoMiddle.seq = 0;
596     ret = SendOneFrameMiddle(&infoMiddle, TRANS_SESSION_BYTES);
597     EXPECT_EQ(SOFTBUS_OK, ret);
598 
599     ret = SendOneFrameMiddle(&infoMiddle, TRANS_SESSION_FILE_ONGOINE_FRAME);
600     EXPECT_EQ(SOFTBUS_TRANS_PROXY_CHANNEL_NOT_FOUND, ret);
601 
602     ret = SendOneFrameFront(&infoMiddle, TRANS_SESSION_FILE_ONGOINE_FRAME);
603     EXPECT_EQ(SOFTBUS_OK, ret);
604 
605     ret = SendOneFrameFront(&infoMiddle, TRANS_SESSION_FILE_FIRST_FRAME);
606     EXPECT_EQ(SOFTBUS_OK, ret);
607 
608     infoMiddle.seq = TEST_SEQ;
609     ret = SendOneFrameMiddle(&infoMiddle, TRANS_SESSION_FILE_ONGOINE_FRAME);
610     EXPECT_EQ(SOFTBUS_OK, ret);
611 }
612 
613 /**
614  * @tc.name: ClinetTransProxySendOneFrameTest002
615  * @tc.desc: client trans proxy send one frame test, use the wrong or normal parameter.
616  * @tc.type: FUNC
617  * @tc.require:
618  */
619 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxySendOneFrameTest002, TestSize.Level1)
620 {
621     SendListenerInfo *infoRear = (SendListenerInfo *)SoftBusCalloc(sizeof(SendListenerInfo));
622     infoRear->sessionId = 1;
623     infoRear->channelId = 1;
624     infoRear->crc = APP_INFO_FILE_FEATURES_NO_SUPPORT;
625     int32_t ret = SendOneFrameRear(nullptr, TRANS_SESSION_BYTES);
626     EXPECT_NE(SOFTBUS_OK, ret);
627 
628     ret = SendOneFrameRear(infoRear, TRANS_SESSION_BYTES);
629     EXPECT_EQ(SOFTBUS_OK, ret);
630 
631     infoRear->crc = APP_INFO_FILE_FEATURES_SUPPORT;
632     ret = SendOneFrameRear(infoRear, TRANS_SESSION_FILE_ONLYONE_FRAME);
633     EXPECT_EQ(SOFTBUS_OK, ret);
634 
635     infoRear->waitSeq = 0;
636     ret = SendOneFrameRear(infoRear, TRANS_SESSION_FILE_LAST_FRAME);
637     EXPECT_EQ(SOFTBUS_OK, ret);
638 
639     infoRear->waitSeq = TEST_SEQ;
640     ret = SendOneFrameRear(infoRear, TRANS_SESSION_FILE_LAST_FRAME);
641     EXPECT_EQ(SOFTBUS_FILE_ERR, ret);
642 
643     SoftBusFree(infoRear);
644 }
645 
646 /**
647  * @tc.name: ClinetTransProxyFileRecipientInfoTest001
648  * @tc.desc: client trans proxy file recipient info test, use the wrong or normal parameter.
649  * @tc.type: FUNC
650  * @tc.require:
651  */
652 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyFileRecipientInfoTest001, TestSize.Level1)
653 {
654     FileRecipientInfo info;
655     info.recvFileInfo.fileFd = -2;
656     info.recvState = TRANS_FILE_RECV_ERR_STATE;
657     info.crc = APP_INFO_FILE_FEATURES_SUPPORT;
658     info.channelId = 1;
659     info.recvFileInfo.seq = TEST_SEQ;
660     info.fileListener.recvListener.OnFileTransError = nullptr;
661     ClearRecipientResources(&info);
662 
663     info.fileListener.recvListener.OnFileTransError = OnFileTransError;
664     SetRecipientRecvState(&info, TRANS_FILE_RECV_IDLE_STATE);
665     EXPECT_EQ(info.recvFileInfo.fileFd, INVALID_FD);
666     ClearRecipientResources(&info);
667 
668     info.crc = APP_INFO_FILE_FEATURES_NO_SUPPORT;
669     ClearRecipientResources(&info);
670 
671     info.recvState = TRANS_FILE_RECV_IDLE_STATE;
672     SetRecipientRecvState(&info, TRANS_FILE_RECV_IDLE_STATE);
673     EXPECT_EQ(info.recvFileInfo.fileFd, INVALID_FD);
674     SetRecipientRecvState(&info, TRANS_FILE_RECV_PROCESS_STATE);
675     EXPECT_EQ(info.recvFileInfo.fileFd, INVALID_FD);
676     ClearRecipientResources(&info);
677 
678     info.recvFileInfo.fileFd = INVALID_FD;
679     ClearRecipientResources(&info);
680 }
681 
682 /**
683  * @tc.name: ClinetTransProxyFileAckReqAndResDataTest001
684  * @tc.desc: client trans proxy file ack req and res data test, use the wrong or normal parameter.
685  * @tc.type: FUNC
686  * @tc.require:
687  */
688 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyFileAckReqAndResDataTest001, TestSize.Level1)
689 {
690     int32_t channelId = 1;
691     uint32_t startSeq = TEST_SEQ;
692     uint32_t value = 0;
693     int32_t ret = SendFileAckReqAndResData(channelId, startSeq, value, CHANNEL_TYPE_PROXY);
694     EXPECT_EQ(SOFTBUS_TRANS_PROXY_CHANNEL_NOT_FOUND, ret);
695 
696     FileFrame frame;
697     frame.frameLength = 0;
698     frame.data = nullptr;
699     uint64_t dataTest = 0;
700     ret = UnpackAckReqAndResData(nullptr, &startSeq, &value);
701     EXPECT_NE(SOFTBUS_OK, ret);
702 
703     ret = UnpackAckReqAndResData(&frame, &startSeq, &value);
704     EXPECT_NE(SOFTBUS_OK, ret);
705 
706     frame.data = (uint8_t *)&dataTest;
707     ret = UnpackAckReqAndResData(&frame, &startSeq, &value);
708     EXPECT_NE(SOFTBUS_OK, ret);
709 
710     frame.frameLength = TEST_HEADER_LENGTH;
711     ret = UnpackAckReqAndResData(&frame, &startSeq, &value);
712     EXPECT_NE(SOFTBUS_OK, ret);
713 
714     dataTest = FILE_MAGIC_NUMBER;
715     frame.data = (uint8_t *)&dataTest;
716     ret = UnpackAckReqAndResData(&frame, &startSeq, &value);
717     EXPECT_EQ(SOFTBUS_OK, ret);
718 }
719 
720 /**
721  * @tc.name: ClinetTransProxyPackFileDataTest001
722  * @tc.desc: client trans proxy pack file data test, use the wrong parameter.
723  * @tc.type: FUNC
724  * @tc.require:
725  */
726 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyPackFileDataTest001, TestSize.Level1)
727 {
728     FileFrame fileFrame = {
729         .frameType = TRANS_SESSION_BYTES,
730         .data = nullptr,
731     };
732     uint64_t readLength = TEST_FILE_LENGTH;
733     uint64_t fileOffset = 0;
734     SendListenerInfo info;
735     info.fd = g_fd;
736     info.packetSize = PROXY_BLE_MAX_PACKET_SIZE;
737     uint32_t seq = TEST_SEQ;
738     int64_t len = PackReadFileData(&fileFrame, readLength, fileOffset, &info);
739     EXPECT_TRUE(len == -1);
740 
741     info.crc = APP_INFO_FILE_FEATURES_SUPPORT;
742     len = PackReadFileData(&fileFrame, readLength, fileOffset, &info);
743     EXPECT_TRUE(len == -1);
744 
745     len = PackReadFileRetransData(&fileFrame, seq, readLength, fileOffset, &info);
746     EXPECT_TRUE(len == -1);
747 
748     uint32_t dataTest = TEST_DATA_LENGTH;
749     fileFrame.data = (uint8_t *)&dataTest;
750     fileFrame.fileData = (uint8_t *)&dataTest;
751     info.crc = APP_INFO_FILE_FEATURES_NO_SUPPORT;
752     len = PackReadFileData(&fileFrame, readLength, fileOffset, &info);
753     EXPECT_EQ(TEST_FILE_LENGTH, len);
754 
755     info.crc = APP_INFO_FILE_FEATURES_SUPPORT;
756     len = PackReadFileData(&fileFrame, readLength, fileOffset, &info);
757     EXPECT_EQ(TEST_FILE_LENGTH, len);
758 
759     len = PackReadFileRetransData(&fileFrame, seq, readLength, fileOffset, &info);
760     EXPECT_EQ(SOFTBUS_TRANS_PROXY_CHANNEL_NOT_FOUND, len);
761 }
762 
763 /**
764  * @tc.name: ClinetTransProxyPackFileDataFrameTest001
765  * @tc.desc: client trans proxy pack file data frame test, use normal parameter.
766  * @tc.type: FUNC
767  * @tc.require:
768  */
769 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyPackFileDataFrameTest001, TestSize.Level1)
770 {
771     uint32_t dataTest = TEST_DATA_LENGTH;
772     FileFrame fileFrame = {
773         .magic = FILE_MAGIC_NUMBER,
774         .frameType = TRANS_SESSION_BYTES,
775         .frameLength = 0,
776         .data = (uint8_t *)&dataTest,
777         .fileData = (uint8_t *)&dataTest,
778     };
779 
780     FileRecipientInfo info = {
781         .crc = APP_INFO_FILE_FEATURES_NO_SUPPORT,
782         .osType = OH_TYPE,
783     };
784 
785     uint32_t fileDataLen = 0;
786     int32_t ret = UnpackFileDataFrame(&info, &fileFrame, &fileDataLen);
787     EXPECT_NE(SOFTBUS_OK, ret);
788 
789     fileFrame.frameLength = TEST_HEADER_LENGTH;
790     ret = UnpackFileDataFrame(&info, &fileFrame, &fileDataLen);
791     EXPECT_EQ(SOFTBUS_OK, ret);
792 
793     info.crc = APP_INFO_FILE_FEATURES_SUPPORT;
794     info.osType = OH_TYPE;
795     ret = UnpackFileDataFrame(&info, &fileFrame, &fileDataLen);
796     EXPECT_EQ(SOFTBUS_INVALID_DATA_HEAD, ret);
797 
798     fileFrame.magic = 0;
799     fileFrame.frameLength = TEST_HEADER_LENGTH_MIN;
800     ret = UnpackFileDataFrame(&info, &fileFrame, &fileDataLen);
801     EXPECT_EQ(SOFTBUS_TRANS_INVALID_DATA_LENGTH, ret);
802 }
803 
804 /**
805  * @tc.name: ClinetTransProxyRetransFileFrameTest001
806  * @tc.desc: client trans proxy retrans file frame test, use normal parameter.
807  * @tc.type: FUNC
808  * @tc.require:
809  */
810 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyRetransFileFrameTest001, TestSize.Level1)
811 {
812     SendListenerInfo info = {
813         .channelId = 1,
814         .fd = g_fd,
815         .fileSize = TEST_FILE_SIZE,
816         .frameNum = 1,
817         .crc = APP_INFO_FILE_FEATURES_NO_SUPPORT,
818     };
819     int32_t ret = RetransFileFrameBySeq(nullptr, TEST_SEQ);
820     EXPECT_NE(SOFTBUS_OK, ret);
821 
822     ret = RetransFileFrameBySeq(&info, TEST_SEQ);
823     EXPECT_EQ(SOFTBUS_OK, ret);
824 
825     info.crc = APP_INFO_FILE_FEATURES_SUPPORT;
826     int32_t seq = TEST_SEQ_SECOND;
827     ret = RetransFileFrameBySeq(&info, seq);
828     EXPECT_NE(SOFTBUS_OK, ret);
829 
830     ret = RetransFileFrameBySeq(&info, TEST_SEQ);
831     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
832 }
833 
834 /**
835  * @tc.name: ClinetTransProxyAckResponseDataHandleTest001
836  * @tc.desc: client trans proxy handle response data test, use normal parameter.
837  * @tc.type: FUNC
838  * @tc.require:
839  */
840 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyAckResponseDataHandleTest001, TestSize.Level1)
841 {
842     SendListenerInfo info = {
843         .fileSize = TEST_FILE_SIZE,
844         .crc = APP_INFO_FILE_FEATURES_NO_SUPPORT,
845     };
846     uint32_t len = 0;
847     int32_t ret = AckResponseDataHandle(&info, nullptr, len);
848     EXPECT_EQ(SOFTBUS_OK, ret);
849 
850     const char *data = "test_data";
851     ret = AckResponseDataHandle(&info, data, len);
852     EXPECT_EQ(SOFTBUS_OK, ret);
853 
854     len = sizeof(AckResponseData);
855     ret = AckResponseDataHandle(&info, data, len);
856     EXPECT_EQ(SOFTBUS_OK, ret);
857 
858     AckResponseData ackResponseData = {
859         .startSeq = FILE_SEND_ACK_RESULT_SUCCESS,
860         .seqResult = TEST_SEQ_SECOND,
861     };
862     const char *dataTest = reinterpret_cast<const char*>(&ackResponseData);
863     ret = AckResponseDataHandle(&info, dataTest, len);
864     EXPECT_EQ(SOFTBUS_OK, ret);
865 }
866 
867 /**
868  * @tc.name: ClinetTransProxyGetFullRecvPathTest001
869  * @tc.desc: client trans proxy get full recv path test, use normal parameter.
870  * @tc.type: FUNC
871  * @tc.require:
872  */
873 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyGetFullRecvPathTest001, TestSize.Level1)
874 {
875     char *result = GetFullRecvPath(nullptr, nullptr);
876     EXPECT_EQ(nullptr, result);
877     const char *filePath1 = "";
878     const char *recvRootDir1 = "";
879 
880     result = GetFullRecvPath(filePath1, recvRootDir1);
881     EXPECT_NE(nullptr, result);
882 
883     const char *filePath2 = "/test.txt";
884     result = GetFullRecvPath(filePath2, recvRootDir1);
885     EXPECT_NE(nullptr, result);
886 
887     const char *recvRootDir2 = "/data/";
888     result = GetFullRecvPath(filePath1, recvRootDir2);
889     EXPECT_NE(nullptr, result);
890 
891     result = GetFullRecvPath(filePath2, recvRootDir2);
892     EXPECT_NE(nullptr, result);
893 
894     const char *filePath3 = "/test.txt";
895     const char *recvRootDir3 = "/data";
896     result = GetFullRecvPath(filePath3, recvRootDir2);
897     EXPECT_NE(nullptr, result);
898 
899     result = GetFullRecvPath(filePath2, recvRootDir3);
900     EXPECT_NE(nullptr, result);
901 }
902 
903 /**
904  * @tc.name: ClinetTransProxyGetDirPathTest001
905  * @tc.desc: client trans proxy get dir path test, use normal parameter.
906  * @tc.type: FUNC
907  * @tc.require:
908  */
909 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyGetDirPathTest001, TestSize.Level1)
910 {
911     int32_t ret = GetDirPath(nullptr, nullptr, 0);
912     EXPECT_NE(SOFTBUS_OK, ret);
913 
914     const char *fullPath1 = "";
915     char dirPath1[TEST_FILE_LENGTH] = {0};
916     ret = GetDirPath(fullPath1, nullptr, 0);
917     EXPECT_NE(SOFTBUS_OK, ret);
918 
919     const char *fullPath2 = "/data/txt/";
920     ret = GetDirPath(fullPath2, nullptr, 0);
921     EXPECT_NE(SOFTBUS_OK, ret);
922 
923     const char *fullPath3 = "/d/t.txt";
924     ret = GetDirPath(fullPath3, dirPath1, 0);
925     EXPECT_NE(SOFTBUS_OK, ret);
926 
927     ret = GetDirPath(fullPath3, dirPath1, TEST_FILE_LENGTH);
928     EXPECT_EQ(SOFTBUS_OK, ret);
929 }
930 
931 /**
932  * @tc.name: ClinetTransProxyGetAbsFullPathTest001
933  * @tc.desc: client trans proxy get path test, use normal parameter.
934  * @tc.type: FUNC
935  * @tc.require:
936  */
937 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyGetAbsFullPathTest001, TestSize.Level1)
938 {
939     int32_t ret = GetAbsFullPath(nullptr, nullptr, 0);
940     EXPECT_NE(SOFTBUS_OK, ret);
941 
942     char recvAbsPath[TEST_PATH_SIZE];
943     ret = GetAbsFullPath(g_testProxyFileList[0], recvAbsPath, TEST_PATH_SIZE);
944     EXPECT_EQ(SOFTBUS_OK, ret);
945 
946     ret = GetAbsFullPath(g_testProxyFileList[0], recvAbsPath, TEST_FILE_LENGTH);
947     EXPECT_NE(SOFTBUS_OK, ret);
948 
949     ret = CreateDirAndGetAbsPath(g_testProxyFileList[0], nullptr, TEST_PATH_SIZE);
950     EXPECT_NE(SOFTBUS_OK, ret);
951 
952     ret = CreateDirAndGetAbsPath(g_testProxyFileList[0], recvAbsPath, TEST_PATH_SIZE);
953     EXPECT_EQ(SOFTBUS_OK, ret);
954 
955     ret = CreateDirAndGetAbsPath(g_testProxyFileList[0], recvAbsPath, TEST_FILE_LENGTH);
956     EXPECT_NE(SOFTBUS_OK, ret);
957 }
958 
959 /**
960  * @tc.name: ClinetTransProxySendListenerInfoTest001
961  * @tc.desc: client trans proxy add and del SendListenerInfo test, use normal parameter.
962  * @tc.type: FUNC
963  * @tc.require:
964  */
965 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxySendListenerInfoTest001, TestSize.Level1)
966 {
967     SendListenerInfo *info = (SendListenerInfo *)SoftBusCalloc(sizeof(SendListenerInfo));
968     EXPECT_TRUE(info != nullptr);
969     info->sessionId = 1;
970     info->crc = 1;
971     info->channelId = 1;
972     int32_t ret = AddSendListenerInfo(info);
973     EXPECT_EQ(SOFTBUS_OK, ret);
974 
975     int32_t sessionId = 1;
976     uint32_t seq = 0;
977     int32_t res = 0;
978     ret = ProcessFileRecvResult(sessionId, seq, res);
979     EXPECT_EQ(SOFTBUS_OK, ret);
980 
981     DelSendListenerInfo(nullptr);
982 
983     DelSendListenerInfo(info);
984 }
985 
986 /**
987  * @tc.name: ClinetTransProxyFileTransStartInfoTest001
988  * @tc.desc: client trans proxy pack file start info test, use normal parameter.
989  * @tc.type: FUNC
990  * @tc.require:
991  */
992 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyFileTransStartInfoTest001, TestSize.Level1)
993 {
994     int32_t ret = PackFileTransStartInfo(nullptr, nullptr, TEST_FILE_TEST_TXT_FILE, nullptr);
995     EXPECT_NE(SOFTBUS_OK, ret);
996 
997     uint32_t dataTest = TEST_DATA_LENGTH;
998     FileFrame fileFrame = {
999         .frameLength = 0,
1000         .data = (uint8_t *)&dataTest,
1001         .fileData = (uint8_t *)&dataTest,
1002     };
1003     SendListenerInfo info;
1004     info.crc = APP_INFO_FILE_FEATURES_SUPPORT;
1005     info.sessionId = 1;
1006     info.channelId = 1;
1007     info.packetSize = PROXY_BLE_MAX_PACKET_SIZE;
1008 
1009     ret = PackFileTransStartInfo(&fileFrame, g_testProxyFileList[0], TEST_FILE_TEST_TXT_FILE, &info);
1010     EXPECT_EQ(SOFTBUS_OK, ret);
1011 
1012     info.crc = APP_INFO_FILE_FEATURES_NO_SUPPORT;
1013     ret = PackFileTransStartInfo(&fileFrame, g_testProxyFileList[0], TEST_FILE_TEST_TXT_FILE, &info);
1014     EXPECT_EQ(SOFTBUS_OK, ret);
1015 }
1016 
1017 /**
1018  * @tc.name: ClinetTransProxyUnFileTransStartInfoTest001
1019  * @tc.desc: client trans proxy pack file data frame test, use normal parameter.
1020  * @tc.type: FUNC
1021  * @tc.require:
1022  */
1023 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyUnFileTransStartInfoTest001, TestSize.Level1)
1024 {
1025     uint32_t packetSize = TEST_PACKET_SIZE;
1026     int32_t ret = UnpackFileTransStartInfo(nullptr, nullptr, nullptr, packetSize);
1027     EXPECT_NE(SOFTBUS_OK, ret);
1028 
1029     uint32_t dataTest = TEST_DATA_LENGTH;
1030     FileFrame fileFrame = {
1031         .frameLength = 0,
1032         .data = (uint8_t *)&dataTest,
1033         .fileData = (uint8_t *)&dataTest,
1034     };
1035     FileRecipientInfo info;
1036     info.crc = APP_INFO_FILE_FEATURES_SUPPORT;
1037     info.osType = OH_TYPE;
1038     SingleFileInfo singleFileInfo;
1039     ret = UnpackFileTransStartInfo(&fileFrame, &info, &singleFileInfo, packetSize);
1040     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1041 
1042     fileFrame.frameLength = TEST_HEADER_LENGTH;
1043     ret = UnpackFileTransStartInfo(&fileFrame, &info, &singleFileInfo, packetSize);
1044     EXPECT_EQ(SOFTBUS_TRANS_INVALID_DATA_LENGTH, ret);
1045 
1046     uint32_t data = FILE_MAGIC_NUMBER;
1047     fileFrame.data = (uint8_t *)&data;
1048     ret = UnpackFileTransStartInfo(&fileFrame, &info, &singleFileInfo, packetSize);
1049     EXPECT_EQ(SOFTBUS_TRANS_INVALID_DATA_LENGTH, ret);
1050 
1051     info.crc = APP_INFO_FILE_FEATURES_NO_SUPPORT;
1052     fileFrame.frameLength = 0;
1053     ret = UnpackFileTransStartInfo(&fileFrame, &info, &singleFileInfo, packetSize);
1054     EXPECT_NE(SOFTBUS_OK, ret);
1055 
1056     fileFrame.frameLength = FRAME_DATA_SEQ_OFFSET;
1057     ret = UnpackFileTransStartInfo(&fileFrame, &info, &singleFileInfo, packetSize);
1058     EXPECT_EQ(SOFTBUS_OK, ret);
1059 
1060     fileFrame.frameLength = FRAME_DATA_SEQ_OFFSET + TEST_HEADER_LENGTH;
1061     ret = UnpackFileTransStartInfo(&fileFrame, &info, &singleFileInfo, packetSize);
1062     EXPECT_EQ(SOFTBUS_OK, ret);
1063 }
1064 
1065 /**
1066  * @tc.name: ClinetTransProxyFileCrcCheckSumTest001
1067  * @tc.desc: client trans proxy crc check test, use normal parameter.
1068  * @tc.type: FUNC
1069  * @tc.require:
1070  */
1071 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyFileCrcCheckSumTest001, TestSize.Level1)
1072 {
1073     int32_t ret = SendFileCrcCheckSum(nullptr);
1074     EXPECT_NE(SOFTBUS_OK, ret);
1075 
1076     SendListenerInfo info;
1077     info.crc = APP_INFO_FILE_FEATURES_NO_SUPPORT;
1078     ret = SendFileCrcCheckSum(&info);
1079     EXPECT_EQ(SOFTBUS_OK, ret);
1080 
1081     info.crc = APP_INFO_FILE_FEATURES_SUPPORT;
1082     ret = SendFileCrcCheckSum(&info);
1083     EXPECT_NE(SOFTBUS_OK, ret);
1084 
1085     ret = UnpackFileCrcCheckSum(nullptr, nullptr);
1086     EXPECT_NE(SOFTBUS_OK, ret);
1087 
1088     FileRecipientInfo fileInfo;
1089     fileInfo.crc = APP_INFO_FILE_FEATURES_NO_SUPPORT;
1090     FileFrame fileFrame;
1091     ret = UnpackFileCrcCheckSum(&fileInfo, &fileFrame);
1092     EXPECT_EQ(SOFTBUS_OK, ret);
1093 
1094     fileInfo.crc = APP_INFO_FILE_FEATURES_SUPPORT;
1095     ret = UnpackFileCrcCheckSum(&fileInfo, &fileFrame);
1096     EXPECT_NE(SOFTBUS_OK, ret);
1097 
1098     fileFrame.frameLength = 20;
1099     ret = UnpackFileCrcCheckSum(&fileInfo, &fileFrame);
1100     EXPECT_NE(SOFTBUS_OK, ret);
1101 }
1102 
1103 /**
1104  * @tc.name: ClinetTransProxyFileToFrameTest001
1105  * @tc.desc: client trans proxy send file test, use the wrong or normal parameter.
1106  * @tc.type: FUNC
1107  * @tc.require:
1108  */
1109 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyFileToFrameTest001, TestSize.Level1)
1110 {
1111     SendListenerInfo info;
1112     info.sessionId = 1;
1113     info.crc = 1;
1114     info.channelId = 1;
1115 
1116     int32_t ret = SendSingleFile(&info, nullptr, g_testProxyFileList[0]);
1117     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1118 
1119     ret = FileToFrameAndSendFile(nullptr, g_testProxyFileList[0], g_testProxyFileList[0]);
1120     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1121 
1122     ret = FileToFrameAndSendFile(&info, g_testProxyFileList[0], nullptr);
1123     EXPECT_EQ(SOFTBUS_FILE_ERR, ret);
1124 
1125     ret = FileToFrameAndSendFile(&info, nullptr, g_testProxyFileList[0]);
1126     EXPECT_EQ(SOFTBUS_FILE_ERR, ret);
1127 
1128     ret = FileToFrameAndSendFile(&info, g_testProxyFileList[0], g_testProxyFileList[0]);
1129     EXPECT_EQ(SOFTBUS_FILE_ERR, ret);
1130 
1131     ret = SendSingleFile(&info, g_testProxyFileList[0], g_testProxyFileList[0]);
1132     EXPECT_EQ(SOFTBUS_FILE_ERR, ret);
1133 
1134     ret = SendFileList(info.channelId, g_testProxyFileList, TEST_FILE_CNT);
1135     EXPECT_EQ(SOFTBUS_TRANS_PROXY_CHANNEL_NOT_FOUND, ret);
1136 
1137     ret = SendFileList(info.channelId, nullptr, TEST_FILE_CNT);
1138     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1139 }
1140 
1141 /**
1142  * @tc.name: ClinetTransProxyFileToFrameTest002
1143  * @tc.desc: client trans proxy file to frame test, use normal parameter.
1144  * @tc.type: FUNC
1145  * @tc.require:
1146  */
1147 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyFileToFrameTest002, TestSize.Level1)
1148 {
1149     SendListenerInfo sendInfo = {
1150         .channelId = 1,
1151         .sessionId = 1,
1152         .crc = APP_INFO_FILE_FEATURES_NO_SUPPORT,
1153     };
1154 
1155     int32_t ret = FileToFrameAndSendFile(&sendInfo, g_testProxyFileList[0], g_destFile);
1156     EXPECT_EQ(SOFTBUS_FILE_ERR, ret);
1157 
1158     ret = FileToFrame(&sendInfo, TEST_FRAME_NUMBER, g_destFile, TEST_FILE_TEST_TXT_FILE);
1159     EXPECT_EQ(SOFTBUS_FILE_ERR, ret);
1160 
1161     sendInfo.crc = APP_INFO_FILE_FEATURES_SUPPORT;
1162     ret = FileToFrame(&sendInfo, TEST_FRAME_NUMBER, g_destFile, TEST_FILE_TEST_TXT_FILE);
1163     EXPECT_EQ(SOFTBUS_FILE_ERR, ret);
1164 }
1165 
1166 /**
1167  * @tc.name: ClinetTransProxyStartSendFileTest001
1168  * @tc.desc: client trans proxy start send file test, use normal parameter.
1169  * @tc.type: FUNC
1170  * @tc.require:
1171  */
1172 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyStartSendFileTest001, TestSize.Level1)
1173 {
1174     SendListenerInfo sendInfo = {
1175         .channelId = 1,
1176         .sessionId = 1,
1177         .crc = APP_INFO_FILE_FEATURES_NO_SUPPORT,
1178     };
1179 
1180     int32_t ret = ProxyStartSendFile(&sendInfo, g_testProxyFileList, g_testProxyFileList, TEST_FILE_CNT);
1181     EXPECT_EQ(SOFTBUS_FILE_ERR, ret);
1182 }
1183 
1184 /**
1185  * @tc.name: ClinetTransProxyCheckFileTest001
1186  * @tc.desc: client trans proxy start send file test, use normal parameter.
1187  * @tc.type: FUNC
1188  * @tc.require:
1189  */
1190 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyCheckFileTest001, TestSize.Level1)
1191 {
1192     bool result = CheckRecvFileExist(nullptr);
1193     EXPECT_EQ(false, result);
1194 
1195     result = CheckRecvFileExist(g_testProxyFileList[0]);
1196     EXPECT_EQ(false, result);
1197 }
1198 
1199 /**
1200  * @tc.name: ClinetTransProxyPutToRcvListTest001
1201  * @tc.desc: client trans proxy put to file list test, use normal parameter.
1202  * @tc.type: FUNC
1203  * @tc.require:
1204  */
1205 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyPutToRcvListTest001, TestSize.Level1)
1206 {
1207     int32_t ret = PutToRecvFileList(nullptr, nullptr);
1208     EXPECT_NE(SOFTBUS_OK, ret);
1209 
1210     FileRecipientInfo recipient = {
1211         .recvFileInfo.fileStatus = NODE_ERR,
1212     };
1213     const SingleFileInfo file = {0};
1214     ret = PutToRecvFileList(&recipient, &file);
1215     EXPECT_NE(SOFTBUS_OK, ret);
1216 
1217     recipient.recvFileInfo.fileStatus = NODE_IDLE;
1218     ret = PutToRecvFileList(&recipient, &file);
1219     EXPECT_NE(SOFTBUS_OK, ret);
1220 
1221     SingleFileInfo trueFile = {0};
1222     (void)memcpy_s(trueFile.filePath, MAX_FILE_PATH_NAME_LEN, g_recvFile, sizeof(g_recvFile));
1223     ret = PutToRecvFileList(&recipient, &trueFile);
1224     EXPECT_EQ(SOFTBUS_OK, ret);
1225 }
1226 
1227 /**
1228  * @tc.name: ClinetTransProxyRecvRecipientInfoListTest001
1229  * @tc.desc: client trans proxy recv recipient info test, use normal parameter.
1230  * @tc.type: FUNC
1231  * @tc.require:
1232  */
1233 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyRecvRecipientInfoListTest001, TestSize.Level1)
1234 {
1235     int32_t sessionId = 1;
1236     FileRecipientInfo *result = GetRecipientNoLock(sessionId);
1237     EXPECT_EQ(nullptr, result);
1238 
1239     uint32_t seq = 0;
1240     int32_t res = 0;
1241     int32_t ret = ProcessFileSendResult(sessionId, seq, res);
1242     EXPECT_EQ(SOFTBUS_NOT_FIND, ret);
1243 
1244     sessionId = -1;
1245     result = GetRecipientNoLock(sessionId);
1246     EXPECT_EQ(nullptr, result);
1247 
1248     ret = ProcessFileSendResult(sessionId, seq, res);
1249     EXPECT_NE(SOFTBUS_OK, ret);
1250 
1251     ret = ProcessFileRecvResult(sessionId, seq, res);
1252     EXPECT_NE(SOFTBUS_OK, ret);
1253 
1254     ReleaseRecipientRef(nullptr);
1255 
1256     FileRecipientInfo *info = (FileRecipientInfo *)SoftBusCalloc(sizeof(FileRecipientInfo));
1257     info->objRefCount = 2,
1258     ReleaseRecipientRef(info);
1259 
1260     info->objRefCount = 1;
1261     ReleaseRecipientRef(info);
1262 }
1263 
1264 /**
1265  * @tc.name: ClinetTransProxyGetRecipientInfoListTest001
1266  * @tc.desc: client trans proxy get recipient info test, use normal parameter.
1267  * @tc.type: FUNC
1268  * @tc.require:
1269  */
1270 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyGetRecipientInfoListTest001, TestSize.Level1)
1271 {
1272     int32_t sessionId = -1;
1273     int32_t channelId = 1;
1274     int32_t osType = TEST_OS_TYPE;
1275     FileRecipientInfo *result = GetRecipientInProcessRef(sessionId);
1276     EXPECT_EQ(nullptr, result);
1277 
1278     result = GetRecipientInCreateFileRef(sessionId, channelId, osType);
1279     EXPECT_EQ(nullptr, result);
1280 
1281     sessionId = 1;
1282     result = GetRecipientInCreateFileRef(sessionId, channelId, osType);
1283     EXPECT_EQ(nullptr, result);
1284 
1285     result = GetRecipientInProcessRef(sessionId);
1286     EXPECT_EQ(nullptr, result);
1287 }
1288 
1289 /**
1290  * @tc.name: ClinetTransProxyWriteEmptyFrameTest001
1291  * @tc.desc: client trans proxy write empty frame test, use normal parameter.
1292  * @tc.type: FUNC
1293  * @tc.require:
1294  */
1295 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyWriteEmptyFrameTest001, TestSize.Level1)
1296 {
1297     int32_t cnt = 0;
1298     int32_t ret = WriteEmptyFrame(nullptr, cnt);
1299     EXPECT_NE(SOFTBUS_OK, ret);
1300 
1301     SingleFileInfo info = {0};
1302     ret = WriteEmptyFrame(&info, cnt);
1303     EXPECT_EQ(SOFTBUS_OK, ret);
1304 
1305     cnt = 1;
1306     ret = WriteEmptyFrame(&info, cnt);
1307     EXPECT_NE(SOFTBUS_OK, ret);
1308 
1309     info.fileFd = g_fd;
1310     info.oneFrameLen = -1;
1311     info.fileOffset = 0;
1312     ret = WriteEmptyFrame(&info, cnt);
1313     EXPECT_NE(SOFTBUS_OK, ret);
1314 
1315     info.oneFrameLen = TEST_FILE_LENGTH;
1316     ret = WriteEmptyFrame(&info, cnt);
1317     EXPECT_EQ(SOFTBUS_OK, ret);
1318 }
1319 
1320 /**
1321  * @tc.name: ClinetTransProxyProcessOneFrameCRCTest001
1322  * @tc.desc: client trans proxy process one frameCRC test, use normal parameter.
1323  * @tc.type: FUNC
1324  * @tc.require:
1325  */
1326 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyProcessOneFrameCRCTest001, TestSize.Level1)
1327 {
1328     uint32_t dataLen = 0;
1329     int32_t ret = ProcessOneFrameCRC(nullptr, dataLen, nullptr);
1330     EXPECT_NE(SOFTBUS_OK, ret);
1331 
1332     uint8_t *emptyBuff = (uint8_t *)SoftBusCalloc(TEST_FILE_SIZE);
1333     if (emptyBuff == nullptr) {
1334         return;
1335     }
1336     FileFrame frame = {
1337         .frameType = TRANS_SESSION_FILE_FIRST_FRAME,
1338         .seq = TEST_SEQ32,
1339         .fileData = emptyBuff,
1340     };
1341     SingleFileInfo fileInfo = {
1342         .seq = 0,
1343         .fileFd = g_fd,
1344         .fileOffset = 0,
1345         .oneFrameLen = TEST_FILE_LENGTH,
1346         .startSeq = 0,
1347         .preStartSeq = 0,
1348     };
1349     ret = ProcessOneFrameCRC(&frame, dataLen, &fileInfo);
1350     EXPECT_NE(SOFTBUS_OK, ret);
1351 
1352     frame.seq = TEST_SEQ128;
1353     fileInfo.seq = TEST_SEQ126;
1354     ret = ProcessOneFrameCRC(&frame, dataLen, &fileInfo);
1355     EXPECT_NE(SOFTBUS_OK, ret);
1356 
1357     fileInfo.preStartSeq = TEST_SEQ128;
1358     ret = ProcessOneFrameCRC(&frame, dataLen, &fileInfo);
1359     EXPECT_NE(SOFTBUS_OK, ret);
1360 
1361     frame.frameType = TRANS_SESSION_FILE_LAST_FRAME;
1362     ret = ProcessOneFrameCRC(&frame, dataLen, &fileInfo);
1363     EXPECT_NE(SOFTBUS_OK, ret);
1364 
1365     fileInfo.startSeq = TEST_SEQ8;
1366     frame.seq = TEST_SEQ_SECOND;
1367     ret = ProcessOneFrameCRC(&frame, dataLen, &fileInfo);
1368     EXPECT_NE(SOFTBUS_OK, ret);
1369 
1370     dataLen = TEST_SEQ16;
1371     ret = ProcessOneFrameCRC(&frame, dataLen, &fileInfo);
1372     EXPECT_EQ(SOFTBUS_OK, ret);
1373     SoftBusFree(emptyBuff);
1374 }
1375 
1376 /**
1377  * @tc.name: ClinetTransProxyProcessOneFrameTest001
1378  * @tc.desc: client trans proxy process one frame test, use normal parameter.
1379  * @tc.type: FUNC
1380  * @tc.require:
1381  */
1382 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyProcessOneFrameTest001, TestSize.Level1)
1383 {
1384     FileFrame frame = {
1385         .frameType = TRANS_SESSION_FILE_FIRST_FRAME,
1386         .seq = TEST_SEQ32,
1387     };
1388     uint32_t dataLen = TEST_SEQ16;
1389     int32_t crc = APP_INFO_FILE_FEATURES_SUPPORT;
1390     int32_t osType = TEST_OS_TYPE;
1391     SingleFileInfo fileInfo = {
1392         .seq = 0,
1393         .fileFd = g_fd,
1394         .fileStatus = NODE_ERR,
1395         .fileOffset = 0,
1396         .oneFrameLen = TEST_FILE_LENGTH,
1397         .startSeq = 0,
1398         .preStartSeq = 0,
1399     };
1400     int32_t ret = ProcessOneFrame(&frame, dataLen, crc, &fileInfo, osType);
1401     EXPECT_NE(SOFTBUS_OK, ret);
1402 
1403     fileInfo.fileStatus = NODE_IDLE;
1404     ret = ProcessOneFrame(&frame, dataLen, crc, &fileInfo, osType);
1405     EXPECT_NE(SOFTBUS_OK, ret);
1406 
1407     crc = APP_INFO_FILE_FEATURES_NO_SUPPORT;
1408     ret = ProcessOneFrame(&frame, dataLen, crc, &fileInfo, osType);
1409     EXPECT_NE(SOFTBUS_OK, ret);
1410 }
1411 
1412 /**
1413  * @tc.name: ClinetTransProxyCrcCheckTest001
1414  * @tc.desc: client trans proxy process crc check test, use normal parameter.
1415  * @tc.type: FUNC
1416  * @tc.require:
1417  */
1418 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyCrcCheckTest001, TestSize.Level1)
1419 {
1420     FileFrame frame = {
1421         .seq = TEST_SEQ32,
1422         .crc = APP_INFO_FILE_FEATURES_SUPPORT,
1423     };
1424     int32_t sessionId = -1;
1425 
1426     int32_t ret = ProcessCrcCheckSumData(sessionId, nullptr);
1427     EXPECT_NE(SOFTBUS_OK, ret);
1428 
1429     ret = ProcessCrcCheckSumData(sessionId, &frame);
1430     EXPECT_NE(SOFTBUS_OK, ret);
1431 
1432     sessionId = 1;
1433     ret = ProcessCrcCheckSumData(sessionId, &frame);
1434     EXPECT_NE(SOFTBUS_OK, ret);
1435 
1436     frame.crc = APP_INFO_FILE_FEATURES_NO_SUPPORT;
1437     ret = ProcessCrcCheckSumData(sessionId, &frame);
1438     EXPECT_NE(SOFTBUS_OK, ret);
1439 }
1440 
1441 /**
1442  * @tc.name: ClinetTransProxyFileAckRequestTest001
1443  * @tc.desc: client trans proxy file ack request test, use normal parameter.
1444  * @tc.type: FUNC
1445  * @tc.require:
1446  */
1447 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyFileAckRequestTest001, TestSize.Level1)
1448 {
1449     FileFrame frame = {
1450         .frameLength = TEST_HEADER_LENGTH,
1451         .crc = APP_INFO_FILE_FEATURES_SUPPORT,
1452         .data = nullptr,
1453     };
1454     int32_t sessionId = -1;
1455 
1456     int32_t ret = ProcessFileAckRequest(sessionId, nullptr);
1457     EXPECT_NE(SOFTBUS_OK, ret);
1458 
1459     ret = ProcessFileAckRequest(sessionId, &frame);
1460     EXPECT_NE(SOFTBUS_OK, ret);
1461 
1462     sessionId = 1;
1463     uint32_t dataTest = 0;
1464     dataTest = FILE_MAGIC_NUMBER;
1465     frame.data = (uint8_t *)&dataTest;
1466     ret = ProcessFileAckRequest(sessionId, &frame);
1467     EXPECT_NE(SOFTBUS_OK, ret);
1468 
1469     ret = ProcessFileAckRequest(sessionId, &frame);
1470     EXPECT_NE(SOFTBUS_OK, ret);
1471 }
1472 
1473 /**
1474  * @tc.name: ClinetTransProxyFileAckResponseTest001
1475  * @tc.desc: client trans proxy file ack response test, use normal parameter.
1476  * @tc.type: FUNC
1477  * @tc.require:
1478  */
1479 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyFileAckResponseTest001, TestSize.Level1)
1480 {
1481     FileFrame frame = {
1482         .frameLength = 0,
1483         .crc = APP_INFO_FILE_FEATURES_SUPPORT,
1484         .data = nullptr,
1485     };
1486     int32_t sessionId = -1;
1487 
1488     int32_t ret = ProcessFileAckResponse(sessionId, nullptr);
1489     EXPECT_NE(SOFTBUS_OK, ret);
1490 
1491     ret = ProcessFileAckResponse(sessionId, &frame);
1492     EXPECT_NE(SOFTBUS_OK, ret);
1493 
1494     uint32_t dataTest[TEST_FRAME_DATA_LENGTH] = {0};
1495     dataTest[TEST_FILE_MAGIC_OFFSET] = FILE_MAGIC_NUMBER;
1496     frame.data = (uint8_t *)dataTest;
1497     ret = ProcessFileAckResponse(sessionId, &frame);
1498     EXPECT_NE(SOFTBUS_OK, ret);
1499 
1500     SendListenerInfo info;
1501     info.sessionId = 1;
1502     info.crc = 1;
1503     info.channelId = 1;
1504     ret = AddSendListenerInfo(&info);
1505     EXPECT_EQ(SOFTBUS_OK, ret);
1506 
1507     frame.frameLength = TEST_HEADER_LENGTH;
1508     *(uint64_t *)(frame.data + FRAME_MAGIC_OFFSET) = FRAME_DATA_SEQ_OFFSET + FRAME_DATA_SEQ_OFFSET;
1509     ret = ProcessFileAckResponse(sessionId, &frame);
1510     EXPECT_NE(SOFTBUS_OK, ret);
1511 
1512     sessionId = 1;
1513     ret = ProcessFileAckResponse(sessionId, &frame);
1514     EXPECT_EQ(SOFTBUS_OK, ret);
1515 }
1516 
1517 /**
1518  * @tc.name: ClinetTransProxyCheckParameterTest001
1519  * @tc.desc: client trans proxy check parameter test, use normal parameter.
1520  * @tc.type: FUNC
1521  * @tc.require:
1522  */
1523 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyCheckParameterTest001, TestSize.Level1)
1524 {
1525     bool result = IsValidFileString(nullptr, TEST_FILE_CNT, TEST_FILE_LENGTH);
1526     EXPECT_EQ(false, result);
1527 
1528     uint32_t fileNum = 0;
1529     result = IsValidFileString(g_testProxyFileList, fileNum, TEST_FILE_LENGTH);
1530     EXPECT_EQ(false, result);
1531 
1532     int32_t sessionId = 1;
1533     int32_t ret = ProcessFileTransResult(sessionId, nullptr);
1534     EXPECT_NE(SOFTBUS_OK, ret);
1535 }
1536 
1537 /**
1538  * @tc.name: ClinetTransProxyProcessFileListDataTest001
1539  * @tc.desc: client trans proxy process file list data test, use normal parameter.
1540  * @tc.type: FUNC
1541  * @tc.require:
1542  */
1543 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyProcessFileListDataTest001, TestSize.Level1)
1544 {
1545     int32_t sessionId = 1;
1546     FileFrame frame = {
1547         .frameLength = TEST_FILE_SIZE,
1548         .data = (uint8_t *)"00010010datatest,"
1549     };
1550     int32_t ret = ProcessFileListData(sessionId, &frame);
1551     EXPECT_NE(SOFTBUS_OK, ret);
1552 }
1553 
1554 /**
1555  * @tc.name: ClinetTransProxyGetFileInfoTest001
1556  * @tc.desc: client trans proxy get file info test, use normal parameter.
1557  * @tc.type: FUNC
1558  * @tc.require:
1559  */
1560 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyGetFileInfoTest001, TestSize.Level1)
1561 {
1562     FileFrame frame = {
1563         .frameLength = 0,
1564         .data = (uint8_t *)"00010010datatest.txt",
1565     };
1566     FileRecipientInfo info = {
1567         .fileListener.rootDir = "../test",
1568     };
1569     info.crc = APP_INFO_FILE_FEATURES_SUPPORT;
1570     SingleFileInfo file;
1571     uint32_t packetSize = TEST_PACKET_SIZE;
1572     int32_t ret = GetFileInfoByStartFrame(nullptr, nullptr, nullptr, packetSize);
1573     EXPECT_NE(SOFTBUS_OK, ret);
1574 
1575     ret = GetFileInfoByStartFrame(&frame, &info, &file, packetSize);
1576     EXPECT_NE(SOFTBUS_OK, ret);
1577 
1578     ret = memcpy_s(info.fileListener.rootDir, TEST_FILEPATH_LENGTH, g_rootDir + 1, TEST_FILEPATH_LENGTH);
1579     ASSERT_EQ(SOFTBUS_OK, ret);
1580     ret = GetFileInfoByStartFrame(&frame, &info, &file, packetSize);
1581     EXPECT_NE(SOFTBUS_OK, ret);
1582 
1583     frame.frameLength = FRAME_DATA_SEQ_OFFSET + 9;
1584     info.crc = APP_INFO_FILE_FEATURES_NO_SUPPORT;
1585     ret = GetFileInfoByStartFrame(&frame, &info, &file, packetSize);
1586     EXPECT_EQ(SOFTBUS_OK, ret);
1587 }
1588 
1589 /**
1590  * @tc.name: ClinetTransProxyWriteFrameTest001
1591  * @tc.desc: client trans proxy write frame to file test, use normal parameter.
1592  * @tc.type: FUNC
1593  * @tc.require:
1594  */
1595 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyWriteFrameTest001, TestSize.Level1)
1596 {
1597     int32_t sessionId = 1;
1598     FileFrame frame = {
1599         .frameLength = 0,
1600         .data = (uint8_t *)"00010010datatest.txt",
1601     };
1602     int32_t ret = WriteFrameToFile(sessionId, &frame);
1603     EXPECT_NE(SOFTBUS_OK, ret);
1604 
1605     frame.frameLength = TEST_DATA_LENGTH;
1606     ret = WriteFrameToFile(sessionId, &frame);
1607     EXPECT_NE(SOFTBUS_OK, ret);
1608 }
1609 
1610 /**
1611  * @tc.name: ClinetTransProxyChannelSendFileStreamTest001
1612  * @tc.desc: client trans proxy write frame to file test, use normal parameter.
1613  * @tc.type: FUNC
1614  * @tc.require:
1615  */
1616 HWTEST_F(ClientTransProxyFileManagerTest, ProxyChannelSendFileStreamTest001, TestSize.Level1)
1617 {
1618     int32_t channelId = 1;
1619     const char *data = "test_data";
1620     uint32_t len = TEST_HEADER_LENGTH;
1621     int32_t type = 1;
1622 
1623     int32_t ret = ProxyChannelSendFileStream(channelId, data, len, type);
1624     EXPECT_EQ(SOFTBUS_TRANS_PROXY_CHANNEL_NOT_FOUND, ret);
1625 }
1626 
1627 /**
1628  * @tc.name: ClinetTransProxySendFileTransResult001
1629  * @tc.desc: client trans proxy write frame to file test, use normal parameter.
1630  * @tc.type: FUNC
1631  * @tc.require:
1632  */
1633 HWTEST_F(ClientTransProxyFileManagerTest, ProxySendFileTransResultTest001, TestSize.Level1)
1634 {
1635     int32_t channelId = 1;
1636     uint32_t seq = TEST_SEQ;
1637     int32_t result = 0;
1638     uint32_t side = 0;
1639 
1640     int32_t ret = SendFileTransResult(channelId, seq, result, side);
1641     EXPECT_NE(SOFTBUS_MALLOC_ERR, ret);
1642 }
1643 
1644 /**
1645  * @tc.name: ClinetUnpackFileTransResultFrame001
1646  * @tc.desc: client trans proxy write frame to file test, use normal parameter.
1647  * @tc.type: FUNC
1648  * @tc.require:
1649  */
1650 HWTEST_F(ClientTransProxyFileManagerTest, ProxyUnpackFileTransResultFrame001, TestSize.Level1)
1651 {
1652     uint32_t seq = TEST_SEQ;
1653     int32_t result = 0;
1654     uint32_t side = 0;
1655     uint32_t data = 0;
1656     const uint8_t *data1 = (const uint8_t *)&data;
1657     uint32_t len = TEST_HEADER_LENGTH;
1658 
1659     int32_t ret = UnpackFileTransResultFrame(data1, len, nullptr, &result, &side);
1660     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1661 
1662     ret = UnpackFileTransResultFrame(data1, len, &seq, nullptr, &side);
1663     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1664 
1665     ret = UnpackFileTransResultFrame(data1, len, &seq, &result, nullptr);
1666     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1667 
1668     ret = UnpackFileTransResultFrame(nullptr, len, &seq, &result, &side);
1669     EXPECT_EQ(SOFTBUS_TRANS_INVALID_DATA_LENGTH, ret);
1670 
1671     ret = UnpackFileTransResultFrame(data1, len, &seq, &result, &side);
1672     EXPECT_NE(SOFTBUS_OK, ret);
1673 
1674     len = 0;
1675     ret = UnpackFileTransResultFrame(data1, len, &seq, &result, &side);
1676     EXPECT_EQ(SOFTBUS_TRANS_INVALID_DATA_LENGTH, ret);
1677 }
1678 
1679 /**
1680  * @tc.name: ClinetTransProxyFileAckReqAndResDataTest002
1681  * @tc.desc: client trans proxy file ack req and res data test, use the wrong or normal parameter.
1682  * @tc.type: FUNC
1683  * @tc.require:
1684  */
1685 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyFileAckReqAndResDataTest002, TestSize.Level1)
1686 {
1687     int32_t channelId = 1;
1688     uint32_t startSeq = TEST_SEQ;
1689     uint32_t value = 0;
1690     int32_t ret = SendFileAckReqAndResData(channelId, startSeq, value, CHANNEL_TYPE_PROXY);
1691     EXPECT_EQ(SOFTBUS_TRANS_PROXY_CHANNEL_NOT_FOUND, ret);
1692 
1693     FileFrame frame;
1694     frame.frameLength = 0;
1695     frame.data = nullptr;
1696     uint64_t dataTest = 0;
1697     ret = UnpackAckReqAndResData(nullptr, &startSeq, &value);
1698     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1699 
1700     ret = UnpackAckReqAndResData(&frame, &startSeq, &value);
1701     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1702 
1703     ret = UnpackAckReqAndResData(&frame, nullptr, &value);
1704     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1705 
1706     ret = UnpackAckReqAndResData(&frame, &startSeq, nullptr);
1707     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1708 
1709     frame.data = (uint8_t *)&dataTest;
1710     ret = UnpackAckReqAndResData(&frame, &startSeq, &value);
1711     EXPECT_EQ(SOFTBUS_TRANS_INVALID_DATA_LENGTH, ret);
1712 
1713     frame.frameLength = TEST_HEADER_LENGTH;
1714     ret = UnpackAckReqAndResData(&frame, &startSeq, &value);
1715     EXPECT_EQ(SOFTBUS_INVALID_DATA_HEAD, ret);
1716 
1717     dataTest = TEST_HEADER_LENGTH;
1718     frame.data = (uint8_t *)&dataTest;
1719     ret = UnpackAckReqAndResData(&frame, &startSeq, &value);
1720     EXPECT_EQ(SOFTBUS_INVALID_DATA_HEAD, ret);
1721 
1722     dataTest = FILE_MAGIC_NUMBER;
1723     frame.data = (uint8_t *)&dataTest;
1724     ret = UnpackAckReqAndResData(&frame, &startSeq, &value);
1725     EXPECT_EQ(SOFTBUS_OK, ret);
1726 
1727     ret = UnpackAckReqAndResData(&frame, &startSeq, &value);
1728     EXPECT_EQ(SOFTBUS_OK, ret);
1729 }
1730 
1731 /**
1732  * @tc.name: ClinetTransProxyPackFileDataTest002
1733  * @tc.desc: client trans proxy pack file data test, use the wrong parameter.
1734  * @tc.type: FUNC
1735  * @tc.require:
1736  */
1737 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyPackFileDataTest002, TestSize.Level1)
1738 {
1739     FileFrame fileFrame = {
1740         .frameType = TRANS_SESSION_BYTES,
1741         .data = nullptr,
1742     };
1743     uint64_t readLength = TEST_FILE_LENGTH;
1744     uint64_t fileOffset = 0;
1745     SendListenerInfo info;
1746     info.fd = g_fd;
1747     info.packetSize = PROXY_BLE_MAX_PACKET_SIZE;
1748     uint32_t seq = TEST_SEQ;
1749     int64_t len = PackReadFileData(&fileFrame, readLength, fileOffset, &info);
1750     EXPECT_EQ(TEST_INVALID_LEN, len);
1751 
1752     info.crc = APP_INFO_FILE_FEATURES_SUPPORT;
1753     len = PackReadFileData(&fileFrame, readLength, fileOffset, &info);
1754     EXPECT_EQ(TEST_INVALID_LEN, len);
1755 
1756     len = PackReadFileRetransData(&fileFrame, seq, readLength, fileOffset, &info);
1757     EXPECT_EQ(TEST_INVALID_LEN, len);
1758 
1759     uint32_t dataTest = TEST_DATA_LENGTH;
1760     fileFrame.data = (uint8_t *)&dataTest;
1761     fileFrame.fileData = (uint8_t *)&dataTest;
1762     info.crc = APP_INFO_FILE_FEATURES_NO_SUPPORT;
1763     len = PackReadFileData(&fileFrame, readLength, fileOffset, &info);
1764     EXPECT_EQ(TEST_FILE_LENGTH, len);
1765 
1766     info.crc = APP_INFO_FILE_FEATURES_SUPPORT;
1767     len = PackReadFileData(&fileFrame, readLength, fileOffset, &info);
1768     EXPECT_EQ(TEST_FILE_LENGTH, len);
1769 
1770     len = PackReadFileRetransData(&fileFrame, seq, readLength, fileOffset, &info);
1771     EXPECT_EQ(SOFTBUS_TRANS_PROXY_CHANNEL_NOT_FOUND, len);
1772 }
1773 
1774 /**
1775  * @tc.name: ClinetTransProxyRetransFileFrameTest002
1776  * @tc.desc: client trans proxy retrans file frame test, use normal parameter.
1777  * @tc.type: FUNC
1778  * @tc.require:
1779  */
1780 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyRetransFileFrameTest002, TestSize.Level1)
1781 {
1782     SendListenerInfo info = {
1783         .fileSize = TEST_FILE_SIZE,
1784         .crc = APP_INFO_FILE_FEATURES_NO_SUPPORT,
1785     };
1786     int32_t seq = 0;
1787 
1788     int32_t ret = RetransFileFrameBySeq(nullptr, TEST_SEQ);
1789     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1790 
1791     ret = RetransFileFrameBySeq(&info, seq);
1792     EXPECT_EQ(SOFTBUS_OK, ret);
1793 
1794     ret = RetransFileFrameBySeq(&info, TEST_SEQ);
1795     EXPECT_EQ(SOFTBUS_OK, ret);
1796 
1797     info.crc = APP_INFO_FILE_FEATURES_SUPPORT;
1798     seq = TEST_SEQ_SECOND;
1799 
1800     ret = RetransFileFrameBySeq(&info, TEST_SEQ);
1801     EXPECT_NE(SOFTBUS_MALLOC_ERR, ret);
1802 
1803     ret = RetransFileFrameBySeq(&info, TEST_SEQ);
1804     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1805 
1806     ret = RetransFileFrameBySeq(&info, TEST_SEQ);
1807     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1808 
1809     info.fileSize = 0;
1810     ret = RetransFileFrameBySeq(&info, seq);
1811     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1812 }
1813 
1814 /**
1815  * @tc.name: ClinetTransProxyCalcAllFilesInfoTest001
1816  * @tc.desc: client trans proxy calc all files info test, use normal parameter.
1817  * @tc.type: FUNC
1818  * @tc.require:
1819  */
1820 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyGetFileSizeTest001, TestSize.Level1)
1821 {
1822     const char *fileList[] = {
1823         "test0",
1824         "test1",
1825         "test2",
1826         "test3",
1827         "test4"
1828     };
1829     FilesInfo totalInfo = {
1830         .files = fileList,
1831         .fileCnt = TEST_FILE_CNT,
1832         .bytesProcessed = 0,
1833     };
1834     uint32_t fileCnt = TEST_FILE_CNT;
1835 
1836     SendListenerInfo info = {
1837         .fileSize = TEST_FILE_SIZE,
1838         .crc = APP_INFO_FILE_FEATURES_NO_SUPPORT,
1839     };
1840     ClearSendInfo(&info);
1841 
1842     int32_t ret = CalcAllFilesInfo(&totalInfo, fileList, fileCnt);
1843     EXPECT_EQ(SOFTBUS_FILE_ERR, ret);
1844 }
1845 
1846 /**
1847  * @tc.name: ClinetTransProxyUpdateFileReceivePathTest001
1848  * @tc.desc: client trans proxy update file receive path test, use normal and error parameter.
1849  * @tc.type: FUNC
1850  * @tc.require:
1851  */
1852 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyUpdateFileReceivePathTest001, TestSize.Level1)
1853 {
1854     int32_t sessionId = TEST_SESSION_ID;
1855     FileListener *fileListener = (FileListener *)SoftBusCalloc(sizeof(FileListener));
1856 
1857     fileListener->socketRecvCallback = nullptr;
1858     int32_t ret = UpdateFileReceivePath(sessionId, fileListener);
1859     EXPECT_EQ(SOFTBUS_OK, ret);
1860 
1861     ret = UpdateFileReceivePath(sessionId, fileListener);
1862     EXPECT_EQ(SOFTBUS_OK, ret);
1863     SoftBusFree(fileListener);
1864 
1865     GetRecipientInfo(sessionId);
1866 }
1867 
1868 /**
1869  * @tc.name: ClinetTransProxyCreateFileFromFrameTest001
1870  * @tc.desc: client trans proxy create file from frame test, use normal and error parameter.
1871  * @tc.type: FUNC
1872  * @tc.require:
1873  */
1874 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyCreateFileFromFrameTest001, TestSize.Level1)
1875 {
1876     int32_t sessionId = TEST_SESSION_ID;
1877     int32_t channelId = TEST_CHANNEL_ID;
1878     int32_t osType = TEST_OS_TYPE;
1879     uint8_t data = 0;
1880     uint32_t packetSize = TEST_PACKET_SIZE;
1881     FileFrame fileFrame = {
1882         .frameType = TRANS_SESSION_BYTES,
1883         .data = &data,
1884         .fileData = &data,
1885     };
1886 
1887     int32_t ret = CreateFileFromFrame(sessionId, channelId, &fileFrame, osType, packetSize);
1888     EXPECT_EQ(SOFTBUS_NO_INIT, ret);
1889 
1890     const char *dataFile = "TEST_FILE_DATA";
1891     uint32_t len = TEST_HEADER_LENGTH;
1892     int32_t type = 0;
1893     ProcessFileFrameData(sessionId, channelId, dataFile, len, type);
1894 }
1895 
1896 /**
1897  * @tc.name: ClinetTransProxyChannelSendFileTest001
1898  * @tc.desc: client trans proxy channel send file test, use normal and error parameter.
1899  * @tc.type: FUNC
1900  * @tc.require:
1901  */
1902 HWTEST_F(ClientTransProxyFileManagerTest, ClinetTransProxyChannelSendFileTest001, TestSize.Level1)
1903 {
1904     int32_t channelId = TEST_CHANNEL_ID;
1905     const char *sFileList[] = {
1906         "test0",
1907         "test1",
1908         "test2",
1909         "test3",
1910         "test4"
1911     };
1912     const char *dFileList[] = {
1913         "test0",
1914         "test1",
1915         "test2",
1916         "test3",
1917         "test4"
1918     };
1919     uint32_t fileCnt = TEST_FILE_CNT;
1920 
1921     GenerateRemoteFiles(sFileList, fileCnt);
1922 
1923     int32_t ret = TransProxyChannelSendFile(channelId, nullptr, dFileList, fileCnt);
1924     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1925 
1926     fileCnt = 0;
1927     ret = TransProxyChannelSendFile(channelId, sFileList, dFileList, fileCnt);
1928     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1929 
1930     fileCnt = 12; // 为满足if条件语句大于10,所以赋值12
1931     ret = TransProxyChannelSendFile(channelId, sFileList, dFileList, fileCnt);
1932     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1933 }
1934 
1935 /**
1936  * @tc.name: CheckFrameLengthTest
1937  * @tc.desc: client trans proxy channel send file test, use normal and error parameter.
1938  * @tc.type: FUNC
1939  * @tc.require:
1940  */
1941 HWTEST_F(ClientTransProxyFileManagerTest, CheckFrameLengthTest, TestSize.Level1)
1942 {
1943     int32_t osType = TEST_OS_TYPE;
1944     uint32_t packetSize;
1945     int32_t ret = CheckFrameLength(1, PROXY_BR_MAX_PACKET_SIZE, osType, &packetSize);
1946     EXPECT_EQ(SOFTBUS_NOT_FIND, ret);
1947 
1948     ChannelInfo *channel1 = (ChannelInfo *)SoftBusMalloc(sizeof(ChannelInfo));
1949     ASSERT_TRUE(channel1 != nullptr);
1950     channel1->channelId = 1;
1951     channel1->isEncrypt = 0;
1952     channel1->linkType = LANE_BR;
1953     channel1->sessionKey = (char *)g_sessionKey;
1954     channel1->keyLen = TEST_SEQ32;
1955     ret = ClientTransProxyAddChannelInfo(ClientTransProxyCreateChannelInfo(channel1));
1956     EXPECT_EQ(SOFTBUS_OK, ret);
1957     ret = CheckFrameLength(1, PROXY_BR_MAX_PACKET_SIZE + 1, osType, &packetSize);
1958     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1959     ret = CheckFrameLength(1, PROXY_BR_MAX_PACKET_SIZE - 1, osType, &packetSize);
1960     EXPECT_EQ(SOFTBUS_OK, ret);
1961 
1962     ChannelInfo *channel2 = (ChannelInfo *)SoftBusMalloc(sizeof(ChannelInfo));
1963     ASSERT_TRUE(channel2 != nullptr);
1964     channel2->channelId = 2;
1965     channel2->isEncrypt = 0;
1966     channel2->linkType = LANE_BLE_DIRECT;
1967     channel2->sessionKey = (char *)g_sessionKey;
1968     channel2->keyLen = TEST_SEQ32;
1969     ret = ClientTransProxyAddChannelInfo(ClientTransProxyCreateChannelInfo(channel2));
1970     EXPECT_EQ(SOFTBUS_OK, ret);
1971     ret = CheckFrameLength(2, PROXY_BLE_MAX_PACKET_SIZE + 1, osType, &packetSize);
1972     EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
1973     ret = CheckFrameLength(2, PROXY_BLE_MAX_PACKET_SIZE - 1, osType, &packetSize);
1974     EXPECT_EQ(SOFTBUS_OK, ret);
1975 
1976     ret = ClientTransProxyDelChannelInfo(1);
1977     EXPECT_EQ(SOFTBUS_OK, ret);
1978     ret = ClientTransProxyDelChannelInfo(2);
1979     EXPECT_EQ(SOFTBUS_OK, ret);
1980     SoftBusFree(channel1);
1981     SoftBusFree(channel2);
1982 }
1983 } // namespace OHOS