• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-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 "db_adapter_test.h"
17 
18 #include <cerrno>
19 #include <sys/stat.h>
20 #include <sys/types.h>
21 #include <vector>
22 
23 #include "capability_info.h"
24 #include "capability_info_manager.h"
25 #include "constants.h"
26 #include "db_adapter.h"
27 #include "dh_context.h"
28 #include "distributed_hardware_errno.h"
29 #include "distributed_hardware_log.h"
30 #include "mock_db_change_listener.h"
31 #include "version_info_manager.h"
32 
33 using namespace testing::ext;
34 using namespace std;
35 
36 namespace OHOS {
37 namespace DistributedHardware {
38 #undef DH_LOG_TAG
39 #define DH_LOG_TAG "DbAdapterTest"
40 
41 namespace {
42 const string DATABASE_DIR = "/data/service/el1/public/database/dtbhardware_manager_service/";
43 const std::string DEV_NETWORK_ID_1 = "nt36a637105409e904d4da83790a4a9";
44 const string TEST_DEV_ID_0 = "bb536a637105409e904d4da83791aa11";
45 const string TEST_DEV_ID_1 = "bb536a637105409e904d4da83791bb22";
46 const string TEST_DEV_ID_2 = "bb536a637105409e904d4da83791bb33";
47 const string TEST_DEV_NAME = "Dev1";
48 const string TEST_DH_ID_0 = "Camera_00";
49 const string TEST_DH_ID_1 = "Mic_01";
50 const string TEST_DH_ID_2 = "Gps_02";
51 const string TEST_DH_ID_3 = "Display_03";
52 const string TEST_DH_ID_4 = "Input_04";
53 const string TEST_DH_ATTR_0 = "db_test_attr0";
54 const string TEST_DH_ATTR_1 = "db_test_attr1";
55 const string TEST_DH_SUBTYPE_0 = "camera";
56 const string TEST_DH_SUBTYPE_1 = "mic";
57 const string TEST_DH_SUBTYPE_2 = "gps";
58 const string TEST_DH_SUBTYPE_3 = "screen";
59 const string TEST_DH_SUBTYPE_4 = "input";
60 constexpr uint16_t TEST_DEV_TYPE = 0x11;
61 
62 const shared_ptr<CapabilityInfo> CAP_INFO_0 =
63     make_shared<CapabilityInfo>(TEST_DH_ID_0, TEST_DEV_ID_0, DEV_NAME, TEST_DEV_TYPE, DHType::CAMERA, TEST_DH_ATTR_0,
64     TEST_DH_SUBTYPE_0);
65 const shared_ptr<CapabilityInfo> CAP_INFO_1 =
66     make_shared<CapabilityInfo>(TEST_DH_ID_1, TEST_DEV_ID_0, DEV_NAME, TEST_DEV_TYPE, DHType::AUDIO, TEST_DH_ATTR_0,
67     TEST_DH_SUBTYPE_1);
68 const shared_ptr<CapabilityInfo> CAP_INFO_2 =
69     make_shared<CapabilityInfo>(TEST_DH_ID_2, TEST_DEV_ID_0, DEV_NAME, TEST_DEV_TYPE, DHType::GPS, TEST_DH_ATTR_0,
70     TEST_DH_SUBTYPE_2);
71 const shared_ptr<CapabilityInfo> CAP_INFO_3 =
72     make_shared<CapabilityInfo>(TEST_DH_ID_3, TEST_DEV_ID_0, DEV_NAME, TEST_DEV_TYPE, DHType::HFP, TEST_DH_ATTR_0,
73     TEST_DH_SUBTYPE_3);
74 const shared_ptr<CapabilityInfo> CAP_INFO_4 =
75     make_shared<CapabilityInfo>(TEST_DH_ID_4, TEST_DEV_ID_0, DEV_NAME, TEST_DEV_TYPE, DHType::INPUT, TEST_DH_ATTR_0,
76     TEST_DH_SUBTYPE_4);
77 
78 const shared_ptr<CapabilityInfo> CAP_INFO_5 =
79     make_shared<CapabilityInfo>(TEST_DH_ID_0, TEST_DEV_ID_1, DEV_NAME, TEST_DEV_TYPE, DHType::CAMERA, TEST_DH_ATTR_1,
80     TEST_DH_SUBTYPE_0);
81 const shared_ptr<CapabilityInfo> CAP_INFO_6 =
82     make_shared<CapabilityInfo>(TEST_DH_ID_1, TEST_DEV_ID_1, DEV_NAME, TEST_DEV_TYPE, DHType::AUDIO, TEST_DH_ATTR_1,
83     TEST_DH_SUBTYPE_1);
84 const shared_ptr<CapabilityInfo> CAP_INFO_7 =
85     make_shared<CapabilityInfo>(TEST_DH_ID_2, TEST_DEV_ID_1, DEV_NAME, TEST_DEV_TYPE, DHType::GPS, TEST_DH_ATTR_1,
86     TEST_DH_SUBTYPE_2);
87 const shared_ptr<CapabilityInfo> CAP_INFO_8 =
88     make_shared<CapabilityInfo>(TEST_DH_ID_3, TEST_DEV_ID_1, DEV_NAME, TEST_DEV_TYPE, DHType::HFP, TEST_DH_ATTR_1,
89     TEST_DH_SUBTYPE_3);
90 const shared_ptr<CapabilityInfo> CAP_INFO_9 =
91     make_shared<CapabilityInfo>(TEST_DH_ID_4, TEST_DEV_ID_1, DEV_NAME, TEST_DEV_TYPE, DHType::INPUT, TEST_DH_ATTR_1,
92     TEST_DH_SUBTYPE_4);
93 
94 std::shared_ptr<DBAdapter> g_dbAdapterPtr;
95 }
96 
SetUpTestCase(void)97 void DbAdapterTest::SetUpTestCase(void)
98 {
99     auto ret = mkdir(DATABASE_DIR.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
100     if (ret != 0) {
101         DHLOGE("mkdir failed, path: %{public}s, errno : %{public}d", DATABASE_DIR.c_str(), errno);
102     }
103     std::shared_ptr<DistributedKv::KvStoreObserver> changeListener = std::make_shared<MockDBChangeListener>();
104     g_dbAdapterPtr = std::make_shared<DBAdapter>(APP_ID, GLOBAL_CAPABILITY_ID, changeListener);
105     if (g_dbAdapterPtr != nullptr) {
106         g_dbAdapterPtr->Init(true, DistributedKv::DataType::TYPE_DYNAMICAL);
107     }
108 }
109 
TearDownTestCase(void)110 void DbAdapterTest::TearDownTestCase(void)
111 {
112     if (g_dbAdapterPtr != nullptr) {
113         g_dbAdapterPtr->UnInit();
114     }
115 
116     g_dbAdapterPtr = nullptr;
117 
118     auto ret = remove(DATABASE_DIR.c_str());
119     if (ret != 0) {
120         DHLOGE("remove dir failed, path: %{public}s, errno : %{public}d", DATABASE_DIR.c_str(), errno);
121     }
122 }
123 
SetUp()124 void DbAdapterTest::SetUp()
125 {
126 }
127 
TearDown()128 void DbAdapterTest::TearDown()
129 {
130 }
131 
132 /**
133  * @tc.name: db_adapter_test_000
134  * @tc.desc: Verify the Init function.
135  * @tc.type: FUNC
136  * @tc.require: AR000GHSJE
137  */
138 HWTEST_F(DbAdapterTest, db_adapter_test_000, TestSize.Level0)
139 {
140     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
141     EXPECT_EQ(DH_FWK_SUCCESS, g_dbAdapterPtr->Init(true, DistributedKv::DataType::TYPE_DYNAMICAL));
142 }
143 
144 /**
145  * @tc.name: db_adapter_test_001
146  * @tc.desc: Verify the PutDataBatch function.
147  * @tc.type: FUNC
148  * @tc.require: AR000GHSJE
149  */
150 HWTEST_F(DbAdapterTest, db_adapter_test_001, TestSize.Level0)
151 {
152     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
153     vector<shared_ptr<CapabilityInfo>> resInfos { CAP_INFO_0, CAP_INFO_1, CAP_INFO_2, CAP_INFO_3, CAP_INFO_4,
154         CAP_INFO_5, CAP_INFO_6, CAP_INFO_7, CAP_INFO_8, CAP_INFO_9 };
155 
156     std::vector<std::string> keys;
157     std::vector<std::string> values;
158     std::string key;
159     for (auto &resInfo : resInfos) {
160         key = resInfo->GetKey();
161         keys.push_back(key);
162         values.push_back(resInfo->ToJsonString());
163     }
164     EXPECT_EQ(DH_FWK_SUCCESS, g_dbAdapterPtr->PutDataBatch(keys, values));
165     for (auto &resInfo : resInfos) {
166         g_dbAdapterPtr->RemoveDataByKey(resInfo->GetKey());
167     }
168 }
169 
170 /**
171  * @tc.name: db_adapter_test_002
172  * @tc.desc: Verify the PutDataBatch function.
173  * @tc.type: FUNC
174  * @tc.require: AR000GHSCV
175  */
176 HWTEST_F(DbAdapterTest, db_adapter_test_002, TestSize.Level0)
177 {
178     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
179     std::vector<std::string> keys { std::string(TEST_DEV_ID_2 + TEST_DH_ID_0) };
180     std::vector<std::string> values { TEST_DH_ATTR_0 };
181 
182     EXPECT_EQ(DH_FWK_SUCCESS, g_dbAdapterPtr->PutDataBatch(keys, values));
183     g_dbAdapterPtr->RemoveDataByKey(keys[0]);
184 }
185 
186 /**
187  * @tc.name: db_adapter_test_003
188  * @tc.desc: Verify the PutDataBatch function.
189  * @tc.type: FUNC
190  * @tc.require: AR000GHSCV
191  */
192 HWTEST_F(DbAdapterTest, db_adapter_test_003, TestSize.Level0)
193 {
194     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
195     std::vector<std::string> keys { std::string(TEST_DEV_ID_2 + TEST_DH_ID_0) };
196     std::vector<std::string> valuesEmpty;
197 
198     EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutDataBatch(keys, valuesEmpty));
199 }
200 
201 /**
202  * @tc.name: db_adapter_test_004
203  * @tc.desc: Verify the PutDataBatch function.
204  * @tc.type: FUNC
205  * @tc.require: AR000GHSCV
206  */
207 HWTEST_F(DbAdapterTest, db_adapter_test_004, TestSize.Level0)
208 {
209     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
210     std::vector<std::string> keysEmpty;
211     std::vector<std::string> values { TEST_DH_ATTR_0 };
212 
213     EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutDataBatch(keysEmpty, values));
214 }
215 
216 /**
217  * @tc.name: db_adapter_test_005
218  * @tc.desc: Verify the PutDataBatch function.
219  * @tc.type: FUNC
220  * @tc.require: AR000GHSCV
221  */
222 HWTEST_F(DbAdapterTest, db_adapter_test_005, TestSize.Level0)
223 {
224     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
225     std::vector<std::string> keysEmpty;
226     std::vector<std::string> valuesEmpty;
227 
228     EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutDataBatch(keysEmpty, valuesEmpty));
229 }
230 
231 /**
232  * @tc.name: db_adapter_test_006
233  * @tc.desc: Verify the PutDataBatch function.
234  * @tc.type: FUNC
235  * @tc.require: AR000GHSCV
236  */
237 HWTEST_F(DbAdapterTest, db_adapter_test_006, TestSize.Level0)
238 {
239     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
240     std::vector<std::string> keys { std::string(TEST_DEV_ID_2 + TEST_DH_ID_0) };
241     std::vector<std::string> values { TEST_DH_ATTR_0, TEST_DH_ATTR_1 };
242 
243     EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutDataBatch(keys, values));
244 }
245 
246 /**
247  * @tc.name: db_adapter_test_007
248  * @tc.desc: Verify the PutDataBatch function.
249  * @tc.type: FUNC
250  * @tc.require: AR000GHSCV
251  */
252 HWTEST_F(DbAdapterTest, db_adapter_test_007, TestSize.Level0)
253 {
254     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
255     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
256     std::vector<std::string> keys { std::string(TEST_DEV_ID_2 + TEST_DH_ID_0) };
257     std::vector<std::string> values { TEST_DH_ATTR_0 };
258 
259     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->PutDataBatch(keys, values));
260 }
261 
262 /**
263  * @tc.name: db_adapter_test_008
264  * @tc.desc: Verify the ReInit function.
265  * @tc.type: FUNC
266  * @tc.require: AR000GHSCV
267  */
268 HWTEST_F(DbAdapterTest, db_adapter_test_008, TestSize.Level0)
269 {
270     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
271     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
272     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->ReInit(true));
273 }
274 
275 /**
276  * @tc.name: db_adapter_test_009
277  * @tc.desc: Verify the RemoveDeviceData function.
278  * @tc.type: FUNC
279  * @tc.require: AR000GHSCV
280  */
281 HWTEST_F(DbAdapterTest, db_adapter_test_009, TestSize.Level0)
282 {
283     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
284     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
285     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->RemoveDeviceData(TEST_DEV_ID_0));
286 }
287 
288 /**
289  * @tc.name: db_adapter_test_010
290  * @tc.desc: Verify the RemoveDataByKey function.
291  * @tc.type: FUNC
292  * @tc.require: AR000GHSCV
293  */
294 HWTEST_F(DbAdapterTest, db_adapter_test_010, TestSize.Level0)
295 {
296     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
297     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
298     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->RemoveDataByKey("key"));
299 }
300 
301 /**
302  * @tc.name: db_adapter_test_012
303  * @tc.desc: Verify the UnRegisterChangeListener function.
304  * @tc.type: FUNC
305  * @tc.require: AR000GHSCV
306  */
307 HWTEST_F(DbAdapterTest, db_adapter_test_012, TestSize.Level0)
308 {
309     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
310     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
311     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->UnRegisterChangeListener());
312 }
313 
314 /**
315  * @tc.name: db_adapter_test_013
316  * @tc.desc: Verify the PutData function.
317  * @tc.type: FUNC
318  * @tc.require: AR000GHSCV
319  */
320 HWTEST_F(DbAdapterTest, db_adapter_test_013, TestSize.Level0)
321 {
322     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
323     std::string key = std::string(TEST_DEV_ID_1 + TEST_DH_ID_1);
324     std::string value = TEST_DH_ATTR_0;
325     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
326     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->PutData(key, value));
327 }
328 
329 /**
330  * @tc.name: db_adapter_test_014
331  * @tc.desc: Verify the RegisterChangeListener function.
332  * @tc.type: FUNC
333  * @tc.require: AR000GHSCV
334  */
335 HWTEST_F(DbAdapterTest, db_adapter_test_014, TestSize.Level0)
336 {
337     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
338     std::string networkId = DEV_NETWORK_ID_1;
339     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
340     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->RegisterChangeListener());
341 }
342 
343 /**
344  * @tc.name: db_adapter_test_015
345  * @tc.desc: Verify the UnRegisterChangeListener function.
346  * @tc.type: FUNC
347  * @tc.require: AR000GHSCV
348  */
349 HWTEST_F(DbAdapterTest, db_adapter_test_015, TestSize.Level0)
350 {
351     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
352     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
353     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->UnRegisterChangeListener());
354 }
355 
356 /**
357  * @tc.name: ReInit_001
358  * @tc.desc: Verify the ReInit_001 function.
359  * @tc.type: FUNC
360  * @tc.require: AR000GHSCV
361  */
362 HWTEST_F(DbAdapterTest, ReInit_001, TestSize.Level0)
363 {
364     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
365     g_dbAdapterPtr->GetKvStorePtr(true, DistributedKv::DataType::TYPE_DYNAMICAL);
366     EXPECT_EQ(DH_FWK_SUCCESS, g_dbAdapterPtr->ReInit(true));
367 }
368 
369 /**
370  * @tc.name: RemoveDeviceData_001
371  * @tc.desc: Verify the RemoveDeviceData function.
372  * @tc.type: FUNC
373  * @tc.require: AR000GHSJM
374  */
375 HWTEST_F(DbAdapterTest, RemoveDeviceData_001, TestSize.Level0)
376 {
377     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
378     g_dbAdapterPtr->GetKvStorePtr(true, DistributedKv::DataType::TYPE_DYNAMICAL);
379     EXPECT_EQ(DH_FWK_SUCCESS, g_dbAdapterPtr->RemoveDeviceData(TEST_DEV_ID_0));
380 }
381 
382 /**
383  * @tc.name: PutData_01
384  * @tc.desc: Verify the PutData function.
385  * @tc.type: FUNC
386  * @tc.require: AR000GHSCV
387  */
388 HWTEST_F(DbAdapterTest, PutData_01, TestSize.Level0)
389 {
390     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
391     std::string key;
392     std::string value;
393     EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutData(key, value));
394 }
395 
396 /**
397  * @tc.name: PutData_02
398  * @tc.desc: Verify the PutData function.
399  * @tc.type: FUNC
400  * @tc.require: AR000GHSCV
401  */
402 HWTEST_F(DbAdapterTest, PutData_02, TestSize.Level0)
403 {
404     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
405     uint32_t MAX_MESSAGE_LEN = 40 * 1024 * 1024 +1 ;
406     std::string key = "key";
407     key.resize(MAX_MESSAGE_LEN);
408     std::string value;
409     EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutData(key, value));
410 }
411 
412 /**
413  * @tc.name: PutData_03
414  * @tc.desc: Verify the PutData function.
415  * @tc.type: FUNC
416  * @tc.require: AR000GHSCV
417  */
418 HWTEST_F(DbAdapterTest, PutData_03, TestSize.Level0)
419 {
420     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
421     std::string key = "key";
422     std::string value;
423     EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutData(key, value));
424 }
425 
426 /**
427  * @tc.name: PutData_04
428  * @tc.desc: Verify the PutData function.
429  * @tc.type: FUNC
430  * @tc.require: AR000GHSCV
431  */
432 HWTEST_F(DbAdapterTest, PutData_04, TestSize.Level0)
433 {
434     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
435     uint32_t MAX_MESSAGE_LEN = 40 * 1024 * 1024 + 1;
436     std::string key = "key";
437     std::string value;
438     value.resize(MAX_MESSAGE_LEN);
439     EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutData(key, value));
440 }
441 
442 /**
443  * @tc.name: PutData_05
444  * @tc.desc: Verify the PutData function.
445  * @tc.type: FUNC
446  * @tc.require: AR000GHSCV
447  */
448 HWTEST_F(DbAdapterTest, PutData_05, TestSize.Level0)
449 {
450     ASSERT_TRUE(g_dbAdapterPtr != nullptr);
451     std::string key = "key";
452     std::string value = "value";
453     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
454     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->PutData(key, value));
455 }
456 } // namespace DistributedHardware
457 } // namespace OHOS
458