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 "edm_errors.h" 18 #include "hilog_wrapper.h" 19 #define private public 20 #include "dev_change_callback.h" 21 #include "etx_device_mgr.h" 22 #include "ibus_extension.h" 23 #include "usb_bus_extension.h" 24 #include "bus_extension_core.h" 25 #include "driver_pkg_manager.h" 26 #undef private 27 28 namespace OHOS { 29 namespace ExternalDeviceManager { 30 using namespace std; 31 using namespace testing::ext; 32 33 class DeviceManagerTest : public testing::Test { 34 public: SetUp()35 void SetUp() override 36 { 37 EDM_LOGD(MODULE_DEV_MGR, "DeviceManagerTest SetUp"); 38 } TearDown()39 void TearDown() override 40 { 41 EDM_LOGD(MODULE_DEV_MGR, "DeviceManagerTest TearDown"); 42 } 43 }; 44 45 HWTEST_F(DeviceManagerTest, BusExtensionRegisterTest, TestSize.Level1) 46 { 47 BusExtensionCore &core = BusExtensionCore::GetInstance(); 48 int32_t ret = core.Register(BusType::BUS_TYPE_USB, std::make_shared<UsbBusExtension>()); 49 ASSERT_EQ(ret, EDM_OK); 50 ASSERT_NE(core.busExtensions_[BusType::BUS_TYPE_USB], nullptr); 51 } 52 53 HWTEST_F(DeviceManagerTest, InitTest, TestSize.Level1) 54 { 55 DriverPkgManager::GetInstance().Init(); 56 int32_t ret = ExtDeviceManager::GetInstance().Init(); 57 ASSERT_EQ(ret, EDM_OK); 58 } 59 60 // test OnDeviceAdd and OnDeviceRemove 61 HWTEST_F(DeviceManagerTest, OnDeviceAddRemoveTest001, TestSize.Level1) 62 { 63 std::shared_ptr<DevChangeCallback> callback = std::make_shared<DevChangeCallback>(); 64 std::shared_ptr<DeviceInfo> device = std::make_shared<DeviceInfo>(0); 65 device->devInfo_.devBusInfo.busType = BusType::BUS_TYPE_TEST; 66 device->devInfo_.devBusInfo.busDeviceId = 1; 67 int32_t ret = callback->OnDeviceAdd(device); 68 ASSERT_EQ(ret, EDM_OK); 69 ExtDeviceManager &extMgr = ExtDeviceManager::GetInstance(); 70 ASSERT_EQ(extMgr.deviceMap_[BusType::BUS_TYPE_TEST].size(), 1); 71 ret = callback->OnDeviceRemove(device); 72 ASSERT_EQ(ret, EDM_OK); 73 ASSERT_EQ(extMgr.deviceMap_[BusType::BUS_TYPE_TEST].size(), 0); 74 } 75 76 // test adding device repeatedly 77 HWTEST_F(DeviceManagerTest, OnDeviceAddRemoveTest002, TestSize.Level1) 78 { 79 std::shared_ptr<DevChangeCallback> callback = std::make_shared<DevChangeCallback>(); 80 std::shared_ptr<DeviceInfo> device = std::make_shared<DeviceInfo>(0); 81 device->devInfo_.devBusInfo.busType = BusType::BUS_TYPE_TEST; 82 device->devInfo_.devBusInfo.busDeviceId = 1; 83 int32_t ret = callback->OnDeviceAdd(device); 84 ASSERT_EQ(ret, EDM_OK); 85 ret = callback->OnDeviceAdd(device); 86 ASSERT_EQ(ret, EDM_OK); 87 ExtDeviceManager &extMgr = ExtDeviceManager::GetInstance(); 88 ASSERT_EQ(extMgr.deviceMap_[BusType::BUS_TYPE_TEST].size(), 1); 89 ret = callback->OnDeviceRemove(device); 90 ASSERT_EQ(ret, EDM_OK); 91 ASSERT_EQ(extMgr.deviceMap_[BusType::BUS_TYPE_TEST].size(), 0); 92 ret = callback->OnDeviceRemove(device); 93 ASSERT_EQ(ret, EDM_OK); 94 } 95 96 HWTEST_F(DeviceManagerTest, OnDeviceAddRemoveTest003, TestSize.Level1) 97 { 98 std::shared_ptr<DevChangeCallback> callback = std::make_shared<DevChangeCallback>(); 99 std::shared_ptr<DeviceInfo> device0 = std::make_shared<DeviceInfo>(0); 100 device0->devInfo_.devBusInfo.busType = BusType::BUS_TYPE_TEST; 101 device0->devInfo_.devBusInfo.busDeviceId = 1; 102 int32_t ret = callback->OnDeviceAdd(device0); 103 ASSERT_EQ(ret, EDM_OK); 104 std::shared_ptr<DeviceInfo> device1 = std::make_shared<DeviceInfo>(0); 105 device1->devInfo_.devBusInfo.busType = BusType::BUS_TYPE_TEST; 106 device1->devInfo_.devBusInfo.busDeviceId = 2; 107 ret = callback->OnDeviceAdd(device1); 108 ASSERT_EQ(ret, EDM_OK); 109 ExtDeviceManager &extMgr = ExtDeviceManager::GetInstance(); 110 ASSERT_EQ(extMgr.deviceMap_[BusType::BUS_TYPE_TEST].size(), 2); 111 ret = callback->OnDeviceRemove(device1); 112 ASSERT_EQ(ret, EDM_OK); 113 ASSERT_EQ(extMgr.deviceMap_[BusType::BUS_TYPE_TEST].size(), 1); 114 ret = callback->OnDeviceRemove(device0); 115 ASSERT_EQ(ret, EDM_OK); 116 ASSERT_EQ(extMgr.deviceMap_[BusType::BUS_TYPE_TEST].size(), 0); 117 } 118 119 HWTEST_F(DeviceManagerTest, QueryDeviceTest, TestSize.Level1) 120 { 121 ExtDeviceManager &extMgr = ExtDeviceManager::GetInstance(); 122 std::vector<std::shared_ptr<DeviceInfo>> devVec = extMgr.QueryDevice(BUS_TYPE_TEST); 123 ASSERT_EQ(devVec.size(), 0); 124 std::shared_ptr<DevChangeCallback> callback = std::make_shared<DevChangeCallback>(); 125 std::shared_ptr<DeviceInfo> device0 = std::make_shared<DeviceInfo>(0); 126 device0->devInfo_.devBusInfo.busType = BusType::BUS_TYPE_TEST; 127 device0->devInfo_.devBusInfo.busDeviceId = 1; 128 int32_t ret = callback->OnDeviceAdd(device0); 129 ASSERT_EQ(ret, EDM_OK); 130 std::shared_ptr<DeviceInfo> device1 = std::make_shared<DeviceInfo>(0); 131 device1->devInfo_.devBusInfo.busType = BusType::BUS_TYPE_TEST; 132 device1->devInfo_.devBusInfo.busDeviceId = 2; 133 ret = callback->OnDeviceAdd(device1); 134 ASSERT_EQ(ret, EDM_OK); 135 devVec = extMgr.QueryDevice(BUS_TYPE_TEST); 136 ASSERT_EQ(devVec.size(), 2); 137 ret = callback->OnDeviceRemove(device0); 138 ret = callback->OnDeviceRemove(device1); 139 ASSERT_EQ(extMgr.deviceMap_[BusType::BUS_TYPE_TEST].size(), 0); 140 } 141 142 HWTEST_F(DeviceManagerTest, GetBusExtensionByNameTest, TestSize.Level1) 143 { 144 BusExtensionCore &core = BusExtensionCore::GetInstance(); 145 ASSERT_NE(core.busExtensions_[BusType::BUS_TYPE_USB], nullptr); 146 std::shared_ptr<IBusExtension> extension = core.GetBusExtensionByName("HDMI"); 147 ASSERT_EQ(extension, nullptr); 148 extension = core.GetBusExtensionByName("USB"); 149 ASSERT_NE(extension, nullptr); 150 core.busExtensions_.erase(BusType::BUS_TYPE_USB); 151 extension = core.GetBusExtensionByName("USB"); 152 ASSERT_EQ(extension, nullptr); 153 } 154 } // namespace ExternalDeviceManager 155 } // namespace OHOS 156