1 /*
2 * Copyright (c) 2024-2025 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
18 #include "cJSON.h"
19
20 #include "constants.h"
21 #include "capability_info.h"
22 #include "dh_utils_tool.h"
23 #include "distributed_hardware_errno.h"
24 #include "local_capability_info_manager.h"
25
26 using namespace testing::ext;
27 using namespace std;
28
29 namespace OHOS {
30 namespace DistributedHardware {
31 namespace {
32 constexpr uint16_t DEV_TYPE_TEST = 14;
33 constexpr uint32_t MAX_DB_RECORD_LENGTH = 10005;
34 }
35 class LocalCapInfoMgrTest : public testing::Test {
36 public:
37 static void SetUpTestCase(void);
38 static void TearDownTestCase(void);
39 void SetUp();
40 void TearDown();
41 };
42
SetUp()43 void LocalCapInfoMgrTest::SetUp() {}
44
TearDown()45 void LocalCapInfoMgrTest::TearDown() {}
46
SetUpTestCase()47 void LocalCapInfoMgrTest::SetUpTestCase() {}
48
TearDownTestCase()49 void LocalCapInfoMgrTest::TearDownTestCase() {}
50
51 HWTEST_F(LocalCapInfoMgrTest, Init_001, TestSize.Level1)
52 {
53 auto ret = LocalCapabilityInfoManager::GetInstance()->Init();
54 EXPECT_EQ(DH_FWK_SUCCESS, ret);
55
56 ret = LocalCapabilityInfoManager::GetInstance()->UnInit();
57 EXPECT_EQ(DH_FWK_SUCCESS, ret);
58 }
59
60 HWTEST_F(LocalCapInfoMgrTest, UnInit_001, TestSize.Level1)
61 {
62 LocalCapabilityInfoManager::GetInstance()->dbAdapterPtr_ = nullptr;
63 auto ret = LocalCapabilityInfoManager::GetInstance()->UnInit();
64 EXPECT_EQ(ERR_DH_FWK_RESOURCE_UNINIT_DB_FAILED, ret);
65 }
66
67 HWTEST_F(LocalCapInfoMgrTest, SyncDeviceInfoFromDB_001, TestSize.Level1)
68 {
69 std::string deviceId = "deviceId_test";
70 LocalCapabilityInfoManager::GetInstance()->dbAdapterPtr_ = nullptr;
71 auto ret = LocalCapabilityInfoManager::GetInstance()->SyncDeviceInfoFromDB(deviceId);
72 EXPECT_EQ(ERR_DH_FWK_RESOURCE_DB_ADAPTER_POINTER_NULL, ret);
73
74 LocalCapabilityInfoManager::GetInstance()->Init();
75 ret = LocalCapabilityInfoManager::GetInstance()->SyncDeviceInfoFromDB(deviceId);
76 EXPECT_EQ(ERR_DH_FWK_RESOURCE_DB_ADAPTER_OPERATION_FAIL, ret);
77
78 ret = LocalCapabilityInfoManager::GetInstance()->SyncDeviceInfoFromDB("");
79 EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, ret);
80 }
81
82 HWTEST_F(LocalCapInfoMgrTest, SyncDeviceInfoFromDB_002, TestSize.Level1)
83 {
84 std::string deviceId(266, 'A');
85 LocalCapabilityInfoManager::GetInstance()->dbAdapterPtr_ = nullptr;
86 auto ret = LocalCapabilityInfoManager::GetInstance()->SyncDeviceInfoFromDB(deviceId);
87 EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, ret);
88 }
89
90 HWTEST_F(LocalCapInfoMgrTest, AddCapability_001, TestSize.Level1)
91 {
92 std::vector<std::shared_ptr<CapabilityInfo>> resInfos;
93 auto ret = LocalCapabilityInfoManager::GetInstance()->AddCapability(resInfos);
94 EXPECT_EQ(ERR_DH_FWK_RESOURCE_RES_DB_DATA_INVALID, ret);
95
96 for (int32_t i = 1; i < MAX_DB_RECORD_LENGTH; i++) {
97 std::shared_ptr<CapabilityInfo> capInfoTest = make_shared<CapabilityInfo>(std::to_string(i), std::to_string(i),
98 "devName_test", DEV_TYPE_TEST, DHType::CAMERA, "attrs", "subtype");
99 resInfos.push_back(capInfoTest);
100 }
101 ret = LocalCapabilityInfoManager::GetInstance()->AddCapability(resInfos);
102 EXPECT_EQ(ERR_DH_FWK_RESOURCE_RES_DB_DATA_INVALID, ret);
103 }
104
105 HWTEST_F(LocalCapInfoMgrTest, AddCapability_002, TestSize.Level1)
106 {
107 std::shared_ptr<CapabilityInfo> capInfo = std::make_shared<CapabilityInfo>("", "", "", 0, DHType::UNKNOWN, "", "");
108 std::vector<std::shared_ptr<CapabilityInfo>> resInfos;
109 resInfos.push_back(capInfo);
110 LocalCapabilityInfoManager::GetInstance()->dbAdapterPtr_ = nullptr;
111 auto ret = LocalCapabilityInfoManager::GetInstance()->AddCapability(resInfos);
112 EXPECT_EQ(ERR_DH_FWK_RESOURCE_DB_ADAPTER_POINTER_NULL, ret);
113 }
114
115 HWTEST_F(LocalCapInfoMgrTest, AddCapability_003, TestSize.Level1)
116 {
117 std::shared_ptr<CapabilityInfo> capInfo = std::make_shared<CapabilityInfo>("", "", "", 0, DHType::UNKNOWN, "", "");
118 std::shared_ptr<CapabilityInfo> capInfo1 = nullptr;
119 std::vector<std::shared_ptr<CapabilityInfo>> resInfos;
120 resInfos.push_back(capInfo);
121 resInfos.push_back(capInfo1);
122 LocalCapabilityInfoManager::GetInstance()->Init();
123 auto ret = LocalCapabilityInfoManager::GetInstance()->AddCapability(resInfos);
124 EXPECT_EQ(DH_FWK_SUCCESS, ret);
125 }
126
127 HWTEST_F(LocalCapInfoMgrTest, RemoveCapabilityInfoByKey_001, TestSize.Level1)
128 {
129 std::string key = "";
130 auto ret = LocalCapabilityInfoManager::GetInstance()->RemoveCapabilityInfoByKey(key);
131 EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, ret);
132 }
133
134 HWTEST_F(LocalCapInfoMgrTest, RemoveCapabilityInfoByKey_002, TestSize.Level1)
135 {
136 std::string key = "deviceId_test";
137 LocalCapabilityInfoManager::GetInstance()->dbAdapterPtr_ = nullptr;
138 auto ret = LocalCapabilityInfoManager::GetInstance()->RemoveCapabilityInfoByKey(key);
139 EXPECT_EQ(ERR_DH_FWK_RESOURCE_DB_ADAPTER_POINTER_NULL, ret);
140
141 LocalCapabilityInfoManager::GetInstance()->Init();
142 ret = LocalCapabilityInfoManager::GetInstance()->RemoveCapabilityInfoByKey(key);
143 EXPECT_EQ(DH_FWK_SUCCESS, ret);
144 }
145
146 HWTEST_F(LocalCapInfoMgrTest, GetCapabilitiesByDeviceId_001, TestSize.Level1)
147 {
148 std::string deviceId = "";
149 std::vector<std::shared_ptr<CapabilityInfo>> resInfos;
150 ASSERT_NO_FATAL_FAILURE(LocalCapabilityInfoManager::GetInstance()->GetCapabilitiesByDeviceId(deviceId, resInfos));
151 }
152
153 HWTEST_F(LocalCapInfoMgrTest, GetCapabilitiesByDeviceId_002, TestSize.Level1)
154 {
155 std::string deviceId = "test_device_id";
156 auto localCapInfoMgr = LocalCapabilityInfoManager::GetInstance();
157 std::shared_ptr<CapabilityInfo> capInfo1 = std::make_shared<CapabilityInfo>(
158 "dhId_test1", deviceId, "devName_test1", DEV_TYPE_TEST, DHType::AUDIO, "attrs", "subtype");
159 std::shared_ptr<CapabilityInfo> capInfo2 = std::make_shared<CapabilityInfo>(
160 "dhId_test2", "other_device_id", "devName_test2", DEV_TYPE_TEST, DHType::AUDIO, "attrs", "subtype");
161
162 std::string key1 = GetCapabilityKey(deviceId, "dhId_test1");
163 std::string key2 = GetCapabilityKey("other_device_id", "dhId_test2");
164
165 localCapInfoMgr->globalCapInfoMap_[key1] = capInfo1;
166 localCapInfoMgr->globalCapInfoMap_[key2] = capInfo2;
167
168 std::vector<std::shared_ptr<CapabilityInfo>> resInfos;
169 localCapInfoMgr->GetCapabilitiesByDeviceId(deviceId, resInfos);
170 ASSERT_EQ(resInfos.size(), 1);
171 }
172
173 HWTEST_F(LocalCapInfoMgrTest, GetCapability_001, TestSize.Level1)
174 {
175 std::string deviceId = "";
176 std::string dhId = "";
177 std::shared_ptr<CapabilityInfo> capPtr;
178 auto ret = LocalCapabilityInfoManager::GetInstance()->GetCapability(deviceId, dhId, capPtr);
179 EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, ret);
180
181 deviceId = "deviceId_test";
182 ret = LocalCapabilityInfoManager::GetInstance()->GetCapability(deviceId, dhId, capPtr);
183 EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, ret);
184
185 dhId = "dhId_test";
186 deviceId = "";
187 ret = LocalCapabilityInfoManager::GetInstance()->GetCapability(deviceId, dhId, capPtr);
188 EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, ret);
189 }
190
191 HWTEST_F(LocalCapInfoMgrTest, GetCapability_002, TestSize.Level1)
192 {
193 std::string deviceId = "deviceId_test";
194 std::string dhId = "dhId_test";
195 std::shared_ptr<CapabilityInfo> capPtr;
196 auto ret = LocalCapabilityInfoManager::GetInstance()->GetCapability(deviceId, dhId, capPtr);
197 EXPECT_EQ(ERR_DH_FWK_RESOURCE_CAPABILITY_MAP_NOT_FOUND, ret);
198
199 std::shared_ptr<CapabilityInfo> capbilityInfo = std::make_shared<CapabilityInfo>(
200 dhId, deviceId, "devName_test", DEV_TYPE_TEST, DHType::AUDIO, "attrs", "subtype");
201 std::string key = deviceId + "###" + dhId;
202 LocalCapabilityInfoManager::GetInstance()->globalCapInfoMap_[key] = capbilityInfo;
203 ret = LocalCapabilityInfoManager::GetInstance()->GetCapability(deviceId, dhId, capPtr);
204 LocalCapabilityInfoManager::GetInstance()->globalCapInfoMap_.clear();
205 EXPECT_EQ(DH_FWK_SUCCESS, ret);
206 }
207
208 HWTEST_F(LocalCapInfoMgrTest, GetDataByKey_001, TestSize.Level1)
209 {
210 std::string key = "";
211 std::shared_ptr<CapabilityInfo> capPtr;
212 auto ret = LocalCapabilityInfoManager::GetInstance()->GetDataByKey(key, capPtr);
213 EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, ret);
214 }
215
216 HWTEST_F(LocalCapInfoMgrTest, GetDataByKey_002, TestSize.Level1)
217 {
218 std::string key = "key_test";
219 std::shared_ptr<CapabilityInfo> capPtr;
220 LocalCapabilityInfoManager::GetInstance()->dbAdapterPtr_ = nullptr;
221 auto ret = LocalCapabilityInfoManager::GetInstance()->GetDataByKey(key, capPtr);
222 EXPECT_EQ(ERR_DH_FWK_RESOURCE_DB_ADAPTER_POINTER_NULL, ret);
223
224 LocalCapabilityInfoManager::GetInstance()->Init();
225 ret = LocalCapabilityInfoManager::GetInstance()->GetDataByKey(key, capPtr);
226 EXPECT_EQ(ERR_DH_FWK_RESOURCE_DB_ADAPTER_OPERATION_FAIL, ret);
227 }
228
229 HWTEST_F(LocalCapInfoMgrTest, GetDataByDHType_001, TestSize.Level1)
230 {
231 CapabilityInfoMap capabilityMap;
232 std::string deviceId = "deviceId_test";
233 std::shared_ptr<CapabilityInfo> capbilityInfo = std::make_shared<CapabilityInfo>(
234 "dhId_test", deviceId, "devName_test", 14, DHType::AUDIO, "attrs", "subtype");
235 std::string key = deviceId + "###" + "dhId_test";
236 LocalCapabilityInfoManager::GetInstance()->globalCapInfoMap_[key] = capbilityInfo;
237 auto ret = LocalCapabilityInfoManager::GetInstance()->GetDataByDHType(DHType::CAMERA, capabilityMap);
238 EXPECT_EQ(DH_FWK_SUCCESS, ret);
239
240 ret = LocalCapabilityInfoManager::GetInstance()->GetDataByDHType(DHType::AUDIO, capabilityMap);
241 LocalCapabilityInfoManager::GetInstance()->globalCapInfoMap_.clear();
242 EXPECT_EQ(DH_FWK_SUCCESS, ret);
243 }
244
245 HWTEST_F(LocalCapInfoMgrTest, GetDataByKeyPrefix_001, TestSize.Level1)
246 {
247 std::string keyPrefix = "";
248 CapabilityInfoMap capabilityMap;
249 auto ret = LocalCapabilityInfoManager::GetInstance()->GetDataByKeyPrefix(keyPrefix, capabilityMap);
250 EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, ret);
251 }
252
253 HWTEST_F(LocalCapInfoMgrTest, GetDataByKeyPrefix_002, TestSize.Level1)
254 {
255 std::string keyPrefix = "keyPrefix_test";
256 CapabilityInfoMap capabilityMap;
257 LocalCapabilityInfoManager::GetInstance()->dbAdapterPtr_ = nullptr;
258 auto ret = LocalCapabilityInfoManager::GetInstance()->GetDataByKeyPrefix(keyPrefix, capabilityMap);
259 EXPECT_EQ(ERR_DH_FWK_RESOURCE_DB_ADAPTER_POINTER_NULL, ret);
260
261 LocalCapabilityInfoManager::GetInstance()->Init();
262 ret = LocalCapabilityInfoManager::GetInstance()->GetDataByKeyPrefix(keyPrefix, capabilityMap);
263 EXPECT_EQ(ERR_DH_FWK_RESOURCE_DB_ADAPTER_OPERATION_FAIL, ret);
264 }
265
266 HWTEST_F(LocalCapInfoMgrTest, ClearRemoteDeviceLocalInfoData_001, TestSize.Level1)
267 {
268 std::string peeruuid = "";
269 LocalCapabilityInfoManager::GetInstance()->dbAdapterPtr_ = nullptr;
270 auto ret = LocalCapabilityInfoManager::GetInstance()->ClearRemoteDeviceLocalInfoData(peeruuid);
271 EXPECT_EQ(ERR_DH_FWK_RESOURCE_DB_ADAPTER_POINTER_NULL, ret);
272
273 LocalCapabilityInfoManager::GetInstance()->Init();
274 ret = LocalCapabilityInfoManager::GetInstance()->ClearRemoteDeviceLocalInfoData(peeruuid);
275 EXPECT_EQ(DH_FWK_SUCCESS, ret);
276 }
277
278 HWTEST_F(LocalCapInfoMgrTest, RemoveLocalInfoInMemByUuid_001, TestSize.Level1)
279 {
280 std::string peeruuid = "123456789";
281 std::string dhid = "audio_132";
282 std::string deviceId = Sha256(peeruuid);
283
284 std::shared_ptr<CapabilityInfo> capInfo = std::make_shared<CapabilityInfo>(
285 dhid, deviceId, "devName_test", DEV_TYPE_TEST, DHType::AUDIO, "attrs", "subtype");
286 std::string key = deviceId + "###" + dhid;
287 LocalCapabilityInfoManager::GetInstance()->globalCapInfoMap_[key] = capInfo;
288 auto ret = LocalCapabilityInfoManager::GetInstance()->RemoveLocalInfoInMemByUuid("111222333");
289 EXPECT_EQ(DH_FWK_SUCCESS, ret);
290
291 ret = LocalCapabilityInfoManager::GetInstance()->RemoveLocalInfoInMemByUuid(peeruuid);
292 EXPECT_EQ(DH_FWK_SUCCESS, ret);
293 }
294 }
295 }