1 /*
2 * Copyright (c) 2021 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 <gtest/gtest.h>
17 #include <chrono>
18 #include <fstream>
19 #include <thread>
20
21 #include "db_constant.h"
22 #include "db_common.h"
23 #include "distributeddb_data_generate_unit_test.h"
24 #include "distributeddb_tools_unit_test.h"
25
26 using namespace testing::ext;
27 using namespace DistributedDB;
28 using namespace DistributedDBUnitTest;
29 using namespace std;
30
31 namespace {
32 // define some variables to init a KvStoreDelegateManager object.
33 KvStoreDelegateManager g_mgr(APP_ID, USER_ID);
34 string g_testDir;
35 KvStoreConfig g_config;
36
37 // define the g_kvNbDelegateCallback, used to get some information when open a kv store.
38 DBStatus g_kvDelegateStatus = INVALID_ARGS;
39 KvStoreNbDelegate *g_kvNbDelegatePtr = nullptr;
40 KvStoreNbDelegate::Option g_nbOption;
41
42 // the type of g_kvNbDelegateCallback is function<void(DBStatus, KvStoreDelegate*)>
43 auto g_kvNbDelegateCallback = bind(&DistributedDBToolsUnitTest::KvStoreNbDelegateCallback, placeholders::_1,
44 placeholders::_2, std::ref(g_kvDelegateStatus), std::ref(g_kvNbDelegatePtr));
45 #ifndef OMIT_MULTI_VER
46 KvStoreDelegate *g_kvDelegatePtr = nullptr;
47
48 // the type of g_kvDelegateCallback is function<void(DBStatus, KvStoreDelegate*)>
49 auto g_kvDelegateCallback = bind(&DistributedDBToolsUnitTest::KvStoreDelegateCallback, placeholders::_1,
50 placeholders::_2, std::ref(g_kvDelegateStatus), std::ref(g_kvDelegatePtr));
51 #endif // OMIT_MULTI_VER
52
53 std::string g_storeId;
54 std::string g_identifier;
55 vector<string> g_singleVerFileNames;
56 vector<string> g_commitLogFileNames;
57 vector<string> g_metaStorageFileNames;
58 vector<string> g_multiVerDataFileNames;
59 vector<string> g_ValueStorageFileNames;
60
GetRealFileUrl()61 void GetRealFileUrl()
62 {
63 std::string origIdentifier = USER_ID + "-" + APP_ID + "-" + g_storeId;
64 std::string hashIdentifier = DBCommon::TransferHashString(origIdentifier);
65 g_identifier = DBCommon::TransferStringToHex(hashIdentifier);
66
67 g_singleVerFileNames = {
68 g_testDir + "/" + g_identifier + "/single_ver/main/gen_natural_store.db",
69 g_testDir + "/" + g_identifier + "/single_ver/main/gen_natural_store.db-shm",
70 g_testDir + "/" + g_identifier + "/single_ver/main/gen_natural_store.db-wal"};
71 g_commitLogFileNames = {
72 g_testDir + "/" + g_identifier + "/multi_ver/commit_logs.db",
73 g_testDir + "/" + g_identifier + "/multi_ver/commit_logs.db-shm",
74 g_testDir + "/" + g_identifier + "/multi_ver/commit_logs.db-wal"};
75 g_metaStorageFileNames = {
76 g_testDir + "/" + g_identifier + "/multi_ver/meta_storage.db",
77 g_testDir + "/" + g_identifier + "/multi_ver/meta_storage.db-shm",
78 g_testDir + "/" + g_identifier + "/multi_ver/meta_storage.db-wal"};
79 g_multiVerDataFileNames = {
80 g_testDir + "/" + g_identifier + "/multi_ver/multi_ver_data.db",
81 g_testDir + "/" + g_identifier + "/multi_ver/multi_ver_data.db-shm",
82 g_testDir + "/" + g_identifier + "/multi_ver/multi_ver_data.db-wal"};
83 g_ValueStorageFileNames = {
84 g_testDir + "/" + g_identifier + "/multi_ver/value_storage.db",
85 g_testDir + "/" + g_identifier + "/multi_ver/value_storage.db-shm",
86 g_testDir + "/" + g_identifier + "/multi_ver/value_storage.db-wal"};
87 }
88
GetMultiVerFilelist()89 vector<string> GetMultiVerFilelist()
90 {
91 vector<string> multiFileNames;
92 for (const auto &iter : g_commitLogFileNames) {
93 multiFileNames.push_back(iter);
94 }
95 for (const auto &iter : g_metaStorageFileNames) {
96 multiFileNames.push_back(iter);
97 }
98 for (const auto &iter : g_multiVerDataFileNames) {
99 multiFileNames.push_back(iter);
100 }
101 for (const auto &iter : g_ValueStorageFileNames) {
102 multiFileNames.push_back(iter);
103 }
104 return multiFileNames;
105 }
106 }
107
108 class DistributedDBInterfacesSpaceManagementTest : public testing::Test {
109 public:
110 static void SetUpTestCase(void);
111 static void TearDownTestCase(void);
112 void SetUp();
113 void TearDown();
114 };
115
SetUpTestCase(void)116 void DistributedDBInterfacesSpaceManagementTest::SetUpTestCase(void)
117 {
118 DistributedDBToolsUnitTest::TestDirInit(g_testDir);
119 g_config.dataDir = g_testDir;
120 g_mgr.SetKvStoreConfig(g_config);
121 }
122
TearDownTestCase(void)123 void DistributedDBInterfacesSpaceManagementTest::TearDownTestCase(void)
124 {
125 if (DistributedDBToolsUnitTest::RemoveTestDbFiles(g_testDir) != 0) {
126 LOGE("rm test db files error!");
127 }
128 }
129
SetUp(void)130 void DistributedDBInterfacesSpaceManagementTest::SetUp(void)
131 {
132 DistributedDBToolsUnitTest::PrintTestCaseInfo();
133 g_kvDelegateStatus = INVALID_ARGS;
134 g_kvNbDelegatePtr = nullptr;
135 #ifndef OMIT_MULTI_VER
136 g_kvDelegatePtr = nullptr;
137 #endif // OMIT_MULTI_VER
138 }
139
TearDown(void)140 void DistributedDBInterfacesSpaceManagementTest::TearDown(void) {}
141
142 // use another way calculate small file size(2G)
CheckRealFileSize(const vector<string> & fileNames)143 static uint64_t CheckRealFileSize(const vector<string> &fileNames)
144 {
145 uint64_t size = 0;
146 for (const auto &file : fileNames) {
147 FILE *fileHandle = nullptr;
148 fileHandle = fopen(file.c_str(), "rb");
149 if (fileHandle == nullptr) {
150 LOGE("Open file[%s] fail[%d]", file.c_str(), errno);
151 continue;
152 }
153 (void)fseek(fileHandle, 0, SEEK_END);
154 long fileSize = ftell(fileHandle);
155 LOGD("CheckRealFileSize:FileName[%s],size[%ld]", file.c_str(), fileSize);
156 size += static_cast<uint64_t>(fileSize); // file is less than 16M.
157 (void)fclose(fileHandle);
158 }
159 return size;
160 }
161
162 /**
163 * @tc.name: GetKvStoreDiskSize001
164 * @tc.desc: ROM space occupied by applications in the distributed database can be calculated.
165 * @tc.type: FUNC
166 * @tc.require: AR000CQDTD
167 * @tc.author: sunpeng
168 */
169 HWTEST_F(DistributedDBInterfacesSpaceManagementTest, GetKvStoreDiskSize001, TestSize.Level1)
170 {
171 g_storeId = "distributed_GetKvStoreDiskSize_001";
172 GetRealFileUrl();
173
174 g_mgr.GetKvStore(g_storeId, g_nbOption, g_kvNbDelegateCallback);
175 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
176 EXPECT_TRUE(g_kvDelegateStatus == OK);
177
178 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
179
180 /**
181 * @tc.steps: step1/2. Get Db size by GetKvStoreDiskSize.
182 * @tc.expected: step1/2. Return right size and ok.
183 */
184 uint64_t localDbSize = 0;
185 EXPECT_EQ(g_mgr.GetKvStoreDiskSize(g_storeId, localDbSize), OK);
186 EXPECT_EQ(CheckRealFileSize(g_singleVerFileNames), localDbSize);
187
188 /**
189 * @tc.steps: step3. Reopen Db.
190 */
191 g_mgr.GetKvStore(g_storeId, g_nbOption, g_kvNbDelegateCallback);
192 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
193 EXPECT_TRUE(g_kvDelegateStatus == OK);
194
195 /**
196 * @tc.steps: step4. Put some Key Value to change Db size.
197 */
198 Key key;
199 Value value;
200 DistributedDBToolsUnitTest::GetRandomKeyValue(key, DBConstant::MAX_KEY_SIZE);
201 DistributedDBToolsUnitTest::GetRandomKeyValue(value, DBConstant::MAX_VALUE_SIZE);
202 EXPECT_EQ(g_kvNbDelegatePtr->Put(key, value), OK);
203
204 /**
205 * @tc.steps: step5/6. Get Db size by GetKvStoreDiskSize.
206 * @tc.expected: step5/6. Return right size and ok.
207 */
208 localDbSize = 0;
209 EXPECT_EQ(g_mgr.GetKvStoreDiskSize(g_storeId, localDbSize), OK);
210 EXPECT_EQ(CheckRealFileSize(g_singleVerFileNames), localDbSize);
211
212 /**
213 * @tc.steps: step7. Close and Delete Db.
214 * @tc.expected: step7. Successfully.
215 */
216 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
217 EXPECT_EQ(g_mgr.DeleteKvStore(g_storeId), OK);
218 }
219
220 /**
221 * @tc.name: GetKvStoreDiskSize002
222 * @tc.desc: Obtain the size of the opened database.
223 * @tc.type: FUNC
224 * @tc.require: AR000CQDTD
225 * @tc.author: sunpeng
226 */
227 HWTEST_F(DistributedDBInterfacesSpaceManagementTest, GetKvStoreDiskSize002, TestSize.Level2)
228 {
229 g_storeId = "distributed_GetKvStoreDiskSize_002";
230 GetRealFileUrl();
231 #ifndef OMIT_MULTI_VER
232 KvStoreDelegate::Option option;
233 g_mgr.GetKvStore(g_storeId, option, g_kvDelegateCallback);
234 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
235 EXPECT_TRUE(g_kvDelegateStatus == OK);
236 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
237 #endif // OMIT_MULTI_VER
238
239 g_mgr.GetKvStore(g_storeId, g_nbOption, g_kvNbDelegateCallback);
240 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
241 EXPECT_TRUE(g_kvDelegateStatus == OK);
242
243 /**
244 * @tc.steps: step1/2. Get Db size by GetKvStoreDiskSize.
245 * @tc.expected: step1/2. Return right size and ok.
246 */
247 uint64_t singleAndMultiDbSize = 0;
248 EXPECT_EQ(g_mgr.GetKvStoreDiskSize(g_storeId, singleAndMultiDbSize), OK);
249 uint64_t dbSizeForCheck = CheckRealFileSize(g_singleVerFileNames) + CheckRealFileSize(GetMultiVerFilelist());
250 EXPECT_EQ(dbSizeForCheck, singleAndMultiDbSize);
251
252 Key key;
253 Value value;
254 DistributedDBToolsUnitTest::GetRandomKeyValue(key, DBConstant::MAX_KEY_SIZE);
255 DistributedDBToolsUnitTest::GetRandomKeyValue(value, DBConstant::MAX_VALUE_SIZE);
256
257 EXPECT_EQ(g_kvNbDelegatePtr->Put(key, value), OK);
258 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
259
260 #ifndef OMIT_MULTI_VER
261 /**
262 * @tc.steps: step3/4. Reopen Db and Put some Key Value to change Db size.
263 */
264 g_mgr.GetKvStore(g_storeId, option, g_kvDelegateCallback);
265 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
266 EXPECT_TRUE(g_kvDelegateStatus == OK);
267 EXPECT_EQ(g_kvDelegatePtr->Put(key, value), OK);
268 #endif // OMIT_MULTI_VER
269
270 /**
271 * @tc.steps: step5/6. Get Db size by GetKvStoreDiskSize.
272 * @tc.expected: step5/6. Return right size and ok.
273 */
274 std::this_thread::sleep_for(std::chrono::milliseconds(100)); // for vacuum
275 singleAndMultiDbSize = 0;
276 EXPECT_EQ(g_mgr.GetKvStoreDiskSize(g_storeId, singleAndMultiDbSize), OK);
277 ASSERT_TRUE(dbSizeForCheck != singleAndMultiDbSize);
278 dbSizeForCheck = CheckRealFileSize(g_singleVerFileNames) + CheckRealFileSize(GetMultiVerFilelist());
279 EXPECT_EQ(dbSizeForCheck, singleAndMultiDbSize);
280 LOGE("single:%" PRIu64 ",mul:%" PRIu64, CheckRealFileSize(g_singleVerFileNames),
281 CheckRealFileSize(GetMultiVerFilelist()));
282
283 /**
284 * @tc.steps: step7. Close and Delete Db.
285 * @tc.expected: step7. Successfully.
286 */
287 #ifndef OMIT_MULTI_VER
288 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
289 #endif // OMIT_MULTI_VER
290 EXPECT_EQ(g_mgr.DeleteKvStore(g_storeId), OK);
291 }
292
293 // The file will be deleted after the test, it only for test, no security impact on permissions
CreateFile(const std::string & fileUrl,uint64_t fileSize)294 static void CreateFile(const std::string &fileUrl, uint64_t fileSize)
295 {
296 ofstream mcfile;
297 mcfile.open(fileUrl);
298 if (!mcfile.is_open()) {
299 return;
300 }
301 std::string fileContext;
302 fileContext.resize(fileSize, 'X');
303 mcfile << fileContext;
304 mcfile.close();
305 return;
306 }
307
DeleteFile(const std::string & fileUrl)308 static void DeleteFile(const std::string &fileUrl)
309 {
310 std::ifstream walFile(fileUrl);
311 if (walFile.good()) {
312 int result = remove(fileUrl.c_str());
313 if (result < 0) {
314 LOGE("failed to delete the file[%s]:%d", fileUrl.c_str(), errno);
315 }
316 }
317 return;
318 }
319
320 /**
321 * @tc.name: GetKvStoreDiskSize003
322 * @tc.desc: Verification exception parameters
323 * @tc.type: FUNC
324 * @tc.require: AR000CQDTD
325 * @tc.author: sunpeng
326 */
327 HWTEST_F(DistributedDBInterfacesSpaceManagementTest, GetKvStoreDiskSize003, TestSize.Level1)
328 {
329 g_storeId = "distributed_GetKvStoreDiskSize_003";
330 GetRealFileUrl();
331 KvStoreNbDelegate::Option nbOption;
332 g_mgr.GetKvStore(g_storeId, nbOption, g_kvNbDelegateCallback);
333 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
334 EXPECT_TRUE(g_kvDelegateStatus == OK);
335 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
336 #ifndef OMIT_MULTI_VER
337 KvStoreDelegate::Option option;
338 g_mgr.GetKvStore(g_storeId, option, g_kvDelegateCallback);
339 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
340 EXPECT_TRUE(g_kvDelegateStatus == OK);
341 #endif // OMIT_MULTI_VER
342
343 /**
344 * @tc.steps: step1. Use an anomalous length of storeId by GetKvStoreDiskSize to get size.
345 * @tc.expected: step1. Return 0 size and INVALID_ARGS.
346 */
347 uint64_t dbSize = 0;
348 std::string exceptStoreId;
349 exceptStoreId.clear();
350 EXPECT_EQ(g_mgr.GetKvStoreDiskSize(exceptStoreId, dbSize), INVALID_ARGS);
351 EXPECT_EQ(dbSize, 0uLL);
352
353 exceptStoreId.resize(129, 'X');
354 EXPECT_EQ(g_mgr.GetKvStoreDiskSize(exceptStoreId, dbSize), INVALID_ARGS);
355 EXPECT_EQ(dbSize, 0uLL);
356
357 /**
358 * @tc.steps: step2. Use a valid but not exist storeId to GetKvStoreDiskSize.
359 * @tc.expected: step2. Return 0 size and NOT_FOUND.
360 */
361 exceptStoreId.resize(128, 'X');
362 EXPECT_EQ(g_mgr.GetKvStoreDiskSize(exceptStoreId, dbSize), NOT_FOUND);
363 EXPECT_EQ(dbSize, 0uLL);
364
365 /**
366 * @tc.steps: step3/4. Use right storeId to GetKvStoreDiskSize.
367 * @tc.expected: step3/4. Return right size and OK.
368 */
369 uint64_t singleAndMultiDbSize = 0;
370 EXPECT_EQ(g_mgr.GetKvStoreDiskSize(g_storeId, singleAndMultiDbSize), OK);
371 uint64_t dbSizeForCheck = CheckRealFileSize(g_singleVerFileNames) + CheckRealFileSize(GetMultiVerFilelist());
372 EXPECT_EQ(dbSizeForCheck, singleAndMultiDbSize);
373
374 /**
375 * @tc.steps: step5. Create irrelevant files.
376 */
377 CreateFile(g_testDir + "/" + g_storeId + "/" + DBConstant::MULTI_SUB_DIR + "/test.txt", 1024 * 1024);
378
379 /**
380 * @tc.steps: step6/7/8. Get Db size by GetKvStoreDiskSize.
381 * @tc.expected: step6/7/8. Return right size and ok.
382 */
383 singleAndMultiDbSize = 0;
384 EXPECT_EQ(g_mgr.GetKvStoreDiskSize(g_storeId, singleAndMultiDbSize), OK);
385 EXPECT_EQ(dbSizeForCheck, singleAndMultiDbSize);
386
387 DeleteFile(g_testDir + "/" + g_storeId + "/" + DBConstant::MULTI_SUB_DIR + "/test.txt");
388 #ifndef OMIT_MULTI_VER
389 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
390 #endif // OMIT_MULTI_VER
391 EXPECT_EQ(g_mgr.DeleteKvStore(g_storeId), OK);
392 }
393
394 /**
395 * @tc.name: GetKvStoreDiskSize004
396 * @tc.desc: Calculate memory database size
397 * @tc.type: FUNC
398 * @tc.require: AR000CQDTD
399 * @tc.author: sunpeng
400 */
401 HWTEST_F(DistributedDBInterfacesSpaceManagementTest, GetKvStoreDiskSize004, TestSize.Level1)
402 {
403 g_storeId = "distributed_GetKvStoreDiskSize_004";
404 GetRealFileUrl();
405
406 KvStoreNbDelegate::Option nbOption;
407 g_mgr.GetKvStore(g_storeId, nbOption, g_kvNbDelegateCallback);
408 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
409 EXPECT_TRUE(g_kvDelegateStatus == OK);
410 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
411 uint64_t singleVerRealSize = CheckRealFileSize(g_singleVerFileNames);
412
413 /**
414 * @tc.steps: step1/2. Get Db size by GetKvStoreDiskSize.
415 * @tc.expected: step1/2. Return right size and ok.
416 */
417 uint64_t singleVerDbSize = 0;
418 EXPECT_EQ(g_mgr.GetKvStoreDiskSize(g_storeId, singleVerDbSize), OK);
419 EXPECT_EQ(singleVerDbSize, singleVerRealSize);
420
421 /**
422 * @tc.steps: step3. Use the same storeId create memoryDb.
423 */
424 nbOption = {true, true};
425 g_mgr.GetKvStore(g_storeId, nbOption, g_kvNbDelegateCallback);
426 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
427 EXPECT_TRUE(g_kvDelegateStatus == OK);
428
429 /**
430 * @tc.steps: step4/5. Get Db size by GetKvStoreDiskSize.
431 * @tc.expected: step4/5. Return 0 size and ok.
432 */
433 singleVerDbSize = 0;
434 EXPECT_EQ(g_mgr.GetKvStoreDiskSize(g_storeId, singleVerDbSize), OK);
435 EXPECT_EQ(singleVerDbSize, 0uLL);
436
437 /**
438 * @tc.steps: step6. Close memoryDb.
439 */
440 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
441
442 /**
443 * @tc.steps: step7. Get Db size by GetKvStoreDiskSize.
444 * @tc.expected: step7. Return right size and ok.
445 */
446 EXPECT_EQ(g_mgr.GetKvStoreDiskSize(g_storeId, singleVerDbSize), OK);
447 EXPECT_EQ(singleVerDbSize, singleVerRealSize);
448
449 EXPECT_EQ(g_mgr.DeleteKvStore(g_storeId), OK);
450 }
451
452 /**
453 * @tc.name: DeleteDbByStoreId001
454 * @tc.desc: Delete database by storeId.
455 * @tc.type: FUNC
456 * @tc.require: AR000CQDTD
457 * @tc.author: sunpeng
458 */
459 HWTEST_F(DistributedDBInterfacesSpaceManagementTest, DeleteDbByStoreId001, TestSize.Level1)
460 {
461 std::string storeId1 = "distributed_DeleteDbByStoreId001";
462 KvStoreNbDelegate::Option nbOption;
463 g_mgr.GetKvStore(storeId1, nbOption, g_kvNbDelegateCallback);
464 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
465 EXPECT_TRUE(g_kvDelegateStatus == OK);
466 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
467 #ifndef OMIT_MULTI_VER
468 KvStoreDelegate::Option option;
469 g_mgr.GetKvStore(storeId1, option, g_kvDelegateCallback);
470 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
471 EXPECT_TRUE(g_kvDelegateStatus == OK);
472 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
473 option.localOnly = true;
474 g_mgr.GetKvStore(storeId1, option, g_kvDelegateCallback);
475 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
476 EXPECT_TRUE(g_kvDelegateStatus == OK);
477 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
478 #endif // OMIT_MULTI_VER
479
480 std::string storeId2 = "distributed_DeleteDbByStoreId002";
481 g_mgr.GetKvStore(storeId2, nbOption, g_kvNbDelegateCallback);
482 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
483 EXPECT_TRUE(g_kvDelegateStatus == OK);
484 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
485 #ifndef OMIT_MULTI_VER
486 option.localOnly = false;
487 g_mgr.GetKvStore(storeId2, option, g_kvDelegateCallback);
488 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
489 EXPECT_TRUE(g_kvDelegateStatus == OK);
490 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
491 option.localOnly = true;
492 g_mgr.GetKvStore(storeId2, option, g_kvDelegateCallback);
493 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
494 EXPECT_TRUE(g_kvDelegateStatus == OK);
495 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
496 #endif // OMIT_MULTI_VER
497
498 uint64_t store1DbSize = 0;
499 EXPECT_EQ(g_mgr.GetKvStoreDiskSize(storeId1, store1DbSize), OK);
500 EXPECT_NE(store1DbSize, 0uLL);
501 EXPECT_EQ(g_mgr.GetKvStoreDiskSize(storeId2, store1DbSize), OK);
502 EXPECT_NE(store1DbSize, 0uLL);
503
504 /**
505 * @tc.steps: step1. Delete database by storeId 1.
506 */
507 EXPECT_EQ(g_mgr.DeleteKvStore(storeId1), OK);
508
509 /**
510 * @tc.steps: step2. Use storeId 1 to get Db size by GetKvStoreDiskSize.
511 * @tc.expected: step2. Return 0 size and ok.
512 */
513 store1DbSize = 0;
514 EXPECT_EQ(g_mgr.GetKvStoreDiskSize(storeId1, store1DbSize), NOT_FOUND);
515 EXPECT_EQ(store1DbSize, 0uLL);
516
517 /**
518 * @tc.steps: step3. Use storeId 2 to get Db size by GetKvStoreDiskSize.
519 * @tc.expected: step3. Return right size and ok.
520 */
521 EXPECT_EQ(g_mgr.GetKvStoreDiskSize(storeId2, store1DbSize), OK);
522 EXPECT_NE(store1DbSize, 0uLL);
523 }
524
525 /**
526 * @tc.name: DeleteDbByStoreId002
527 * @tc.desc: Delete database by not exist storeId.
528 * @tc.type: FUNC
529 * @tc.require: AR000CQDTD
530 * @tc.author: sunpeng
531 */
532 HWTEST_F(DistributedDBInterfacesSpaceManagementTest, DeleteDbByStoreId002, TestSize.Level1)
533 {
534 std::string storeId1 = "distributed_DeleteDbByStoreId001";
535
536 uint64_t store1DbSize = 0;
537 EXPECT_EQ(g_mgr.GetKvStoreDiskSize(storeId1, store1DbSize), NOT_FOUND);
538 EXPECT_EQ(store1DbSize, 0uLL);
539
540 /**
541 * @tc.steps: step1. Delete database by not exist storeId 1.
542 * @tc.expected: step3. Return NOT_FOUND.
543 */
544 EXPECT_EQ(g_mgr.DeleteKvStore(storeId1), NOT_FOUND);
545 }
546