1 /*
2  * Copyright (c) 2023 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 #ifdef USE_RD_KERNEL
16 #include <gtest/gtest.h>
17 
18 #include "db_common.h"
19 #include "distributeddb_storage_rd_single_ver_natural_store_testcase.h"
20 #include "storage_engine_manager.h"
21 
22 using namespace testing::ext;
23 using namespace DistributedDB;
24 using namespace DistributedDBUnitTest;
25 using namespace std;
26 
27 namespace {
28     string g_testDir;
29     string g_databaseName;
30     string g_identifier;
31     KvDBProperties g_property;
32 
33     RdSingleVerNaturalStore *g_store = nullptr;
34     RdSingleVerNaturalStoreConnection *g_connection = nullptr;
35 
GetStorageEngine(RdSingleVerStorageEngine * & storageEngine)36     void GetStorageEngine(RdSingleVerStorageEngine *&storageEngine)
37     {
38         int errCode;
39         storageEngine =
40             static_cast<RdSingleVerStorageEngine *>(StorageEngineManager::GetStorageEngine(g_property, errCode));
41         EXPECT_EQ(errCode, E_OK);
42     }
43 }
44 
45 class DistributedDBStorageRdSingleVerStorageEngineTest : public testing::Test {
46 public:
47     static void SetUpTestCase(void);
48     static void TearDownTestCase(void);
49     void SetUp();
50     void TearDown();
51 };
52 
SetUpTestCase(void)53 void DistributedDBStorageRdSingleVerStorageEngineTest::SetUpTestCase(void)
54 {
55     DistributedDBToolsUnitTest::TestDirInit(g_testDir);
56     LOGI("DistributedDBStorageRdSingleVerStorageEngineTest dir is %s", g_testDir.c_str());
57     std::string oriIdentifier = APP_ID + "-" + USER_ID + "-" + "TestGeneralNBStorageEngine";
58     std::string identifier = DBCommon::TransferHashString(oriIdentifier);
59     g_identifier = DBCommon::TransferStringToHex(identifier);
60 
61     g_databaseName = "/" + g_identifier + "/" + DBConstant::SINGLE_SUB_DIR + "/" + DBConstant::MAINDB_DIR + "/" +
62         DBConstant::SINGLE_VER_DATA_STORE + DBConstant::DB_EXTENSION;
63     g_property.SetStringProp(KvDBProperties::DATA_DIR, g_testDir);
64     g_property.SetStringProp(KvDBProperties::STORE_ID, "TestGeneralNBStorageEngine");
65     g_property.SetStringProp(KvDBProperties::IDENTIFIER_DIR, g_identifier);
66     g_property.SetIntProp(KvDBProperties::DATABASE_TYPE, KvDBProperties::SINGLE_VER_TYPE_RD_KERNAL);
67 }
68 
TearDownTestCase(void)69 void DistributedDBStorageRdSingleVerStorageEngineTest::TearDownTestCase(void)
70 {
71     DistributedDBToolsUnitTest::RemoveTestDbFiles(g_testDir + "/" + g_identifier + "/" + DBConstant::SINGLE_SUB_DIR);
72 }
73 
SetUp(void)74 void DistributedDBStorageRdSingleVerStorageEngineTest::SetUp(void)
75 {
76     DistributedDBToolsUnitTest::PrintTestCaseInfo();
77     DistributedDBToolsUnitTest::RemoveTestDbFiles(g_testDir + "/" + g_identifier + "/" + DBConstant::SINGLE_SUB_DIR);
78     g_store = new (std::nothrow) RdSingleVerNaturalStore;
79     ASSERT_NE(g_store, nullptr);
80     ASSERT_EQ(g_store->Open(g_property), E_OK);
81 
82     int erroCode = E_OK;
83     g_connection = static_cast<RdSingleVerNaturalStoreConnection *>(g_store->GetDBConnection(erroCode));
84     ASSERT_NE(g_connection, nullptr);
85     g_store->DecObjRef(g_store);
86     EXPECT_EQ(erroCode, E_OK);
87 }
88 
TearDown(void)89 void DistributedDBStorageRdSingleVerStorageEngineTest::TearDown(void)
90 {
91     if (g_connection != nullptr) {
92         g_connection->Close();
93         g_connection = nullptr;
94     }
95     g_store = nullptr;
96 }
97 
98 /**
99   * @tc.name: DataTest001
100   * @tc.desc: Change engine state, execute migrate
101   * @tc.type: FUNC
102   * @tc.require:
103   * @tc.author: bty
104   */
105 HWTEST_F(DistributedDBStorageRdSingleVerStorageEngineTest, DataTest001, TestSize.Level1)
106 {
107     RdSingleVerStorageEngine *storageEngine = nullptr;
108     GetStorageEngine(storageEngine);
109     ASSERT_NE(storageEngine, nullptr);
110 
111     storageEngine->SetEngineState(EngineState::ENGINE_BUSY);
112     EXPECT_EQ(storageEngine->ExecuteMigrate(), -E_NOT_SUPPORT);
113     storageEngine->SetEngineState(EngineState::ATTACHING);
114     EXPECT_EQ(storageEngine->ExecuteMigrate(), -E_NOT_SUPPORT);
115     storageEngine->SetEngineState(EngineState::MAINDB);
116     EXPECT_EQ(storageEngine->ExecuteMigrate(), -E_NOT_SUPPORT);
117     storageEngine->SetEngineState(EngineState::CACHEDB);
118     EXPECT_EQ(storageEngine->ExecuteMigrate(), -E_NOT_SUPPORT);
119     storageEngine->Release();
120     storageEngine = nullptr;
121 }
122 #endif // USE_RD_KERNEL