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