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