1 /*
2 * Copyright (c) 2021-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 "usbd_device_test.h"
17
18 #include <iostream>
19 #include <vector>
20
21 #include "UsbSubscriberTest.h"
22 #include "hdf_log.h"
23 #include "v1_1/iusb_interface.h"
24 #include "v1_1/usb_types.h"
25
26 using namespace testing::ext;
27 using namespace OHOS;
28 using namespace OHOS::USB;
29 using namespace std;
30 using namespace OHOS::HDI::Usb::V1_0;
31 using namespace OHOS::HDI::Usb::V1_1;
32
33 const int SLEEP_TIME = 3;
34 const uint8_t BUS_NUM_INVALID = 255;
35 const uint8_t DEV_ADDR_INVALID = 255;
36 UsbDev UsbdDeviceTest::dev_ = {0, 0};
37 sptr<UsbSubscriberTest> UsbdDeviceTest::subscriber_ = nullptr;
38
39 namespace {
40 sptr<OHOS::HDI::Usb::V1_1::IUsbInterface> g_usbInterface = nullptr;
41
SwitchErrCode(int32_t ret)42 int32_t SwitchErrCode(int32_t ret)
43 {
44 return ret == HDF_ERR_NOT_SUPPORT ? HDF_SUCCESS : ret;
45 }
46
SetUpTestCase(void)47 void UsbdDeviceTest::SetUpTestCase(void)
48 {
49 g_usbInterface = OHOS::HDI::Usb::V1_1::IUsbInterface::Get();
50 if (g_usbInterface == nullptr) {
51 HDF_LOGE("%{public}s:IUsbInterface::Get() failed.", __func__);
52 exit(0);
53 }
54 auto ret = g_usbInterface->SetPortRole(1, 1, 1);
55 sleep(SLEEP_TIME);
56 HDF_LOGI("UsbdDeviceTest::[Device] %{public}d SetPortRole=%{public}d", __LINE__, ret);
57 ret = SwitchErrCode(ret);
58 ASSERT_EQ(0, ret);
59 if (ret != 0) {
60 exit(0);
61 }
62
63 subscriber_ = new UsbSubscriberTest();
64 if (g_usbInterface->BindUsbdSubscriber(subscriber_) != HDF_SUCCESS) {
65 HDF_LOGE("%{public}s: bind usbd subscriber_ failed", __func__);
66 exit(0);
67 }
68 dev_ = {subscriber_->busNum_, subscriber_->devAddr_};
69
70 std::cout << "please connect device, press enter to continue" << std::endl;
71 int c;
72 while ((c = getchar()) != '\n' && c != EOF) {}
73 }
74
TearDownTestCase(void)75 void UsbdDeviceTest::TearDownTestCase(void)
76 {
77 g_usbInterface->UnbindUsbdSubscriber(subscriber_);
78 }
79
SetUp(void)80 void UsbdDeviceTest::SetUp(void) {}
81
TearDown(void)82 void UsbdDeviceTest::TearDown(void) {}
83
84 /**
85 * @tc.name: UsbdDevice001
86 * @tc.desc: Test functions to OpenDevice
87 * @tc.desc: int32_t OpenDevice(const UsbDev &dev);
88 * @tc.desc: 正向测试:参数正确
89 * @tc.type: FUNC
90 */
HWTEST_F(UsbdDeviceTest, UsbdOpenDevice001, TestSize.Level1)91 HWTEST_F(UsbdDeviceTest, UsbdOpenDevice001, TestSize.Level1)
92 {
93 struct UsbDev dev = dev_;
94 auto ret = g_usbInterface->OpenDevice(dev);
95 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result =%{public}d", __LINE__, ret);
96 EXPECT_EQ(0, ret);
97 }
98
99 /**
100 * @tc.name: UsbdDevice002
101 * @tc.desc: Test functions to OpenDevice
102 * @tc.desc: int32_t OpenDevice(const UsbDev &dev);
103 * @tc.desc:
104 * @tc.type: FUNC
105 */
HWTEST_F(UsbdDeviceTest, UsbdOpenDevice002, TestSize.Level1)106 HWTEST_F(UsbdDeviceTest, UsbdOpenDevice002, TestSize.Level1)
107 {
108 struct UsbDev dev = {BUS_NUM_INVALID, dev_.devAddr};
109 auto ret = g_usbInterface->OpenDevice(dev);
110 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
111 EXPECT_NE(ret, 0);
112 }
113
114 /**
115 * @tc.name: UsbdDevice003
116 * @tc.desc: Test functions to OpenDevice
117 * @tc.desc: int32_t OpenDevice(const UsbDev &dev);
118 * @tc.desc:
119 * @tc.type: FUNC
120 */
HWTEST_F(UsbdDeviceTest, UsbdOpenDevice003, TestSize.Level1)121 HWTEST_F(UsbdDeviceTest, UsbdOpenDevice003, TestSize.Level1)
122 {
123 struct UsbDev dev = {dev_.busNum, DEV_ADDR_INVALID};
124 auto ret = g_usbInterface->OpenDevice(dev);
125 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
126 EXPECT_NE(ret, 0);
127 }
128
129 /**
130 * @tc.name: UsbdDevice004
131 * @tc.desc: Test functions to OpenDevice
132 * @tc.desc: int32_t OpenDevice(const UsbDev &dev);
133 * @tc.desc:
134 * @tc.type: FUNC
135 */
HWTEST_F(UsbdDeviceTest, UsbdOpenDevice004, TestSize.Level1)136 HWTEST_F(UsbdDeviceTest, UsbdOpenDevice004, TestSize.Level1)
137 {
138 struct UsbDev dev = {BUS_NUM_INVALID, DEV_ADDR_INVALID};
139 auto ret = g_usbInterface->OpenDevice(dev);
140 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
141 EXPECT_NE(ret, 0);
142 }
143
144 /**********************************************************************************************************/
145
146 /**
147 * @tc.name: UsbdDevice011
148 * @tc.desc: Test functions to CloseDevice
149 * @tc.desc: int32_t CloseDevice(const UsbDev &dev);
150 * @tc.desc: 正向测试:参数正确
151 * @tc.type: FUNC
152 */
HWTEST_F(UsbdDeviceTest, UsbdCloseDevice001, TestSize.Level1)153 HWTEST_F(UsbdDeviceTest, UsbdCloseDevice001, TestSize.Level1)
154 {
155 struct UsbDev dev = dev_;
156 auto ret = g_usbInterface->OpenDevice(dev);
157 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
158 ASSERT_EQ(0, ret);
159 ret = g_usbInterface->CloseDevice(dev);
160 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret);
161 EXPECT_EQ(0, ret);
162 }
163
164 /**
165 * @tc.name: UsbdDevice012
166 * @tc.desc: Test functions to CloseDevice
167 * @tc.desc: int32_t CloseDevice(const UsbDev &dev);
168 * @tc.desc:
169 * @tc.type: FUNC
170 */
HWTEST_F(UsbdDeviceTest, UsbdCloseDevice002, TestSize.Level1)171 HWTEST_F(UsbdDeviceTest, UsbdCloseDevice002, TestSize.Level1)
172 {
173 struct UsbDev dev = dev_;
174 auto ret = g_usbInterface->OpenDevice(dev);
175 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
176 ASSERT_EQ(0, ret);
177 dev.busNum = BUS_NUM_INVALID;
178 ret = g_usbInterface->CloseDevice(dev);
179 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret);
180 EXPECT_NE(ret, 0);
181 dev = dev_;
182 g_usbInterface->CloseDevice(dev);
183 }
184
185 /**
186 * @tc.name: UsbdDevice013
187 * @tc.desc: Test functions to CloseDevice
188 * @tc.desc: int32_t CloseDevice(const UsbDev &dev);
189 * @tc.desc:
190 * @tc.type: FUNC
191 */
HWTEST_F(UsbdDeviceTest, UsbdCloseDevice003, TestSize.Level1)192 HWTEST_F(UsbdDeviceTest, UsbdCloseDevice003, TestSize.Level1)
193 {
194 struct UsbDev dev = dev_;
195 auto ret = g_usbInterface->OpenDevice(dev);
196 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
197 ASSERT_EQ(0, ret);
198 dev.devAddr = DEV_ADDR_INVALID;
199 ret = g_usbInterface->CloseDevice(dev);
200 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret);
201 EXPECT_NE(ret, 0);
202 dev = dev_;
203 g_usbInterface->CloseDevice(dev);
204 }
205
206 /**
207 * @tc.name: UsbdDevice014
208 * @tc.desc: Test functions to CloseDevice
209 * @tc.desc: int32_t CloseDevice(const UsbDev &dev);
210 * @tc.desc:
211 * @tc.type: FUNC
212 */
HWTEST_F(UsbdDeviceTest, UsbdCloseDevice004, TestSize.Level1)213 HWTEST_F(UsbdDeviceTest, UsbdCloseDevice004, TestSize.Level1)
214 {
215 struct UsbDev dev = dev_;
216 auto ret = g_usbInterface->OpenDevice(dev);
217 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
218 ASSERT_EQ(0, ret);
219 dev.busNum = BUS_NUM_INVALID;
220 dev.devAddr = DEV_ADDR_INVALID;
221 ret = g_usbInterface->CloseDevice(dev);
222 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret);
223 EXPECT_NE(ret, 0);
224 dev = dev_;
225 g_usbInterface->CloseDevice(dev);
226 }
227
228 /**
229 * @tc.name: UsbdResetDevice001
230 * @tc.desc: Test functions to ResetDevice
231 * @tc.desc: int32_t ResetDevice(const UsbDev &dev);
232 * @tc.desc: 正向测试:参数正确
233 * @tc.type: FUNC
234 */
HWTEST_F(UsbdDeviceTest, UsbdResetDevice001, TestSize.Level1)235 HWTEST_F(UsbdDeviceTest, UsbdResetDevice001, TestSize.Level1)
236 {
237 struct UsbDev dev = dev_;
238 auto ret = g_usbInterface->OpenDevice(dev);
239 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
240 ASSERT_EQ(0, ret);
241 ret = g_usbInterface->ResetDevice(dev);
242 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d ResetDevice result=%{public}d", __LINE__, ret);
243 EXPECT_EQ(0, ret);
244 ret = g_usbInterface->CloseDevice(dev);
245 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret);
246 EXPECT_EQ(0, ret);
247 }
248
249 /**
250 * @tc.name: UsbdResetDevice002
251 * @tc.desc: Test functions to ResetDevice
252 * @tc.desc: int32_t ResetDevice(const UsbDev &dev);
253 * @tc.desc:
254 * @tc.type: FUNC
255 */
HWTEST_F(UsbdDeviceTest, UsbdResetDevice002, TestSize.Level1)256 HWTEST_F(UsbdDeviceTest, UsbdResetDevice002, TestSize.Level1)
257 {
258 struct UsbDev dev = dev_;
259 auto ret = g_usbInterface->OpenDevice(dev);
260 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
261 ASSERT_EQ(0, ret);
262 dev.busNum = BUS_NUM_INVALID;
263 ret = g_usbInterface->ResetDevice(dev);
264 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d ResetDevice result=%{public}d", __LINE__, ret);
265 EXPECT_NE(0, ret);
266 ret = g_usbInterface->CloseDevice(dev);
267 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret);
268 EXPECT_NE(ret, 0);
269 dev = dev_;
270 g_usbInterface->CloseDevice(dev);
271 }
272
273 /**
274 * @tc.name: UsbdResetDevice003
275 * @tc.desc: Test functions to ResetDevice
276 * @tc.desc: int32_t ResetDevice(const UsbDev &dev);
277 * @tc.desc:
278 * @tc.type: FUNC
279 */
HWTEST_F(UsbdDeviceTest, UsbdResetDevice003, TestSize.Level1)280 HWTEST_F(UsbdDeviceTest, UsbdResetDevice003, TestSize.Level1)
281 {
282 struct UsbDev dev = dev_;
283 auto ret = g_usbInterface->OpenDevice(dev);
284 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
285 ASSERT_EQ(0, ret);
286 dev.devAddr = DEV_ADDR_INVALID;
287 ret = g_usbInterface->ResetDevice(dev);
288 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d ResetDevice result=%{public}d", __LINE__, ret);
289 EXPECT_NE(0, ret);
290 ret = g_usbInterface->CloseDevice(dev);
291 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret);
292 EXPECT_NE(ret, 0);
293 dev = dev_;
294 g_usbInterface->CloseDevice(dev);
295 }
296
297 /**
298 * @tc.name: UsbdResetDevice004
299 * @tc.desc: Test functions to ResetDevice
300 * @tc.desc: int32_t ResetDevice(const UsbDev &dev);
301 * @tc.desc:
302 * @tc.type: FUNC
303 */
HWTEST_F(UsbdDeviceTest, UsbdResetDevice004, TestSize.Level1)304 HWTEST_F(UsbdDeviceTest, UsbdResetDevice004, TestSize.Level1)
305 {
306 struct UsbDev dev = dev_;
307 auto ret = g_usbInterface->OpenDevice(dev);
308 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret);
309 ASSERT_EQ(0, ret);
310 dev.busNum = BUS_NUM_INVALID;
311 dev.devAddr = DEV_ADDR_INVALID;
312 ret = g_usbInterface->ResetDevice(dev);
313 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d ResetDevice result=%{public}d", __LINE__, ret);
314 EXPECT_NE(0, ret);
315 ret = g_usbInterface->CloseDevice(dev);
316 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret);
317 EXPECT_NE(ret, 0);
318 dev = dev_;
319 g_usbInterface->CloseDevice(dev);
320 }
321
322 /**
323 * @tc.number: SUB_USB_DeviceManager_HDI_CompatDeviceTest_0100
324 * @tc.name: testHdiUsbDeviceTestOpenDevice001
325 * @tc.desc: Opens a USB device to set up a connection. dev ={1, 255}.
326 */
HWTEST_F(UsbdDeviceTest, testHdiUsbDeviceTestOpenDevice001, Function | MediumTest | Level2)327 HWTEST_F(UsbdDeviceTest, testHdiUsbDeviceTestOpenDevice001, Function | MediumTest | Level2)
328 {
329 struct UsbDev dev = {1, 255};
330 auto ret = g_usbInterface->OpenDevice(dev);
331 EXPECT_NE(ret, 0);
332 }
333
334 /**
335 * @tc.number: SUB_USB_DeviceManager_HDI_CompatDeviceTest_0200
336 * @tc.name: testHdiUsbDeviceTestOpenDevice002
337 * @tc.desc: Opens a USB device to set up a connection. dev ={255, 1}.
338 */
HWTEST_F(UsbdDeviceTest, testHdiUsbDeviceTestOpenDevice002, Function | MediumTest | Level2)339 HWTEST_F(UsbdDeviceTest, testHdiUsbDeviceTestOpenDevice002, Function | MediumTest | Level2)
340 {
341 struct UsbDev dev = {255, 1};
342 auto ret = g_usbInterface->OpenDevice(dev);
343 EXPECT_NE(ret, 0);
344 }
345
346 /**
347 * @tc.number: SUB_USB_DeviceManager_HDI_CompatDeviceTest_0300
348 * @tc.name: testHdiUsbDeviceTestOpenDevice003
349 * @tc.desc: Opens a USB device to set up a connection. dev ={255, 100}.
350 */
HWTEST_F(UsbdDeviceTest, testHdiUsbDeviceTestOpenDevice003, Function | MediumTest | Level2)351 HWTEST_F(UsbdDeviceTest, testHdiUsbDeviceTestOpenDevice003, Function | MediumTest | Level2)
352 {
353 struct UsbDev dev = {255, 100};
354 auto ret = g_usbInterface->OpenDevice(dev);
355 EXPECT_NE(ret, 0);
356 }
357
358 /**
359 * @tc.number: SUB_USB_DeviceManager_HDI_CompatDeviceTest_0400
360 * @tc.name: testHdiUsbDeviceTestOpenDevice004
361 * @tc.desc: Opens a USB device to set up a connection. dev ={100, 255}.
362 */
HWTEST_F(UsbdDeviceTest, testHdiUsbDeviceTestOpenDevice004, Function | MediumTest | Level2)363 HWTEST_F(UsbdDeviceTest, testHdiUsbDeviceTestOpenDevice004, Function | MediumTest | Level2)
364 {
365 struct UsbDev dev = {100, 255};
366 auto ret = g_usbInterface->OpenDevice(dev);
367 EXPECT_NE(ret, 0);
368 }
369
370 /**
371 * @tc.number: SUB_USB_DeviceManager_HDI_CompatDeviceTest_0500
372 * @tc.name: testHdiUsbDeviceTestCloseDevice001
373 * @tc.desc: Closes a USB device to release all system resources related to the device. dev ={1, 255}.
374 */
HWTEST_F(UsbdDeviceTest, testHdiUsbDeviceTestCloseDevice001, Function | MediumTest | Level2)375 HWTEST_F(UsbdDeviceTest, testHdiUsbDeviceTestCloseDevice001, Function | MediumTest | Level2)
376 {
377 struct UsbDev dev = dev_;
378 auto ret = g_usbInterface->OpenDevice(dev);
379 ASSERT_EQ(0, ret);
380 dev = {1, 255};
381 ret = g_usbInterface->CloseDevice(dev);
382 EXPECT_NE(ret, 0);
383 dev = dev_;
384 ret = g_usbInterface->CloseDevice(dev);
385 EXPECT_EQ(ret, 0);
386 }
387
388 /**
389 * @tc.number: SUB_USB_DeviceManager_HDI_CompatDeviceTest_0600
390 * @tc.name: testHdiUsbDeviceTestCloseDevice002
391 * @tc.desc: Closes a USB device to release all system resources related to the device. dev ={255, 1}.
392 */
HWTEST_F(UsbdDeviceTest, testHdiUsbDeviceTestCloseDevice002, Function | MediumTest | Level2)393 HWTEST_F(UsbdDeviceTest, testHdiUsbDeviceTestCloseDevice002, Function | MediumTest | Level2)
394 {
395 struct UsbDev dev = dev_;
396 auto ret = g_usbInterface->OpenDevice(dev);
397 ASSERT_EQ(0, ret);
398 dev = {255, 1};
399 ret = g_usbInterface->CloseDevice(dev);
400 EXPECT_NE(ret, 0);
401 dev = dev_;
402 ret = g_usbInterface->CloseDevice(dev);
403 EXPECT_EQ(ret, 0);
404 }
405
406 /**
407 * @tc.number: SUB_USB_DeviceManager_HDI_CompatDeviceTest_0700
408 * @tc.name: testHdiUsbDeviceTestCloseDevice003
409 * @tc.desc: Closes a USB device to release all system resources related to the device. dev ={255, 100}.
410 */
HWTEST_F(UsbdDeviceTest, testHdiUsbDeviceTestCloseDevice003, Function | MediumTest | Level2)411 HWTEST_F(UsbdDeviceTest, testHdiUsbDeviceTestCloseDevice003, Function | MediumTest | Level2)
412 {
413 struct UsbDev dev = dev_;
414 auto ret = g_usbInterface->OpenDevice(dev);
415 ASSERT_EQ(0, ret);
416 dev = {255, 100};
417 ret = g_usbInterface->CloseDevice(dev);
418 EXPECT_NE(ret, 0);
419 dev = dev_;
420 ret = g_usbInterface->CloseDevice(dev);
421 EXPECT_EQ(ret, 0);
422 }
423
424 /**
425 * @tc.number: SUB_USB_DeviceManager_HDI_CompatDeviceTest_0800
426 * @tc.name: testHdiUsbDeviceTestCloseDevice004
427 * @tc.desc: Closes a USB device to release all system resources related to the device. dev ={100, 255}.
428 */
HWTEST_F(UsbdDeviceTest, testHdiUsbDeviceTestCloseDevice004, Function | MediumTest | Level2)429 HWTEST_F(UsbdDeviceTest, testHdiUsbDeviceTestCloseDevice004, Function | MediumTest | Level2)
430 {
431 struct UsbDev dev = dev_;
432 auto ret = g_usbInterface->OpenDevice(dev);
433 ASSERT_EQ(0, ret);
434 dev = {100, 255};
435 ret = g_usbInterface->CloseDevice(dev);
436 EXPECT_NE(ret, 0);
437 dev = dev_;
438 ret = g_usbInterface->CloseDevice(dev);
439 EXPECT_EQ(ret, 0);
440 }
441 } // namespace
442