• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 #define LOG_TAG "GdbGrdApiTest"
17 #include <dlfcn.h>
18 #include <gtest/gtest.h>
19 
20 #include <cstdint>
21 #include <string>
22 #include <variant>
23 
24 #include "gdb_errors.h"
25 #include "db_store_manager.h"
26 #include "gdb_helper.h"
27 #include "grd_adapter.h"
28 #include "grd_adapter_manager.h"
29 #include "grd_error.h"
30 #include "logger.h"
31 
32 using namespace testing::ext;
33 using namespace OHOS::DistributedDataAip;
34 class GdbGrdApiTest : public testing::Test {
35 public:
36     static void SetUpTestCase();
37     static void TearDownTestCase();
38     void SetUp();
39     void TearDown();
40 };
41 
SetUpTestCase()42 void GdbGrdApiTest::SetUpTestCase()
43 {
44     LOG_INFO("SetUpTestCase");
45 }
46 
TearDownTestCase()47 void GdbGrdApiTest::TearDownTestCase()
48 {
49     LOG_INFO("TearDownTestCase");
50 }
51 
SetUp()52 void GdbGrdApiTest::SetUp()
53 {
54     LOG_INFO("SetUp");
55     if (!IsSupportArkDataDb()) {
56         GTEST_SKIP() << "Current testcase is not compatible from current gdb";
57     }
58 }
59 
TearDown()60 void GdbGrdApiTest::TearDown()
61 {
62     LOG_INFO("TearDown");
63 }
64 
65 HWTEST_F(GdbGrdApiTest, GdbStore_GrdApi_TransType01, TestSize.Level1)
66 {
67     auto type = GrdAdapter::TransColType(GRD_DB_DATATYPE_INTEGER);
68     EXPECT_EQ(type, ColumnType::TYPE_INTEGER);
69     type = GrdAdapter::TransColType(GRD_DB_DATATYPE_FLOAT);
70     EXPECT_EQ(type, ColumnType::TYPE_FLOAT);
71     type = GrdAdapter::TransColType(GRD_DB_DATATYPE_TEXT);
72     EXPECT_EQ(type, ColumnType::TYPE_TEXT);
73     type = GrdAdapter::TransColType(GRD_DB_DATATYPE_BLOB);
74     EXPECT_EQ(type, ColumnType::TYPE_BLOB);
75     type = GrdAdapter::TransColType(GRD_DB_DATATYPE_FLOATVECTOR);
76     EXPECT_EQ(type, ColumnType::TYPE_FLOATVECTOR);
77     type = GrdAdapter::TransColType(GRD_DB_DATATYPE_JSONSTR);
78     EXPECT_EQ(type, ColumnType::TYPE_JSONSTR);
79     type = GrdAdapter::TransColType(GRD_DB_DATATYPE_NULL);
80     EXPECT_EQ(type, ColumnType::TYPE_NULL);
81     type = GrdAdapter::TransColType(-1);
82     EXPECT_EQ(type, ColumnType::TYPE_NULL);
83     type = GrdAdapter::TransColType(7);
84     EXPECT_EQ(type, ColumnType::TYPE_NULL);
85 }
86 
87 HWTEST_F(GdbGrdApiTest, GdbStore_GrdApi_NotUsed01, TestSize.Level1)
88 {
89     std::string createGql = "CREATE GRAPH test {(person:Person {name STRING} )};";
90     std::string dbPath = "/data/test.db";
91     std::string backupPath = "/data/testBackup.db";
92     GDBHelper::DeleteDBStore({"test", "/data"});
93     if (g_library != nullptr) {
94         dlclose(g_library);
95     }
96     GRD_DB *db = nullptr;
97     auto ret = GrdAdapter::Open(dbPath.c_str(), "", GRD_DB_OPEN_CREATE, &db);
98     EXPECT_EQ(ret, E_OK);
99 
100     if (g_library != nullptr) {
101         dlclose(g_library);
102     }
103     std::vector<uint8_t> entryKey = { 't', 'e', 's', 't' };
104     ret = GrdAdapter::Backup(db, backupPath.c_str(), entryKey);
105     EXPECT_EQ(ret, E_NOT_SUPPORT);
106 
107     if (g_library != nullptr) {
108         dlclose(g_library);
109     }
110     ret = GrdAdapter::Close(db, 0);
111     EXPECT_EQ(ret, E_OK);
112 
113     if (g_library != nullptr) {
114         dlclose(g_library);
115     }
116     ret = GrdAdapter::Restore(dbPath.c_str(), backupPath.c_str(), entryKey);
117     EXPECT_EQ(ret, E_NOT_SUPPORT);
118 
119     if (g_library != nullptr) {
120         dlclose(g_library);
121     }
122     ret = GrdAdapter::Repair(dbPath.c_str(), "");
123     EXPECT_EQ(ret, E_NOT_SUPPORT);
124 
125     if (g_library != nullptr) {
126         dlclose(g_library);
127     }
128     ret = GrdAdapter::Rekey(dbPath.c_str(), "", std::vector<uint8_t>());
129     EXPECT_EQ(ret, E_GRD_INVALID_ARGS);
130     GDBHelper::DeleteDBStore({"test", "/data"});
131 }
132 
133 HWTEST_F(GdbGrdApiTest, GdbStore_GrdApi_NotUsed02, TestSize.Level1)
134 {
135     std::string createGql = "CREATE GRAPH test {(person:Person {name STRING} )};";
136     std::string dbPath = "/data/test.db";
137     std::string backupPath = "/data/testBackup.db";
138     GDBHelper::DeleteDBStore({"test", "/data"});
139     GRD_DB *db = nullptr;
140     if (g_library != nullptr) {
141         dlclose(g_library);
142     }
143     auto ret = GrdAdapter::Open(dbPath.c_str(), "", GRD_DB_OPEN_CREATE, &db);
144     EXPECT_EQ(ret, E_OK);
145 
146     if (g_library != nullptr) {
147         dlclose(g_library);
148     }
149     GRD_Stmt *stmt = nullptr;
150     ret = GrdAdapter::Prepare(db, createGql.c_str(), createGql.size(), &stmt, nullptr);
151     EXPECT_EQ(ret, E_OK);
152 
153     if (g_library != nullptr) {
154         dlclose(g_library);
155     }
156     ret = GrdAdapter::Reset(stmt);
157     EXPECT_EQ(ret, E_OK);
158 
159     if (g_library != nullptr) {
160         dlclose(g_library);
161     }
162     auto result = GrdAdapter::ColumnBytes(stmt, 0);
163     EXPECT_EQ(result, 0);
164 
165     if (g_library != nullptr) {
166         dlclose(g_library);
167     }
168     auto result2 = GrdAdapter::ColumnInt64(stmt, 0);
169     EXPECT_EQ(result2, 0);
170 
171     result2 = GrdAdapter::ColumnInt(stmt, 0);
172     EXPECT_EQ(result2, 0);
173 
174     auto result3 = GrdAdapter::ColumnDouble(stmt, 0);
175     EXPECT_EQ(result3, 0.0);
176 
177     if (g_library != nullptr) {
178         dlclose(g_library);
179     }
180     auto value = GrdAdapter::ColumnValue(stmt, 0);
181     EXPECT_EQ(value.type, GRD_DB_DATATYPE_NULL);
182     ret = StoreManager::GetInstance().Delete(dbPath);
183     EXPECT_EQ(ret, 1);
184     ret = StoreManager::GetInstance().Delete(backupPath);
185     EXPECT_EQ(ret, 1);
186     GDBHelper::DeleteDBStore({"test", "/data"});
187 }