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