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