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 using namespace ExternalDeviceManager;
31 
32 class UsbDriverInfoTest : public testing::Test {
33 public:
SetUp()34     void SetUp() override
35     {
36         EDM_LOGD(MODULE_BUS_USB, "UsbDriverInfoTest SetUp");
37     }
TearDown()38     void TearDown() override
39     {
40         EDM_LOGD(MODULE_BUS_USB, "UsbDriverInfoTest TearDown");
41     }
42 };
43 
44 HWTEST_F(UsbDriverInfoTest, SerializeThenUnSerializeTest, TestSize.Level1)
45 {
46     int ret = 0;
47     auto usbDrvInfo = make_shared<UsbDriverInfo>();
48     usbDrvInfo->pids_.push_back(1234);
49     usbDrvInfo->pids_.push_back(5678);
50     usbDrvInfo->vids_.push_back(1111);
51     usbDrvInfo->vids_.push_back(2222);
52     auto drvInfo = make_shared<DriverInfo>();
53     drvInfo->bus_ = "USB";
54     drvInfo->vendor_ = "TestVendor";
55     drvInfo->version_ = "0.1.1";
56     drvInfo->driverInfoExt_ = usbDrvInfo;
57     string drvInfoStr;
58     EDM_LOGD(MODULE_BUS_USB, "begin to Serialize driverInfo");
59     ret = drvInfo->Serialize(drvInfoStr);
60     ASSERT_EQ(ret, 0);
61     EDM_LOGI(MODULE_BUS_USB, "drvStr:%s", drvInfoStr.c_str());
62 
63     auto newDriverInfo = make_shared<DriverInfo>();
64     ret = newDriverInfo->UnSerialize(drvInfoStr);
65     ASSERT_EQ(ret, 0);
66     ASSERT_EQ(newDriverInfo->bus_, "USB");
67     ASSERT_EQ(newDriverInfo->vendor_, "TestVendor");
68     ASSERT_EQ(newDriverInfo->version_, "0.1.1");
69     UsbDriverInfo* newUsbDriverInfo = static_cast<UsbDriverInfo*>(newDriverInfo->driverInfoExt_.get());
70     ASSERT_NE(newUsbDriverInfo, nullptr);
71     ASSERT_EQ(newUsbDriverInfo->pids_.size(), (size_t)2);
72     ASSERT_EQ(newUsbDriverInfo->vids_.size(), (size_t)2);
73     ASSERT_EQ(newUsbDriverInfo->pids_[0], 1234);
74     ASSERT_EQ(newUsbDriverInfo->pids_[1], 5678);
75     ASSERT_EQ(newUsbDriverInfo->vids_[0], 1111);
76     ASSERT_EQ(newUsbDriverInfo->vids_[1], 2222);
77 }
78 
79 HWTEST_F(UsbDriverInfoTest, UnSerializeErrorTest, TestSize.Level1)
80 {
81     int ret = 0;
82     DriverInfo driverInfo;
83     string drvStr;
84     // valid json
85     drvStr = "\{\"bus\":\"usb\",\"vendor\":\"TestVendor\",\"version\":\"0.0.1\",\
86 \"ext_info\":\"{\\\"vids\\\":[1111, 2222],\\\"pids\\\":[1234,4567]}\"}";
87     ret = driverInfo.UnSerialize(drvStr);
88     ASSERT_EQ(ret, 0);
89 
90     // invalid json, format error
91     drvStr = "\{\"bus\"_\"usb\",\"vendor\":\"TestVendor\",\"version\":\"0.0.1\",\
92 \"ext_info\":\"{\\\"vids\\\":[1111, 2222],\\\"pids\\\":[1234,4567]}\"}";
93     ret = driverInfo.UnSerialize(drvStr);
94     ASSERT_NE(ret, 0);
95 
96     // invalid json, bus error
97     drvStr = "\{\"bus\":\"peci\",\"vendor\":\"TestVendor\",\"version\":\"0.0.1\",\
98 \"ext_info\":\"{\\\"vids\\\":[1111, 2222],\\\"pids\\\":[1234,4567]}\"}";
99     ret = driverInfo.UnSerialize(drvStr);
100     ASSERT_NE(ret, 0);
101 
102     // invalid json, member error
103     drvStr = "\{\"bus\":\"usb\",\"vendorxx\":\"TestVendor\",\"version\":\"0.0.1\",\
104 \"ext_info\":\"{\\\"vids\\\":[1111, 2222],\\\"pids\\\":[1234,4567]}\"}";
105     ret = driverInfo.UnSerialize(drvStr);
106     ASSERT_NE(ret, 0);
107 
108     // invalid json, member type error
109     drvStr = "\{\"bus\":\"usb\",\"vendor\":\"TestVendor\",\"version\":0,\
110 \"ext_info\":\"{\\\"vids\\\":[1111, 2222],\\\"pids\\\":[1234,4567]}\"}";
111     ret = driverInfo.UnSerialize(drvStr);
112     ASSERT_NE(ret, 0);
113 
114     // invalid json, ext_info format error
115     drvStr = "\{\"bus\":\"usb\",\"vendor\":\"TestVendor\",\"version\":\"0.0.1\",\
116 \"ext_info\":\"{\\\"vids\\\"_[1111, 2222],\\\"pids\\\":[1234,4567]}\"}";
117     ret = driverInfo.UnSerialize(drvStr);
118     ASSERT_NE(ret, 0);
119 
120     // invalid json, ext_info member
121     drvStr = "\{\"bus\":\"usb\",\"vendor\":\"TestVendor\",\"version\":\"0.0.1\",\
122 \"ext_info\":\"{\\\"vid\\\":[1111, 2222],\\\"pids\\\":[1234,4567]}\"}";
123     ret = driverInfo.UnSerialize(drvStr);
124     ASSERT_NE(ret, 0);
125 
126     // invalid json, ext_info member type error
127     drvStr = "\{\"bus\":\"usb\",\"vendor\":\"TestVendor\",\"version\":\"0.0.1\",\
128 \"ext_info\":\"{\\\"vids\\\":\\\"1111\\\",\\\"pids\\\":[1234,4567]}\"}";
129     ret = driverInfo.UnSerialize(drvStr);
130     ASSERT_NE(ret, 0);
131 
132     // invalid json, ext_info vids item type error
133     drvStr = "\{\"bus\":\"usb\",\"vendor\":\"TestVendor\",\"version\":\"0.0.1\",\
134 \"ext_info\":\"{\\\"vids\\\":[\\\"1111\\\", \\\"2222\\\"],\\\"pids\\\":[1234,4567]}\"}";
135     ret = driverInfo.UnSerialize(drvStr);
136     ASSERT_NE(ret, 0);
137 
138     // invalid json, ext_info pid item type error
139     drvStr = "\{\"bus\":\"usb\",\"vendor\":\"TestVendor\",\"version\":\"0.0.1\",\
140 \"ext_info\":\"{\\\"vids\\\":[1111, 2222],\\\"pids\\\":[\\\"1234\\\",\\\"4567\\\"]}\"}";
141     ret = driverInfo.UnSerialize(drvStr);
142     ASSERT_NE(ret, 0);
143 }
144 }
145 }