1/* 2 * Copyright (c) 2021-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_1/iusb_interface.h" 21#include "v1_1/usb_types.h" 22 23using namespace testing::ext; 24using namespace OHOS; 25using namespace OHOS::USB; 26using namespace std; 27using namespace OHOS::HDI::Usb::V1_0; 28using namespace OHOS::HDI::Usb::V1_1; 29 30const int SLEEP_TIME = 3; 31const uint8_t BUS_NUM_INVALID = 255; 32const uint8_t DEV_ADDR_INVALID = 255; 33sptr<UsbSubscriberTest> UsbdDeviceTest::subscriber_ = nullptr; 34 35namespace { 36sptr<OHOS::HDI::Usb::V1_1::IUsbInterface> g_usbInterface = nullptr; 37 38struct UsbDev UsbdDeviceTest::dev_ = { 0, 0 }; 39 40int32_t SwitchErrCode(int32_t ret) 41{ 42 return ret == HDF_ERR_NOT_SUPPORT ? HDF_SUCCESS : ret; 43} 44 45void UsbdDeviceTest::SetUpTestCase(void) 46{ 47 g_usbInterface = OHOS::HDI::Usb::V1_1::IUsbInterface::Get(); 48 if (g_usbInterface == nullptr) { 49 HDF_LOGE("%{public}s:IUsbInterface::Get() failed.", __func__); 50 exit(0); 51 } 52 auto ret = g_usbInterface->SetPortRole(1, 1, 1); 53 sleep(SLEEP_TIME); 54 HDF_LOGI("UsbdDeviceTest::[Device] %{public}d SetPortRole=%{public}d", __LINE__, ret); 55 ret = SwitchErrCode(ret); 56 ASSERT_EQ(0, ret); 57 if (ret != 0) { 58 exit(0); 59 } 60 61 subscriber_ = new UsbSubscriberTest(); 62 if (g_usbInterface->BindUsbdSubscriber(subscriber_) != HDF_SUCCESS) { 63 HDF_LOGE("%{public}s: bind usbd subscriber_ failed\n", __func__); 64 exit(0); 65 } 66 dev_ = { subscriber_->busNum_, subscriber_->devAddr_ }; 67 68 std::cout << "please connect device, press enter to continue" << std::endl; 69 int c; 70 while ((c = getchar()) != '\n' && c != EOF) { 71 } 72} 73 74void UsbdDeviceTest::TearDownTestCase(void) 75{ 76 g_usbInterface->UnbindUsbdSubscriber(subscriber_); 77} 78 79void UsbdDeviceTest::SetUp(void) {} 80 81void UsbdDeviceTest::TearDown(void) {} 82 83/** 84 * @tc.name: SUB_USB_HostManager_HDI_Func_0100 85 * @tc.desc: Test functions to OpenDevice 86 * @tc.desc: int32_t OpenDevice(const UsbDev &dev); 87 * @tc.desc: Positive test: parameters correctly 88 * @tc.type: FUNC 89 */ 90HWTEST_F(UsbdDeviceTest, SUB_USB_HostManager_HDI_Func_0100, Function | MediumTest | Level1) 91{ 92 struct UsbDev dev = dev_; 93 auto ret = g_usbInterface->OpenDevice(dev); 94 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result =%{public}d", __LINE__, ret); 95 ASSERT_EQ(0, ret); 96} 97 98/** 99 * @tc.name: SUB_USB_HostManager_HDI_Compatibility_0100 100 * @tc.desc: Test functions to OpenDevice 101 * @tc.desc: int32_t OpenDevice(const UsbDev &dev); 102 * @tc.desc: Negative test: parameters exception, busNum error 103 * @tc.type: FUNC 104 */ 105HWTEST_F(UsbdDeviceTest, SUB_USB_HostManager_HDI_Compatibility_0100, Function | MediumTest | Level1) 106{ 107 struct UsbDev dev = { BUS_NUM_INVALID, dev_.devAddr }; 108 auto ret = g_usbInterface->OpenDevice(dev); 109 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret); 110 ASSERT_NE(ret, 0); 111} 112 113/** 114 * @tc.name: SUB_USB_HostManager_HDI_Compatibility_0200 115 * @tc.desc: Test functions to OpenDevice 116 * @tc.desc: int32_t OpenDevice(const UsbDev &dev); 117 * @tc.desc: Negative test: parameters exception, devAddr error 118 * @tc.type: FUNC 119 */ 120HWTEST_F(UsbdDeviceTest, SUB_USB_HostManager_HDI_Compatibility_0200, Function | MediumTest | Level1) 121{ 122 struct UsbDev dev = { dev_.busNum, DEV_ADDR_INVALID }; 123 auto ret = g_usbInterface->OpenDevice(dev); 124 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret); 125 ASSERT_NE(ret, 0); 126} 127 128/** 129 * @tc.name: SUB_USB_HostManager_HDI_Compatibility_0300 130 * @tc.desc: Test functions to OpenDevice 131 * @tc.desc: int32_t OpenDevice(const UsbDev &dev); 132 * @tc.desc: Negative test: parameters exception, busNum && devAddr error 133 * @tc.type: FUNC 134 */ 135HWTEST_F(UsbdDeviceTest, SUB_USB_HostManager_HDI_Compatibility_0300, Function | MediumTest | Level1) 136{ 137 struct UsbDev dev = { BUS_NUM_INVALID, DEV_ADDR_INVALID }; 138 auto ret = g_usbInterface->OpenDevice(dev); 139 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret); 140 ASSERT_NE(ret, 0); 141} 142 143/**********************************************************************************************************/ 144 145/** 146 * @tc.name: SUB_USB_HostManager_HDI_Func_1400 147 * @tc.desc: Test functions to CloseDevice 148 * @tc.desc: int32_t CloseDevice(const UsbDev &dev); 149 * @tc.desc: Positive test: parameters correctly 150 * @tc.type: FUNC 151 */ 152HWTEST_F(UsbdDeviceTest, SUB_USB_HostManager_HDI_Func_1400, Function | MediumTest | Level1) 153{ 154 struct UsbDev dev = dev_; 155 auto ret = g_usbInterface->OpenDevice(dev); 156 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret); 157 ASSERT_EQ(0, ret); 158 ret = g_usbInterface->CloseDevice(dev); 159 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret); 160 ASSERT_EQ(0, ret); 161} 162 163/** 164 * @tc.name: SUB_USB_HostManager_HDI_Compatibility_7000 165 * @tc.desc: Test functions to CloseDevice 166 * @tc.desc: int32_t CloseDevice(const UsbDev &dev); 167 * @tc.desc: Negative test: parameters exception, busNum error 168 * @tc.type: FUNC 169 */ 170HWTEST_F(UsbdDeviceTest, SUB_USB_HostManager_HDI_Compatibility_7000, Function | MediumTest | Level1) 171{ 172 struct UsbDev dev = dev_; 173 auto ret = g_usbInterface->OpenDevice(dev); 174 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret); 175 ASSERT_EQ(0, ret); 176 dev.busNum = BUS_NUM_INVALID; 177 ret = g_usbInterface->CloseDevice(dev); 178 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret); 179 ASSERT_NE(ret, 0); 180 dev = dev_; 181 g_usbInterface->CloseDevice(dev); 182} 183 184/** 185 * @tc.name: SUB_USB_HostManager_HDI_Compatibility_7100 186 * @tc.desc: Test functions to CloseDevice 187 * @tc.desc: int32_t CloseDevice(const UsbDev &dev); 188 * @tc.desc: Negative test: parameters exception, devAddr error 189 * @tc.type: FUNC 190 */ 191HWTEST_F(UsbdDeviceTest, SUB_USB_HostManager_HDI_Compatibility_7100, Function | MediumTest | Level1) 192{ 193 struct UsbDev dev = dev_; 194 auto ret = g_usbInterface->OpenDevice(dev); 195 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret); 196 ASSERT_EQ(0, ret); 197 dev.devAddr = DEV_ADDR_INVALID; 198 ret = g_usbInterface->CloseDevice(dev); 199 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret); 200 ASSERT_NE(ret, 0); 201 dev = dev_; 202 g_usbInterface->CloseDevice(dev); 203} 204 205/** 206 * @tc.name: SUB_USB_HostManager_HDI_Compatibility_7200 207 * @tc.desc: Test functions to CloseDevice 208 * @tc.desc: int32_t CloseDevice(const UsbDev &dev); 209 * @tc.desc: Negative test: parameters exception, busNum && devAddr error 210 * @tc.type: FUNC 211 */ 212HWTEST_F(UsbdDeviceTest, SUB_USB_HostManager_HDI_Compatibility_7200, Function | MediumTest | Level1) 213{ 214 struct UsbDev dev = dev_; 215 auto ret = g_usbInterface->OpenDevice(dev); 216 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret); 217 ASSERT_EQ(0, ret); 218 dev.busNum = BUS_NUM_INVALID; 219 dev.devAddr = DEV_ADDR_INVALID; 220 ret = g_usbInterface->CloseDevice(dev); 221 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret); 222 ASSERT_NE(ret, 0); 223 dev = dev_; 224 g_usbInterface->CloseDevice(dev); 225} 226 227/** 228 * @tc.number : SUB_USB_HostManager_HDI_Func_1900 229 * @tc.name : UsbdResetDevice001 230 * @tc.desc : int32_t ResetDevice(const UsbDev &dev) 231 * @tc.desc : Positive test: parameters correctly 232 * @tc.size : MediumTest 233 * @tc.type : Function 234 * @tc.level : Level 3 235 */ 236HWTEST_F(UsbdDeviceTest, UsbdResetDevice001, Function | MediumTest | Level1) 237{ 238 struct UsbDev dev = dev_; 239 auto ret = g_usbInterface->OpenDevice(dev); 240 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret); 241 ASSERT_EQ(0, ret); 242 ret = g_usbInterface->ResetDevice(dev); 243 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d UsbdResetDevice001 result=%{public}d", __LINE__, ret); 244 ASSERT_EQ(0, ret); 245 ret = g_usbInterface->CloseDevice(dev); 246 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret); 247 ASSERT_EQ(0, ret); 248} 249 250/** 251 * @tc.number : SUB_USB_HostManager_HDI_Compatibility_9000 252 * @tc.name : UsbdResetDevice002 253 * @tc.desc : int32_t ResetDevice(const UsbDev &dev) 254 * @tc.desc : Negative test 255 * @tc.size : MediumTest 256 * @tc.type : Function 257 * @tc.level : Level 3 258 */ 259HWTEST_F(UsbdDeviceTest, UsbdResetDevice002, Function | MediumTest | Level1) 260{ 261 struct UsbDev dev = dev_; 262 auto ret = g_usbInterface->OpenDevice(dev); 263 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret); 264 ASSERT_EQ(0, ret); 265 dev.busNum = BUS_NUM_INVALID; 266 ret = g_usbInterface->ResetDevice(dev); 267 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d UsbdResetDevice002 result=%{public}d", __LINE__, ret); 268 ASSERT_NE(0, ret); 269 ret = g_usbInterface->CloseDevice(dev); 270 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret); 271 ASSERT_NE(ret, 0); 272 dev = dev_; 273 g_usbInterface->CloseDevice(dev); 274} 275 276/** 277 * @tc.number : SUB_USB_HostManager_HDI_Compatibility_9100 278 * @tc.name : UsbdResetDevice003 279 * @tc.desc : int32_t ResetDevice(const UsbDev &dev) 280 * @tc.desc : Negative test 281 * @tc.size : MediumTest 282 * @tc.type : Function 283 * @tc.level : Level 3 284 */ 285HWTEST_F(UsbdDeviceTest, UsbdResetDevice003, Function | MediumTest | Level1) 286{ 287 struct UsbDev dev = dev_; 288 auto ret = g_usbInterface->OpenDevice(dev); 289 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret); 290 ASSERT_EQ(0, ret); 291 dev.devAddr = DEV_ADDR_INVALID; 292 ret = g_usbInterface->ResetDevice(dev); 293 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d UsbdResetDevice003 result=%{public}d", __LINE__, ret); 294 ASSERT_NE(0, ret); 295 ret = g_usbInterface->CloseDevice(dev); 296 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret); 297 ASSERT_NE(ret, 0); 298 dev = dev_; 299 g_usbInterface->CloseDevice(dev); 300} 301 302/** 303 * @tc.number : SUB_USB_HostManager_HDI_Compatibility_9200 304 * @tc.name : UsbdResetDevice004 305 * @tc.desc : int32_t ResetDevice(const UsbDev &dev) 306 * @tc.desc : Negative test 307 * @tc.size : MediumTest 308 * @tc.type : Function 309 * @tc.level : Level 3 310 */ 311HWTEST_F(UsbdDeviceTest, UsbdResetDevice004, Function | MediumTest | Level1) 312{ 313 struct UsbDev dev = dev_; 314 auto ret = g_usbInterface->OpenDevice(dev); 315 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d OpenDevice result=%{public}d", __LINE__, ret); 316 ASSERT_EQ(0, ret); 317 dev.busNum = BUS_NUM_INVALID; 318 dev.devAddr = DEV_ADDR_INVALID; 319 ret = g_usbInterface->ResetDevice(dev); 320 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d UsbdResetDevice004 result=%{public}d", __LINE__, ret); 321 ASSERT_NE(0, ret); 322 ret = g_usbInterface->CloseDevice(dev); 323 HDF_LOGI("UsbdDeviceTest:: Line:%{public}d Close result=%{public}d", __LINE__, ret); 324 ASSERT_NE(ret, 0); 325 dev = dev_; 326 g_usbInterface->CloseDevice(dev); 327} 328} // namespace