• 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 #define LOG_TAG "RdbQueryTest"
16 
17 #include "rdb_query.h"
18 
19 #include "asset_value.h"
20 #include "gtest/gtest.h"
21 #include "log_print.h"
22 #include "utils/anonymous.h"
23 #include "value_proxy.h"
24 
25 using namespace testing::ext;
26 using namespace OHOS::DistributedData;
27 using namespace OHOS::DistributedRdb;
28 
29 namespace OHOS::Test {
30 namespace DistributedRDBTest {
31 class RdbQueryTest : public testing::Test {
32 public:
SetUpTestCase(void)33     static void SetUpTestCase(void){};
TearDownTestCase(void)34     static void TearDownTestCase(void){};
SetUp()35     void SetUp(){};
TearDown()36     void TearDown(){};
37 };
38 
39 /**
40 * @tc.name: RdbQueryTest001
41 * @tc.desc: RdbQuery function empty test.
42 * @tc.type: FUNC
43 * @tc.require:
44 * @tc.author: SQL
45 */
46 HWTEST_F(RdbQueryTest, RdbQueryTest001, TestSize.Level1)
47 {
48     RdbQuery rdbQuery;
49     uint64_t tid = RdbQuery::TYPE_ID;
50     bool result = rdbQuery.IsEqual(tid);
51     EXPECT_TRUE(result);
52     std::vector<std::string> tables = rdbQuery.GetTables();
53     EXPECT_TRUE(tables.empty());
54     std::string devices = "devices1";
55     std::string sql = "SELECT * FROM table";
56     Values args;
57     rdbQuery.MakeRemoteQuery(devices, sql, std::move(args));
58     EXPECT_TRUE(rdbQuery.IsRemoteQuery());
59     EXPECT_EQ(rdbQuery.GetDevices().size(), 1);
60     EXPECT_EQ(rdbQuery.GetDevices()[0], devices);
61     DistributedRdb::PredicatesMemo predicates;
62     rdbQuery.MakeQuery(predicates);
63     rdbQuery.MakeCloudQuery(predicates);
64     EXPECT_EQ(predicates.tables_.size(), 0);
65     EXPECT_TRUE(predicates.tables_.empty());
66     EXPECT_EQ(predicates.operations_.size(), 0);
67 }
68 
69 /**
70 * @tc.name: RdbQueryTest002
71 * @tc.desc: RdbQuery function test.
72 * @tc.type: FUNC
73 * @tc.require:
74 * @tc.author: SQL
75 */
76 HWTEST_F(RdbQueryTest, RdbQueryTest002, TestSize.Level1)
77 {
78     RdbQuery rdbQuery;
79     std::string devices = "devices1";
80     std::string sql = "SELECT * FROM table";
81     Values args;
82     rdbQuery.MakeRemoteQuery(devices, sql, std::move(args));
83     DistributedRdb::PredicatesMemo predicates;
84     predicates.tables_.push_back("table1");
85     predicates.tables_.push_back("table2");
86     predicates.devices_.push_back("device1");
87     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::EQUAL_TO, "name", "John Doe");
88     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GREATER_THAN, "age", "30");
89     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::OPERATOR_MAX, "too", "99");
90     rdbQuery.MakeQuery(predicates);
91     rdbQuery.MakeCloudQuery(predicates);
92     EXPECT_EQ(predicates.tables_.size(), 2);
93     EXPECT_TRUE(!predicates.tables_.empty());
94     EXPECT_EQ(predicates.operations_.size(), 3);
95 }
96 
97 /**
98 * @tc.name: RdbQueryTest003
99 * @tc.desc: RdbQuery function operation empty test.
100 * @tc.type: FUNC
101 * @tc.require:
102 * @tc.author: SQL
103 */
104 HWTEST_F(RdbQueryTest, RdbQueryTest003, TestSize.Level1)
105 {
106     RdbQuery rdbQuery;
107     std::string devices = "devices1";
108     std::string sql = "SELECT * FROM table";
109     Values args;
110     rdbQuery.MakeRemoteQuery(devices, sql, std::move(args));
111     DistributedRdb::PredicatesMemo predicates;
112     predicates.tables_.push_back("table1");
113     predicates.tables_.push_back("table2");
114     predicates.devices_.push_back("device1");
115     std::vector<std::string> values;
116     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::EQUAL_TO, "test", values);
117     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::NOT_EQUAL_TO, "test", values);
118     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::ORDER_BY, "test", values);
119     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::CONTAIN, "test", values);
120     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::BEGIN_WITH, "test", values);
121     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::END_WITH, "test", values);
122     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LIKE, "test", values);
123     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GLOB, "test", values);
124     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::BETWEEN, "test", values);
125     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::NOT_BETWEEN, "test", values);
126     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GREATER_THAN, "test", values);
127     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GREATER_THAN_OR_EQUAL, "test", values);
128     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LESS_THAN, "test", values);
129     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LESS_THAN_OR_EQUAL, "test", values);
130     rdbQuery.MakeQuery(predicates);
131     EXPECT_TRUE(values.empty());
132     EXPECT_TRUE(values.size() != 2);
133 }
134 
135 /**
136 * @tc.name: RdbQueryTest004
137 * @tc.desc: RdbQuery function operation test.
138 * @tc.type: FUNC
139 * @tc.require:
140 * @tc.author: SQL
141 */
142 HWTEST_F(RdbQueryTest, RdbQueryTest004, TestSize.Level1)
143 {
144     RdbQuery rdbQuery;
145     std::string devices = "devices1";
146     std::string sql = "SELECT * FROM table";
147     Values args;
148     rdbQuery.MakeRemoteQuery(devices, sql, std::move(args));
149     DistributedRdb::PredicatesMemo predicates;
150     predicates.tables_.push_back("table1");
151     predicates.tables_.push_back("table2");
152     predicates.devices_.push_back("device1");
153     std::vector<std::string> values = { "value1", "value2" };
154     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::EQUAL_TO, "test", values);
155     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::NOT_EQUAL_TO, "test", values);
156     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::AND, "test", values);
157     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::OR, "test", values);
158     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::ORDER_BY, "test", values);
159     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LIMIT, "test", values);
160     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::BEGIN_GROUP, "test", values);
161     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::END_GROUP, "test", values);
162     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::IN, "test", values);
163     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::NOT_IN, "test", values);
164     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::CONTAIN, "test", values);
165     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::BEGIN_WITH, "test", values);
166     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::END_WITH, "test", values);
167     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::IS_NULL, "test", values);
168     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::IS_NOT_NULL, "test", values);
169     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LIKE, "test", values);
170     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GLOB, "test", values);
171     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::BETWEEN, "test", values);
172     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::NOT_BETWEEN, "test", values);
173     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GREATER_THAN, "test", values);
174     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GREATER_THAN_OR_EQUAL, "test", values);
175     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LESS_THAN, "test", values);
176     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LESS_THAN_OR_EQUAL, "test", values);
177     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::DISTINCT, "test", values);
178     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::INDEXED_BY, "test", values);
179     rdbQuery.MakeQuery(predicates);
180     EXPECT_TRUE(!values.empty());
181     EXPECT_FALSE(values.size() != 2);
182 }
183 
184 /**
185 * @tc.name: RdbQueryTest005
186 * @tc.desc: RdbQuery function operation test.
187 * @tc.type: FUNC
188 * @tc.require:
189 * @tc.author:
190 */
191 HWTEST_F(RdbQueryTest, RdbQueryTest005, TestSize.Level1)
192 {
193     RdbQuery rdbQuery;
194     DistributedRdb::PredicatesMemo predicates;
195     predicates.tables_.push_back("table");
196     std::vector<NativeRdb::AssetValue> assets;
197     NativeRdb::AssetValue asset{ .name = "name1" };
198     assets.push_back(asset);
199     NativeRdb::ValueObject object(assets);
200     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::EQUAL_TO, "test", object);
201     rdbQuery.MakeCloudQuery(predicates);
202     EXPECT_EQ(predicates.operations_.size(), 1);
203 }
204 
205 /**
206 * @tc.name: RdbQueryTest006
207 * @tc.desc: RdbQuery function operation test.
208 * @tc.type: FUNC
209 * @tc.require:
210 * @tc.author:
211 */
212 HWTEST_F(RdbQueryTest, RdbQueryTest006, TestSize.Level1)
213 {
214     RdbQuery rdbQuery;
215     DistributedRdb::PredicatesMemo predicates;
216     predicates.tables_.push_back("table");
217     std::vector<NativeRdb::AssetValue> assets;
218     NativeRdb::AssetValue asset{ .name = "name1" };
219     NativeRdb::ValueObject object(asset);
220     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::EQUAL_TO, "test", object);
221     rdbQuery.MakeCloudQuery(predicates);
222     EXPECT_EQ(predicates.operations_.size(), 1);
223 }
224 
225 /**
226 * @tc.name: RdbQueryTest007
227 * @tc.desc: RdbQuery function operation test.
228 * @tc.type: FUNC
229 * @tc.require:
230 * @tc.author:
231 */
232 HWTEST_F(RdbQueryTest, RdbQueryTest007, TestSize.Level1)
233 {
234     RdbQuery rdbQuery;
235     DistributedRdb::PredicatesMemo predicates;
236     predicates.tables_.push_back("table");
237     std::vector<NativeRdb::AssetValue> assets;
238     NativeRdb::AssetValue asset{ .name = "name1" };
239     assets.push_back(asset);
240     NativeRdb::ValueObject object(assets);
241     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::IN, "test", object);
242     rdbQuery.MakeCloudQuery(predicates);
243     EXPECT_EQ(predicates.operations_.size(), 1);
244 }
245 } // namespace DistributedRDBTest
246 } // namespace OHOS::Test