• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 "usbfn_mtp_test.h"
17 
18 #include <cinttypes>
19 #include <cstdio>
20 #include <iostream>
21 #include <sstream>
22 #include <vector>
23 #include <fcntl.h>
24 
25 #include "directory_ex.h"
26 #include "file_ex.h"
27 #include "hdf_log.h"
28 #include "securec.h"
29 #include "v1_0/iusb_interface.h"
30 #include "v1_0/iusbfn_mtp_interface.h"
31 #include "v1_0/usb_types.h"
32 #include "v1_0/usbfn_mtp_types.h"
33 
34 #define HDF_LOG_TAG usbfn_mtp_ut
35 
36 using namespace testing::ext;
37 using namespace OHOS;
38 using namespace OHOS::HDI::Usb::V1_0;
39 using namespace std;
40 using namespace OHOS::HDI::Usb::Gadget::Mtp::V1_0;
41 
42 namespace {
43 constexpr int32_t SLEEP_TIME = 3;
44 constexpr int32_t MTP_EVENT_PACKET_MAX_BYTES = 28;
45 constexpr int32_t MTP_EVENT_PACKET_VALID_LEN = 20;
46 constexpr int32_t MTP_EVENT_PACKET_INVALID_LEN = 29;
47 constexpr uint16_t CMD_CODE_GET_DEVICE_INFO = 0x1001;
48 constexpr uint32_t TRANSACTION_ID_RANDOM = 0xF00D;
49 /* mtp packet head defined as [struct UsbMtpDataHeader] in usbfn_mtp_impl.h  */
50 constexpr uint32_t MTP_PACKET_HEADER_SIZE = 12;
51 constexpr uint32_t BULK_OUT_ONCE_MAX_SIZE = 1024;
52 constexpr uint32_t BULK_OUT_LESS_THEN_ONCE = 23;
53 constexpr uint32_t BULK_OUT_MORE_THEN_ONCE = 1025;
54 constexpr uint32_t BULK_IN_ONCE_MAX_SIZE = 1024;
55 constexpr uint32_t BULK_IN_LESS_THEN_ONCE = 45;
56 constexpr uint32_t BULK_IN_MORE_THEN_ONCE = 2023;
57 constexpr uint32_t MTP_FILE_SIZE_ONE_REQ = 1024;
58 constexpr uint32_t MTP_FILE_SIZE_REUSE_REQ = 12 * 1024;
59 /* 0xFFFFFFFFLL is 4 * 1024 * 1024 * 1024 - 1 = 4GB - 1 */
60 constexpr int64_t MTP_MAX_FILE_SIZE = 0xFFFFFFFFLL;
61 constexpr int64_t GEN_FILE_BUF_SIZE = 1024;
62 constexpr int64_t GEN_FILE_LIMIT_512MB = 512 * 1024 * 1024;
63 constexpr int32_t PRINT_VECTOR_MAX_LENGTH = 30;
64 constexpr const char *WORKED_UT_PATH = "/data/local/tmp/";
65 constexpr const char *MTP_TEST_SEND_FILE = "/data/local/tmp/sampleFile.mtp";
66 constexpr const char *MTP_TEST_RECV_FILE = "/data/local/tmp/sampleFile.mtp";
67 
68 sptr<IUsbfnMtpInterface> g_usbfnMtpInterface = nullptr;
69 sptr<IUsbInterface> g_usbInterface = nullptr;
70 int32_t g_currentFunc = USB_FUNCTION_NONE;
71 int32_t g_fileTestCount = 0;
72 
73 struct UsbFnMtpFileSlice g_mfs = {
74     .offset = 0,
75     .length = 0,
76     .command = 0,
77     .transactionId = 0,
78 };
79 
PrintVector(const std::string & msg,std::vector<uint8_t> & data,bool hexFormat)80 void PrintVector(const std::string &msg, std::vector<uint8_t> &data, bool hexFormat)
81 {
82     size_t printLen = data.size();
83     bool ignore = false;
84     if (printLen > static_cast<size_t>(PRINT_VECTOR_MAX_LENGTH)) {
85         printLen = static_cast<size_t>(PRINT_VECTOR_MAX_LENGTH);
86         ignore = true;
87     }
88     std::stringstream ss;
89     for (size_t i = 0; i < printLen; i++) {
90         if (hexFormat) {
91             ss << std::hex << "0x" << (0xFF & data.at(i)) << " ";
92         } else {
93             ss << data.at(i);
94         }
95     }
96     std::string output = msg + std::string("(") + std::to_string(printLen) + std::string("):") + ss.str();
97     if (ignore) {
98         output += "......";
99     }
100     HDF_LOGV("UsbfnMtpTest::PrintVector %{public}s", output.c_str());
101 }
102 
GetFileSize(const std::string & pathName)103 uint64_t GetFileSize(const std::string &pathName)
104 {
105     struct stat statbuf;
106     uint64_t ret = stat(pathName.c_str(), &statbuf);
107     if (ret != 0) {
108         return 0;
109     }
110     return static_cast<uint64_t>(statbuf.st_size);
111 }
112 
WriteRandomDataToFile(const std::string & pathName,uint64_t fileSize)113 bool WriteRandomDataToFile(const std::string &pathName, uint64_t fileSize)
114 {
115     int32_t random = open("/dev/urandom", O_RDONLY);
116     if (random < 0) {
117         HDF_LOGE("UsbfnMtpTest::WriteRandomDataToFile get random data failed");
118         return false;
119     }
120     FILE *opFile = std::fopen(pathName.c_str(), "w");
121     if (opFile == nullptr) {
122         HDF_LOGE("UsbfnMtpTest::WriteRandomDataToFile create file failed: %{public}s", pathName.c_str());
123         return false;
124     }
125     char buffer[GEN_FILE_BUF_SIZE];
126     int64_t count = static_cast<int64_t>(fileSize);
127     while (count > 0) {
128         (void)memset_s(buffer, sizeof(buffer), 0, sizeof(buffer));
129         int64_t readSize = count > GEN_FILE_BUF_SIZE ? GEN_FILE_BUF_SIZE : count;
130         ssize_t readActual = read(random, static_cast<void *>(buffer), static_cast<size_t>(readSize));
131         if (readActual != static_cast<ssize_t>(readSize)) {
132             HDF_LOGW("UsbfnMtpTest::WriteRandomDataToFile read random failed");
133             break;
134         }
135         size_t writeActual = std::fwrite(static_cast<void *>(buffer), 1, static_cast<size_t>(readSize), opFile);
136         if (writeActual != static_cast<size_t>(readSize)) {
137             HDF_LOGW("UsbfnMtpTest::WriteRandomDataToFile write failed");
138             break;
139         }
140         count -= readSize;
141     }
142     std::fflush(opFile);
143     std::fclose(opFile);
144     close(random);
145     HDF_LOGV("UsbfnMtpTest::WriteRandomDataToFile file %{public}s: %{public}" PRIu64 "/%{public}" PRIu64 "",
146         pathName.c_str(), GetFileSize(pathName), fileSize);
147     return count > 0 ? false : true;
148 }
149 
GenerateFile(const std::string & pathName,int64_t fileSize)150 bool GenerateFile(const std::string &pathName, int64_t fileSize)
151 {
152     if (GetFileSize(pathName) == static_cast<uint64_t>(fileSize)) {
153         HDF_LOGW("UsbfnMtpTest::GenerateFile file already exist");
154         return true;
155     }
156     if (fileSize > GEN_FILE_LIMIT_512MB) {
157         int32_t ret = truncate(pathName.c_str(), static_cast<off_t>(fileSize));
158         if (ret != 0) {
159             HDF_LOGE("UsbfnMtpTest::GenerateFile fail to truncate file to size: %{public}" PRId64 "", fileSize);
160             return false;
161         }
162         HDF_LOGV("UsbfnMtpTest::GenerateFile truncate %{public}s %{public}" PRId64 "", pathName.c_str(), fileSize);
163         return true;
164     }
165     return WriteRandomDataToFile(pathName, static_cast<uint64_t>(fileSize));
166 }
167 
SwitchErrCode(int32_t ret)168 int32_t SwitchErrCode(int32_t ret)
169 {
170     return ret == HDF_ERR_NOT_SUPPORT ? HDF_SUCCESS : ret;
171 }
172 
SetUpTestCase(void)173 void UsbfnMtpTest::SetUpTestCase(void)
174 {
175     // Selinux config this UT only works in directory WORKED_UT_PATH for open/read/write file for case send/recvfile.
176     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
177     std::cout << "===>please connect to PC use USB 3.0 interface, press enter to continue set function to mtp"
178               << std::endl;
179     int32_t c;
180     while ((c = getchar()) != '\n' && c != EOF) {}
181 
182     g_usbInterface = IUsbInterface::Get();
183     ASSERT_TRUE(g_usbInterface != nullptr);
184     auto ret = g_usbInterface->SetPortRole(DEFAULT_PORT_ID, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
185     sleep(SLEEP_TIME);
186     ret = SwitchErrCode(ret);
187     ASSERT_EQ(0, ret);
188     ret = g_usbInterface->GetCurrentFunctions(g_currentFunc);
189     ASSERT_EQ(0, ret);
190     std::cout << "===>current function=" << g_currentFunc << ", set function to mtp, please wait" << std::endl;
191     ret = g_usbInterface->SetCurrentFunctions(USB_FUNCTION_MTP);
192     ASSERT_EQ(0, ret);
193 
194     g_usbfnMtpInterface = IUsbfnMtpInterface::Get();
195     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
196     ret = g_usbfnMtpInterface->Start();
197     ASSERT_EQ(0, ret);
198 }
199 
TearDownTestCase(void)200 void UsbfnMtpTest::TearDownTestCase(void)
201 {
202     HDF_LOGV("UsbfnMtpTest::TearDownTestCase");
203     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
204     auto ret = g_usbfnMtpInterface->Stop();
205     ASSERT_EQ(0, ret);
206     ASSERT_TRUE(g_usbInterface != nullptr);
207     ret = g_usbInterface->SetCurrentFunctions(g_currentFunc);
208     ASSERT_EQ(0, ret);
209     if (g_fileTestCount == 0) {
210         return;
211     }
212     /* 1 means single test, run with '--gtest_filter=' option */
213     if (g_fileTestCount == 1) {
214         std::cout << "===>please delete temporary test file if needed: sendfile=" << MTP_TEST_SEND_FILE
215                   << " recvfile=" << MTP_TEST_RECV_FILE << std::endl;
216         return;
217     }
218     if (FileExists(std::string(MTP_TEST_SEND_FILE))) {
219         if (remove(MTP_TEST_SEND_FILE) != 0) {
220             std::cout << "[-] remove send file failed: " << MTP_TEST_SEND_FILE << std::endl;
221         }
222     }
223     if (FileExists(std::string(MTP_TEST_RECV_FILE))) {
224         if (remove(MTP_TEST_RECV_FILE) != 0) {
225             std::cout << "[-] remove recv file failed: " << MTP_TEST_RECV_FILE << std::endl;
226         }
227     }
228 }
229 
SetUp(void)230 void UsbfnMtpTest::SetUp(void) {}
231 
TearDown(void)232 void UsbfnMtpTest::TearDown(void) {}
233 
234 /**
235  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_0100
236  * @tc.desc: Test functions to Read
237  * @tc.desc: int32_t Read(std::vector<uint8_t>& data);
238  * @tc.desc: Positive test: parameters correctly, read length less then one packet size
239  * @tc.type: FUNC
240  */
241 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_0100, Function | MediumTest | Level1)
242 {
243     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
244     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_0100 Case Start");
245     std::vector<uint8_t> devData;
246 
247     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_0100===>use libusb in PC launch bulk-out transfer(size="
248               << BULK_OUT_LESS_THEN_ONCE << "), press enter to continue" << std::endl;
249     int32_t c;
250     while ((c = getchar()) != '\n' && c != EOF) {}
251 
252     int32_t ret = g_usbfnMtpInterface->Read(devData);
253     ASSERT_EQ(ret, 0);
254     ASSERT_EQ(devData.size(), static_cast<size_t>(BULK_OUT_LESS_THEN_ONCE));
255 }
256 
257 /**
258  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_0200
259  * @tc.desc: Test functions to Read
260  * @tc.desc: int32_t Read(std::vector<uint8_t>& data);
261  * @tc.desc: Positive test: parameters correctly, read length exactly one packet size
262  * @tc.type: FUNC
263  */
264 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_0200, Function | MediumTest | Level1)
265 {
266     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
267     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_0200 Case Start");
268     std::vector<uint8_t> devData;
269 
270     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_0200===>use libusb in PC launch bulk-out transfer(size="
271               << BULK_OUT_ONCE_MAX_SIZE << "), press enter to continue" << std::endl;
272     int32_t c;
273     while ((c = getchar()) != '\n' && c != EOF) {}
274 
275     int32_t ret = g_usbfnMtpInterface->Read(devData);
276     ASSERT_EQ(ret, 0);
277     ASSERT_EQ(devData.size(), static_cast<size_t>(BULK_OUT_ONCE_MAX_SIZE));
278 }
279 
280 /**
281  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_0300
282  * @tc.desc: Test functions to Read
283  * @tc.desc: int32_t Read(std::vector<uint8_t>& data);
284  * @tc.desc: Positive test: parameters correctly, read length more then one packet size, please read again
285  * @tc.type: FUNC
286  */
287 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_0300, Function | MediumTest | Level1)
288 {
289     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
290     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_0300 Case Start");
291     std::vector<uint8_t> devData;
292 
293     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_0300===>use libusb in PC launch bulk-out transfer(size="
294               << BULK_OUT_MORE_THEN_ONCE << "), press enter to continue" << std::endl;
295     int32_t c;
296     while ((c = getchar()) != '\n' && c != EOF) {}
297 
298     int32_t ret = g_usbfnMtpInterface->Read(devData);
299     ASSERT_EQ(ret, 0);
300     ASSERT_EQ(devData.size(), static_cast<size_t>(BULK_OUT_ONCE_MAX_SIZE));
301     devData.clear();
302     ret = g_usbfnMtpInterface->Read(devData);
303     ASSERT_EQ(ret, 0);
304     ASSERT_EQ(devData.size(), static_cast<size_t>(BULK_OUT_MORE_THEN_ONCE - BULK_OUT_ONCE_MAX_SIZE));
305 }
306 
307 /**
308  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_0400
309  * @tc.desc: Test functions to Read
310  * @tc.desc: int32_t Read(std::vector<uint8_t>& data)
311  * @tc.desc: Positive test: parameters correctly, no specific read size
312  * @tc.type: FUNC
313  */
314 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_0400, Function | MediumTest | Level1)
315 {
316     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
317     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_0400 Case Start");
318     std::vector<uint8_t> devData;
319 
320     std::cout
321         << "SUB_USB_DeviceManager_HDI_MTPPTP_0400===>use libusb in PC launch bulk-out transfer(size in [0, 1024]), "
322         << "press enter to continue" << std::endl;
323     int32_t c;
324     while ((c = getchar()) != '\n' && c != EOF) {}
325 
326     auto ret = g_usbfnMtpInterface->Read(devData);
327     ASSERT_EQ(ret, 0);
328     ASSERT_GE(devData.size(), 0);
329 }
330 
331 /**
332  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_0500
333  * @tc.desc: Test functions to Read
334  * @tc.desc: int32_t Read(std::vector<uint8_t>& data)
335  * @tc.desc: Positive test: parameters correctly, check read content
336  * @tc.type: FUNC
337  */
338 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_0500, Function | MediumTest | Level1)
339 {
340     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
341     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_0500 Case Start");
342     std::vector<uint8_t> devData;
343     // hex value of string "read005"
344     std::vector<uint8_t> expectData = {0x72, 0x65, 0x61, 0x64, 0x30, 0x30, 0x35};
345 
346     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_0500===>"
347               << "use libusb in PC launch bulk-out transfer(string=read005), "
348               << "press enter to continue" << std::endl;
349     int32_t c;
350     while ((c = getchar()) != '\n' && c != EOF) {}
351 
352     auto ret = g_usbfnMtpInterface->Read(devData);
353     ASSERT_EQ(ret, 0);
354     ASSERT_EQ(devData, expectData);
355     PrintVector("read005", devData, true);
356 }
357 
358 /**
359  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_0600
360  * @tc.desc: Test functions to Write
361  * @tc.desc: int32_t Write(const std::vector<uint8_t>& data)
362  * @tc.desc: Positive test: parameters correctly
363  * @tc.type: FUNC
364  */
365 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_0600, Function | MediumTest | Level1)
366 {
367     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
368     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_0600 Case Start");
369     uint32_t length = BULK_IN_LESS_THEN_ONCE;
370     std::vector<uint8_t> devData;
371     devData.assign(length, 'w');
372 
373     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_0600===>use libusb in PC launch bulk-in transfer(expect=" << length
374               << "), press enter to continue" << std::endl;
375     int32_t c;
376     while ((c = getchar()) != '\n' && c != EOF) {}
377 
378     auto ret = g_usbfnMtpInterface->Write(devData);
379     ASSERT_EQ(ret, 0);
380 }
381 
382 /**
383  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_0700
384  * @tc.desc: Test functions to Write
385  * @tc.desc: int32_t Write(const std::vector<uint8_t>& data)
386  * @tc.desc: Positive test: parameters correctly
387  * @tc.type: FUNC
388  */
389 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_0700, Function | MediumTest | Level1)
390 {
391     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
392     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_0700 Case Start");
393     uint32_t length = BULK_IN_ONCE_MAX_SIZE;
394     std::vector<uint8_t> devData;
395     devData.assign(length, 'w');
396     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_0700===>use libusb in PC launch bulk-in transfer(expect=" << length
397               << "), press enter to continue" << std::endl;
398     int32_t c;
399     while ((c = getchar()) != '\n' && c != EOF) {}
400 
401     auto ret = g_usbfnMtpInterface->Write(devData);
402     ASSERT_EQ(ret, 0);
403 }
404 
405 /**
406  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_0800
407  * @tc.desc: Test functions to Write
408  * @tc.desc: int32_t Write(const std::vector<uint8_t>& data)
409  * @tc.desc: Positive test: parameters correctly
410  * @tc.type: FUNC
411  */
412 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_0800, Function | MediumTest | Level1)
413 {
414     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
415     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_0800 Case Start");
416     uint32_t length = BULK_IN_MORE_THEN_ONCE;
417     std::vector<uint8_t> devData;
418     devData.assign(length, 'w');
419     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_0800===>use libusb in PC launch bulk-in transfer(expect=" << length
420               << "), press enter to continue" << std::endl;
421     int32_t c;
422     while ((c = getchar()) != '\n' && c != EOF) {}
423 
424     auto ret = g_usbfnMtpInterface->Write(devData);
425     ASSERT_EQ(ret, 0);
426 }
427 
428 /**
429  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_0900
430  * @tc.desc: Test functions to Write
431  * @tc.desc: int32_t Write(const std::vector<uint8_t>& data)
432  * @tc.desc: Positive test: parameters correctly, write empty data
433  * @tc.type: FUNC
434  */
435 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_0900, Function | MediumTest | Level1)
436 {
437     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
438     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_0900 Case Start");
439     std::vector<uint8_t> devData;
440     auto ret = g_usbfnMtpInterface->Write(devData);
441     ASSERT_EQ(ret, 0);
442 }
443 
444 /**
445  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_1000
446  * @tc.desc: Test functions to Write
447  * @tc.desc: int32_t Write(const std::vector<uint8_t>& data)
448  * @tc.desc: Positive test: parameters correctly, write specific data
449  * @tc.type: FUNC
450  */
451 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_1000, Function | MediumTest | Level1)
452 {
453     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
454     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_1000 Case Start");
455     // hex value of string "write005"
456     std::vector<uint8_t> devData = {0x77, 0x72, 0x69, 0x74, 0x65, 0x30, 0x30, 0x35};
457     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_1000===>"
458               << "use libusb in PC launch bulk-in transfer(expect string=write005), "
459               << "press enter to continue" << std::endl;
460     int32_t c;
461     while ((c = getchar()) != '\n' && c != EOF) {}
462 
463     auto ret = g_usbfnMtpInterface->Write(devData);
464     ASSERT_EQ(ret, 0);
465     PrintVector("write005", devData, true);
466 }
467 
468 /**
469  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_1100
470  * @tc.desc: Test functions to SendEvent
471  * @tc.desc: int32_t SendEvent(const std::vector<uint8_t> &eventData);
472  * @tc.desc: Positive test: parameters correctly, valid length
473  * @tc.type: FUNC
474  */
475 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_1100, Function | MediumTest | Level1)
476 {
477     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
478     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_1100 Case Start");
479     std::vector<uint8_t> devData;
480     devData.assign(MTP_EVENT_PACKET_VALID_LEN, 'e');
481     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_1100===>use libusb in PC launch intr-in transfer(expect="
482               << devData.size() << "), press enter to continue" << std::endl;
483     int32_t c;
484     while ((c = getchar()) != '\n' && c != EOF) {}
485 
486     auto ret = g_usbfnMtpInterface->SendEvent(devData);
487     ASSERT_EQ(0, ret);
488 }
489 
490 /**
491  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_1200
492  * @tc.desc: Test functions to SendEvent
493  * @tc.desc: int32_t SendEvent(const std::vector<uint8_t> &eventData);
494  * @tc.desc: Positive test: parameters correctly, max length
495  * @tc.type: FUNC
496  */
497 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_1200, Function | MediumTest | Level1)
498 {
499     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
500     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_1200 Case Start");
501     std::vector<uint8_t> devData;
502     devData.assign(MTP_EVENT_PACKET_MAX_BYTES, 'e');
503     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_1200===>use libusb in PC launch intr-in transfer(expect="
504               << devData.size() << "), press enter to continue" << std::endl;
505     int32_t c;
506     while ((c = getchar()) != '\n' && c != EOF) {}
507     auto ret = g_usbfnMtpInterface->SendEvent(devData);
508     ASSERT_EQ(0, ret);
509 }
510 
511 /**
512  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_1300
513  * @tc.desc: Test functions to SendEvent
514  * @tc.desc: int32_t SendEvent(const std::vector<uint8_t> &eventData);
515  * @tc.desc: Negative test: parameters exception, size overflow
516  * @tc.type: FUNC
517  */
518 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_1300, Function | MediumTest | Level1)
519 {
520     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
521     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_1300 Case Start");
522     std::vector<uint8_t> devData;
523     devData.assign(MTP_EVENT_PACKET_INVALID_LEN, 'e');
524     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_1300===>use libusb in PC launch intr-in transfer(expect=no data, "
525               << "or error), press enter to continue" << std::endl;
526     int32_t c;
527     while ((c = getchar()) != '\n' && c != EOF) {}
528 
529     auto ret = g_usbfnMtpInterface->SendEvent(devData);
530     ASSERT_NE(0, ret);
531     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_1300===>make sure transfer timeout in PC, then start next test "
532               << std::endl;
533 }
534 
535 /**
536  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_1400
537  * @tc.desc: Test functions to SendEvent
538  * @tc.desc: int32_t SendEvent(const std::vector<uint8_t> &eventData);
539  * @tc.desc: Positive test: parameters correctly, max length, check content
540  * @tc.type: FUNC
541  */
542 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_1400, Function | MediumTest | Level1)
543 {
544     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
545     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_1400 Case Start");
546     // hex value of string "event004"
547     std::vector<uint8_t> devData = {0x65, 0x76, 0x65, 0x6E, 0x74, 0x30, 0x30, 0x34};
548     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_1400===>"
549               << "use libusb in PC launch intr-in transfer(expect string=event004), "
550               << "press enter to continue" << std::endl;
551     int32_t c;
552     while ((c = getchar()) != '\n' && c != EOF) {}
553     auto ret = g_usbfnMtpInterface->SendEvent(devData);
554     ASSERT_EQ(0, ret);
555     PrintVector("event004", devData, true);
556 }
557 
558 /**
559  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_1500
560  * @tc.desc: Test functions to ReceiveFile
561  * @tc.desc: int32_t ReceiveFile(const UsbFnMtpFileSlice &mfs);
562  * @tc.desc: Positive test: parameters correctly, one packet enough
563  * @tc.type: FUNC
564  */
565 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_1500, Function | MediumTest | Level1)
566 {
567     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
568     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
569     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_1500 Case Start");
570     g_fileTestCount++;
571     struct UsbFnMtpFileSlice mfs = g_mfs;
572     mfs.length = BULK_OUT_LESS_THEN_ONCE;
573     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_1500===>use libusb in PC launch bulk-out transfer(size = "
574               << mfs.length << "), press enter to continue" << std::endl;
575     int32_t c;
576     while ((c = getchar()) != '\n' && c != EOF) {}
577 
578     std::string filePathName = MTP_TEST_RECV_FILE;
579     mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0777);
580     ASSERT_GT(mfs.fd, 0);
581     auto ret = g_usbfnMtpInterface->ReceiveFile(mfs);
582     close(mfs.fd);
583     ASSERT_EQ(ret, 0);
584     ASSERT_EQ(GetFileSize(filePathName), static_cast<uint64_t>(mfs.length));
585 }
586 
587 /**
588  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_1600
589  * @tc.desc: Test functions to ReceiveFile
590  * @tc.desc: int32_t ReceiveFile(const UsbFnMtpFileSlice &mfs);
591  * @tc.desc: Positive test: parameters correctly, zero length
592  * @tc.type: FUNC
593  */
594 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_1600, Function | MediumTest | Level1)
595 {
596     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
597     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
598     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_1600 Case Start");
599     g_fileTestCount++;
600     struct UsbFnMtpFileSlice mfs = g_mfs;
601     mfs.length = 0;
602     std::string filePathName = MTP_TEST_RECV_FILE;
603     mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0777);
604     ASSERT_GT(mfs.fd, 0);
605     auto ret = g_usbfnMtpInterface->ReceiveFile(mfs);
606     close(mfs.fd);
607     ASSERT_EQ(ret, 0);
608     ASSERT_EQ(GetFileSize(filePathName), static_cast<uint64_t>(mfs.length));
609 }
610 
611 /**
612  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_1700
613  * @tc.desc: Test functions to ReceiveFile
614  * @tc.desc: int32_t ReceiveFile(const UsbFnMtpFileSlice &mfs);
615  * @tc.desc: Positive test: parameters correctly, one normal packet + short packet
616  * @tc.type: FUNC
617  */
618 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_1700, Function | MediumTest | Level1)
619 {
620     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
621     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
622     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_1700 Case Start");
623     g_fileTestCount++;
624     struct UsbFnMtpFileSlice mfs = g_mfs;
625     mfs.length = BULK_OUT_MORE_THEN_ONCE;
626     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_1700===>use libusb in PC launch bulk-out transfer(size = "
627               << mfs.length << "), press enter to continue" << std::endl;
628     int32_t c;
629     while ((c = getchar()) != '\n' && c != EOF) {}
630 
631     std::string filePathName = MTP_TEST_RECV_FILE;
632     mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0777);
633     ASSERT_GT(mfs.fd, 0);
634     auto ret = g_usbfnMtpInterface->ReceiveFile(mfs);
635     close(mfs.fd);
636     ASSERT_EQ(ret, 0);
637     ASSERT_EQ(GetFileSize(filePathName), static_cast<uint64_t>(mfs.length));
638 }
639 
640 /**
641  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_1800
642  * @tc.desc: Test functions to ReceiveFile
643  * @tc.desc: int32_t ReceiveFile(const UsbFnMtpFileSlice &mfs);
644  * @tc.desc: Positive test: mfs.length set to max, 12 packet + ZLP
645  * @tc.type: FUNC
646  */
647 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_1800, Function | MediumTest | Level1)
648 {
649     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
650     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
651     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_1800 Case Start");
652     g_fileTestCount++;
653     struct UsbFnMtpFileSlice mfs = g_mfs;
654     mfs.length = MTP_FILE_SIZE_REUSE_REQ;
655     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_1800===>use libusb in PC launch bulk-out transfer(size = "
656               << mfs.length << "), press enter to continue" << std::endl;
657     int32_t c;
658     while ((c = getchar()) != '\n' && c != EOF) {}
659 
660     std::string filePathName = MTP_TEST_RECV_FILE;
661     mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0777);
662     ASSERT_GT(mfs.fd, 0);
663     auto ret = g_usbfnMtpInterface->ReceiveFile(mfs);
664     close(mfs.fd);
665     ASSERT_EQ(ret, 0);
666     ASSERT_EQ(GetFileSize(filePathName), static_cast<uint64_t>(mfs.length));
667 }
668 
669 /**
670  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_1900
671  * @tc.desc: Test functions to ReceiveFile
672  * @tc.desc: int32_t ReceiveFile(const UsbFnMtpFileSlice &mfs);
673  * @tc.desc: Positive test: parameters correctly, command and transactionId ignored
674  * @tc.type: FUNC
675  */
676 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_1900, Function | MediumTest | Level1)
677 {
678     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
679     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
680     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_1900 Case Start");
681     g_fileTestCount++;
682     struct UsbFnMtpFileSlice mfs = g_mfs;
683     mfs.length = BULK_OUT_LESS_THEN_ONCE;
684     mfs.command = CMD_CODE_GET_DEVICE_INFO;
685     mfs.transactionId = TRANSACTION_ID_RANDOM;
686     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_1900===>use libusb in PC launch bulk-out transfer(size = "
687               << mfs.length << "), press enter to continue" << std::endl;
688     int32_t c;
689     while ((c = getchar()) != '\n' && c != EOF) {}
690 
691     std::string filePathName = MTP_TEST_RECV_FILE;
692     mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0777);
693     ASSERT_GT(mfs.fd, 0);
694     auto ret = g_usbfnMtpInterface->ReceiveFile(mfs);
695     close(mfs.fd);
696     ASSERT_EQ(ret, 0);
697     ASSERT_EQ(GetFileSize(filePathName), static_cast<uint64_t>(mfs.length));
698 }
699 
700 /**
701  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_2000
702  * @tc.desc: Test functions to ReceiveFile
703  * @tc.desc: int32_t ReceiveFile(const UsbFnMtpFileSlice &mfs);
704  * @tc.desc: Positive test: mfs.length set to max, recv actual file size depend on xfer count
705  * @tc.type: FUNC
706  */
707 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_2000, Function | MediumTest | Level1)
708 {
709     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
710     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
711     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_2000 Case Start");
712     g_fileTestCount++;
713     struct UsbFnMtpFileSlice mfs = g_mfs;
714     mfs.length = MTP_MAX_FILE_SIZE;
715     std::cout
716         << "SUB_USB_DeviceManager_HDI_MTPPTP_2000===>use libusb in PC launch bulk-out transfer(size = any), "
717         << "press enter to continue" << std::endl;
718     int32_t c;
719     while ((c = getchar()) != '\n' && c != EOF) {}
720 
721     std::string filePathName = MTP_TEST_RECV_FILE;
722     mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0777);
723     ASSERT_GT(mfs.fd, 0);
724     auto ret = g_usbfnMtpInterface->ReceiveFile(mfs);
725     close(mfs.fd);
726     ASSERT_EQ(ret, 0);
727     ASSERT_GE(GetFileSize(filePathName), 0);
728 }
729 
730 /**
731  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_2100
732  * @tc.desc: Test functions to ReceiveFile
733  * @tc.desc: int32_t ReceiveFile(const UsbFnMtpFileSlice &mfs);
734  * @tc.desc: Positive test: mfs.length set to max - 1: 4GB - 2
735  * @tc.type: FUNC
736  */
737 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_2100, Function | MediumTest | Level1)
738 {
739     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
740     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
741     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_2100 Case Start");
742     g_fileTestCount++;
743     struct UsbFnMtpFileSlice mfs = g_mfs;
744     mfs.length = MTP_MAX_FILE_SIZE - 1;
745     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_2100===>use libusb in PC launch bulk-out transfer(size = "
746               << mfs.length << "), press enter to continue" << std::endl;
747     int32_t c;
748     while ((c = getchar()) != '\n' && c != EOF) {}
749 
750     std::string filePathName = MTP_TEST_RECV_FILE;
751     mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0777);
752     ASSERT_GT(mfs.fd, 0);
753     auto ret = g_usbfnMtpInterface->ReceiveFile(mfs);
754     close(mfs.fd);
755     ASSERT_EQ(ret, 0);
756     ASSERT_EQ(GetFileSize(filePathName), static_cast<uint64_t>(mfs.length));
757 }
758 
759 /**
760  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_2200
761  * @tc.desc: Test functions to ReceiveFile
762  * @tc.desc: int32_t ReceiveFile(const UsbFnMtpFileSlice &mfs);
763  * @tc.desc: Positive test: mfs.length set to max + 1: 4GB
764  * @tc.type: FUNC
765  */
766 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_2200, Function | MediumTest | Level1)
767 {
768     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
769     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
770     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_2200 Case Start");
771     g_fileTestCount++;
772     struct UsbFnMtpFileSlice mfs = g_mfs;
773     mfs.length = MTP_MAX_FILE_SIZE + 1;
774     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_2200===>use libusb in PC launch bulk-out transfer(size = "
775               << mfs.length << "), press enter to continue" << std::endl;
776     int32_t c;
777     while ((c = getchar()) != '\n' && c != EOF) {}
778 
779     std::string filePathName = MTP_TEST_RECV_FILE;
780     mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0777);
781     ASSERT_GT(mfs.fd, 0);
782     auto ret = g_usbfnMtpInterface->ReceiveFile(mfs);
783     close(mfs.fd);
784     ASSERT_EQ(ret, 0);
785     ASSERT_EQ(GetFileSize(filePathName), static_cast<uint64_t>(mfs.length));
786 }
787 
788 /**
789  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_2300
790  * @tc.desc: Test functions to ReceiveFile
791  * @tc.desc: int32_t ReceiveFile(const UsbFnMtpFileSlice &mfs);
792  * @tc.desc: Positive test: mfs.length set to max + 2: 4GB + 1
793  * @tc.type: FUNC
794  */
795 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_2300, Function | MediumTest | Level1)
796 {
797     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
798     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
799     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_2300 Case Start");
800     g_fileTestCount++;
801     struct UsbFnMtpFileSlice mfs = g_mfs;
802     mfs.length = MTP_MAX_FILE_SIZE + 2;
803     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_2300===>use libusb in PC launch bulk-out transfer(size = "
804               << mfs.length << "), press enter to continue" << std::endl;
805     int32_t c;
806     while ((c = getchar()) != '\n' && c != EOF) {}
807 
808     std::string filePathName = MTP_TEST_RECV_FILE;
809     mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0777);
810     ASSERT_GT(mfs.fd, 0);
811     auto ret = g_usbfnMtpInterface->ReceiveFile(mfs);
812     close(mfs.fd);
813     ASSERT_EQ(ret, 0);
814     ASSERT_EQ(GetFileSize(filePathName), static_cast<uint64_t>(mfs.length));
815 }
816 
817 /**
818  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_2400
819  * @tc.desc: Test functions to SendFile
820  * @tc.desc: int32_t SendFile(const UsbFnMtpFileSlice &mfs);
821  * @tc.desc: Positive test: parameters correctly, length in one packet
822  * @tc.type: FUNC
823  */
824 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_2400, Function | MediumTest | Level1)
825 {
826     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
827     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
828     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_2400 Case Start");
829     g_fileTestCount++;
830     struct UsbFnMtpFileSlice mfs = g_mfs;
831     mfs.length = BULK_IN_LESS_THEN_ONCE;
832     std::string filePathName = MTP_TEST_SEND_FILE;
833     EXPECT_TRUE(GenerateFile(filePathName, mfs.length));
834     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_2400===>"
835               << "use libusb in PC launch bulk-in transfer(expect " << mfs.length
836               << "), press enter to continue" << std::endl;
837     int32_t c;
838     while ((c = getchar()) != '\n' && c != EOF) {}
839 
840     mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDONLY);
841     ASSERT_GT(mfs.fd, 0);
842     auto ret = g_usbfnMtpInterface->SendFile(mfs);
843     close(mfs.fd);
844     ASSERT_EQ(ret, 0);
845 }
846 
847 /**
848  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_2500
849  * @tc.desc: Test functions to SendFile
850  * @tc.desc: int32_t SendFile(const UsbFnMtpFileSlice &mfs);
851  * @tc.desc: Positive test: parameters correctly, send header + data in one packet
852  * @tc.type: FUNC
853  */
854 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_2500, Function | MediumTest | Level1)
855 {
856     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
857     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
858     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_2500 Case Start");
859     g_fileTestCount++;
860     struct UsbFnMtpFileSlice mfs = g_mfs;
861     mfs.length = BULK_IN_LESS_THEN_ONCE;
862     mfs.command = CMD_CODE_GET_DEVICE_INFO;
863     std::string filePathName = MTP_TEST_SEND_FILE;
864     EXPECT_TRUE(GenerateFile(filePathName, mfs.length));
865     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_2500===>use libusb in PC launch bulk-in transfer(expect "
866               << mfs.length + MTP_PACKET_HEADER_SIZE << "), press enter to continue" << std::endl;
867     int32_t c;
868     while ((c = getchar()) != '\n' && c != EOF) {}
869 
870     mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDONLY);
871     ASSERT_GT(mfs.fd, 0);
872     auto ret = g_usbfnMtpInterface->SendFile(mfs);
873     close(mfs.fd);
874     ASSERT_EQ(0, ret);
875 }
876 
877 /**
878  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_2600
879  * @tc.desc: Test functions to SendFile
880  * @tc.desc: int32_t SendFile(const UsbFnMtpFileSlice &mfs);
881  * @tc.desc: Positive test: parameters correctly, zero length
882  * @tc.type: FUNC
883  */
884 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_2600, Function | MediumTest | Level1)
885 {
886     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
887     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
888     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_2600 Case Start");
889     g_fileTestCount++;
890     struct UsbFnMtpFileSlice mfs = g_mfs;
891     mfs.length = 0;
892     std::string filePathName = MTP_TEST_SEND_FILE;
893     EXPECT_TRUE(GenerateFile(filePathName, mfs.length));
894     mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDONLY);
895     ASSERT_GT(mfs.fd, 0);
896     auto ret = g_usbfnMtpInterface->SendFile(mfs);
897     close(mfs.fd);
898     ASSERT_EQ(0, ret);
899 }
900 
901 /**
902  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_2700
903  * @tc.desc: Test functions to SendFile
904  * @tc.desc: int32_t SendFile(const UsbFnMtpFileSlice &mfs);
905  * @tc.desc: Positive test: parameters correctly, send header + data in two packet: normal + short
906  * @tc.type: FUNC
907  */
908 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_2700, Function | MediumTest | Level1)
909 {
910     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
911     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
912     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_2700 Case Start");
913     g_fileTestCount++;
914     struct UsbFnMtpFileSlice mfs = g_mfs;
915     mfs.length = MTP_FILE_SIZE_ONE_REQ;
916     mfs.command = CMD_CODE_GET_DEVICE_INFO;
917     std::string filePathName = MTP_TEST_SEND_FILE;
918     EXPECT_TRUE(GenerateFile(filePathName, mfs.length));
919     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_2700===>use libusb in PC launch bulk-in transfer(expect "
920               << mfs.length + MTP_PACKET_HEADER_SIZE << "), press enter to continue" << std::endl;
921     int32_t c;
922     while ((c = getchar()) != '\n' && c != EOF) {}
923 
924     mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDONLY);
925     ASSERT_GT(mfs.fd, 0);
926     auto ret = g_usbfnMtpInterface->SendFile(mfs);
927     close(mfs.fd);
928     ASSERT_EQ(0, ret);
929 }
930 
931 /**
932  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_2800
933  * @tc.desc: Test functions to SendFile
934  * @tc.desc: int32_t SendFile(const UsbFnMtpFileSlice &mfs);
935  * @tc.desc: Positive test: parameters correctly, mfs.length set to max
936  * @tc.type: FUNC
937  */
938 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_2800, Function | MediumTest | Level1)
939 {
940     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
941     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
942     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_2800 Case Start");
943     g_fileTestCount++;
944     struct UsbFnMtpFileSlice mfs = g_mfs;
945     mfs.length = MTP_FILE_SIZE_REUSE_REQ;
946     std::string filePathName = MTP_TEST_SEND_FILE;
947     EXPECT_TRUE(GenerateFile(filePathName, mfs.length));
948     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_2800===>use libusb in PC launch bulk-in transfer(speed, expect "
949               << mfs.length << "), press enter to continue" << std::endl;
950     int32_t c;
951     while ((c = getchar()) != '\n' && c != EOF) {}
952 
953     mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDONLY);
954     ASSERT_GT(mfs.fd, 0);
955     auto ret = g_usbfnMtpInterface->SendFile(mfs);
956     close(mfs.fd);
957     ASSERT_EQ(0, ret);
958 }
959 
960 /**
961  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_2900
962  * @tc.desc: Test functions to SendFile
963  * @tc.desc: int32_t SendFile(const UsbFnMtpFileSlice &mfs);
964  * @tc.desc: Positive test: parameters correctly, mfs.length set to max: 4GB - 1
965  * @tc.type: FUNC
966  */
967 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_2900, Function | MediumTest | Level1)
968 {
969     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
970     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
971     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_2900 Case Start");
972     g_fileTestCount++;
973     struct UsbFnMtpFileSlice mfs = g_mfs;
974     mfs.length = MTP_MAX_FILE_SIZE;
975     std::string filePathName = MTP_TEST_SEND_FILE;
976     EXPECT_TRUE(GenerateFile(filePathName, mfs.length));
977     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_2900===>use libusb in PC launch bulk-in transfer(speed, expect "
978               << mfs.length << "), press enter to continue" << std::endl;
979     int32_t c;
980     while ((c = getchar()) != '\n' && c != EOF) {}
981 
982     mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDONLY);
983     ASSERT_GT(mfs.fd, 0);
984     auto ret = g_usbfnMtpInterface->SendFile(mfs);
985     close(mfs.fd);
986     ASSERT_EQ(0, ret);
987 }
988 
989 /**
990  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_3000
991  * @tc.desc: Test functions to SendFile
992  * @tc.desc: int32_t SendFile(const UsbFnMtpFileSlice &mfs);
993  * @tc.desc: Positive test: parameters correctly, mfs.length set to max + 1: 4GB
994  * @tc.type: FUNC
995  */
996 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_3000, Function | MediumTest | Level1)
997 {
998     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
999     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
1000     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_3000 Case Start");
1001     g_fileTestCount++;
1002     struct UsbFnMtpFileSlice mfs = g_mfs;
1003     mfs.length = MTP_MAX_FILE_SIZE + 1;
1004     std::string filePathName = MTP_TEST_SEND_FILE;
1005     EXPECT_TRUE(GenerateFile(filePathName, mfs.length));
1006     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_3000===>use libusb in PC launch bulk-in transfer(speed, expect "
1007               << mfs.length << "), press enter to continue" << std::endl;
1008     int32_t c;
1009     while ((c = getchar()) != '\n' && c != EOF) {}
1010 
1011     mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDONLY);
1012     ASSERT_GT(mfs.fd, 0);
1013     auto ret = g_usbfnMtpInterface->SendFile(mfs);
1014     close(mfs.fd);
1015     ASSERT_EQ(0, ret);
1016 }
1017 
1018 /**
1019  * @tc.name: SUB_USB_DeviceManager_HDI_MTPPTP_3100
1020  * @tc.desc: Test functions to SendFile
1021  * @tc.desc: int32_t SendFile(const UsbFnMtpFileSlice &mfs);
1022  * @tc.desc: Positive test: parameters correctly, mfs.length set to max + 1: 4GB + 1
1023  * @tc.type: FUNC
1024  */
1025 HWTEST_F(UsbfnMtpTest, SUB_USB_DeviceManager_HDI_MTPPTP_3100, Function | MediumTest | Level1)
1026 {
1027     ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
1028     ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
1029     HDF_LOGI("UsbfnMtpTest::SUB_USB_DeviceManager_HDI_MTPPTP_3100 Case Start");
1030     g_fileTestCount++;
1031     struct UsbFnMtpFileSlice mfs = g_mfs;
1032     mfs.length = MTP_MAX_FILE_SIZE + 2;
1033     std::string filePathName = MTP_TEST_SEND_FILE;
1034     EXPECT_TRUE(GenerateFile(filePathName, mfs.length));
1035     std::cout << "SUB_USB_DeviceManager_HDI_MTPPTP_3100===>use libusb in PC launch bulk-in transfer(speed, expect "
1036               << mfs.length << "), press enter to continue" << std::endl;
1037     int32_t c;
1038     while ((c = getchar()) != '\n' && c != EOF) {}
1039 
1040     mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDONLY);
1041     ASSERT_GT(mfs.fd, 0);
1042     auto ret = g_usbfnMtpInterface->SendFile(mfs);
1043     close(mfs.fd);
1044     ASSERT_EQ(0, ret);
1045 }
1046 
1047 } // namespace
1048