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 #ifndef OMIT_ENCRYPT
16 #include <gtest/gtest.h>
17
18 #include "distributeddb_data_generate_unit_test.h"
19 #include "distributeddb_tools_unit_test.h"
20 #include "kv_store_nb_conflict_data.h"
21 #include "log_print.h"
22 #include "sqlite_single_ver_natural_store.h"
23 #include "sqlite_utils.h"
24
25 using namespace testing::ext;
26 using namespace DistributedDB;
27 using namespace DistributedDBUnitTest;
28 using namespace std;
29
30 namespace {
31 const string STORE_ID1 = "store1_singleVersionDB";
32 const string STORE_ID2 = "store2_localDB";
33 const string STORE_ID3 = "store3_multiVersionDB";
34 CipherPassword g_passwd1; // 5 '1'
35 CipherPassword g_passwd2; // 5 '2'
36 CipherPassword g_passwd3; // 5 '3'
37 const CipherPassword PASSWD_EMPTY;
38 const int CONFLICT_ALL = 15;
39 KvStoreDelegateManager g_mgr(APP_ID, USER_ID);
40 string g_testDir;
41 KvStoreConfig g_config;
42 DBStatus g_errCode = INVALID_ARGS;
43 KvStoreNbDelegate *g_kvNbDelegatePtr = nullptr;
44 KvStoreDelegate *g_kvDelegatePtr = nullptr;
45
46 auto g_kvNbDelegateCallback = bind(&DistributedDBToolsUnitTest::KvStoreNbDelegateCallback, placeholders::_1,
47 placeholders::_2, std::ref(g_errCode), std::ref(g_kvNbDelegatePtr));
48
49 // define the delegate call back
50 auto g_kvDelegateCallback = bind(&DistributedDBToolsUnitTest::KvStoreDelegateCallback, placeholders::_1,
51 placeholders::_2, std::ref(g_errCode), std::ref(g_kvDelegatePtr));
52
53 DBStatus g_snapshotDelegateStatus = INVALID_ARGS;
54 KvStoreSnapshotDelegate *g_snapshotDelegatePtr = nullptr;
55
56 auto g_snapshotDelegateCallback = bind(&DistributedDBToolsUnitTest::SnapshotDelegateCallback,
57 placeholders::_1, placeholders::_2, std::ref(g_snapshotDelegateStatus), std::ref(g_snapshotDelegatePtr));
58
59 DBStatus g_valueStatus = INVALID_ARGS;
60 Value g_value;
61
62 auto g_valueCallback = bind(&DistributedDBToolsUnitTest::ValueCallback,
63 placeholders::_1, placeholders::_2, std::ref(g_valueStatus), std::ref(g_value));
64
GetSnapshotAndValueCheck(const Key & testKey,const Value & testValue,DBStatus errCode)65 void GetSnapshotAndValueCheck(const Key &testKey, const Value &testValue, DBStatus errCode)
66 {
67 g_kvDelegatePtr->GetKvStoreSnapshot(nullptr, g_snapshotDelegateCallback);
68 EXPECT_TRUE(g_snapshotDelegateStatus == OK);
69 ASSERT_TRUE(g_snapshotDelegatePtr != nullptr);
70 // check value and errCode
71 g_snapshotDelegatePtr->Get(testKey, g_valueCallback);
72 EXPECT_EQ(g_valueStatus, errCode);
73
74 if (errCode == OK) {
75 EXPECT_TRUE(g_value.size() > 0);
76 if (g_value.size() > 0) {
77 EXPECT_EQ(g_value.front(), testValue[0]);
78 }
79 }
80 }
81
GetNbKvStoreAndCheckFun(const std::string & storeId,const KvStoreNbDelegate::Option & option,const Key & testKey,const Value & testValue)82 void GetNbKvStoreAndCheckFun(const std::string &storeId, const KvStoreNbDelegate::Option &option,
83 const Key &testKey, const Value &testValue)
84 {
85 g_mgr.GetKvStore(storeId, option, g_kvNbDelegateCallback);
86 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
87 EXPECT_EQ(g_errCode, OK);
88 EXPECT_EQ(g_kvNbDelegatePtr->Put(testKey, testValue), OK);
89 Value valueRead;
90 EXPECT_EQ(g_kvNbDelegatePtr->Get(testKey, valueRead), OK);
91 EXPECT_EQ(valueRead, testValue);
92 }
93
NotifierConnectTestCallback(const KvStoreNbConflictData & data)94 void NotifierConnectTestCallback(const KvStoreNbConflictData &data)
95 {
96 g_errCode = INVALID_ARGS;
97 }
98 }
99
100 class DistributedDBInterfacesEncryptDelegateTest : public testing::Test {
101 public:
102 static void SetUpTestCase(void);
103 static void TearDownTestCase(void);
104 void SetUp();
105 void TearDown();
106 };
107
SetUpTestCase(void)108 void DistributedDBInterfacesEncryptDelegateTest::SetUpTestCase(void)
109 {
110 DistributedDBToolsUnitTest::TestDirInit(g_testDir);
111 g_config.dataDir = g_testDir;
112 g_mgr.SetKvStoreConfig(g_config);
113 vector<uint8_t> passwdBuffer1(5, 1); // 5 and 1 as random password.
114 int errCode = g_passwd1.SetValue(passwdBuffer1.data(), passwdBuffer1.size());
115 ASSERT_EQ(errCode, CipherPassword::ErrorCode::OK);
116 vector<uint8_t> passwdBuffer2(5, 2); // 5 and 2 as random password.
117 errCode = g_passwd2.SetValue(passwdBuffer2.data(), passwdBuffer2.size());
118 ASSERT_EQ(errCode, CipherPassword::ErrorCode::OK);
119 vector<uint8_t> passwdBuffer3(5, 3); // 5 and 3 as random password.
120 errCode = g_passwd3.SetValue(passwdBuffer3.data(), passwdBuffer3.size());
121 ASSERT_EQ(errCode, CipherPassword::ErrorCode::OK);
122 }
123
TearDownTestCase(void)124 void DistributedDBInterfacesEncryptDelegateTest::TearDownTestCase(void)
125 {
126 if (DistributedDBToolsUnitTest::RemoveTestDbFiles(g_testDir) != 0) {
127 LOGE("rm test db files error!");
128 }
129 }
130
SetUp(void)131 void DistributedDBInterfacesEncryptDelegateTest::SetUp(void)
132 {
133 DistributedDBToolsUnitTest::PrintTestCaseInfo();
134 g_errCode = INVALID_ARGS;
135 g_kvNbDelegatePtr = nullptr;
136 g_kvDelegatePtr = nullptr;
137 }
138
TearDown(void)139 void DistributedDBInterfacesEncryptDelegateTest::TearDown(void) {}
140
141 /**
142 * @tc.name: EncryptedDbOperation001
143 * @tc.desc: Test the single version db encrypted function.
144 * @tc.type: FUNC
145 * @tc.require: AR000CQDT5 AR000CQDT6
146 * @tc.author: wumin
147 */
148 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, EncryptedDbOperation001, TestSize.Level1)
149 {
150 KvStoreNbDelegate::Option option = {true, false, true, CipherType::DEFAULT, g_passwd1};
151 g_mgr.GetKvStore(STORE_ID1, option, g_kvNbDelegateCallback);
152 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
153 ASSERT_TRUE(g_errCode == OK);
154 /**
155 * @tc.steps: step1. Put [KEY_1, V1]
156 * @tc.expected: step1. Get result OK.
157 */
158 EXPECT_EQ(g_kvNbDelegatePtr->Put(KEY_1, VALUE_1), OK);
159 /**
160 * @tc.steps: step2. Close db and open it again ,then get the value of K1
161 * @tc.expected: step2. Close and open db successfully, value of K1 is V1
162 */
163 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
164 g_kvNbDelegatePtr = nullptr;
165 g_errCode = INVALID_ARGS;
166
167 GetNbKvStoreAndCheckFun(STORE_ID1, option, KEY_1, VALUE_1);
168 /**
169 * @tc.steps: step3. Put [KEY_1, V2]
170 * @tc.expected: step3. Get result OK.
171 */
172 EXPECT_EQ(g_kvNbDelegatePtr->Put(KEY_1, VALUE_2), OK);
173 /**
174 * @tc.steps: step4. Close db and open it again ,then get the value of K1
175 * @tc.expected: step4. Close and open db successfully, value of K1 is V2
176 */
177 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
178 g_kvNbDelegatePtr = nullptr;
179 g_errCode = INVALID_ARGS;
180 g_mgr.GetKvStore(STORE_ID1, option, g_kvNbDelegateCallback);
181 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
182 EXPECT_TRUE(g_errCode == OK);
183 Value valueRead2;
184 EXPECT_EQ(g_kvNbDelegatePtr->Get(KEY_1, valueRead2), OK);
185 EXPECT_EQ(valueRead2, VALUE_2);
186 /**
187 * @tc.steps: step5. Delete record K1
188 * @tc.expected: step5. Get result OK.
189 */
190 EXPECT_EQ(g_kvNbDelegatePtr->Delete(KEY_1), OK);
191 /**
192 * @tc.steps: step6. Close db and open it again ,then get the value of K1
193 * @tc.expected: step6. Close and open db successfully, get value of K1 NOT_FOUND
194 */
195 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
196 g_kvNbDelegatePtr = nullptr;
197 g_errCode = INVALID_ARGS;
198 g_mgr.GetKvStore(STORE_ID1, option, g_kvNbDelegateCallback);
199 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
200 EXPECT_TRUE(g_errCode == OK);
201 EXPECT_EQ(g_kvNbDelegatePtr->Get(KEY_1, valueRead2), NOT_FOUND);
202
203 // additional test
204 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
205 g_kvNbDelegatePtr = nullptr;
206 g_errCode = INVALID_ARGS;
207 option.passwd = g_passwd2;
208 g_mgr.GetKvStore(STORE_ID1, option, g_kvNbDelegateCallback);
209 EXPECT_EQ(g_kvNbDelegatePtr, nullptr);
210 EXPECT_EQ(g_errCode, INVALID_PASSWD_OR_CORRUPTED_DB);
211
212 // finilize logic
213 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), INVALID_ARGS);
214 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID1), OK);
215 g_kvNbDelegatePtr = nullptr;
216 }
217
218 /**
219 * @tc.name: EncryptedDbOperation002
220 * @tc.desc: Test the local db encrypted function.
221 * @tc.type: FUNC
222 * @tc.require: AR000CQDT5 AR000CQDT6
223 * @tc.author: wumin
224 */
225 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, EncryptedDbOperation002, TestSize.Level1)
226 {
227 KvStoreDelegate::Option option = {true, true, true, CipherType::DEFAULT, g_passwd1};
228 g_mgr.GetKvStore(STORE_ID2, option, g_kvDelegateCallback);
229 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
230 EXPECT_EQ(g_errCode, OK);
231 /**
232 * @tc.steps: step1. Put [KEY_1, V1]
233 * @tc.expected: step1. Get result OK.
234 */
235 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_1), OK);
236 /**
237 * @tc.steps: step2. Close db and open it again ,then get the value of K1
238 * @tc.expected: step2. Close and open db successfully, value of K1 is V1
239 */
240 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
241 g_kvDelegatePtr = nullptr;
242 g_errCode = INVALID_ARGS;
243 g_mgr.GetKvStore(STORE_ID2, option, g_kvDelegateCallback);
244 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
245 EXPECT_TRUE(g_errCode == OK);
246
247 GetSnapshotAndValueCheck(KEY_1, VALUE_1, OK);
248
249 /**
250 * @tc.steps: step3. Put [KEY_1, V2]
251 * @tc.expected: step3. Get result OK.
252 */
253 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_2), OK);
254 /**
255 * @tc.steps: step4. Close db and open it again ,then get the value of K1
256 * @tc.expected: step4. Close and open db successfully, value of K1 is V2
257 */
258 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
259 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
260 g_kvDelegatePtr = nullptr;
261 g_errCode = INVALID_ARGS;
262 g_mgr.GetKvStore(STORE_ID2, option, g_kvDelegateCallback);
263 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
264 EXPECT_TRUE(g_errCode == OK);
265
266 GetSnapshotAndValueCheck(KEY_1, VALUE_2, OK);
267 /**
268 * @tc.steps: step5. Delete record K1
269 * @tc.expected: step5. Get result OK.
270 */
271 EXPECT_EQ(g_kvDelegatePtr->Delete(KEY_1), OK);
272 /**
273 * @tc.steps: step6. Close db and open it again ,then get the value of K1
274 * @tc.expected: step6. Close and open db successfully, get value of K1 NOT_FOUND
275 */
276 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
277 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
278 g_kvDelegatePtr = nullptr;
279 g_errCode = INVALID_ARGS;
280 g_mgr.GetKvStore(STORE_ID2, option, g_kvDelegateCallback);
281 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
282 EXPECT_TRUE(g_errCode == OK);
283 GetSnapshotAndValueCheck(KEY_1, VALUE_2, NOT_FOUND);
284
285 // additional test
286 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
287 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
288 g_kvDelegatePtr = nullptr;
289 g_errCode = INVALID_ARGS;
290 option.passwd = g_passwd2;
291 g_mgr.GetKvStore(STORE_ID2, option, g_kvDelegateCallback);
292 EXPECT_TRUE(g_kvDelegatePtr == nullptr);
293 EXPECT_EQ(g_errCode, INVALID_PASSWD_OR_CORRUPTED_DB);
294
295 // finilize logic
296 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID2), OK);
297 }
298
299 /**
300 * @tc.name: EncryptedDbOperation003
301 * @tc.desc: Test the multi version db encrypted function.
302 * @tc.type: FUNC
303 * @tc.require: AR000CQDT5 AR000CQDT6
304 * @tc.author: wumin
305 */
306 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, EncryptedDbOperation003, TestSize.Level1)
307 {
308 KvStoreDelegate::Option option = {true, false, true, CipherType::DEFAULT, g_passwd1};
309 g_mgr.GetKvStore(STORE_ID3, option, g_kvDelegateCallback);
310 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
311 EXPECT_EQ(g_errCode, OK);
312 /**
313 * @tc.steps: step1. Put [KEY_1, V1]
314 * @tc.expected: step1. Get result OK.
315 */
316 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_1), OK);
317 /**
318 * @tc.steps: step2. Close db and open it again ,then get the value of K1
319 * @tc.expected: step2. Close and open db successfully, value of K1 is V1
320 */
321 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
322 g_kvDelegatePtr = nullptr;
323 g_errCode = INVALID_ARGS;
324 g_mgr.GetKvStore(STORE_ID3, option, g_kvDelegateCallback);
325 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
326 EXPECT_TRUE(g_errCode == OK);
327
328 GetSnapshotAndValueCheck(KEY_1, VALUE_1, OK);
329 /**
330 * @tc.steps: step3. Put [KEY_1, V2]
331 * @tc.expected: step3. Get result OK.
332 */
333 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_2), OK);
334 /**
335 * @tc.steps: step4. Close db and open it again ,then get the value of K1
336 * @tc.expected: step4. Close and open db successfully, value of K1 is V2
337 */
338 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
339 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
340 g_kvDelegatePtr = nullptr;
341 g_errCode = INVALID_ARGS;
342 g_mgr.GetKvStore(STORE_ID3, option, g_kvDelegateCallback);
343 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
344 EXPECT_TRUE(g_errCode == OK);
345
346 GetSnapshotAndValueCheck(KEY_1, VALUE_2, OK);
347 /**
348 * @tc.steps: step5. Delete record K1
349 * @tc.expected: step5. Get result OK.
350 */
351 EXPECT_EQ(g_kvDelegatePtr->Delete(KEY_1), OK);
352 /**
353 * @tc.steps: step6. Close db and open it again ,then get the value of K1
354 * @tc.expected: step6. Close and open db successfully, get value of K1 NOT_FOUND
355 */
356 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
357 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
358 g_kvDelegatePtr = nullptr;
359 g_errCode = INVALID_ARGS;
360 g_mgr.GetKvStore(STORE_ID3, option, g_kvDelegateCallback);
361 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
362 EXPECT_TRUE(g_errCode == OK);
363
364 GetSnapshotAndValueCheck(KEY_1, VALUE_2, NOT_FOUND);
365
366 // additional test
367 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
368 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
369 g_kvDelegatePtr = nullptr;
370 g_errCode = INVALID_ARGS;
371 option.passwd = g_passwd2;
372 g_mgr.GetKvStore(STORE_ID3, option, g_kvDelegateCallback);
373 EXPECT_TRUE(g_kvDelegatePtr == nullptr);
374 EXPECT_EQ(g_errCode, INVALID_PASSWD_OR_CORRUPTED_DB);
375
376 // finilize logic
377 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID3), OK);
378 }
379
380 /**
381 * @tc.name: EncryptedDbSwitch001
382 * @tc.desc: Test the single version db for Rekey function.
383 * @tc.type: FUNC
384 * @tc.require: AR000CQDT7
385 * @tc.author: wumin
386 */
387 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, EncryptedDbSwitch001, TestSize.Level1)
388 {
389 /**
390 * @tc.steps: step1/step2. Put and get [KEY_1, V1]
391 * @tc.expected: step1/step2. Get value of KEY_1, value of K1 is V1.
392 */
393 KvStoreNbDelegate::Option option = {true, false, true, CipherType::DEFAULT, g_passwd1};
394 GetNbKvStoreAndCheckFun(STORE_ID1, option, KEY_1, VALUE_1);
395 /**
396 * @tc.steps: step3. Rekey passwd to passwd2
397 * @tc.expected: step3. result is OK
398 */
399 EXPECT_EQ(g_kvNbDelegatePtr->Rekey(g_passwd2), OK);
400 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
401 g_kvNbDelegatePtr = nullptr;
402 g_errCode = INVALID_ARGS;
403 /**
404 * @tc.steps: step4/step5. Put and get [KEY_1, V2]
405 * @tc.expected: step4/step5. Get value of KEY_1, value of K1 is V2.
406 */
407 option.passwd = g_passwd2;
408 GetNbKvStoreAndCheckFun(STORE_ID1, option, KEY_1, VALUE_2);
409
410 /**
411 * @tc.steps: step6. Rekey passwd to empty
412 * @tc.expected: step6. result is OK
413 */
414 EXPECT_EQ(g_kvNbDelegatePtr->Rekey(PASSWD_EMPTY), OK);
415 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
416 g_kvNbDelegatePtr = nullptr;
417 g_errCode = INVALID_ARGS;
418 /**
419 * @tc.steps: step7/step8. Put and get [KEY_1, V3]
420 * @tc.expected: step7/step8. Get value of KEY_1, value of K1 is V3.
421 */
422 option.isEncryptedDb = false;
423 GetNbKvStoreAndCheckFun(STORE_ID1, option, KEY_1, VALUE_3);
424 /**
425 * @tc.steps: step9. Rekey passwd to passwd3
426 * @tc.expected: step3. result is OK
427 */
428 EXPECT_EQ(g_kvNbDelegatePtr->Rekey(g_passwd3), OK);
429 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
430 g_kvNbDelegatePtr = nullptr;
431 g_errCode = INVALID_ARGS;
432 /**
433 * @tc.steps: step10/step11. Put and get [KEY_1, V4]
434 * @tc.expected: step10/step11. Get value of KEY_1, value of K1 is V4.
435 */
436 option.isEncryptedDb = true;
437 option.passwd = g_passwd3;
438 GetNbKvStoreAndCheckFun(STORE_ID1, option, KEY_1, VALUE_4);
439
440 // finilize logic
441 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
442 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID1), OK);
443 g_kvNbDelegatePtr = nullptr;
444 }
445
446 /**
447 * @tc.name: EncryptedDbSwitch002
448 * @tc.desc: Test the single version db Rekey function return BUSY because of multiple instances.
449 * @tc.type: FUNC
450 * @tc.require: AR000CQDT7
451 * @tc.author: wumin
452 */
453 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, EncryptedDbSwitch002, TestSize.Level1)
454 {
455 KvStoreNbDelegate::Option option = {true, false, true, CipherType::DEFAULT, g_passwd1};
456 g_mgr.GetKvStore(STORE_ID1, option, g_kvNbDelegateCallback);
457 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
458 EXPECT_TRUE(g_errCode == OK);
459 /**
460 * @tc.steps: step1. open same database again
461 * @tc.expected: step1. Get result OK
462 */
463 DBStatus errCode = INVALID_ARGS;
464 KvStoreNbDelegate *kvNbDelegatePtr = nullptr;
465 auto kvNbDelegateCallback = bind(&DistributedDBToolsUnitTest::KvStoreNbDelegateCallback, placeholders::_1,
466 placeholders::_2, std::ref(errCode), std::ref(kvNbDelegatePtr));
467 g_mgr.GetKvStore(STORE_ID1, option, kvNbDelegateCallback);
468 ASSERT_TRUE(kvNbDelegatePtr != nullptr);
469 EXPECT_TRUE(errCode == OK);
470 /**
471 * @tc.steps: step2. invoke rekey logic
472 * @tc.expected: step2. Get result BUSY
473 */
474 EXPECT_EQ(g_kvNbDelegatePtr->Rekey(g_passwd2), BUSY);
475 // finilize logic
476 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
477 EXPECT_EQ(g_mgr.CloseKvStore(kvNbDelegatePtr), OK);
478 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID1), OK);
479 }
480
481 /**
482 * @tc.name: EncryptedDbSwitch003
483 * @tc.desc: Test the single version db Rekey function return BUSY because of observer.
484 * @tc.type: FUNC
485 * @tc.require: AR000CQDT7
486 * @tc.author: wumin
487 */
488 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, EncryptedDbSwitch003, TestSize.Level1)
489 {
490 KvStoreNbDelegate::Option option = {true, false, true, CipherType::DEFAULT, g_passwd1};
491 g_mgr.GetKvStore(STORE_ID1, option, g_kvNbDelegateCallback);
492 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
493 EXPECT_TRUE(g_errCode == OK);
494 /**
495 * @tc.steps: step1. register observer
496 * @tc.expected: step1. Get result OK
497 */
498 KvStoreObserverUnitTest *observer = new (std::nothrow) KvStoreObserverUnitTest;
499 ASSERT_NE(observer, nullptr);
500 EXPECT_EQ(g_kvNbDelegatePtr->RegisterObserver(KEY_1, OBSERVER_CHANGES_NATIVE, observer), OK);
501 /**
502 * @tc.steps: step2. invoke rekey logic
503 * @tc.expected: step2. Get result BUSY
504 */
505 EXPECT_EQ(g_kvNbDelegatePtr->Rekey(g_passwd2), BUSY);
506 // finilize logic
507 delete observer;
508 observer = nullptr;
509 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
510 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID1), OK);
511 }
512
513 /**
514 * @tc.name: EncryptedDbSwitch004
515 * @tc.desc: Test the single version db Rekey function return BUSY because of conflict notifier.
516 * @tc.type: FUNC
517 * @tc.require: AR000CQDT7
518 * @tc.author: wumin
519 */
520 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, EncryptedDbSwitch004, TestSize.Level1)
521 {
522 KvStoreNbDelegate::Option option = {true, false, true, CipherType::DEFAULT, g_passwd1};
523 g_mgr.GetKvStore(STORE_ID1, option, g_kvNbDelegateCallback);
524 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
525 EXPECT_TRUE(g_errCode == OK);
526 /**
527 * @tc.steps: step1. register observer
528 * @tc.expected: step1. Get result OK
529 */
530 EXPECT_EQ(g_kvNbDelegatePtr->SetConflictNotifier(CONFLICT_ALL, NotifierConnectTestCallback), OK);
531 /**
532 * @tc.steps: step2. invoke rekey logic
533 * @tc.expected: step2. Get result BUSY
534 */
535 EXPECT_EQ(g_kvNbDelegatePtr->Rekey(g_passwd2), BUSY);
536 // finilize logic
537 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
538 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID1), OK);
539 }
540
541 /**
542 * @tc.name: EncryptedDbSwitch008
543 * @tc.desc: Test the multi version db Rekey function return BUSY because of Snapshot not close.
544 * @tc.type: FUNC
545 * @tc.require: AR000CQDT7
546 * @tc.author: wumin
547 */
548 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, EncryptedDbSwitch008, TestSize.Level1)
549 {
550 }
551
552 /**
553 * @tc.name: EncryptedDbSwitch009
554 * @tc.desc: Test the single version db Rekey function from password1 to password2.
555 * @tc.type: FUNC
556 * @tc.require: AR000CQDT7
557 * @tc.author: wumin
558 */
559 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, EncryptedDbSwitch009, TestSize.Level1)
560 {
561 /**
562 * @tc.steps: step1/step2. Put and get [KEY_1, V1]
563 * @tc.expected: step1/step2. Get value of KEY_1, value of K1 is V1.
564 */
565 KvStoreNbDelegate::Option option = {true, false, true, CipherType::DEFAULT, g_passwd1};
566 GetNbKvStoreAndCheckFun(STORE_ID1, option, KEY_1, VALUE_1);
567 /**
568 * @tc.steps: step3. Rekey passwd to passwd2
569 * @tc.expected: step3. result is OK
570 */
571 EXPECT_EQ(g_kvNbDelegatePtr->Rekey(g_passwd2), OK);
572 Value valueRead1;
573 EXPECT_EQ(g_kvNbDelegatePtr->Get(KEY_1, valueRead1), OK);
574 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
575 g_kvNbDelegatePtr = nullptr;
576 g_errCode = INVALID_ARGS;
577 /**
578 * @tc.steps: step4/step5. Put and get [KEY_1, V2]
579 * @tc.expected: step4/step5. Get value of KEY_1, value of K1 is V2.
580 */
581 option.passwd = g_passwd2;
582 GetNbKvStoreAndCheckFun(STORE_ID1, option, KEY_1, VALUE_2);
583 // finilize logic
584 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
585 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID1), OK);
586 g_kvNbDelegatePtr = nullptr;
587 }
588
589 /**
590 * @tc.name: EncryptedDbSwitch010
591 * @tc.desc: Test the single version db Rekey function from encrypted db unencrypted db .
592 * @tc.type: FUNC
593 * @tc.require: AR000CQDT7
594 * @tc.author: wumin
595 */
596 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, EncryptedDbSwitch010, TestSize.Level1)
597 {
598 /**
599 * @tc.steps: step1/step2. Put and get [KEY_1, V1]
600 * @tc.expected: step1/step2. Get value of KEY_1, value of K1 is V1.
601 */
602 KvStoreNbDelegate::Option option = {true, false, true, CipherType::DEFAULT, g_passwd1};
603 GetNbKvStoreAndCheckFun(STORE_ID1, option, KEY_1, VALUE_1);
604 /**
605 * @tc.steps: step6. Rekey passwd to empty
606 * @tc.expected: step6. result is OK
607 */
608 EXPECT_EQ(g_kvNbDelegatePtr->Rekey(PASSWD_EMPTY), OK);
609 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
610 g_kvNbDelegatePtr = nullptr;
611 g_errCode = INVALID_ARGS;
612 /**
613 * @tc.steps: step7/step8. Put and get [KEY_1, V3]
614 * @tc.expected: step7/step8. Get value of KEY_1, value of K1 is V3.
615 */
616 option.isEncryptedDb = false;
617 GetNbKvStoreAndCheckFun(STORE_ID1, option, KEY_1, VALUE_3);
618 // finilize logic
619 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
620 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID1), OK);
621 g_kvNbDelegatePtr = nullptr;
622 }
623
624 /**
625 * @tc.name: EncryptedDbSwitch011
626 * @tc.desc: Test the single version db Rekey function from unencrypted db to encrypted db.
627 * @tc.type: FUNC
628 * @tc.require: AR000CQDT7
629 * @tc.author: wumin
630 */
631 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, EncryptedDbSwitch011, TestSize.Level1)
632 {
633 /**
634 * @tc.steps: step1/step2. Put and get [KEY_1, V1]
635 * @tc.expected: step1/step2. Get value of KEY_1, value of K1 is V1.
636 */
637 KvStoreNbDelegate::Option option = {true, false, false, CipherType::DEFAULT, PASSWD_EMPTY};
638 GetNbKvStoreAndCheckFun(STORE_ID1, option, KEY_1, VALUE_1);
639 /**
640 * @tc.steps: step3. Rekey passwd to passwd2
641 * @tc.expected: step3. result is OK
642 */
643 EXPECT_EQ(g_kvNbDelegatePtr->Rekey(g_passwd2), OK);
644 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
645 g_kvNbDelegatePtr = nullptr;
646 g_errCode = INVALID_ARGS;
647 /**
648 * @tc.steps: step4/step5. Put and get [KEY_1, V2]
649 * @tc.expected: step4/step5. Get value of KEY_1, value of K1 is V2.
650 */
651 option.passwd = g_passwd2;
652 option.isEncryptedDb = true;
653 GetNbKvStoreAndCheckFun(STORE_ID1, option, KEY_1, VALUE_2);
654 // finilize logic
655 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
656 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID1), OK);
657 g_kvNbDelegatePtr = nullptr;
658 }
659
660 /**
661 * @tc.name: EncryptedDbSwitch012
662 * @tc.desc: Test the local db Rekey function from password1 to password2.
663 * @tc.type: FUNC
664 * @tc.require: AR000CQDT7
665 * @tc.author: wumin
666 */
667 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, EncryptedDbSwitch012, TestSize.Level1)
668 {
669 KvStoreDelegate::Option option = {true, true, true, CipherType::DEFAULT, g_passwd1};
670 g_mgr.GetKvStore(STORE_ID2, option, g_kvDelegateCallback);
671 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
672 EXPECT_EQ(g_errCode, OK);
673 /**
674 * @tc.steps: step1/step2. Put and get [KEY_1, V1]
675 * @tc.expected: step1/step2. Get value of KEY_1, value of K1 is V1.
676 */
677 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_1), OK);
678
679 GetSnapshotAndValueCheck(KEY_1, VALUE_1, OK);
680
681 /**
682 * @tc.steps: step3. Rekey passwd to passwd2
683 * @tc.expected: step3. result is OK
684 */
685 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
686 EXPECT_EQ(g_kvDelegatePtr->Rekey(g_passwd2), OK);
687 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_3), OK);
688 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
689 g_kvDelegatePtr = nullptr;
690 g_errCode = INVALID_ARGS;
691 /**
692 * @tc.steps: step4/step5. Put and get [KEY_1, V2]
693 * @tc.expected: step4/step5. Get value of KEY_1, value of K1 is V2.
694 */
695 option.passwd = g_passwd2;
696 g_mgr.GetKvStore(STORE_ID2, option, g_kvDelegateCallback);
697 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
698 EXPECT_EQ(g_errCode, OK);
699 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_2), OK);
700
701 GetSnapshotAndValueCheck(KEY_1, VALUE_2, OK);
702 // finilize logic
703 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
704 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
705 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID2), OK);
706 g_kvDelegatePtr = nullptr;
707 }
708
709 /**
710 * @tc.name: EncryptedDbSwitch013
711 * @tc.desc: Test the local db Rekey function from encrypted db unencrypted db .
712 * @tc.type: FUNC
713 * @tc.require: AR000CQDT7
714 * @tc.author: wumin
715 */
716 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, EncryptedDbSwitch013, TestSize.Level1)
717 {
718 KvStoreDelegate::Option option = {true, true, true, CipherType::DEFAULT, g_passwd1};
719 g_mgr.GetKvStore(STORE_ID2, option, g_kvDelegateCallback);
720 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
721 EXPECT_EQ(g_errCode, OK);
722 /**
723 * @tc.steps: step1/step2. Put and get [KEY_1, V1]
724 * @tc.expected: step1/step2. Get value of KEY_1, value of K1 is V1.
725 */
726 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_1), OK);
727
728 GetSnapshotAndValueCheck(KEY_1, VALUE_1, OK);
729 /**
730 * @tc.steps: step3. Rekey passwd to empty
731 * @tc.expected: step3. result is OK
732 */
733 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
734 EXPECT_EQ(g_kvDelegatePtr->Rekey(PASSWD_EMPTY), OK);
735 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
736 g_kvDelegatePtr = nullptr;
737 g_errCode = INVALID_ARGS;
738 /**
739 * @tc.steps: step4/step5. Put and get [KEY_1, V2]
740 * @tc.expected: step4/step5. Get value of KEY_1, value of K1 is V2.
741 */
742 option.isEncryptedDb = false;
743 g_mgr.GetKvStore(STORE_ID2, option, g_kvDelegateCallback);
744 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
745 EXPECT_EQ(g_errCode, OK);
746 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_2), OK);
747
748 GetSnapshotAndValueCheck(KEY_1, VALUE_2, OK);
749 // finilize logic
750 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
751 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
752 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID2), OK);
753 g_kvDelegatePtr = nullptr;
754 }
755
756 /**
757 * @tc.name: EncryptedDbSwitch014
758 * @tc.desc: Test the local db Rekey function from unencrypted db to encrypted db.
759 * @tc.type: FUNC
760 * @tc.require: AR000CQDT7
761 * @tc.author: wumin
762 */
763 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, EncryptedDbSwitch014, TestSize.Level1)
764 {
765 KvStoreDelegate::Option option = {true, true, false, CipherType::DEFAULT, PASSWD_EMPTY};
766 g_mgr.GetKvStore(STORE_ID2, option, g_kvDelegateCallback);
767 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
768 EXPECT_EQ(g_errCode, OK);
769 /**
770 * @tc.steps: step1/step2. Put and get [KEY_1, V1]
771 * @tc.expected: step1/step2. Get value of KEY_1, value of K1 is V1.
772 */
773 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_1), OK);
774
775 GetSnapshotAndValueCheck(KEY_1, VALUE_1, OK);
776 /**
777 * @tc.steps: step3. Rekey passwd to passwd2
778 * @tc.expected: step3. result is OK
779 */
780 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
781 EXPECT_EQ(g_kvDelegatePtr->Rekey(g_passwd2), OK);
782 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
783 g_kvDelegatePtr = nullptr;
784 g_errCode = INVALID_ARGS;
785 /**
786 * @tc.steps: step4/step5. Put and get [KEY_1, V2]
787 * @tc.expected: step4/step5. Get value of KEY_1, value of K1 is V2.
788 */
789 option.passwd = g_passwd2;
790 option.isEncryptedDb = true;
791 g_mgr.GetKvStore(STORE_ID2, option, g_kvDelegateCallback);
792 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
793 EXPECT_EQ(g_errCode, OK);
794 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_2), OK);
795
796 GetSnapshotAndValueCheck(KEY_1, VALUE_2, OK);
797 // finilize logic
798 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
799 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
800 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID2), OK);
801 g_kvDelegatePtr = nullptr;
802 }
803
804 /**
805 * @tc.name: EncryptedDbSwitch015
806 * @tc.desc: Test the multi version db Rekey function from password1 to password2.
807 * @tc.type: FUNC
808 * @tc.require: AR000CQDT7
809 * @tc.author: wumin
810 */
811 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, EncryptedDbSwitch015, TestSize.Level1)
812 {
813 KvStoreDelegate::Option option = {true, false, true, CipherType::DEFAULT, g_passwd1};
814 g_mgr.GetKvStore(STORE_ID3, option, g_kvDelegateCallback);
815 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
816 EXPECT_EQ(g_errCode, OK);
817 /**
818 * @tc.steps: step1/step2. Put and get [KEY_1, V1]
819 * @tc.expected: step1/step2. Get value of KEY_1, value of K1 is V1.
820 */
821 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_1), OK);
822
823 GetSnapshotAndValueCheck(KEY_1, VALUE_1, OK);
824 /**
825 * @tc.steps: step3. Rekey passwd to passwd2
826 * @tc.expected: step3. result is OK
827 */
828 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
829 EXPECT_EQ(g_kvDelegatePtr->Rekey(g_passwd2), OK);
830 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_3), OK);
831
832 GetSnapshotAndValueCheck(KEY_1, VALUE_3, OK);
833 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
834 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
835
836 g_kvDelegatePtr = nullptr;
837 g_errCode = INVALID_ARGS;
838 /**
839 * @tc.steps: step4/step5. Put and get [KEY_1, V2]
840 * @tc.expected: step4/step5. Get value of KEY_1, value of K1 is V2.
841 */
842 option.passwd = g_passwd2;
843 g_mgr.GetKvStore(STORE_ID3, option, g_kvDelegateCallback);
844 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
845 EXPECT_EQ(g_errCode, OK);
846 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_2), OK);
847
848 GetSnapshotAndValueCheck(KEY_1, VALUE_2, OK);
849 // finilize logic
850 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
851 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
852 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID3), OK);
853 g_kvDelegatePtr = nullptr;
854 }
855
856 /**
857 * @tc.name: EncryptedDbSwitch016
858 * @tc.desc: Test the multi version db Rekey function from encrypted db unencrypted db .
859 * @tc.type: FUNC
860 * @tc.require: AR000CQDT7
861 * @tc.author: wumin
862 */
863 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, EncryptedDbSwitch016, TestSize.Level1)
864 {
865 KvStoreDelegate::Option option = {true, false, true, CipherType::DEFAULT, g_passwd1};
866 g_mgr.GetKvStore(STORE_ID3, option, g_kvDelegateCallback);
867 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
868 EXPECT_EQ(g_errCode, OK);
869 /**
870 * @tc.steps: step1/step2. Put and get [KEY_1, V1]
871 * @tc.expected: step1/step2. Get value of KEY_1, value of K1 is V1.
872 */
873 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_1), OK);
874
875 GetSnapshotAndValueCheck(KEY_1, VALUE_1, OK);
876 /**
877 * @tc.steps: step3. Rekey passwd to empty
878 * @tc.expected: step3. result is OK
879 */
880 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
881 EXPECT_EQ(g_kvDelegatePtr->Rekey(PASSWD_EMPTY), OK);
882 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
883 g_kvDelegatePtr = nullptr;
884 g_errCode = INVALID_ARGS;
885 /**
886 * @tc.steps: step4/step5. Put and get [KEY_1, V2]
887 * @tc.expected: step4/step5. Get value of KEY_1, value of K1 is V2.
888 */
889 option.isEncryptedDb = false;
890 g_mgr.GetKvStore(STORE_ID3, option, g_kvDelegateCallback);
891 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
892 EXPECT_EQ(g_errCode, OK);
893 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_2), OK);
894
895 GetSnapshotAndValueCheck(KEY_1, VALUE_2, OK);
896 // finilize logic
897 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
898 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
899 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID3), OK);
900 g_kvDelegatePtr = nullptr;
901 }
902
903 /**
904 * @tc.name: EncryptedDbSwitch017
905 * @tc.desc: Test the multi version db Rekey function from unencrypted db to encrypted db.
906 * @tc.type: FUNC
907 * @tc.require: AR000CQDT7
908 * @tc.author: wumin
909 */
910 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, EncryptedDbSwitch017, TestSize.Level1)
911 {
912 KvStoreDelegate::Option option = {true, false, false, CipherType::DEFAULT, PASSWD_EMPTY};
913 g_mgr.GetKvStore(STORE_ID3, option, g_kvDelegateCallback);
914 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
915 EXPECT_EQ(g_errCode, OK);
916 /**
917 * @tc.steps: step1/step2. Put and get [KEY_1, V1]
918 * @tc.expected: step1/step2. Get value of KEY_1, value of K1 is V1.
919 */
920 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_1), OK);
921
922 GetSnapshotAndValueCheck(KEY_1, VALUE_1, OK);
923 /**
924 * @tc.steps: step3. Rekey passwd to passwd2
925 * @tc.expected: step3. result is OK
926 */
927 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
928 EXPECT_EQ(g_kvDelegatePtr->Rekey(g_passwd2), OK);
929 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
930 g_kvDelegatePtr = nullptr;
931 g_errCode = INVALID_ARGS;
932 /**
933 * @tc.steps: step4/step5. Put and get [KEY_1, V2]
934 * @tc.expected: step4/step5. Get value of KEY_1, value of K1 is V2.
935 */
936 option.passwd = g_passwd2;
937 option.isEncryptedDb = true;
938 g_mgr.GetKvStore(STORE_ID3, option, g_kvDelegateCallback);
939 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
940 EXPECT_EQ(g_errCode, OK);
941 EXPECT_EQ(g_kvDelegatePtr->Put(KEY_1, VALUE_2), OK);
942
943 GetSnapshotAndValueCheck(KEY_1, VALUE_2, OK);
944 // finilize logic
945 EXPECT_EQ(g_kvDelegatePtr->ReleaseKvStoreSnapshot(g_snapshotDelegatePtr), OK);
946 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
947 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID3), OK);
948 g_kvDelegatePtr = nullptr;
949 }
950
951 /**
952 * @tc.name: OpenEncryptedDb001
953 * @tc.desc: Test create an encrypted database successfully.
954 * @tc.type: FUNC
955 * @tc.require: AR000CQDT5 AR000CQDT6
956 * @tc.author: wumin
957 */
958 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, OpenEncryptedDb001, TestSize.Level1)
959 {
960 /**
961 * @tc.steps: step1. create single version encrypted database
962 * @tc.expected: step1. Get result OK.
963 */
964 KvStoreNbDelegate::Option option1 = {true, false, true, CipherType::DEFAULT, g_passwd1};
965 g_mgr.GetKvStore(STORE_ID1, option1, g_kvNbDelegateCallback);
966 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
967 EXPECT_TRUE(g_errCode == OK);
968 /**
969 * @tc.steps: step2. create multi version encrypted database
970 * @tc.expected: step2. Get result OK.
971 */
972 KvStoreDelegate::Option option2 = {true, false, true, CipherType::DEFAULT, g_passwd1};
973 g_mgr.GetKvStore(STORE_ID3, option2, g_kvDelegateCallback);
974 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
975 EXPECT_EQ(g_errCode, OK);
976 /**
977 * @tc.steps: step3. Close db.
978 * @tc.expected: step3. Get result ok.
979 */
980 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
981 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
982 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID1), OK);
983 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID3), OK);
984 }
985
986 /**
987 * @tc.name: OpenEncryptedDb002
988 * @tc.desc: Test create an encrypted database failed.
989 * @tc.type: FUNC
990 * @tc.require: AR000CQDT8
991 * @tc.author: wumin
992 */
993 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, OpenEncryptedDb002, TestSize.Level1)
994 {
995 /**
996 * @tc.steps: step1. create single version encrypted database
997 * @tc.expected: step1. Get result INVALID_ARGS.
998 */
999 KvStoreNbDelegate::Option option1 = {true, false, true, CipherType::DEFAULT, PASSWD_EMPTY};
1000 g_mgr.GetKvStore(STORE_ID1, option1, g_kvNbDelegateCallback);
1001 EXPECT_TRUE(g_kvNbDelegatePtr == nullptr);
1002 EXPECT_EQ(g_errCode, INVALID_ARGS);
1003 /**
1004 * @tc.steps: step2. create multi version encrypted database
1005 * @tc.expected: step2. Get result INVALID_ARGS.
1006 */
1007 KvStoreDelegate::Option option2 = {true, false, true, CipherType::DEFAULT, PASSWD_EMPTY};
1008 g_mgr.GetKvStore(STORE_ID3, option2, g_kvDelegateCallback);
1009 EXPECT_TRUE(g_kvDelegatePtr == nullptr);
1010 EXPECT_EQ(g_errCode, INVALID_ARGS);
1011 /**
1012 * @tc.steps: step3. Close db.
1013 * @tc.expected: step3. Get result ok.
1014 */
1015 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), INVALID_ARGS);
1016 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), INVALID_ARGS);
1017 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID1), NOT_FOUND);
1018 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID3), NOT_FOUND);
1019 }
1020
1021 /**
1022 * @tc.name: OpenEncryptedDb003
1023 * @tc.desc: Test reopen an encrypted database successfully.
1024 * @tc.type: FUNC
1025 * @tc.require: AR000CQDT8
1026 * @tc.author: wumin
1027 */
1028 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, OpenEncryptedDb003, TestSize.Level1)
1029 {
1030 KvStoreNbDelegate::Option option1 = {true, false, true, CipherType::DEFAULT, g_passwd1};
1031 g_mgr.GetKvStore(STORE_ID1, option1, g_kvNbDelegateCallback);
1032 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
1033 EXPECT_EQ(g_errCode, OK);
1034 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
1035
1036 KvStoreDelegate::Option option2 = {true, false, true, CipherType::DEFAULT, g_passwd3};
1037 g_mgr.GetKvStore(STORE_ID3, option2, g_kvDelegateCallback);
1038 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
1039 EXPECT_EQ(g_errCode, OK);
1040 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
1041 /**
1042 * @tc.steps: step1. create single version encrypted database
1043 * @tc.expected: step1. Get result INVALID_ARGS.
1044 */
1045 KvStoreNbDelegate::Option option3 = {true, false, true, CipherType::DEFAULT, g_passwd1};
1046 g_mgr.GetKvStore(STORE_ID1, option3, g_kvNbDelegateCallback);
1047 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
1048 EXPECT_EQ(g_errCode, OK);
1049 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
1050 /**
1051 * @tc.steps: step2. create multi version encrypted database
1052 * @tc.expected: step2. Get result INVALID_ARGS.
1053 */
1054 KvStoreDelegate::Option option4 = {true, false, true, CipherType::DEFAULT, g_passwd3};
1055 g_mgr.GetKvStore(STORE_ID3, option4, g_kvDelegateCallback);
1056 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
1057 EXPECT_EQ(g_errCode, OK);
1058 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
1059 /**
1060 * @tc.steps: step3. Close db.
1061 * @tc.expected: step3. Get result ok.
1062 */
1063 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID1), OK);
1064 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID3), OK);
1065 }
1066
1067 /**
1068 * @tc.name: OpenEncryptedDb004
1069 * @tc.desc: Test reopen an encrypted database failed.
1070 * @tc.type: FUNC
1071 * @tc.require: AR000CQDT8
1072 * @tc.author: wumin
1073 */
1074 HWTEST_F(DistributedDBInterfacesEncryptDelegateTest, OpenEncryptedDb004, TestSize.Level1)
1075 {
1076 KvStoreNbDelegate::Option option1 = {true, false, true, CipherType::DEFAULT, g_passwd1};
1077 g_mgr.GetKvStore(STORE_ID1, option1, g_kvNbDelegateCallback);
1078 ASSERT_TRUE(g_kvNbDelegatePtr != nullptr);
1079 EXPECT_EQ(g_errCode, OK);
1080 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), OK);
1081
1082 KvStoreDelegate::Option option2 = {true, false, true, CipherType::DEFAULT, g_passwd3};
1083 g_mgr.GetKvStore(STORE_ID3, option2, g_kvDelegateCallback);
1084 ASSERT_TRUE(g_kvDelegatePtr != nullptr);
1085 EXPECT_EQ(g_errCode, OK);
1086 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), OK);
1087 /**
1088 * @tc.steps: step1. create single version encrypted database
1089 * @tc.expected: step1. Get result INVALID_ARGS.
1090 */
1091 KvStoreNbDelegate::Option option3 = {true, false, true, CipherType::DEFAULT, g_passwd2};
1092 g_mgr.GetKvStore(STORE_ID1, option3, g_kvNbDelegateCallback);
1093 EXPECT_TRUE(g_kvNbDelegatePtr == nullptr);
1094 EXPECT_EQ(g_errCode, INVALID_PASSWD_OR_CORRUPTED_DB);
1095 EXPECT_EQ(g_mgr.CloseKvStore(g_kvNbDelegatePtr), INVALID_ARGS);
1096 /**
1097 * @tc.steps: step2. create multi version encrypted database
1098 * @tc.expected: step2. Get result INVALID_ARGS.
1099 */
1100 KvStoreDelegate::Option option4 = {true, false, true, CipherType::DEFAULT, g_passwd2};
1101 g_mgr.GetKvStore(STORE_ID3, option4, g_kvDelegateCallback);
1102 EXPECT_TRUE(g_kvDelegatePtr == nullptr);
1103 EXPECT_EQ(g_errCode, INVALID_PASSWD_OR_CORRUPTED_DB);
1104 EXPECT_EQ(g_mgr.CloseKvStore(g_kvDelegatePtr), INVALID_ARGS);
1105 /**
1106 * @tc.steps: step3. Close db.
1107 * @tc.expected: step3. Get result ok.
1108 */
1109 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID1), OK);
1110 EXPECT_EQ(g_mgr.DeleteKvStore(STORE_ID3), OK);
1111 }
1112 #endif
1113