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 }