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 "gtest/gtest.h"
18 #include "log_print.h"
19 #include "rdb_query.h"
20 #include "utils/anonymous.h"
21 #include "value_proxy.h"
22 
23 using namespace testing::ext;
24 using namespace OHOS::DistributedData;
25 using namespace OHOS::DistributedRdb;
26 
27 namespace OHOS::Test {
28 namespace DistributedRDBTest {
29 class RdbQueryTest : public testing::Test {
30 public:
SetUpTestCase(void)31     static void SetUpTestCase(void){};
TearDownTestCase(void)32     static void TearDownTestCase(void){};
SetUp()33     void SetUp(){};
TearDown()34     void TearDown(){};
35 protected:
36 };
37 
38 /**
39 * @tc.name: RdbQueryTest001
40 * @tc.desc: RdbQuery function empty test.
41 * @tc.type: FUNC
42 * @tc.require:
43 * @tc.author: SQL
44 */
45 HWTEST_F(RdbQueryTest, RdbQueryTest001, TestSize.Level1)
46 {
47     RdbQuery rdbQuery;
48     uint64_t tid = RdbQuery::TYPE_ID;
49     bool result = rdbQuery.IsEqual(tid);
50     EXPECT_TRUE(result);
51     std::vector<std::string> tables = rdbQuery.GetTables();
52     EXPECT_TRUE(tables.empty());
53     std::string devices = "devices1";
54     std::string sql = "SELECT * FROM table";
55     Values args;
56     rdbQuery.MakeRemoteQuery(devices, sql, std::move(args));
57     EXPECT_TRUE(rdbQuery.IsRemoteQuery());
58     EXPECT_EQ(rdbQuery.GetDevices().size(), 1);
59     EXPECT_EQ(rdbQuery.GetDevices()[0], devices);
60     DistributedRdb::PredicatesMemo predicates;
61     rdbQuery.MakeQuery(predicates);
62     rdbQuery.MakeCloudQuery(predicates);
63     EXPECT_EQ(predicates.tables_.size(), 0);
64     EXPECT_TRUE(predicates.tables_.empty());
65     EXPECT_EQ(predicates.operations_.size(), 0);
66 }
67 
68 /**
69 * @tc.name: RdbQueryTest002
70 * @tc.desc: RdbQuery function test.
71 * @tc.type: FUNC
72 * @tc.require:
73 * @tc.author: SQL
74 */
75 HWTEST_F(RdbQueryTest, RdbQueryTest002, TestSize.Level1)
76 {
77     RdbQuery rdbQuery;
78     std::string devices = "devices1";
79     std::string sql = "SELECT * FROM table";
80     Values args;
81     rdbQuery.MakeRemoteQuery(devices, sql, std::move(args));
82     DistributedRdb::PredicatesMemo predicates;
83     predicates.tables_.push_back("table1");
84     predicates.tables_.push_back("table2");
85     predicates.devices_.push_back("device1");
86     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::EQUAL_TO, "name", "John Doe");
87     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GREATER_THAN, "age", "30");
88     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::OPERATOR_MAX, "too", "99");
89     rdbQuery.MakeQuery(predicates);
90     rdbQuery.MakeCloudQuery(predicates);
91     EXPECT_EQ(predicates.tables_.size(), 2);
92     EXPECT_TRUE(!predicates.tables_.empty());
93     EXPECT_EQ(predicates.operations_.size(), 3);
94 }
95 
96 /**
97 * @tc.name: RdbQueryTest003
98 * @tc.desc: RdbQuery function operation empty test.
99 * @tc.type: FUNC
100 * @tc.require:
101 * @tc.author: SQL
102 */
103 HWTEST_F(RdbQueryTest, RdbQueryTest003, TestSize.Level1)
104 {
105     RdbQuery rdbQuery;
106     std::string devices = "devices1";
107     std::string sql = "SELECT * FROM table";
108     Values args;
109     rdbQuery.MakeRemoteQuery(devices, sql, std::move(args));
110     DistributedRdb::PredicatesMemo predicates;
111     predicates.tables_.push_back("table1");
112     predicates.tables_.push_back("table2");
113     predicates.devices_.push_back("device1");
114     std::vector<std::string> values;
115     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::EQUAL_TO, "test", values);
116     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::NOT_EQUAL_TO, "test", values);
117     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::ORDER_BY, "test", values);
118     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::CONTAIN, "test", values);
119     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::BEGIN_WITH, "test", values);
120     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::END_WITH, "test", values);
121     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LIKE, "test", values);
122     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GLOB, "test", values);
123     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::BETWEEN, "test", values);
124     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::NOT_BETWEEN, "test", values);
125     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GREATER_THAN, "test", values);
126     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GREATER_THAN_OR_EQUAL, "test", values);
127     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LESS_THAN, "test", values);
128     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LESS_THAN_OR_EQUAL, "test", values);
129     rdbQuery.MakeQuery(predicates);
130     EXPECT_TRUE(values.empty());
131     EXPECT_TRUE(values.size() != 2);
132 }
133 
134 /**
135 * @tc.name: RdbQueryTest004
136 * @tc.desc: RdbQuery function operation test.
137 * @tc.type: FUNC
138 * @tc.require:
139 * @tc.author: SQL
140 */
141 HWTEST_F(RdbQueryTest, RdbQueryTest004, TestSize.Level1)
142 {
143     RdbQuery rdbQuery;
144     std::string devices = "devices1";
145     std::string sql = "SELECT * FROM table";
146     Values args;
147     rdbQuery.MakeRemoteQuery(devices, sql, std::move(args));
148     DistributedRdb::PredicatesMemo predicates;
149     predicates.tables_.push_back("table1");
150     predicates.tables_.push_back("table2");
151     predicates.devices_.push_back("device1");
152     std::vector<std::string> values = { "value1", "value2" };
153     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::EQUAL_TO, "test", values);
154     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::NOT_EQUAL_TO, "test", values);
155     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::AND, "test", values);
156     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::OR, "test", values);
157     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::ORDER_BY, "test", values);
158     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LIMIT, "test", values);
159     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::BEGIN_GROUP, "test", values);
160     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::END_GROUP, "test", values);
161     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::IN, "test", values);
162     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::NOT_IN, "test", values);
163     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::CONTAIN, "test", values);
164     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::BEGIN_WITH, "test", values);
165     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::END_WITH, "test", values);
166     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::IS_NULL, "test", values);
167     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::IS_NOT_NULL, "test", values);
168     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LIKE, "test", values);
169     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GLOB, "test", values);
170     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::BETWEEN, "test", values);
171     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::NOT_BETWEEN, "test", values);
172     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GREATER_THAN, "test", values);
173     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::GREATER_THAN_OR_EQUAL, "test", values);
174     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LESS_THAN, "test", values);
175     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::LESS_THAN_OR_EQUAL, "test", values);
176     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::DISTINCT, "test", values);
177     predicates.AddOperation(DistributedRdb::RdbPredicateOperator::INDEXED_BY, "test", values);
178     rdbQuery.MakeQuery(predicates);
179     EXPECT_TRUE(!values.empty());
180     EXPECT_FALSE(values.size() != 2);
181 }
182 } // namespace DistributedRDBTest
183 } // namespace OHOS::Test