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