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 }