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 26using namespace testing::ext; 27using namespace OHOS; 28using namespace OHOS::USB; 29using namespace std; 30using namespace OHOS::HDI::Usb::V1_0; 31using namespace OHOS::HDI::Usb::V1_1; 32 33const int SLEEP_TIME = 3; 34const uint8_t BUS_NUM_INVALID = 255; 35const uint8_t DEV_ADDR_INVALID = 255; 36UsbDev UsbdDeviceTest::dev_ = {0, 0}; 37sptr<UsbSubscriberTest> UsbdDeviceTest::subscriber_ = nullptr; 38 39namespace { 40sptr<OHOS::HDI::Usb::V1_1::IUsbInterface> g_usbInterface = nullptr; 41 42int32_t SwitchErrCode(int32_t ret) 43{ 44 return ret == HDF_ERR_NOT_SUPPORT ? HDF_SUCCESS : ret; 45} 46 47void 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 75void UsbdDeviceTest::TearDownTestCase(void) 76{ 77 g_usbInterface->UnbindUsbdSubscriber(subscriber_); 78} 79 80void UsbdDeviceTest::SetUp(void) {} 81 82void 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 */ 91HWTEST_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 */ 106HWTEST_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 */ 121HWTEST_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 */ 136HWTEST_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 */ 153HWTEST_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 */ 171HWTEST_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 */ 192HWTEST_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 */ 213HWTEST_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 */ 235HWTEST_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 */ 256HWTEST_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 */ 280HWTEST_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 */ 304HWTEST_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 */ 327HWTEST_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 */ 339HWTEST_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 */ 351HWTEST_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 */ 363HWTEST_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 */ 375HWTEST_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 */ 393HWTEST_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 */ 411HWTEST_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 */ 429HWTEST_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