1 /*
2 * Copyright (c) 2023-2025 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_manage_interface_test.h"
17
18 #include <iostream>
19 #include <vector>
20
21 #include "hdf_log.h"
22 #include "v1_0/iusb_interface.h"
23 #include "v1_0/usb_types.h"
24
25 const int SLEEP_TIME = 3;
26 const uint8_t BUS_NUM_INVALID = 255;
27 const uint8_t DEV_ADDR_INVALID = 255;
28 const uint8_t INTERFACEID_OK = 1;
29 const uint8_t INTERFACEID_OK_NEW = 0;
30 const uint8_t INTERFACEID_INVALID = 255;
31
32 using namespace testing::ext;
33 using namespace OHOS;
34 using namespace OHOS::USB;
35 using namespace std;
36 using namespace OHOS::HDI::Usb::V1_0;
37 namespace OHOS {
38 namespace USB {
39 namespace ManageInterface {
40 UsbDev UsbdManageInterfaceTest::dev_ = {0, 0};
41 sptr<UsbSubscriberTest> UsbdManageInterfaceTest::subscriber_ = nullptr;
42 sptr<IUsbInterface> g_usbInterface = nullptr;
43
SetUpTestCase(void)44 void UsbdManageInterfaceTest::SetUpTestCase(void)
45 {
46 g_usbInterface = IUsbInterface::Get();
47 if (g_usbInterface == nullptr) {
48 HDF_LOGE("%{public}s:IUsbInterface::Get() failed.", __func__);
49 exit(0);
50 }
51 auto ret = g_usbInterface->SetPortRole(1, 1, 1);
52 sleep(SLEEP_TIME);
53 HDF_LOGI("UsbdManageInterfaceTest::[Device] %{public}d SetPortRole=%{public}d", __LINE__, ret);
54 if (ret != 0) {
55 ASSERT_EQ(HDF_ERR_NOT_SUPPORT, ret);
56 } else {
57 ASSERT_EQ(0, ret);
58 }
59
60 subscriber_ = new UsbSubscriberTest();
61 if (g_usbInterface->BindUsbdSubscriber(subscriber_) != HDF_SUCCESS) {
62 HDF_LOGE("%{public}s: bind usbd subscriber_ failed", __func__);
63 exit(0);
64 }
65
66 std::cout << "please connect device, press enter to continue" << std::endl;
67 int c;
68 while ((c = getchar()) != '\n' && c != EOF) {}
69 dev_ = {subscriber_->busNum_, subscriber_->devAddr_};
70
71 ret = g_usbInterface->OpenDevice(dev_);
72 HDF_LOGI("UsbdManageInterfaceTest:: %{public}d OpenDevice=%{public}d", __LINE__, ret);
73 ASSERT_EQ(0, ret);
74 }
75
TearDownTestCase(void)76 void UsbdManageInterfaceTest::TearDownTestCase(void)
77 {
78 g_usbInterface->UnbindUsbdSubscriber(subscriber_);
79 dev_ = {subscriber_->busNum_, subscriber_->devAddr_};
80 auto ret = g_usbInterface->CloseDevice(dev_);
81 HDF_LOGI("UsbdManageInterfaceTest:: %{public}d Close=%{public}d", __LINE__, ret);
82 ASSERT_EQ(0, ret);
83 }
84
SetUp(void)85 void UsbdManageInterfaceTest::SetUp(void) {}
86
TearDown(void)87 void UsbdManageInterfaceTest::TearDown(void) {}
88
89 /**
90 * @tc.name: SUB_USB_HostManager_HDI_Func_1500
91 * @tc.desc: Test functions to ManageInterface
92 * @tc.desc: int32_t ManageInterface(const UsbDev &dev, uint8_t interfaceId, bool disable);
93 * @tc.desc: Positive test: parameters correctly
94 * @tc.type: FUNC
95 */
96 HWTEST_F(UsbdManageInterfaceTest, SUB_USB_HostManager_HDI_Func_1500, Function | MediumTest | Level1)
97 {
98 uint8_t interfaceId = INTERFACEID_OK_NEW;
99 struct UsbDev dev = dev_;
100 int32_t ret = -1;
101 for (; interfaceId < INTERFACEID_INVALID; interfaceId++) {
102 ret = g_usbInterface->ManageInterface(dev, interfaceId, true);
103 if (ret == 0) {
104 break;
105 }
106 }
107 HDF_LOGI("UsbdManageInterfaceTest::SUB_USB_HostManager_HDI_Func_1500 %{public}d ManageInterface=%{public}d",
108 __LINE__, ret);
109 ASSERT_EQ(0, ret);
110 }
111
112 /**
113 * @tc.name: SUB_USB_HostManager_HDI_Compatibility_7300
114 * @tc.desc: Test functions to ManageInterface
115 * @tc.desc: int32_t ManageInterface(const UsbDev &dev, uint8_t interfaceId, bool disable);
116 * @tc.desc: Negative test: parameters exception, busNum error
117 * @tc.type: FUNC
118 */
119 HWTEST_F(UsbdManageInterfaceTest, SUB_USB_HostManager_HDI_Compatibility_7300, Function | MediumTest | Level1)
120 {
121 uint8_t interfaceId = INTERFACEID_OK;
122 struct UsbDev dev = dev_;
123 dev.busNum = BUS_NUM_INVALID;
124 auto ret = g_usbInterface->ManageInterface(dev, interfaceId, true);
125 HDF_LOGI("UsbdManageInterfaceTest::SUB_USB_HostManager_HDI_Compatibility_7300 %{public}d ret=%{public}d",
126 __LINE__, ret);
127 ASSERT_NE(ret, 0);
128 }
129
130 /**
131 * @tc.name: SUB_USB_HostManager_HDI_Compatibility_7400
132 * @tc.desc: Test functions to ManageInterface
133 * @tc.desc: int32_t ManageInterface(const UsbDev &dev, uint8_t interfaceId, bool disable);
134 * @tc.desc: Negative test: parameters exception, devAddr error
135 * @tc.type: FUNC
136 */
137 HWTEST_F(UsbdManageInterfaceTest, SUB_USB_HostManager_HDI_Compatibility_7400, Function | MediumTest | Level1)
138 {
139 uint8_t interfaceId = INTERFACEID_OK;
140 struct UsbDev dev = {dev_.busNum, DEV_ADDR_INVALID};
141 auto ret = g_usbInterface->ManageInterface(dev, interfaceId, true);
142 HDF_LOGI("UsbdManageInterfaceTest::SUB_USB_HostManager_HDI_Compatibility_7400 %{public}d ret=%{public}d",
143 __LINE__, ret);
144 ASSERT_NE(ret, 0);
145 }
146
147 /**
148 * @tc.name: SUB_USB_HostManager_HDI_Compatibility_7500
149 * @tc.desc: Test functions to ManageInterface
150 * @tc.desc: int32_t ManageInterface(const UsbDev &dev, uint8_t interfaceId, bool disable);
151 * @tc.desc: Negative test: parameters exception, interfaceid error
152 * @tc.type: FUNC
153 */
154 HWTEST_F(UsbdManageInterfaceTest, SUB_USB_HostManager_HDI_Compatibility_7500, Function | MediumTest | Level1)
155 {
156 uint8_t interfaceId = INTERFACEID_OK;
157 struct UsbDev dev = dev_;
158 interfaceId = INTERFACEID_INVALID;
159 auto ret = g_usbInterface->ManageInterface(dev, interfaceId, true);
160 HDF_LOGI("UsbdManageInterfaceTest::SUB_USB_HostManager_HDI_Compatibility_7500 %{public}d ret=%{public}d",
161 __LINE__, ret);
162 ASSERT_NE(ret, 0);
163 }
164
165 /**
166 * @tc.name: SUB_USB_HostManager_HDI_Compatibility_7600
167 * @tc.desc: Test functions to ManageInterface
168 * @tc.desc: int32_t ManageInterface(const UsbDev &dev, uint8_t interfaceId, bool disable);
169 * @tc.desc: Negative test: parameters exception, busNum && devAddr error
170 * @tc.type: FUNC
171 */
172 HWTEST_F(UsbdManageInterfaceTest, SUB_USB_HostManager_HDI_Compatibility_7600, Function | MediumTest | Level1)
173 {
174 uint8_t interfaceId = INTERFACEID_OK;
175 struct UsbDev dev = {BUS_NUM_INVALID, DEV_ADDR_INVALID};
176 auto ret = g_usbInterface->ManageInterface(dev, interfaceId, true);
177 HDF_LOGI("UsbdManageInterfaceTest::SUB_USB_HostManager_HDI_Compatibility_7600 %{public}d ret=%{public}d",
178 __LINE__, ret);
179 ASSERT_NE(ret, 0);
180 }
181
182 /**
183 * @tc.name: SUB_USB_HostManager_HDI_Compatibility_7700
184 * @tc.desc: Test functions to ManageInterface
185 * @tc.desc: int32_t ManageInterface(const UsbDev &dev, uint8_t interfaceId, bool disable);
186 * @tc.desc: Negative test: parameters exception, busNum && interfaceid error
187 * @tc.type: FUNC
188 */
189 HWTEST_F(UsbdManageInterfaceTest, SUB_USB_HostManager_HDI_Compatibility_7700, Function | MediumTest | Level1)
190 {
191 uint8_t interfaceId = INTERFACEID_INVALID;
192 struct UsbDev dev = {BUS_NUM_INVALID, dev_.devAddr};
193 auto ret = g_usbInterface->ManageInterface(dev, interfaceId, true);
194 HDF_LOGI("UsbdManageInterfaceTest::SUB_USB_HostManager_HDI_Compatibility_7700 %{public}d ret=%{public}d",
195 __LINE__, ret);
196 ASSERT_NE(ret, 0);
197 }
198
199 /**
200 * @tc.name: SUB_USB_HostManager_HDI_Compatibility_7800
201 * @tc.desc: Test functions to ManageInterface
202 * @tc.desc: int32_t ManageInterface(const UsbDev &dev, uint8_t interfaceId, bool disable);
203 * @tc.desc: Negative test: parameters exception, devAddr && interfaceid error
204 * @tc.type: FUNC
205 */
206 HWTEST_F(UsbdManageInterfaceTest, SUB_USB_HostManager_HDI_Compatibility_7800, Function | MediumTest | Level1)
207 {
208 uint8_t interfaceId = INTERFACEID_INVALID;
209 struct UsbDev dev = {dev_.busNum, DEV_ADDR_INVALID};
210 auto ret = g_usbInterface->ManageInterface(dev, interfaceId, true);
211 HDF_LOGI("UsbdManageInterfaceTest::SUB_USB_HostManager_HDI_Compatibility_7800 %{public}d ret=%{public}d",
212 __LINE__, ret);
213 ASSERT_NE(ret, 0);
214 }
215
216 /**
217 * @tc.name: SUB_USB_HostManager_HDI_Compatibility_7900
218 * @tc.desc: Test functions to ManageInterface
219 * @tc.desc: int32_t ManageInterface(const UsbDev &dev, uint8_t interfaceId, bool disable);
220 * @tc.desc: Negative test: parameters exception, busNum && devAddr && interfaceid error
221 * @tc.type: FUNC
222 */
223 HWTEST_F(UsbdManageInterfaceTest, SUB_USB_HostManager_HDI_Compatibility_7900, Function | MediumTest | Level1)
224 {
225 uint8_t interfaceId = INTERFACEID_INVALID;
226 struct UsbDev dev = {BUS_NUM_INVALID, DEV_ADDR_INVALID};
227 auto ret = g_usbInterface->ManageInterface(dev, interfaceId, true);
228 HDF_LOGI("UsbdManageInterfaceTest::SUB_USB_HostManager_HDI_Compatibility_7900 %{public}d ret=%{public}d",
229 __LINE__, ret);
230 ASSERT_NE(ret, 0);
231 }
232
233 /**
234 * @tc.name: SUB_USB_HostManager_HDI_Func_1600
235 * @tc.desc: Test functions to ManageInterface
236 * @tc.desc: int32_t ManageInterface(const UsbDev &dev, uint8_t interfaceId, bool disable);
237 * @tc.desc: Positive test: parameters correctly
238 * @tc.type: FUNC
239 */
240 HWTEST_F(UsbdManageInterfaceTest, SUB_USB_HostManager_HDI_Func_1600, Function | MediumTest | Level1)
241 {
242 uint8_t interfaceId = INTERFACEID_OK_NEW;
243 struct UsbDev dev = dev_;
244 int32_t ret = -1;
245 for (; interfaceId < INTERFACEID_INVALID; interfaceId++) {
246 ret = g_usbInterface->ManageInterface(dev, interfaceId, false);
247 if (ret == 0) {
248 break;
249 }
250 }
251 HDF_LOGI("UsbdManageInterfaceTest::SUB_USB_HostManager_HDI_Func_1600 %{public}d ManageInterface=%{public}d",
252 __LINE__, ret);
253 ASSERT_EQ(0, ret);
254 }
255 } // ManageInterface
256 } // USB
257 } // OHOS
258