• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2024 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     if (g_dbAdapterPtr == nullptr) {
141         return;
142     }
143     EXPECT_EQ(DH_FWK_SUCCESS, g_dbAdapterPtr->Init(true, DistributedKv::DataType::TYPE_DYNAMICAL));
144 }
145 
146 /**
147  * @tc.name: db_adapter_test_001
148  * @tc.desc: Verify the PutDataBatch function.
149  * @tc.type: FUNC
150  * @tc.require: AR000GHSJE
151  */
152 HWTEST_F(DbAdapterTest, db_adapter_test_001, TestSize.Level0)
153 {
154     if (g_dbAdapterPtr == nullptr) {
155         return;
156     }
157     vector<shared_ptr<CapabilityInfo>> resInfos { CAP_INFO_0, CAP_INFO_1, CAP_INFO_2, CAP_INFO_3, CAP_INFO_4,
158         CAP_INFO_5, CAP_INFO_6, CAP_INFO_7, CAP_INFO_8, CAP_INFO_9 };
159 
160     std::vector<std::string> keys;
161     std::vector<std::string> values;
162     std::string key;
163     for (auto &resInfo : resInfos) {
164         key = resInfo->GetKey();
165         keys.push_back(key);
166         values.push_back(resInfo->ToJsonString());
167     }
168     EXPECT_EQ(DH_FWK_SUCCESS, g_dbAdapterPtr->PutDataBatch(keys, values));
169     for (auto &resInfo : resInfos) {
170         g_dbAdapterPtr->RemoveDataByKey(resInfo->GetKey());
171     }
172 }
173 
174 /**
175  * @tc.name: db_adapter_test_002
176  * @tc.desc: Verify the PutDataBatch function.
177  * @tc.type: FUNC
178  * @tc.require: AR000GHSCV
179  */
180 HWTEST_F(DbAdapterTest, db_adapter_test_002, TestSize.Level0)
181 {
182     if (g_dbAdapterPtr == nullptr) {
183         return;
184     }
185     std::vector<std::string> keys { std::string(TEST_DEV_ID_2 + TEST_DH_ID_0) };
186     std::vector<std::string> values { TEST_DH_ATTR_0 };
187 
188     EXPECT_EQ(DH_FWK_SUCCESS, g_dbAdapterPtr->PutDataBatch(keys, values));
189     g_dbAdapterPtr->RemoveDataByKey(keys[0]);
190 }
191 
192 /**
193  * @tc.name: db_adapter_test_003
194  * @tc.desc: Verify the PutDataBatch function.
195  * @tc.type: FUNC
196  * @tc.require: AR000GHSCV
197  */
198 HWTEST_F(DbAdapterTest, db_adapter_test_003, TestSize.Level0)
199 {
200     if (g_dbAdapterPtr == nullptr) {
201         return;
202     }
203     std::vector<std::string> keys { std::string(TEST_DEV_ID_2 + TEST_DH_ID_0) };
204     std::vector<std::string> valuesEmpty;
205 
206     EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutDataBatch(keys, valuesEmpty));
207 }
208 
209 /**
210  * @tc.name: db_adapter_test_004
211  * @tc.desc: Verify the PutDataBatch function.
212  * @tc.type: FUNC
213  * @tc.require: AR000GHSCV
214  */
215 HWTEST_F(DbAdapterTest, db_adapter_test_004, TestSize.Level0)
216 {
217     if (g_dbAdapterPtr == nullptr) {
218         return;
219     }
220     std::vector<std::string> keysEmpty;
221     std::vector<std::string> values { TEST_DH_ATTR_0 };
222 
223     EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutDataBatch(keysEmpty, values));
224 }
225 
226 /**
227  * @tc.name: db_adapter_test_005
228  * @tc.desc: Verify the PutDataBatch function.
229  * @tc.type: FUNC
230  * @tc.require: AR000GHSCV
231  */
232 HWTEST_F(DbAdapterTest, db_adapter_test_005, TestSize.Level0)
233 {
234     if (g_dbAdapterPtr == nullptr) {
235         return;
236     }
237     std::vector<std::string> keysEmpty;
238     std::vector<std::string> valuesEmpty;
239 
240     EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutDataBatch(keysEmpty, valuesEmpty));
241 }
242 
243 /**
244  * @tc.name: db_adapter_test_006
245  * @tc.desc: Verify the PutDataBatch function.
246  * @tc.type: FUNC
247  * @tc.require: AR000GHSCV
248  */
249 HWTEST_F(DbAdapterTest, db_adapter_test_006, TestSize.Level0)
250 {
251     if (g_dbAdapterPtr == nullptr) {
252         return;
253     }
254     std::vector<std::string> keys { std::string(TEST_DEV_ID_2 + TEST_DH_ID_0) };
255     std::vector<std::string> values { TEST_DH_ATTR_0, TEST_DH_ATTR_1 };
256 
257     EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutDataBatch(keys, values));
258 }
259 
260 /**
261  * @tc.name: db_adapter_test_007
262  * @tc.desc: Verify the PutDataBatch function.
263  * @tc.type: FUNC
264  * @tc.require: AR000GHSCV
265  */
266 HWTEST_F(DbAdapterTest, db_adapter_test_007, TestSize.Level0)
267 {
268     if (g_dbAdapterPtr == nullptr) {
269         return;
270     }
271     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
272     std::vector<std::string> keys { std::string(TEST_DEV_ID_2 + TEST_DH_ID_0) };
273     std::vector<std::string> values { TEST_DH_ATTR_0 };
274 
275     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->PutDataBatch(keys, values));
276 }
277 
278 /**
279  * @tc.name: db_adapter_test_008
280  * @tc.desc: Verify the ReInit function.
281  * @tc.type: FUNC
282  * @tc.require: AR000GHSCV
283  */
284 HWTEST_F(DbAdapterTest, db_adapter_test_008, TestSize.Level0)
285 {
286     if (g_dbAdapterPtr == nullptr) {
287         return;
288     }
289     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
290     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->ReInit(true));
291 }
292 
293 /**
294  * @tc.name: db_adapter_test_009
295  * @tc.desc: Verify the RemoveDeviceData function.
296  * @tc.type: FUNC
297  * @tc.require: AR000GHSCV
298  */
299 HWTEST_F(DbAdapterTest, db_adapter_test_009, TestSize.Level0)
300 {
301     if (g_dbAdapterPtr == nullptr) {
302         return;
303     }
304     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
305     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->RemoveDeviceData(TEST_DEV_ID_0));
306 }
307 
308 /**
309  * @tc.name: db_adapter_test_010
310  * @tc.desc: Verify the RemoveDataByKey function.
311  * @tc.type: FUNC
312  * @tc.require: AR000GHSCV
313  */
314 HWTEST_F(DbAdapterTest, db_adapter_test_010, TestSize.Level0)
315 {
316     if (g_dbAdapterPtr == nullptr) {
317         return;
318     }
319     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
320     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->RemoveDataByKey("key"));
321 }
322 
323 /**
324  * @tc.name: db_adapter_test_012
325  * @tc.desc: Verify the UnRegisterChangeListener function.
326  * @tc.type: FUNC
327  * @tc.require: AR000GHSCV
328  */
329 HWTEST_F(DbAdapterTest, db_adapter_test_012, TestSize.Level0)
330 {
331     if (g_dbAdapterPtr == nullptr) {
332         return;
333     }
334     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
335     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->UnRegisterChangeListener());
336 }
337 
338 /**
339  * @tc.name: db_adapter_test_013
340  * @tc.desc: Verify the PutData function.
341  * @tc.type: FUNC
342  * @tc.require: AR000GHSCV
343  */
344 HWTEST_F(DbAdapterTest, db_adapter_test_013, TestSize.Level0)
345 {
346     if (g_dbAdapterPtr == nullptr) {
347         return;
348     }
349     std::string key = std::string(TEST_DEV_ID_1 + TEST_DH_ID_1);
350     std::string value = TEST_DH_ATTR_0;
351     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
352     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->PutData(key, value));
353 }
354 
355 /**
356  * @tc.name: db_adapter_test_014
357  * @tc.desc: Verify the RegisterChangeListener function.
358  * @tc.type: FUNC
359  * @tc.require: AR000GHSCV
360  */
361 HWTEST_F(DbAdapterTest, db_adapter_test_014, TestSize.Level0)
362 {
363     if (g_dbAdapterPtr == nullptr) {
364         return;
365     }
366     std::string networkId = DEV_NETWORK_ID_1;
367     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
368     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->RegisterChangeListener());
369 }
370 
371 /**
372  * @tc.name: db_adapter_test_015
373  * @tc.desc: Verify the UnRegisterChangeListener function.
374  * @tc.type: FUNC
375  * @tc.require: AR000GHSCV
376  */
377 HWTEST_F(DbAdapterTest, db_adapter_test_015, TestSize.Level0)
378 {
379     if (g_dbAdapterPtr == nullptr) {
380         return;
381     }
382     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
383     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->UnRegisterChangeListener());
384 }
385 
386 /**
387  * @tc.name: ReInit_001
388  * @tc.desc: Verify the ReInit_001 function.
389  * @tc.type: FUNC
390  * @tc.require: AR000GHSCV
391  */
392 HWTEST_F(DbAdapterTest, ReInit_001, TestSize.Level0)
393 {
394     if (g_dbAdapterPtr == nullptr) {
395         return;
396     }
397     g_dbAdapterPtr->GetKvStorePtr(true, DistributedKv::DataType::TYPE_DYNAMICAL);
398     EXPECT_EQ(DH_FWK_SUCCESS, g_dbAdapterPtr->ReInit(true));
399 }
400 
401 /**
402  * @tc.name: RemoveDeviceData_001
403  * @tc.desc: Verify the RemoveDeviceData function.
404  * @tc.type: FUNC
405  * @tc.require: AR000GHSJM
406  */
407 HWTEST_F(DbAdapterTest, RemoveDeviceData_001, TestSize.Level0)
408 {
409     if (g_dbAdapterPtr == nullptr) {
410         return;
411     }
412     g_dbAdapterPtr->GetKvStorePtr(true, DistributedKv::DataType::TYPE_DYNAMICAL);
413     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_OPERATION_FAIL, g_dbAdapterPtr->RemoveDeviceData(TEST_DEV_ID_0));
414 }
415 
416 /**
417  * @tc.name: PutData_01
418  * @tc.desc: Verify the PutData function.
419  * @tc.type: FUNC
420  * @tc.require: AR000GHSCV
421  */
422 HWTEST_F(DbAdapterTest, PutData_01, TestSize.Level0)
423 {
424     if (g_dbAdapterPtr == nullptr) {
425         return;
426     }
427     std::string key;
428     std::string value;
429     EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutData(key, value));
430 }
431 
432 /**
433  * @tc.name: PutData_02
434  * @tc.desc: Verify the PutData function.
435  * @tc.type: FUNC
436  * @tc.require: AR000GHSCV
437  */
438 HWTEST_F(DbAdapterTest, PutData_02, TestSize.Level0)
439 {
440     if (g_dbAdapterPtr == nullptr) {
441         return;
442     }
443     uint32_t MAX_MESSAGE_LEN = 40 * 1024 * 1024 +1 ;
444     std::string key = "key";
445     key.resize(MAX_MESSAGE_LEN);
446     std::string value;
447     EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutData(key, value));
448 }
449 
450 /**
451  * @tc.name: PutData_03
452  * @tc.desc: Verify the PutData function.
453  * @tc.type: FUNC
454  * @tc.require: AR000GHSCV
455  */
456 HWTEST_F(DbAdapterTest, PutData_03, TestSize.Level0)
457 {
458     if (g_dbAdapterPtr == nullptr) {
459         return;
460     }
461     std::string key = "key";
462     std::string value;
463     EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutData(key, value));
464 }
465 
466 /**
467  * @tc.name: PutData_04
468  * @tc.desc: Verify the PutData function.
469  * @tc.type: FUNC
470  * @tc.require: AR000GHSCV
471  */
472 HWTEST_F(DbAdapterTest, PutData_04, TestSize.Level0)
473 {
474     if (g_dbAdapterPtr == nullptr) {
475         return;
476     }
477     uint32_t MAX_MESSAGE_LEN = 40 * 1024 * 1024 + 1;
478     std::string key = "key";
479     std::string value;
480     value.resize(MAX_MESSAGE_LEN);
481     EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutData(key, value));
482 }
483 
484 /**
485  * @tc.name: PutData_05
486  * @tc.desc: Verify the PutData function.
487  * @tc.type: FUNC
488  * @tc.require: AR000GHSCV
489  */
490 HWTEST_F(DbAdapterTest, PutData_05, TestSize.Level0)
491 {
492     if (g_dbAdapterPtr == nullptr) {
493         return;
494     }
495     std::string key = "key";
496     std::string value = "value";
497     g_dbAdapterPtr->kvStoragePtr_ = nullptr;
498     EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->PutData(key, value));
499 }
500 } // namespace DistributedHardware
501 } // namespace OHOS
502