1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include <iostream>
16 #include <vector>
17
18 #include "hdf_log.h"
19 #include "usbd_device_test.h"
20 #include "v1_0/iusb_interface.h"
21 #include "v1_0/usb_types.h"
22
23 using namespace testing::ext;
24 using namespace OHOS;
25 using namespace OHOS::USB;
26 using namespace std;
27 using namespace OHOS::HDI::Usb::V1_0;
28
29 const int SLEEP_TIME = 3;
30 sptr<UsbSubscriberTest> UsbdDeviceTestAdditional::subscriber_ = nullptr;
31
32 namespace {
33 sptr<IUsbInterface> g_usbInterface = nullptr;
34
35 struct UsbDev UsbdDeviceTestAdditional::dev_ = {0, 0};
36
SwitchErrCode(int32_t ret)37 int32_t SwitchErrCode(int32_t ret)
38 {
39 return ret == HDF_ERR_NOT_SUPPORT ? HDF_SUCCESS : ret;
40 }
41
SetUpTestCase(void)42 void UsbdDeviceTestAdditional::SetUpTestCase(void)
43 {
44 g_usbInterface = IUsbInterface::Get();
45 if (g_usbInterface == nullptr) {
46 HDF_LOGE("%{public}s:IUsbInterface::Get() failed.", __func__);
47 exit(0);
48 }
49 auto ret = g_usbInterface->SetPortRole(1, 1, 1);
50 sleep(SLEEP_TIME);
51 HDF_LOGI("UsbdDeviceTestAdditional::[Device] %{public}d SetPortRole=%{public}d", __LINE__, ret);
52 ret = SwitchErrCode(ret);
53 ASSERT_EQ(0, ret);
54 if (ret != 0) {
55 exit(0);
56 }
57
58 subscriber_ = new UsbSubscriberTest();
59 if (g_usbInterface->BindUsbdSubscriber(subscriber_) != HDF_SUCCESS) {
60 HDF_LOGE("%{public}s: bind usbd subscriber_ failed\n", __func__);
61 exit(0);
62 }
63 dev_ = {subscriber_->busNum_, subscriber_->devAddr_};
64
65 std::cout << "please connect device, press enter to continue" << std::endl;
66 int c;
67 while ((c = getchar()) != '\n' && c != EOF) {
68 }
69 }
70
TearDownTestCase(void)71 void UsbdDeviceTestAdditional::TearDownTestCase(void) { g_usbInterface->UnbindUsbdSubscriber(subscriber_); }
72
SetUp(void)73 void UsbdDeviceTestAdditional::SetUp(void) {}
74
TearDown(void)75 void UsbdDeviceTestAdditional::TearDown(void) {}
76
77 /**
78 * @tc.number: SUB_Driver_Usb_DeviceTest_OpenDevice_0500
79 * @tc.name: testHdiUsbDeviceTestOpenDevice001
80 * @tc.desc: Opens a USB device to set up a connection. dev ={1, 255}.
81 */
82 HWTEST_F(UsbdDeviceTestAdditional, testHdiUsbDeviceTestOpenDevice001, Function | MediumTest | Level2)
83 {
84 struct UsbDev dev = {1, 255};
85 auto ret = g_usbInterface->OpenDevice(dev);
86 ASSERT_NE(ret, 0);
87 }
88
89 /**
90 * @tc.number: SUB_Driver_Usb_DeviceTest_OpenDevice_0600
91 * @tc.name: testHdiUsbDeviceTestOpenDevice002
92 * @tc.desc: Opens a USB device to set up a connection. dev ={255, 1}.
93 */
94 HWTEST_F(UsbdDeviceTestAdditional, testHdiUsbDeviceTestOpenDevice002, Function | MediumTest | Level2)
95 {
96 struct UsbDev dev = {255, 1};
97 auto ret = g_usbInterface->OpenDevice(dev);
98 ASSERT_NE(ret, 0);
99 }
100
101 /**
102 * @tc.number: SUB_Driver_Usb_DeviceTest_OpenDevice_0700
103 * @tc.name: testHdiUsbDeviceTestOpenDevice003
104 * @tc.desc: Opens a USB device to set up a connection. dev ={255, 100}.
105 */
106 HWTEST_F(UsbdDeviceTestAdditional, testHdiUsbDeviceTestOpenDevice003, Function | MediumTest | Level2)
107 {
108 struct UsbDev dev = {255, 100};
109 auto ret = g_usbInterface->OpenDevice(dev);
110 ASSERT_NE(ret, 0);
111 }
112
113 /**
114 * @tc.number: SUB_Driver_Usb_DeviceTest_OpenDevice_0800
115 * @tc.name: testHdiUsbDeviceTestOpenDevice004
116 * @tc.desc: Opens a USB device to set up a connection. dev ={100, 255}.
117 */
118 HWTEST_F(UsbdDeviceTestAdditional, testHdiUsbDeviceTestOpenDevice004, Function | MediumTest | Level2)
119 {
120 struct UsbDev dev = {100, 255};
121 auto ret = g_usbInterface->OpenDevice(dev);
122 ASSERT_NE(ret, 0);
123 }
124
125 /**
126 * @tc.number: SUB_Driver_Usb_DeviceTest_CloseDevice_0500
127 * @tc.name: testHdiUsbDeviceTestCloseDevice001
128 * @tc.desc: Closes a USB device to release all system resources related to the device. dev ={1, 255}.
129 */
130 HWTEST_F(UsbdDeviceTestAdditional, testHdiUsbDeviceTestCloseDevice001, Function | MediumTest | Level2)
131 {
132 struct UsbDev dev = dev_;
133 auto ret = g_usbInterface->OpenDevice(dev);
134 ASSERT_EQ(0, ret);
135 dev = {1, 255};
136 ret = g_usbInterface->CloseDevice(dev);
137 ASSERT_NE(ret, 0);
138 dev = dev_;
139 ret = g_usbInterface->CloseDevice(dev);
140 ASSERT_EQ(ret, 0);
141 }
142
143 /**
144 * @tc.number: SUB_Driver_Usb_DeviceTest_CloseDevice_0600
145 * @tc.name: testHdiUsbDeviceTestCloseDevice002
146 * @tc.desc: Closes a USB device to release all system resources related to the device. dev ={255, 1}.
147 */
148 HWTEST_F(UsbdDeviceTestAdditional, testHdiUsbDeviceTestCloseDevice002, Function | MediumTest | Level2)
149 {
150 struct UsbDev dev = dev_;
151 auto ret = g_usbInterface->OpenDevice(dev);
152 ASSERT_EQ(0, ret);
153 dev = {255, 1};
154 ret = g_usbInterface->CloseDevice(dev);
155 ASSERT_NE(ret, 0);
156 dev = dev_;
157 ret = g_usbInterface->CloseDevice(dev);
158 ASSERT_EQ(ret, 0);
159 }
160
161 /**
162 * @tc.number: SUB_Driver_Usb_DeviceTest_CloseDevice_0700
163 * @tc.name: testHdiUsbDeviceTestCloseDevice003
164 * @tc.desc: Closes a USB device to release all system resources related to the device. dev ={255, 100}.
165 */
166 HWTEST_F(UsbdDeviceTestAdditional, testHdiUsbDeviceTestCloseDevice003, Function | MediumTest | Level2)
167 {
168 struct UsbDev dev = dev_;
169 auto ret = g_usbInterface->OpenDevice(dev);
170 ASSERT_EQ(0, ret);
171 dev = {255, 100};
172 ret = g_usbInterface->CloseDevice(dev);
173 ASSERT_NE(ret, 0);
174 dev = dev_;
175 ret = g_usbInterface->CloseDevice(dev);
176 ASSERT_EQ(ret, 0);
177 }
178
179 /**
180 * @tc.number: SUB_Driver_Usb_DeviceTest_CloseDevice_0800
181 * @tc.name: testHdiUsbDeviceTestCloseDevice004
182 * @tc.desc: Closes a USB device to release all system resources related to the device. dev ={100, 255}.
183 */
184 HWTEST_F(UsbdDeviceTestAdditional, testHdiUsbDeviceTestCloseDevice004, Function | MediumTest | Level2)
185 {
186 struct UsbDev dev = dev_;
187 auto ret = g_usbInterface->OpenDevice(dev);
188 ASSERT_EQ(0, ret);
189 dev = {100, 255};
190 ret = g_usbInterface->CloseDevice(dev);
191 ASSERT_NE(ret, 0);
192 dev = dev_;
193 ret = g_usbInterface->CloseDevice(dev);
194 ASSERT_EQ(ret, 0);
195 }
196 } // namespace