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 "json/json.h" 18 #include "hilog_wrapper.h" 19 #define private public 20 #include "ibus_extension.h" 21 #include "usb_driver_info.h" 22 #include "usb_device_info.h" 23 #include "usb_bus_extension.h" 24 #undef private 25 26 namespace OHOS { 27 namespace ExternalDeviceManager { 28 using namespace std; 29 using namespace testing::ext; 30 31 class UsbBusExtensionTest : public testing::Test { 32 public: SetUp()33 void SetUp() override 34 { 35 EDM_LOGD(MODULE_BUS_USB, "UsbBusExtensionTest SetUp"); 36 } TearDown()37 void TearDown() override 38 { 39 EDM_LOGD(MODULE_BUS_USB, "UsbBusExtensionTest TearDown"); 40 } 41 }; 42 43 static const map<string, string> g_testMetaDatas = { 44 {"bus", "usb"}, 45 {"desc", "test usb driver extension"}, 46 {"vendor", "testVendor"}, 47 {"pid", "0x1234,0x5678"}, 48 {"vid", "0x1111,0x2222"} 49 }; 50 HWTEST_F(UsbBusExtensionTest, GetExtensionInstanceTest, TestSize.Level1) 51 { 52 auto usbBus = make_shared<UsbBusExtension>(); 53 ASSERT_NE(usbBus, nullptr); 54 } 55 56 HWTEST_F(UsbBusExtensionTest, SetDevChangeCallbackTest, TestSize.Level1) 57 { 58 auto usbBus = make_shared<UsbBusExtension>(); 59 ASSERT_NE(usbBus, nullptr); 60 auto ret = usbBus->SetDevChangeCallback(nullptr); 61 ASSERT_EQ(ret, 0); 62 } 63 64 HWTEST_F(UsbBusExtensionTest, ParseDriverInfoTest, TestSize.Level1) 65 { 66 EDM_LOGI(MODULE_BUS_USB, "PraseDriverInfoTest Start"); 67 auto usbBus = make_shared<UsbBusExtension>(); 68 ASSERT_NE(usbBus, nullptr); 69 auto driverInfoExt = usbBus->ParseDriverInfo(g_testMetaDatas); 70 EDM_LOGD(MODULE_BUS_USB, "parse driver info done"); 71 ASSERT_NE(driverInfoExt, nullptr); 72 UsbDriverInfo *usbDriverinfo = static_cast<UsbDriverInfo*>(driverInfoExt.get()); 73 ASSERT_NE(usbDriverinfo, nullptr); 74 ASSERT_EQ(usbDriverinfo->pids_.size(), (size_t)2); 75 ASSERT_EQ(usbDriverinfo->vids_.size(), (size_t)2); 76 ASSERT_EQ(usbDriverinfo->pids_[0], 0x1234); 77 ASSERT_EQ(usbDriverinfo->pids_[1], 0x5678); 78 ASSERT_EQ(usbDriverinfo->vids_[0], 0x1111); 79 ASSERT_EQ(usbDriverinfo->vids_[1], 0x2222); 80 } 81 82 HWTEST_F(UsbBusExtensionTest, MatchDriverTest, TestSize.Level1) 83 { 84 auto usbDrvInfo = make_shared<UsbDriverInfo>(); 85 usbDrvInfo->pids_.push_back(0x1234); 86 usbDrvInfo->pids_.push_back(0x5678); 87 usbDrvInfo->vids_.push_back(0x1111); 88 usbDrvInfo->vids_.push_back(0x2222); 89 auto drvInfo = make_shared<DriverInfo>(); 90 drvInfo->bus_ = "USB"; 91 drvInfo->vendor_ = "TestVendor"; 92 drvInfo->version_ = "0.1.1"; 93 drvInfo->driverInfoExt_ = usbDrvInfo; 94 string drvInfoStr; 95 EDM_LOGD(MODULE_BUS_USB, "build driverInfo Done"); 96 97 auto deviceInfo = make_shared<UsbDeviceInfo>(0); 98 deviceInfo->devInfo_.devBusInfo.busType = BusType::BUS_TYPE_USB; 99 deviceInfo->idProduct_ = 0x1234; 100 deviceInfo->idVendor_ = 0x1111; 101 deviceInfo->deviceClass_ = 0; 102 deviceInfo->bcdUSB_ = 0x1122; 103 104 auto usbBus = make_shared<UsbBusExtension>(); 105 bool isMatched = usbBus->MatchDriver(*drvInfo, *deviceInfo); 106 ASSERT_EQ(isMatched, true); 107 108 UsbDeviceInfo deviceInfo2 = *deviceInfo; 109 deviceInfo2.idProduct_ = 0x9999; 110 isMatched = usbBus->MatchDriver(*drvInfo, deviceInfo2); 111 ASSERT_EQ(isMatched, false); 112 113 UsbDeviceInfo deviceInfo3 = *deviceInfo; 114 deviceInfo3.idVendor_ = 0x9999; 115 isMatched = usbBus->MatchDriver(*drvInfo, deviceInfo3); 116 ASSERT_EQ(isMatched, false); 117 118 UsbDeviceInfo deviceInfo4 = *deviceInfo; 119 deviceInfo4.devInfo_.devBusInfo.busType = BusType::BUS_TYPE_INVALID; 120 isMatched = usbBus->MatchDriver(*drvInfo, deviceInfo4); 121 ASSERT_EQ(isMatched, false); 122 123 drvInfo->bus_ = BusType::BUS_TYPE_INVALID; 124 isMatched = usbBus->MatchDriver(*drvInfo, *deviceInfo); 125 ASSERT_EQ(isMatched, false); 126 } 127 } 128 } 129