1 /*
2 * Copyright (c) 2022 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 "constants.h"
25 #define private public
26 #include "db_adapter.h"
27 #undef private
28 #include "dh_context.h"
29 #include "distributed_hardware_errno.h"
30 #include "distributed_hardware_log.h"
31 #include "mock_db_change_listener.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 constexpr uint16_t TEST_DEV_TYPE = 0x11;
56
57 const shared_ptr<CapabilityInfo> CAP_INFO_0 =
58 make_shared<CapabilityInfo>(TEST_DH_ID_0, TEST_DEV_ID_0, DEV_NAME, TEST_DEV_TYPE, DHType::CAMERA, TEST_DH_ATTR_0);
59 const shared_ptr<CapabilityInfo> CAP_INFO_1 =
60 make_shared<CapabilityInfo>(TEST_DH_ID_1, TEST_DEV_ID_0, DEV_NAME, TEST_DEV_TYPE, DHType::AUDIO, TEST_DH_ATTR_0);
61 const shared_ptr<CapabilityInfo> CAP_INFO_2 =
62 make_shared<CapabilityInfo>(TEST_DH_ID_2, TEST_DEV_ID_0, DEV_NAME, TEST_DEV_TYPE, DHType::GPS, TEST_DH_ATTR_0);
63 const shared_ptr<CapabilityInfo> CAP_INFO_3 =
64 make_shared<CapabilityInfo>(TEST_DH_ID_3, TEST_DEV_ID_0, DEV_NAME, TEST_DEV_TYPE, DHType::HFP, TEST_DH_ATTR_0);
65 const shared_ptr<CapabilityInfo> CAP_INFO_4 =
66 make_shared<CapabilityInfo>(TEST_DH_ID_4, TEST_DEV_ID_0, DEV_NAME, TEST_DEV_TYPE, DHType::INPUT, TEST_DH_ATTR_0);
67
68 const shared_ptr<CapabilityInfo> CAP_INFO_5 =
69 make_shared<CapabilityInfo>(TEST_DH_ID_0, TEST_DEV_ID_1, DEV_NAME, TEST_DEV_TYPE, DHType::CAMERA, TEST_DH_ATTR_1);
70 const shared_ptr<CapabilityInfo> CAP_INFO_6 =
71 make_shared<CapabilityInfo>(TEST_DH_ID_1, TEST_DEV_ID_1, DEV_NAME, TEST_DEV_TYPE, DHType::AUDIO, TEST_DH_ATTR_1);
72 const shared_ptr<CapabilityInfo> CAP_INFO_7 =
73 make_shared<CapabilityInfo>(TEST_DH_ID_2, TEST_DEV_ID_1, DEV_NAME, TEST_DEV_TYPE, DHType::GPS, TEST_DH_ATTR_1);
74 const shared_ptr<CapabilityInfo> CAP_INFO_8 =
75 make_shared<CapabilityInfo>(TEST_DH_ID_3, TEST_DEV_ID_1, DEV_NAME, TEST_DEV_TYPE, DHType::HFP, TEST_DH_ATTR_1);
76 const shared_ptr<CapabilityInfo> CAP_INFO_9 =
77 make_shared<CapabilityInfo>(TEST_DH_ID_4, TEST_DEV_ID_1, DEV_NAME, TEST_DEV_TYPE, DHType::INPUT, TEST_DH_ATTR_1);
78
79 std::shared_ptr<DBAdapter> g_dbAdapterPtr;
80 }
81
SetUpTestCase(void)82 void DbAdapterTest::SetUpTestCase(void)
83 {
84 auto ret = mkdir(DATABASE_DIR.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
85 if (ret != 0) {
86 DHLOGE("mkdir failed, path: %s, errno : %d", DATABASE_DIR.c_str(), errno);
87 }
88
89 std::shared_ptr<DistributedKv::KvStoreObserver> changeListener = std::make_shared<MockDBChangeListener>();
90 g_dbAdapterPtr = std::make_shared<DBAdapter>(APP_ID, GLOBAL_CAPABILITY_ID, changeListener);
91 if (g_dbAdapterPtr != nullptr) {
92 g_dbAdapterPtr->Init();
93 }
94 }
95
TearDownTestCase(void)96 void DbAdapterTest::TearDownTestCase(void)
97 {
98 if (g_dbAdapterPtr != nullptr) {
99 g_dbAdapterPtr->UnInit();
100 }
101
102 g_dbAdapterPtr = nullptr;
103
104 auto ret = remove(DATABASE_DIR.c_str());
105 if (ret != 0) {
106 DHLOGE("remove dir failed, path: %s, errno : %d", DATABASE_DIR.c_str(), errno);
107 }
108 }
109
SetUp()110 void DbAdapterTest::SetUp()
111 {
112 }
113
TearDown()114 void DbAdapterTest::TearDown()
115 {
116 }
117
118 /**
119 * @tc.name: db_adapter_test_000
120 * @tc.desc: Verify the Init function.
121 * @tc.type: FUNC
122 * @tc.require: AR000GHSJE
123 */
124 HWTEST_F(DbAdapterTest, db_adapter_test_000, TestSize.Level0)
125 {
126 EXPECT_EQ(DH_FWK_SUCCESS, g_dbAdapterPtr->Init());
127 }
128
129 /**
130 * @tc.name: db_adapter_test_001
131 * @tc.desc: Verify the PutDataBatch function.
132 * @tc.type: FUNC
133 * @tc.require: AR000GHSJE
134 */
135 HWTEST_F(DbAdapterTest, db_adapter_test_001, TestSize.Level0)
136 {
137 vector<shared_ptr<CapabilityInfo>> resInfos { CAP_INFO_0, CAP_INFO_1, CAP_INFO_2, CAP_INFO_3, CAP_INFO_4,
138 CAP_INFO_5, CAP_INFO_6, CAP_INFO_7, CAP_INFO_8, CAP_INFO_9 };
139
140 std::vector<std::string> keys;
141 std::vector<std::string> values;
142 std::string key;
143 for (auto &resInfo : resInfos) {
144 key = resInfo->GetKey();
145 keys.push_back(key);
146 values.push_back(resInfo->ToJsonString());
147 }
148 EXPECT_EQ(DH_FWK_SUCCESS, g_dbAdapterPtr->PutDataBatch(keys, values));
149 for (auto &resInfo : resInfos) {
150 g_dbAdapterPtr->RemoveDataByKey(resInfo->GetKey());
151 }
152 }
153
154 /**
155 * @tc.name: db_adapter_test_002
156 * @tc.desc: Verify the PutDataBatch function.
157 * @tc.type: FUNC
158 * @tc.require: AR000GHSCV
159 */
160 HWTEST_F(DbAdapterTest, db_adapter_test_002, TestSize.Level0)
161 {
162 std::vector<std::string> keys { std::string(TEST_DEV_ID_2 + TEST_DH_ID_0) };
163 std::vector<std::string> values { TEST_DH_ATTR_0 };
164
165 EXPECT_EQ(DH_FWK_SUCCESS, g_dbAdapterPtr->PutDataBatch(keys, values));
166 g_dbAdapterPtr->RemoveDataByKey(keys[0]);
167 }
168
169 /**
170 * @tc.name: db_adapter_test_003
171 * @tc.desc: Verify the PutDataBatch function.
172 * @tc.type: FUNC
173 * @tc.require: AR000GHSCV
174 */
175 HWTEST_F(DbAdapterTest, db_adapter_test_003, TestSize.Level0)
176 {
177 std::vector<std::string> keys { std::string(TEST_DEV_ID_2 + TEST_DH_ID_0) };
178 std::vector<std::string> valuesEmpty;
179
180 EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutDataBatch(keys, valuesEmpty));
181 }
182
183 /**
184 * @tc.name: db_adapter_test_004
185 * @tc.desc: Verify the PutDataBatch function.
186 * @tc.type: FUNC
187 * @tc.require: AR000GHSCV
188 */
189 HWTEST_F(DbAdapterTest, db_adapter_test_004, TestSize.Level0)
190 {
191 std::vector<std::string> keysEmpty;
192 std::vector<std::string> values { TEST_DH_ATTR_0 };
193
194 EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutDataBatch(keysEmpty, values));
195 }
196
197 /**
198 * @tc.name: db_adapter_test_005
199 * @tc.desc: Verify the PutDataBatch function.
200 * @tc.type: FUNC
201 * @tc.require: AR000GHSCV
202 */
203 HWTEST_F(DbAdapterTest, db_adapter_test_005, TestSize.Level0)
204 {
205 std::vector<std::string> keysEmpty;
206 std::vector<std::string> valuesEmpty;
207
208 EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutDataBatch(keysEmpty, valuesEmpty));
209 }
210
211 /**
212 * @tc.name: db_adapter_test_006
213 * @tc.desc: Verify the PutDataBatch function.
214 * @tc.type: FUNC
215 * @tc.require: AR000GHSCV
216 */
217 HWTEST_F(DbAdapterTest, db_adapter_test_006, TestSize.Level0)
218 {
219 std::vector<std::string> keys { std::string(TEST_DEV_ID_2 + TEST_DH_ID_0) };
220 std::vector<std::string> values { TEST_DH_ATTR_0, TEST_DH_ATTR_1 };
221
222 EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, g_dbAdapterPtr->PutDataBatch(keys, values));
223 }
224
225 /**
226 * @tc.name: db_adapter_test_007
227 * @tc.desc: Verify the PutDataBatch function.
228 * @tc.type: FUNC
229 * @tc.require: AR000GHSCV
230 */
231 HWTEST_F(DbAdapterTest, db_adapter_test_007, TestSize.Level0)
232 {
233 g_dbAdapterPtr->kvStoragePtr_ = nullptr;
234 std::vector<std::string> keys { std::string(TEST_DEV_ID_2 + TEST_DH_ID_0) };
235 std::vector<std::string> values { TEST_DH_ATTR_0 };
236
237 EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->PutDataBatch(keys, values));
238 }
239
240 /**
241 * @tc.name: db_adapter_test_008
242 * @tc.desc: Verify the ReInit function.
243 * @tc.type: FUNC
244 * @tc.require: AR000GHSCV
245 */
246 HWTEST_F(DbAdapterTest, db_adapter_test_008, TestSize.Level0)
247 {
248 g_dbAdapterPtr->kvStoragePtr_ = nullptr;
249 EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->ReInit());
250 }
251
252 /**
253 * @tc.name: db_adapter_test_009
254 * @tc.desc: Verify the RemoveDeviceData function.
255 * @tc.type: FUNC
256 * @tc.require: AR000GHSCV
257 */
258 HWTEST_F(DbAdapterTest, db_adapter_test_009, TestSize.Level0)
259 {
260 g_dbAdapterPtr->kvStoragePtr_ = nullptr;
261 EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->RemoveDeviceData(TEST_DEV_ID_0));
262 }
263
264 /**
265 * @tc.name: db_adapter_test_010
266 * @tc.desc: Verify the RemoveDataByKey function.
267 * @tc.type: FUNC
268 * @tc.require: AR000GHSCV
269 */
270 HWTEST_F(DbAdapterTest, db_adapter_test_010, TestSize.Level0)
271 {
272 g_dbAdapterPtr->kvStoragePtr_ = nullptr;
273 EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->RemoveDataByKey("key"));
274 }
275
276 /**
277 * @tc.name: db_adapter_test_011
278 * @tc.desc: Verify the ManualSync function.
279 * @tc.type: FUNC
280 * @tc.require: AR000GHSCV
281 */
282 HWTEST_F(DbAdapterTest, db_adapter_test_011, TestSize.Level0)
283 {
284 std::string networkId = DEV_NETWORK_ID_1;
285 g_dbAdapterPtr->kvStoragePtr_ = nullptr;
286 EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->ManualSync(DEV_NETWORK_ID_1));
287 }
288
289 /**
290 * @tc.name: db_adapter_test_012
291 * @tc.desc: Verify the UnRegisterChangeListener function.
292 * @tc.type: FUNC
293 * @tc.require: AR000GHSCV
294 */
295 HWTEST_F(DbAdapterTest, db_adapter_test_012, TestSize.Level0)
296 {
297 g_dbAdapterPtr->kvStoragePtr_ = nullptr;
298 EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->UnRegisterChangeListener());
299 }
300
301 /**
302 * @tc.name: db_adapter_test_013
303 * @tc.desc: Verify the PutData function.
304 * @tc.type: FUNC
305 * @tc.require: AR000GHSCV
306 */
307 HWTEST_F(DbAdapterTest, db_adapter_test_013, TestSize.Level0)
308 {
309 std::string key = std::string(TEST_DEV_ID_1 + TEST_DH_ID_1);
310 std::string value = TEST_DH_ATTR_0;
311 g_dbAdapterPtr->kvStoragePtr_ = nullptr;
312 EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->PutData(key, value));
313 }
314
315 /**
316 * @tc.name: db_adapter_test_014
317 * @tc.desc: Verify the RegisterChangeListener function.
318 * @tc.type: FUNC
319 * @tc.require: AR000GHSCV
320 */
321 HWTEST_F(DbAdapterTest, db_adapter_test_014, TestSize.Level0)
322 {
323 std::string networkId = DEV_NETWORK_ID_1;
324 g_dbAdapterPtr->kvStoragePtr_ = nullptr;
325 EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->RegisterChangeListener());
326 }
327
328 /**
329 * @tc.name: db_adapter_test_015
330 * @tc.desc: Verify the UnRegisterChangeListener function.
331 * @tc.type: FUNC
332 * @tc.require: AR000GHSCV
333 */
334 HWTEST_F(DbAdapterTest, db_adapter_test_015, TestSize.Level0)
335 {
336 g_dbAdapterPtr->kvStoragePtr_ = nullptr;
337 EXPECT_EQ(ERR_DH_FWK_RESOURCE_KV_STORAGE_POINTER_NULL, g_dbAdapterPtr->UnRegisterChangeListener());
338 }
339 } // namespace DistributedHardware
340 } // namespace OHOS
341