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