1 /* 2 * Copyright (c) 2023-2024 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 /** 45 * @tc.number: SUB_Driver_Ext_BusExtensionUSB_0600 46 * @tc.name: SerializeThenUnSerializeTest 47 * @tc.desc: Testing the Serialization and Deserialization of DriverInfo 48 * @tc.size: MediumTest 49 * @tc.type: Function 50 */ 51 HWTEST_F(UsbDriverInfoTest, SUB_Driver_Ext_BusExtensionUSB_0600, TestSize.Level1) 52 { 53 int ret = 0; 54 auto usbDrvInfo = make_shared<UsbDriverInfo>(); 55 usbDrvInfo->pids_.push_back(1234); 56 usbDrvInfo->pids_.push_back(5678); 57 usbDrvInfo->vids_.push_back(1111); 58 usbDrvInfo->vids_.push_back(2222); 59 auto drvInfo = make_shared<DriverInfo>(); 60 drvInfo->bus_ = "USB"; 61 drvInfo->vendor_ = "TestVendor"; 62 drvInfo->version_ = "0.1.1"; 63 drvInfo->driverInfoExt_ = usbDrvInfo; 64 string drvInfoStr; 65 EDM_LOGD(MODULE_BUS_USB, "begin to Serialize driverInfo"); 66 ret = drvInfo->Serialize(drvInfoStr); 67 ASSERT_EQ(ret, 0); 68 EDM_LOGI(MODULE_BUS_USB, "drvStr:%s", drvInfoStr.c_str()); 69 70 auto newDriverInfo = make_shared<DriverInfo>(); 71 ret = newDriverInfo->UnSerialize(drvInfoStr); 72 ASSERT_EQ(ret, 0); 73 ASSERT_EQ(newDriverInfo->bus_, "USB"); 74 ASSERT_EQ(newDriverInfo->vendor_, "TestVendor"); 75 ASSERT_EQ(newDriverInfo->version_, "0.1.1"); 76 UsbDriverInfo* newUsbDriverInfo = static_cast<UsbDriverInfo*>(newDriverInfo->driverInfoExt_.get()); 77 ASSERT_NE(newUsbDriverInfo, nullptr); 78 ASSERT_EQ(newUsbDriverInfo->pids_.size(), (size_t)2); 79 ASSERT_EQ(newUsbDriverInfo->vids_.size(), (size_t)2); 80 ASSERT_EQ(newUsbDriverInfo->pids_[0], 1234); 81 ASSERT_EQ(newUsbDriverInfo->pids_[1], 5678); 82 ASSERT_EQ(newUsbDriverInfo->vids_[0], 1111); 83 ASSERT_EQ(newUsbDriverInfo->vids_[1], 2222); 84 } 85 86 /** 87 * @tc.number: SUB_Driver_Ext_BusExtensionUSB_0700 88 * @tc.name: UnSerializeErrorTest 89 * @tc.desc: Test the failure of serialization and deserialization of DriverInfo 90 * @tc.size: MediumTest 91 * @tc.type: Function 92 */ 93 HWTEST_F(UsbDriverInfoTest, SUB_Driver_Ext_BusExtensionUSB_0700, TestSize.Level1) 94 { 95 int ret = 0; 96 DriverInfo driverInfo; 97 string drvStr; 98 // valid json 99 drvStr = "\{ \"bus\": \"usb\", \"vendor\": \"TestVendor\", \"version\": \"0.0.1\", \ 100 \"ext_info\": \"{ \\\"vids\\\": [1111, 2222], \\\"pids\\\": [1234, 4567]}\" }"; 101 ret = driverInfo.UnSerialize(drvStr); 102 ASSERT_EQ(ret, 0); 103 104 // invalid json, format error 105 drvStr = "\{ \"bus\"_\"usb\", \"vendor\": \"TestVendor\", \"version\": \"0.0.1\", \ 106 \"ext_info\": \"{ \\\"vids\\\": [1111, 2222], \\\"pids\\\": [1234, 4567]}\" }"; 107 ret = driverInfo.UnSerialize(drvStr); 108 ASSERT_NE(ret, 0); 109 110 // invalid json, bus error 111 drvStr = "\{ \"bus\": \"peci\", \"vendor\": \"TestVendor\", \"version\": \"0.0.1\", \ 112 \"ext_info\": \"{ \\\"vids\\\": [1111, 2222], \\\"pids\\\": [1234, 4567]}\" }"; 113 ret = driverInfo.UnSerialize(drvStr); 114 ASSERT_NE(ret, 0); 115 116 // invalid json, member error 117 drvStr = "\{ \"bus\": \"usb\", \"vendorxx\": \"TestVendor\", \"version\": \"0.0.1\", \ 118 \"ext_info\": \"{ \\\"vids\\\": [1111, 2222], \\\"pids\\\": [1234, 4567]}\" }"; 119 ret = driverInfo.UnSerialize(drvStr); 120 ASSERT_NE(ret, 0); 121 122 // invalid json, member type error 123 drvStr = "\{ \"bus\": \"usb\", \"vendor\": \"TestVendor\", \"version\" :0, \ 124 \"ext_info\": \"{ \\\"vids\\\": [1111, 2222], \\\"pids\\\": [1234, 4567]}\" }"; 125 ret = driverInfo.UnSerialize(drvStr); 126 ASSERT_NE(ret, 0); 127 128 // invalid json, ext_info format error 129 drvStr = "\{ \"bus\": \"usb\", \"vendor\": \"TestVendor\", \"version\": \"0.0.1\", \ 130 \"ext_info\": \"{ \\\"vids\\\"_[1111, 2222], \\\"pids\\\": [1234, 4567]}\" }"; 131 ret = driverInfo.UnSerialize(drvStr); 132 ASSERT_NE(ret, 0); 133 134 // invalid json, ext_info member 135 drvStr = "\{ \"bus\": \"usb\", \"vendor\": \"TestVendor\", \"version\": \"0.0.1\", \ 136 \"ext_info\": \"{ \\\"vid\\\": [1111, 2222], \\\"pids\\\": [1234, 4567]}\" }"; 137 ret = driverInfo.UnSerialize(drvStr); 138 ASSERT_NE(ret, 0); 139 140 // invalid json, ext_info member type error 141 drvStr = "\{ \"bus\": \"usb\", \"vendor\": \"TestVendor\", \"version\": \"0.0.1\", \ 142 \"ext_info\": \"{ \\\"vids\\\": \\\"1111\\\", \\\"pids\\\": [1234, 4567]}\" }"; 143 ret = driverInfo.UnSerialize(drvStr); 144 ASSERT_NE(ret, 0); 145 146 // invalid json, ext_info vids item type error 147 drvStr = "\{ \"bus\": \"usb\", \"vendor\": \"TestVendor\", \"version\": \"0.0.1\", \ 148 \"ext_info\": \"{ \\\"vids\\\": [\\\"1111\\\", \\\"2222\\\"], \\\"pids\\\": [1234, 4567]}\" }"; 149 ret = driverInfo.UnSerialize(drvStr); 150 ASSERT_NE(ret, 0); 151 152 // invalid json, ext_info pid item type error 153 drvStr = "\{ \"bus\": \"usb\", \"vendor\": \"TestVendor\", \"version\": \"0.0.1\", \ 154 \"ext_info\": \"{ \\\"vids\\\": [1111, 2222], \\\"pids\\\": [\\\"1234\\\", \\\"4567\\\"]}\" }"; 155 ret = driverInfo.UnSerialize(drvStr); 156 ASSERT_NE(ret, 0); 157 } 158 } 159 }