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