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
24 #include "directory_ex.h"
25 #include "file_ex.h"
26 #include "hdf_log.h"
27 #include "securec.h"
28 #include "usbd_function.h"
29 #include "usbd_port.h"
30 #include "v1_0/iusb_interface.h"
31 #include "v1_0/iusbfn_mtp_interface.h"
32 #include "v1_0/usb_types.h"
33 #include "v1_0/usbfn_mtp_types.h"
34
35 #define HDF_LOG_TAG usbfn_mtp_ut
36
37 using namespace testing::ext;
38 using namespace OHOS;
39 using namespace OHOS::HDI::Usb::V1_0;
40 using namespace std;
41 using namespace OHOS::HDI::Usb::Gadget::Mtp::V1_0;
42
43 namespace {
44 constexpr int32_t SLEEP_TIME = 3;
45 constexpr int32_t MTP_EVENT_PACKET_MAX_BYTES = 28;
46 constexpr int32_t MTP_EVENT_PACKET_VALID_LEN = 20;
47 constexpr int32_t MTP_EVENT_PACKET_INVALID_LEN = 29;
48 constexpr uint16_t CMD_CODE_GET_DEVICE_INFO = 0x1001;
49 constexpr uint32_t TRANSACTION_ID_RANDOM = 0xF00D;
50 /* mtp packet head defined as [struct UsbMtpDataHeader] in usbfn_mtp_impl.h */
51 constexpr uint32_t MTP_PACKET_HEADER_SIZE = 12;
52 constexpr uint32_t BULK_OUT_ONCE_MAX_SIZE = 1024;
53 constexpr uint32_t BULK_OUT_LESS_THEN_ONCE = 23;
54 constexpr uint32_t BULK_OUT_MORE_THEN_ONCE = 1025;
55 constexpr uint32_t BULK_IN_ONCE_MAX_SIZE = 1024;
56 constexpr uint32_t BULK_IN_LESS_THEN_ONCE = 45;
57 constexpr uint32_t BULK_IN_MORE_THEN_ONCE = 2023;
58 constexpr uint32_t MTP_FILE_SIZE_ONE_REQ = 1024;
59 constexpr uint32_t MTP_FILE_SIZE_REUSE_REQ = 12 * 1024;
60 /* 0xFFFFFFFFLL is 4 * 1024 * 1024 * 1024 - 1 = 4GB - 1 */
61 constexpr int64_t MTP_MAX_FILE_SIZE = 0xFFFFFFFFLL;
62 constexpr int64_t GEN_FILE_BUF_SIZE = 1024;
63 constexpr int64_t GEN_FILE_LIMIT_512MB = 512 * 1024 * 1024;
64 constexpr int32_t PRINT_VECTOR_MAX_LENGTH = 30;
65 constexpr const char *WORKED_UT_PATH = "/data/local/tmp/";
66 constexpr const char *MTP_TEST_SEND_FILE = "/data/local/tmp/sampleFile.mtp";
67 constexpr const char *MTP_TEST_RECV_FILE = "/data/local/tmp/sampleFile.mtp";
68
69 sptr<IUsbfnMtpInterface> g_usbfnMtpInterface = nullptr;
70 sptr<IUsbInterface> g_usbInterface = nullptr;
71 int32_t g_currentFunc = USB_FUNCTION_NONE;
72 int32_t g_fileTestCount = 0;
73
74 struct UsbFnMtpFileSlice g_mfs = {
75 .offset = 0,
76 .length = 0,
77 .command = 0,
78 .transactionId = 0,
79 };
80
PrintVector(const std::string & msg,std::vector<uint8_t> & data,bool hexFormat)81 void PrintVector(const std::string &msg, std::vector<uint8_t> &data, bool hexFormat)
82 {
83 size_t printLen = data.size();
84 bool ignore = false;
85 if (printLen > static_cast<size_t>(PRINT_VECTOR_MAX_LENGTH)) {
86 printLen = static_cast<size_t>(PRINT_VECTOR_MAX_LENGTH);
87 ignore = true;
88 }
89 std::stringstream ss;
90 for (size_t i = 0; i < printLen; i++) {
91 if (hexFormat) {
92 ss << std::hex << "0x" << (0xFF & data.at(i)) << " ";
93 } else {
94 ss << data.at(i);
95 }
96 }
97 std::string output = msg + std::string("(") + std::to_string(printLen) + std::string("):") + ss.str();
98 if (ignore) {
99 output += "......";
100 }
101 HDF_LOGV("UsbfnMtpTest::PrintVector %{public}s", output.c_str());
102 }
103
GetFileSize(const std::string & pathName)104 uint64_t GetFileSize(const std::string &pathName)
105 {
106 struct stat statbuf;
107 uint64_t ret = stat(pathName.c_str(), &statbuf);
108 if (ret != 0) {
109 return 0;
110 }
111 return static_cast<uint64_t>(statbuf.st_size);
112 }
113
WriteRandomDataToFile(const std::string & pathName,uint64_t fileSize)114 bool WriteRandomDataToFile(const std::string &pathName, uint64_t fileSize)
115 {
116 int32_t random = open("/dev/urandom", O_RDONLY);
117 if (random < 0) {
118 HDF_LOGE("UsbfnMtpTest::WriteRandomDataToFile get random data failed");
119 return false;
120 }
121 FILE *opFile = std::fopen(pathName.c_str(), "w");
122 if (opFile == nullptr) {
123 HDF_LOGE("UsbfnMtpTest::WriteRandomDataToFile create file failed: %{public}s", pathName.c_str());
124 return false;
125 }
126 char buffer[GEN_FILE_BUF_SIZE];
127 int64_t count = static_cast<int64_t>(fileSize);
128 while (count > 0) {
129 (void)memset_s(buffer, sizeof(buffer), 0, sizeof(buffer));
130 int64_t readSize = count > GEN_FILE_BUF_SIZE ? GEN_FILE_BUF_SIZE : count;
131 ssize_t readActual = read(random, static_cast<void *>(buffer), static_cast<size_t>(readSize));
132 if (readActual != static_cast<ssize_t>(readSize)) {
133 HDF_LOGW("UsbfnMtpTest::WriteRandomDataToFile read random failed");
134 break;
135 }
136 size_t writeActual = std::fwrite(static_cast<void *>(buffer), 1, static_cast<size_t>(readSize), opFile);
137 if (writeActual != static_cast<size_t>(readSize)) {
138 HDF_LOGW("UsbfnMtpTest::WriteRandomDataToFile write failed");
139 break;
140 }
141 count -= readSize;
142 }
143 std::fflush(opFile);
144 std::fclose(opFile);
145 close(random);
146 HDF_LOGV("UsbfnMtpTest::WriteRandomDataToFile file %{public}s: %{public}" PRIu64 "/%{public}" PRIu64 "",
147 pathName.c_str(), GetFileSize(pathName), fileSize);
148 return count > 0 ? false : true;
149 }
150
GenerateFile(const std::string & pathName,int64_t fileSize)151 bool GenerateFile(const std::string &pathName, int64_t fileSize)
152 {
153 if (GetFileSize(pathName) == static_cast<uint64_t>(fileSize)) {
154 HDF_LOGW("UsbfnMtpTest::GenerateFile file already exist");
155 return true;
156 }
157 if (fileSize > GEN_FILE_LIMIT_512MB) {
158 int32_t ret = truncate(pathName.c_str(), static_cast<off_t>(fileSize));
159 if (ret != 0) {
160 HDF_LOGE("UsbfnMtpTest::GenerateFile fail to truncate file to size: %{public}" PRId64 "", fileSize);
161 return false;
162 }
163 HDF_LOGV("UsbfnMtpTest::GenerateFile truncate %{public}s %{public}" PRId64 "", pathName.c_str(), fileSize);
164 return true;
165 }
166 return WriteRandomDataToFile(pathName, static_cast<uint64_t>(fileSize));
167 }
168
SwitchErrCode(int32_t ret)169 int32_t SwitchErrCode(int32_t ret)
170 {
171 return ret == HDF_ERR_NOT_SUPPORT ? HDF_SUCCESS : ret;
172 }
173
SetUpTestCase(void)174 void UsbfnMtpTest::SetUpTestCase(void)
175 {
176 // Selinux config this UT only works in directory WORKED_UT_PATH for open/read/write file for case send/recvfile.
177 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
178 std::cout << "===>please connect to PC use USB 3.0 interface, press enter to continue set function to mtp"
179 << std::endl;
180 int32_t c;
181 while ((c = getchar()) != '\n' && c != EOF) {}
182
183 g_usbInterface = IUsbInterface::Get();
184 ASSERT_TRUE(g_usbInterface != nullptr);
185 auto ret = g_usbInterface->SetPortRole(DEFAULT_PORT_ID, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
186 sleep(SLEEP_TIME);
187 ret = SwitchErrCode(ret);
188 ASSERT_EQ(0, ret);
189 ret = g_usbInterface->GetCurrentFunctions(g_currentFunc);
190 ASSERT_EQ(0, ret);
191 std::cout << "===>current function=" << g_currentFunc << ", set function to mtp, please wait" << std::endl;
192 ret = g_usbInterface->SetCurrentFunctions(USB_FUNCTION_MTP);
193 ASSERT_EQ(0, ret);
194
195 g_usbfnMtpInterface = IUsbfnMtpInterface::Get();
196 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
197 ret = g_usbfnMtpInterface->Start();
198 ASSERT_EQ(0, ret);
199 }
200
TearDownTestCase(void)201 void UsbfnMtpTest::TearDownTestCase(void)
202 {
203 HDF_LOGV("UsbfnMtpTest::TearDownTestCase");
204 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
205 auto ret = g_usbfnMtpInterface->Stop();
206 ASSERT_EQ(0, ret);
207 ASSERT_TRUE(g_usbInterface != nullptr);
208 ret = g_usbInterface->SetCurrentFunctions(g_currentFunc);
209 ASSERT_EQ(0, ret);
210 if (g_fileTestCount == 0) {
211 return;
212 }
213 /* 1 means single test, run with '--gtest_filter=' option */
214 if (g_fileTestCount == 1) {
215 std::cout << "===>please delete temporary test file if needed: sendfile=" << MTP_TEST_SEND_FILE
216 << " recvfile=" << MTP_TEST_RECV_FILE << std::endl;
217 return;
218 }
219 if (FileExists(std::string(MTP_TEST_SEND_FILE))) {
220 if (remove(MTP_TEST_SEND_FILE) != 0) {
221 std::cout << "[-] remove send file failed: " << MTP_TEST_SEND_FILE << std::endl;
222 }
223 }
224 if (FileExists(std::string(MTP_TEST_RECV_FILE))) {
225 if (remove(MTP_TEST_RECV_FILE) != 0) {
226 std::cout << "[-] remove recv file failed: " << MTP_TEST_RECV_FILE << std::endl;
227 }
228 }
229 }
230
SetUp(void)231 void UsbfnMtpTest::SetUp(void) {}
232
TearDown(void)233 void UsbfnMtpTest::TearDown(void) {}
234
235 /**
236 * @tc.name: UsbfnMtpRead001
237 * @tc.desc: Test functions to Read
238 * @tc.desc: int32_t Read(std::vector<uint8_t>& data);
239 * @tc.desc: Positive test: parameters correctly, read length less then one packet size
240 * @tc.type: FUNC
241 */
242 HWTEST_F(UsbfnMtpTest, UsbfnMtpRead001, TestSize.Level1)
243 {
244 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
245 HDF_LOGI("UsbfnMtpTest::UsbfnMtpRead001 Case Start");
246 std::vector<uint8_t> devData;
247
248 std::cout << "UsbfnMtpRead001===>use libusb in PC launch bulk-out transfer(size=" << BULK_OUT_LESS_THEN_ONCE
249 << "), press enter to continue" << std::endl;
250 int32_t c;
251 while ((c = getchar()) != '\n' && c != EOF) {}
252
253 int32_t ret = g_usbfnMtpInterface->Read(devData);
254 ASSERT_EQ(ret, 0);
255 ASSERT_EQ(devData.size(), static_cast<size_t>(BULK_OUT_LESS_THEN_ONCE));
256 }
257
258 /**
259 * @tc.name: UsbfnMtpRead002
260 * @tc.desc: Test functions to Read
261 * @tc.desc: int32_t Read(std::vector<uint8_t>& data);
262 * @tc.desc: Positive test: parameters correctly, read length exactly one packet size
263 * @tc.type: FUNC
264 */
265 HWTEST_F(UsbfnMtpTest, UsbfnMtpRead002, TestSize.Level1)
266 {
267 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
268 HDF_LOGI("UsbfnMtpTest::UsbfnMtpRead002 Case Start");
269 std::vector<uint8_t> devData;
270
271 std::cout << "UsbfnMtpRead002===>use libusb in PC launch bulk-out transfer(size=" << BULK_OUT_ONCE_MAX_SIZE
272 << "), press enter to continue" << std::endl;
273 int32_t c;
274 while ((c = getchar()) != '\n' && c != EOF) {}
275
276 int32_t ret = g_usbfnMtpInterface->Read(devData);
277 ASSERT_EQ(ret, 0);
278 ASSERT_EQ(devData.size(), static_cast<size_t>(BULK_OUT_ONCE_MAX_SIZE));
279 }
280
281 /**
282 * @tc.name: UsbfnMtpRead003
283 * @tc.desc: Test functions to Read
284 * @tc.desc: int32_t Read(std::vector<uint8_t>& data);
285 * @tc.desc: Positive test: parameters correctly, read length more then one packet size, please read again
286 * @tc.type: FUNC
287 */
288 HWTEST_F(UsbfnMtpTest, UsbfnMtpRead003, TestSize.Level1)
289 {
290 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
291 HDF_LOGI("UsbfnMtpTest::UsbfnMtpRead003 Case Start");
292 std::vector<uint8_t> devData;
293
294 std::cout << "UsbfnMtpRead003===>use libusb in PC launch bulk-out transfer(size=" << BULK_OUT_MORE_THEN_ONCE
295 << "), press enter to continue" << std::endl;
296 int32_t c;
297 while ((c = getchar()) != '\n' && c != EOF) {}
298
299 int32_t ret = g_usbfnMtpInterface->Read(devData);
300 ASSERT_EQ(ret, 0);
301 ASSERT_EQ(devData.size(), static_cast<size_t>(BULK_OUT_ONCE_MAX_SIZE));
302 devData.clear();
303 ret = g_usbfnMtpInterface->Read(devData);
304 ASSERT_EQ(ret, 0);
305 ASSERT_EQ(devData.size(), static_cast<size_t>(BULK_OUT_MORE_THEN_ONCE - BULK_OUT_ONCE_MAX_SIZE));
306 }
307
308 /**
309 * @tc.name: UsbfnMtpRead004
310 * @tc.desc: Test functions to Read
311 * @tc.desc: int32_t Read(std::vector<uint8_t>& data)
312 * @tc.desc: Positive test: parameters correctly, no specific read size
313 * @tc.type: FUNC
314 */
315 HWTEST_F(UsbfnMtpTest, UsbfnMtpRead004, TestSize.Level1)
316 {
317 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
318 HDF_LOGI("UsbfnMtpTest::UsbfnMtpRead004 Case Start");
319 std::vector<uint8_t> devData;
320
321 std::cout
322 << "UsbfnMtpRead004===>use libusb in PC launch bulk-out transfer(size in [0, 1024]), press enter to continue"
323 << std::endl;
324 int32_t c;
325 while ((c = getchar()) != '\n' && c != EOF) {}
326
327 auto ret = g_usbfnMtpInterface->Read(devData);
328 ASSERT_EQ(ret, 0);
329 ASSERT_GE(devData.size(), 0);
330 }
331
332 /**
333 * @tc.name: UsbfnMtpRead005
334 * @tc.desc: Test functions to Read
335 * @tc.desc: int32_t Read(std::vector<uint8_t>& data)
336 * @tc.desc: Positive test: parameters correctly, check read content
337 * @tc.type: FUNC
338 */
339 HWTEST_F(UsbfnMtpTest, UsbfnMtpRead005, TestSize.Level1)
340 {
341 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
342 HDF_LOGI("UsbfnMtpTest::UsbfnMtpRead005 Case Start");
343 std::vector<uint8_t> devData;
344 // hex value of string "read005"
345 std::vector<uint8_t> expectData = {0x72, 0x65, 0x61, 0x64, 0x30, 0x30, 0x35};
346
347 std::cout << "UsbfnMtpRead005===>use libusb in PC launch bulk-out transfer(string=read005), press enter to continue"
348 << 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: UsbfnMtpWrite001
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, UsbfnMtpWrite001, TestSize.Level1)
366 {
367 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
368 HDF_LOGI("UsbfnMtpTest::UsbfnMtpWrite001 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 << "UsbfnMtpWrite001===>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: UsbfnMtpWrite002
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, UsbfnMtpWrite002, TestSize.Level1)
390 {
391 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
392 HDF_LOGI("UsbfnMtpTest::UsbfnMtpWrite002 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 << "UsbfnMtpWrite002===>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: UsbfnMtpWrite003
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, UsbfnMtpWrite003, TestSize.Level1)
413 {
414 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
415 HDF_LOGI("UsbfnMtpTest::UsbfnMtpWrite003 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 << "UsbfnMtpWrite003===>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: UsbfnMtpWrite004
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, UsbfnMtpWrite004, TestSize.Level1)
436 {
437 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
438 HDF_LOGI("UsbfnMtpTest::UsbfnMtpWrite004 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: UsbfnMtpWrite005
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, UsbfnMtpWrite005, TestSize.Level1)
452 {
453 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
454 HDF_LOGI("UsbfnMtpTest::UsbfnMtpWrite005 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 << "UsbfnMtpWrite005===>use libusb in PC launch bulk-in transfer(expect string=write005), press enter "
458 "to continue"
459 << 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: UsbfnMtpSendEvent001
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, UsbfnMtpSendEvent001, TestSize.Level1)
476 {
477 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
478 HDF_LOGI("UsbfnMtpTest::UsbfnMtpSendEvent001 Case Start");
479 std::vector<uint8_t> devData;
480 devData.assign(MTP_EVENT_PACKET_VALID_LEN, 'e');
481 std::cout << "UsbfnMtpSendEvent001===>use libusb in PC launch intr-in transfer(expect=" << devData.size()
482 << "), 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: UsbfnMtpSendEvent002
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, UsbfnMtpSendEvent002, TestSize.Level1)
498 {
499 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
500 HDF_LOGI("UsbfnMtpTest::UsbfnMtpSendEvent002 Case Start");
501 std::vector<uint8_t> devData;
502 devData.assign(MTP_EVENT_PACKET_MAX_BYTES, 'e');
503 std::cout << "UsbfnMtpSendEvent002===>use libusb in PC launch intr-in transfer(expect=" << devData.size()
504 << "), 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: UsbfnMtpSendEvent003
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, UsbfnMtpSendEvent003, TestSize.Level1)
519 {
520 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
521 HDF_LOGI("UsbfnMtpTest::UsbfnMtpSendEvent003 Case Start");
522 std::vector<uint8_t> devData;
523 devData.assign(MTP_EVENT_PACKET_INVALID_LEN, 'e');
524 std::cout << "UsbfnMtpSendEvent003===>use libusb in PC launch intr-in transfer(expect=no data, or error), press "
525 "enter to continue"
526 << std::endl;
527 int32_t c;
528 while ((c = getchar()) != '\n' && c != EOF) {}
529
530 auto ret = g_usbfnMtpInterface->SendEvent(devData);
531 ASSERT_NE(0, ret);
532 std::cout << "UsbfnMtpSendEvent003===>make sure transfer timeout in PC, then start next test " << std::endl;
533 }
534
535 /**
536 * @tc.name: UsbfnMtpSendEvent004
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, UsbfnMtpSendEvent004, TestSize.Level1)
543 {
544 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
545 HDF_LOGI("UsbfnMtpTest::UsbfnMtpSendEvent004 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 << "UsbfnMtpSendEvent004===>use libusb in PC launch intr-in transfer(expect string=event004), press "
549 "enter to continue"
550 << 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: UsbfnMtpFileReceive001
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, UsbfnMtpFileReceive001, TestSize.Level1)
566 {
567 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
568 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
569 HDF_LOGI("UsbfnMtpTest::UsbfnMtpFileReceive001 Case Start");
570 g_fileTestCount++;
571 struct UsbFnMtpFileSlice mfs = g_mfs;
572 mfs.length = BULK_OUT_LESS_THEN_ONCE;
573 std::cout << "UsbfnMtpFileReceive001===>use libusb in PC launch bulk-out transfer(size = " << mfs.length
574 << "), 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: UsbfnMtpFileReceive002
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, UsbfnMtpFileReceive002, TestSize.Level1)
595 {
596 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
597 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
598 HDF_LOGI("UsbfnMtpTest::UsbfnMtpFileReceive002 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: UsbfnMtpFileReceive003
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, UsbfnMtpFileReceive003, TestSize.Level1)
619 {
620 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
621 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
622 HDF_LOGI("UsbfnMtpTest::UsbfnMtpFileReceive003 Case Start");
623 g_fileTestCount++;
624 struct UsbFnMtpFileSlice mfs = g_mfs;
625 mfs.length = BULK_OUT_MORE_THEN_ONCE;
626 std::cout << "UsbfnMtpFileReceive003===>use libusb in PC launch bulk-out transfer(size = " << mfs.length
627 << "), 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: UsbfnMtpFileReceive004
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, UsbfnMtpFileReceive004, TestSize.Level1)
648 {
649 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
650 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
651 HDF_LOGI("UsbfnMtpTest::UsbfnMtpFileReceive004 Case Start");
652 g_fileTestCount++;
653 struct UsbFnMtpFileSlice mfs = g_mfs;
654 mfs.length = MTP_FILE_SIZE_REUSE_REQ;
655 std::cout << "UsbfnMtpFileReceive004===>use libusb in PC launch bulk-out transfer(size = " << mfs.length
656 << "), 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: UsbfnMtpFileReceive005
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, UsbfnMtpFileReceive005, TestSize.Level1)
677 {
678 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
679 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
680 HDF_LOGI("UsbfnMtpTest::UsbfnMtpFileReceive005 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 << "UsbfnMtpFileReceive005===>use libusb in PC launch bulk-out transfer(size = " << mfs.length
687 << "), 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: UsbfnMtpFileReceive006
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, UsbfnMtpFileReceive006, TestSize.Level1)
708 {
709 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
710 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
711 HDF_LOGI("UsbfnMtpTest::UsbfnMtpFileReceive006 Case Start");
712 g_fileTestCount++;
713 struct UsbFnMtpFileSlice mfs = g_mfs;
714 mfs.length = MTP_MAX_FILE_SIZE;
715 std::cout
716 << "UsbfnMtpFileReceive006===>use libusb in PC launch bulk-out transfer(size = any), press enter to continue"
717 << 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: UsbfnMtpFileReceive007
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, UsbfnMtpFileReceive007, TestSize.Level1)
738 {
739 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
740 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
741 HDF_LOGI("UsbfnMtpTest::UsbfnMtpFileReceive007 Case Start");
742 g_fileTestCount++;
743 struct UsbFnMtpFileSlice mfs = g_mfs;
744 mfs.length = MTP_MAX_FILE_SIZE - 1;
745 std::cout << "UsbfnMtpFileReceive007===>use libusb in PC launch bulk-out transfer(size = " << mfs.length
746 << "), 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: UsbfnMtpFileReceive008
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, UsbfnMtpFileReceive008, TestSize.Level1)
767 {
768 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
769 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
770 HDF_LOGI("UsbfnMtpTest::UsbfnMtpFileReceive008 Case Start");
771 g_fileTestCount++;
772 struct UsbFnMtpFileSlice mfs = g_mfs;
773 mfs.length = MTP_MAX_FILE_SIZE + 1;
774 std::cout << "UsbfnMtpFileReceive008===>use libusb in PC launch bulk-out transfer(size = " << mfs.length
775 << "), 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: UsbfnMtpFileReceive009
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, UsbfnMtpFileReceive009, TestSize.Level1)
796 {
797 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
798 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
799 HDF_LOGI("UsbfnMtpTest::UsbfnMtpFileReceive009 Case Start");
800 g_fileTestCount++;
801 struct UsbFnMtpFileSlice mfs = g_mfs;
802 mfs.length = MTP_MAX_FILE_SIZE + 2;
803 std::cout << "UsbfnMtpFileReceive009===>use libusb in PC launch bulk-out transfer(size = " << mfs.length
804 << "), 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: UsbfnMtpFileSend001
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, UsbfnMtpFileSend001, TestSize.Level1)
825 {
826 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
827 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
828 HDF_LOGI("UsbfnMtpTest::UsbfnMtpFileSend001 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 << "UsbfnMtpFileSend001===>use libusb in PC launch bulk-in transfer(expect " << mfs.length
835 << "), press enter to continue" << std::endl;
836 int32_t c;
837 while ((c = getchar()) != '\n' && c != EOF) {}
838
839 mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDONLY);
840 ASSERT_GT(mfs.fd, 0);
841 auto ret = g_usbfnMtpInterface->SendFile(mfs);
842 close(mfs.fd);
843 ASSERT_EQ(ret, 0);
844 }
845
846 /**
847 * @tc.name: UsbfnMtpFileSend002
848 * @tc.desc: Test functions to SendFile
849 * @tc.desc: int32_t SendFile(const UsbFnMtpFileSlice &mfs);
850 * @tc.desc: Positive test: parameters correctly, send header + data in one packet
851 * @tc.type: FUNC
852 */
853 HWTEST_F(UsbfnMtpTest, UsbfnMtpFileSend002, TestSize.Level1)
854 {
855 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
856 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
857 HDF_LOGI("UsbfnMtpTest::UsbfnMtpFileSend002 Case Start");
858 g_fileTestCount++;
859 struct UsbFnMtpFileSlice mfs = g_mfs;
860 mfs.length = BULK_IN_LESS_THEN_ONCE;
861 mfs.command = CMD_CODE_GET_DEVICE_INFO;
862 std::string filePathName = MTP_TEST_SEND_FILE;
863 EXPECT_TRUE(GenerateFile(filePathName, mfs.length));
864 std::cout << "UsbfnMtpFileSend002===>use libusb in PC launch bulk-in transfer(expect "
865 << mfs.length + MTP_PACKET_HEADER_SIZE << "), press enter to continue" << std::endl;
866 int32_t c;
867 while ((c = getchar()) != '\n' && c != EOF) {}
868
869 mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDONLY);
870 ASSERT_GT(mfs.fd, 0);
871 auto ret = g_usbfnMtpInterface->SendFile(mfs);
872 close(mfs.fd);
873 ASSERT_EQ(0, ret);
874 }
875
876 /**
877 * @tc.name: UsbfnMtpFileSend003
878 * @tc.desc: Test functions to SendFile
879 * @tc.desc: int32_t SendFile(const UsbFnMtpFileSlice &mfs);
880 * @tc.desc: Positive test: parameters correctly, zero length
881 * @tc.type: FUNC
882 */
883 HWTEST_F(UsbfnMtpTest, UsbfnMtpFileSend003, TestSize.Level1)
884 {
885 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
886 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
887 HDF_LOGI("UsbfnMtpTest::UsbfnMtpFileSend003 Case Start");
888 g_fileTestCount++;
889 struct UsbFnMtpFileSlice mfs = g_mfs;
890 mfs.length = 0;
891 std::string filePathName = MTP_TEST_SEND_FILE;
892 EXPECT_TRUE(GenerateFile(filePathName, mfs.length));
893 mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDONLY);
894 ASSERT_GT(mfs.fd, 0);
895 auto ret = g_usbfnMtpInterface->SendFile(mfs);
896 close(mfs.fd);
897 ASSERT_EQ(0, ret);
898 }
899
900 /**
901 * @tc.name: UsbfnMtpFileSend004
902 * @tc.desc: Test functions to SendFile
903 * @tc.desc: int32_t SendFile(const UsbFnMtpFileSlice &mfs);
904 * @tc.desc: Positive test: parameters correctly, send header + data in two packet: normal + short
905 * @tc.type: FUNC
906 */
907 HWTEST_F(UsbfnMtpTest, UsbfnMtpFileSend004, TestSize.Level1)
908 {
909 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
910 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
911 HDF_LOGI("UsbfnMtpTest::UsbfnMtpFileSend004 Case Start");
912 g_fileTestCount++;
913 struct UsbFnMtpFileSlice mfs = g_mfs;
914 mfs.length = MTP_FILE_SIZE_ONE_REQ;
915 mfs.command = CMD_CODE_GET_DEVICE_INFO;
916 std::string filePathName = MTP_TEST_SEND_FILE;
917 EXPECT_TRUE(GenerateFile(filePathName, mfs.length));
918 std::cout << "UsbfnMtpFileSend004===>use libusb in PC launch bulk-in transfer(expect "
919 << mfs.length + MTP_PACKET_HEADER_SIZE << "), press enter to continue" << std::endl;
920 int32_t c;
921 while ((c = getchar()) != '\n' && c != EOF) {}
922
923 mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDONLY);
924 ASSERT_GT(mfs.fd, 0);
925 auto ret = g_usbfnMtpInterface->SendFile(mfs);
926 close(mfs.fd);
927 ASSERT_EQ(0, ret);
928 }
929
930 /**
931 * @tc.name: UsbfnMtpFileSend005
932 * @tc.desc: Test functions to SendFile
933 * @tc.desc: int32_t SendFile(const UsbFnMtpFileSlice &mfs);
934 * @tc.desc: Positive test: parameters correctly, mfs.length set to max
935 * @tc.type: FUNC
936 */
937 HWTEST_F(UsbfnMtpTest, UsbfnMtpFileSend005, TestSize.Level1)
938 {
939 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
940 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
941 HDF_LOGI("UsbfnMtpTest::UsbfnMtpFileSend005 Case Start");
942 g_fileTestCount++;
943 struct UsbFnMtpFileSlice mfs = g_mfs;
944 mfs.length = MTP_FILE_SIZE_REUSE_REQ;
945 std::string filePathName = MTP_TEST_SEND_FILE;
946 EXPECT_TRUE(GenerateFile(filePathName, mfs.length));
947 std::cout << "UsbfnMtpFileSend005===>use libusb in PC launch bulk-in transfer(speed, expect " << mfs.length
948 << "), press enter to continue" << std::endl;
949 int32_t c;
950 while ((c = getchar()) != '\n' && c != EOF) {}
951
952 mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDONLY);
953 ASSERT_GT(mfs.fd, 0);
954 auto ret = g_usbfnMtpInterface->SendFile(mfs);
955 close(mfs.fd);
956 ASSERT_EQ(0, ret);
957 }
958
959 /**
960 * @tc.name: UsbfnMtpFileSend006
961 * @tc.desc: Test functions to SendFile
962 * @tc.desc: int32_t SendFile(const UsbFnMtpFileSlice &mfs);
963 * @tc.desc: Positive test: parameters correctly, mfs.length set to max: 4GB - 1
964 * @tc.type: FUNC
965 */
966 HWTEST_F(UsbfnMtpTest, UsbfnMtpFileSend006, TestSize.Level1)
967 {
968 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
969 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
970 HDF_LOGI("UsbfnMtpTest::UsbfnMtpFileSend006 Case Start");
971 g_fileTestCount++;
972 struct UsbFnMtpFileSlice mfs = g_mfs;
973 mfs.length = MTP_MAX_FILE_SIZE;
974 std::string filePathName = MTP_TEST_SEND_FILE;
975 EXPECT_TRUE(GenerateFile(filePathName, mfs.length));
976 std::cout << "UsbfnMtpFileSend006===>use libusb in PC launch bulk-in transfer(speed, expect " << mfs.length
977 << "), press enter to continue" << std::endl;
978 int32_t c;
979 while ((c = getchar()) != '\n' && c != EOF) {}
980
981 mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDONLY);
982 ASSERT_GT(mfs.fd, 0);
983 auto ret = g_usbfnMtpInterface->SendFile(mfs);
984 close(mfs.fd);
985 ASSERT_EQ(0, ret);
986 }
987
988 /**
989 * @tc.name: UsbfnMtpFileSend007
990 * @tc.desc: Test functions to SendFile
991 * @tc.desc: int32_t SendFile(const UsbFnMtpFileSlice &mfs);
992 * @tc.desc: Positive test: parameters correctly, mfs.length set to max + 1: 4GB
993 * @tc.type: FUNC
994 */
995 HWTEST_F(UsbfnMtpTest, UsbfnMtpFileSend007, TestSize.Level1)
996 {
997 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
998 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
999 HDF_LOGI("UsbfnMtpTest::UsbfnMtpFileSend007 Case Start");
1000 g_fileTestCount++;
1001 struct UsbFnMtpFileSlice mfs = g_mfs;
1002 mfs.length = MTP_MAX_FILE_SIZE + 1;
1003 std::string filePathName = MTP_TEST_SEND_FILE;
1004 EXPECT_TRUE(GenerateFile(filePathName, mfs.length));
1005 std::cout << "UsbfnMtpFileSend007===>use libusb in PC launch bulk-in transfer(speed, expect " << mfs.length
1006 << "), press enter to continue" << std::endl;
1007 int32_t c;
1008 while ((c = getchar()) != '\n' && c != EOF) {}
1009
1010 mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDONLY);
1011 ASSERT_GT(mfs.fd, 0);
1012 auto ret = g_usbfnMtpInterface->SendFile(mfs);
1013 close(mfs.fd);
1014 ASSERT_EQ(0, ret);
1015 }
1016
1017 /**
1018 * @tc.name: UsbfnMtpFileSend008
1019 * @tc.desc: Test functions to SendFile
1020 * @tc.desc: int32_t SendFile(const UsbFnMtpFileSlice &mfs);
1021 * @tc.desc: Positive test: parameters correctly, mfs.length set to max + 1: 4GB + 1
1022 * @tc.type: FUNC
1023 */
1024 HWTEST_F(UsbfnMtpTest, UsbfnMtpFileSend008, TestSize.Level1)
1025 {
1026 ASSERT_TRUE(g_usbfnMtpInterface != nullptr);
1027 ASSERT_TRUE(GetCurrentProcPath() == std::string(WORKED_UT_PATH));
1028 HDF_LOGI("UsbfnMtpTest::UsbfnMtpFileSend008 Case Start");
1029 g_fileTestCount++;
1030 struct UsbFnMtpFileSlice mfs = g_mfs;
1031 mfs.length = MTP_MAX_FILE_SIZE + 2;
1032 std::string filePathName = MTP_TEST_SEND_FILE;
1033 EXPECT_TRUE(GenerateFile(filePathName, mfs.length));
1034 std::cout << "UsbfnMtpFileSend008===>use libusb in PC launch bulk-in transfer(speed, expect " << mfs.length
1035 << "), press enter to continue" << std::endl;
1036 int32_t c;
1037 while ((c = getchar()) != '\n' && c != EOF) {}
1038
1039 mfs.fd = open(filePathName.c_str(), O_CREAT | O_RDONLY);
1040 ASSERT_GT(mfs.fd, 0);
1041 auto ret = g_usbfnMtpInterface->SendFile(mfs);
1042 close(mfs.fd);
1043 ASSERT_EQ(0, ret);
1044 }
1045
1046 } // namespace
1047