1 /*
2 * Copyright (c) 2024 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 #include <gtest/gtest.h>
16
17 #include "db_errno.h"
18 #include "distributeddb_tools_unit_test.h"
19 #include "log_print.h"
20 #include "single_ver_database_oper.h"
21 #include "storage_engine_manager.h"
22
23 using namespace testing::ext;
24 using namespace DistributedDB;
25 using namespace DistributedDBUnitTest;
26 using namespace testing;
27
28 namespace {
29 class DistributedDBStorageSingleVerDatabaseOperTest : public testing::Test {
30 public:
31 static void SetUpTestCase();
32 static void TearDownTestCase();
33 void SetUp();
34 void TearDown();
35 protected:
36 std::string testDir_;
37 SQLiteSingleVerNaturalStore *singleVerNaturalStore_ = nullptr;
38 SQLiteSingleVerStorageEngine *singleVerStorageEngine_ = nullptr;
39 };
40
SetUpTestCase(void)41 void DistributedDBStorageSingleVerDatabaseOperTest::SetUpTestCase(void)
42 {
43 }
44
TearDownTestCase(void)45 void DistributedDBStorageSingleVerDatabaseOperTest::TearDownTestCase(void)
46 {
47 }
48
SetUp(void)49 void DistributedDBStorageSingleVerDatabaseOperTest::SetUp(void)
50 {
51 DistributedDBToolsUnitTest::PrintTestCaseInfo();
52 DistributedDBToolsUnitTest::TestDirInit(testDir_);
53 singleVerNaturalStore_ = new (std::nothrow) SQLiteSingleVerNaturalStore();
54 ASSERT_NE(singleVerNaturalStore_, nullptr);
55 KvDBProperties property;
56 property.SetStringProp(KvDBProperties::DATA_DIR, "");
57 property.SetStringProp(KvDBProperties::STORE_ID, "TestDatabaseOper");
58 property.SetStringProp(KvDBProperties::IDENTIFIER_DIR, "TestDatabaseOper");
59 property.SetIntProp(KvDBProperties::DATABASE_TYPE, KvDBProperties::SINGLE_VER_TYPE_SQLITE);
60 int errCode = E_OK;
61 singleVerStorageEngine_ =
62 static_cast<SQLiteSingleVerStorageEngine *>(StorageEngineManager::GetStorageEngine(property, errCode));
63 ASSERT_EQ(errCode, E_OK);
64 ASSERT_NE(singleVerStorageEngine_, nullptr);
65 }
66
TearDown(void)67 void DistributedDBStorageSingleVerDatabaseOperTest::TearDown(void)
68 {
69 delete singleVerNaturalStore_;
70 singleVerNaturalStore_ = nullptr;
71 singleVerStorageEngine_ = nullptr;
72 if (DistributedDBToolsUnitTest::RemoveTestDbFiles(testDir_) != E_OK) {
73 LOGE("rm test db files error.");
74 }
75 }
76
77 /**
78 * @tc.name: DatabaseOperationTest001
79 * @tc.desc: test Rekey, Import and Export interface in abnormal condition
80 * @tc.type: FUNC
81 * @tc.require:
82 * @tc.author: chenchaohao
83 */
84 HWTEST_F(DistributedDBStorageSingleVerDatabaseOperTest, DatabaseOperationTest001, TestSize.Level0)
85 {
86 /**
87 * @tc.steps: step1. Create singleVerDatabaseOper with nullptr;
88 * @tc.expected: OK.
89 */
90 std::unique_ptr<SingleVerDatabaseOper> singleVerDatabaseOper =
91 std::make_unique<SingleVerDatabaseOper>(singleVerNaturalStore_, nullptr);
92 ASSERT_NE(singleVerDatabaseOper, nullptr);
93
94 /**
95 * @tc.steps: step2. Test Rekey, Import and Export interface;
96 * @tc.expected: OK.
97 */
98 CipherPassword passwd;
99 EXPECT_EQ(singleVerDatabaseOper->Rekey(passwd), -E_INVALID_DB);
100 EXPECT_EQ(singleVerDatabaseOper->Import("", passwd), -E_INVALID_DB);
101 EXPECT_EQ(singleVerDatabaseOper->Export("", passwd), -E_INVALID_DB);
102 KvDBProperties properties;
103 EXPECT_EQ(singleVerDatabaseOper->RekeyRecover(properties), -E_INVALID_ARGS);
104 EXPECT_EQ(singleVerDatabaseOper->ClearImportTempFile(properties), -E_INVALID_ARGS);
105 EXPECT_EQ(singleVerDatabaseOper->ClearExportedTempFiles(properties), -E_INVALID_ARGS);
106 }
107
108 /**
109 * @tc.name: DatabaseOperationTest002
110 * @tc.desc: test Import and Export interface in abnormal condition
111 * @tc.type: FUNC
112 * @tc.require:
113 * @tc.author: chenchaohao
114 */
115 HWTEST_F(DistributedDBStorageSingleVerDatabaseOperTest, DatabaseOperationTest002, TestSize.Level0)
116 {
117 /**
118 * @tc.steps: step1. Create singleVerDatabaseOper;
119 * @tc.expected: OK.
120 */
121 std::unique_ptr<SingleVerDatabaseOper> singleVerDatabaseOper =
122 std::make_unique<SingleVerDatabaseOper>(singleVerNaturalStore_, singleVerStorageEngine_);
123 ASSERT_NE(singleVerDatabaseOper, nullptr);
124
125 /**
126 * @tc.steps: step2. Test Import and Export interface;
127 * @tc.expected: OK.
128 */
129 CipherPassword passwd;
130 EXPECT_EQ(singleVerDatabaseOper->Export("", passwd), -E_NOT_INIT);
131 singleVerDatabaseOper->SetLocalDevId("device");
132 EXPECT_EQ(singleVerDatabaseOper->Export("", passwd), -E_INVALID_ARGS);
133 }
134 }