1 /*
2 * Copyright (c) 2021 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 "SingleKvStoreClientQueryTest"
17
18 #include <unistd.h>
19 #include <cstddef>
20 #include <cstdint>
21 #include <vector>
22 #include "distributed_kv_data_manager.h"
23 #include "file_ex.h"
24 #include "types.h"
25 #include "gtest/gtest.h"
26 namespace {
27 using namespace testing::ext;
28 using namespace OHOS::DistributedKv;
29 class SingleKvStoreClientQueryTest : public testing::Test {
30 public:
31 static void SetUpTestCase(void);
32
33 static void TearDownTestCase(void);
34
35 void SetUp();
36
37 void TearDown();
38
39 static std::shared_ptr<SingleKvStore> singleKvStore;
40 static Status statusGetKvStore;
41 };
42
43 static constexpr const char *VALID_SCHEMA_STRICT_DEFINE = "{\"SCHEMA_VERSION\":\"1.0\","
44 "\"SCHEMA_MODE\":\"STRICT\","
45 "\"SCHEMA_SKIPSIZE\":0,"
46 "\"SCHEMA_DEFINE\":{"
47 "\"name\":\"INTEGER, NOT NULL\""
48 "},"
49 "\"SCHEMA_INDEXES\":[\"$.name\"]}";
50 std::shared_ptr<SingleKvStore> SingleKvStoreClientQueryTest::singleKvStore = nullptr;
51 Status SingleKvStoreClientQueryTest::statusGetKvStore = Status::ERROR;
52 static constexpr int32_t INVALID_NUMBER = -1;
53 static constexpr uint32_t MAX_QUERY_LENGTH = 1024;
54
SetUpTestCase(void)55 void SingleKvStoreClientQueryTest::SetUpTestCase(void)
56 {
57 OHOS::SaveStringToFile("/sys/fs/selinux/enforce", "0");
58 std::string baseDir = "/data/service/el1/public/database/SingleKvStoreClientQueryTest";
59 mkdir(baseDir.c_str(), (S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH));
60 }
61
TearDownTestCase(void)62 void SingleKvStoreClientQueryTest::TearDownTestCase(void)
63 {
64 OHOS::SaveStringToFile("/sys/fs/selinux/enforce", "1");
65 (void)remove("/data/service/el1/public/database/SingleKvStoreClientQueryTest/key");
66 (void)remove("/data/service/el1/public/database/SingleKvStoreClientQueryTest/kvdb");
67 (void)remove("/data/service/el1/public/database/SingleKvStoreClientQueryTest");
68 }
69
SetUp(void)70 void SingleKvStoreClientQueryTest::SetUp(void)
71 {}
72
TearDown(void)73 void SingleKvStoreClientQueryTest::TearDown(void)
74 {}
75
76 /**
77 * @tc.name: DataQuery
78 * @tc.desc: the predicate is reset
79 * @tc.type: FUNC
80 * @tc.require:
81 * @tc.author: zuojiangjiang
82 */
83 HWTEST_F(SingleKvStoreClientQueryTest, TestQueryReset, TestSize.Level1)
84 {
85 DataQuery query;
86 EXPECT_TRUE(query.ToString().length() == 0);
87 std::string str = "test value";
88 query.EqualTo("$.test_field_name", str);
89 EXPECT_TRUE(query.ToString().length() > 0);
90 query.Reset();
91 EXPECT_TRUE(query.ToString().length() == 0);
92 }
93
94 /**
95 * @tc.name: DataQuery
96 * @tc.desc: the predicate is equalTo, the field is invalid
97 * @tc.type: FUNC
98 * @tc.require:
99 * @tc.author: zuojiangjiang
100 */
101 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryEqualToInvalidField, TestSize.Level1)
102 {
103 DataQuery query;
104 query.EqualTo("", 100);
105 EXPECT_TRUE(query.ToString().length() == 0);
106 query.EqualTo("$.test_field_name^", 100);
107 EXPECT_TRUE(query.ToString().length() == 0);
108 query.EqualTo("", (int64_t)100);
109 EXPECT_TRUE(query.ToString().length() == 0);
110 query.EqualTo("^", (int64_t)100);
111 EXPECT_TRUE(query.ToString().length() == 0);
112 query.EqualTo("", 1.23);
113 EXPECT_TRUE(query.ToString().length() == 0);
114 query.EqualTo("$.^", 1.23);
115 EXPECT_TRUE(query.ToString().length() == 0);
116 query.EqualTo("", false);
117 EXPECT_TRUE(query.ToString().length() == 0);
118 query.EqualTo("^$.test_field_name", false);
119 EXPECT_TRUE(query.ToString().length() == 0);
120 query.EqualTo("", std::string("str"));
121 EXPECT_TRUE(query.ToString().length() == 0);
122 query.EqualTo("^^^^^^^", std::string("str"));
123 EXPECT_TRUE(query.ToString().length() == 0);
124 }
125
126 /**
127 * @tc.name: DataQuery
128 * @tc.desc: the predicate is equalTo, the field is valid
129 * @tc.type: FUNC
130 * @tc.require:
131 * @tc.author: zuojiangjiang
132 */
133 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryEqualToValidField, TestSize.Level1)
134 {
135 DataQuery query;
136 query.EqualTo("$.test_field_name", 100);
137 EXPECT_TRUE(query.ToString().length() > 0);
138 query.Reset();
139 query.EqualTo("$.test_field_name", (int64_t) 100);
140 EXPECT_TRUE(query.ToString().length() > 0);
141 query.Reset();
142 query.EqualTo("$.test_field_name", 1.23);
143 EXPECT_TRUE(query.ToString().length() > 0);
144 query.Reset();
145 query.EqualTo("$.test_field_name", false);
146 EXPECT_TRUE(query.ToString().length() > 0);
147 query.Reset();
148 std::string str = "";
149 query.EqualTo("$.test_field_name", str);
150 EXPECT_TRUE(query.ToString().length() > 0);
151 }
152
153 /**
154 * @tc.name: DataQuery
155 * @tc.desc: the predicate is notEqualTo, the field is invalid
156 * @tc.type: FUNC
157 * @tc.require:
158 * @tc.author: zuojiangjiang
159 */
160 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryNotEqualToValidField, TestSize.Level1)
161 {
162 DataQuery query;
163 query.NotEqualTo("", 100);
164 EXPECT_TRUE(query.ToString().length() == 0);
165 query.NotEqualTo("$.test_field_name^test", 100);
166 EXPECT_TRUE(query.ToString().length() == 0);
167 query.NotEqualTo("", (int64_t)100);
168 EXPECT_TRUE(query.ToString().length() == 0);
169 query.NotEqualTo("^$.test_field_name", (int64_t)100);
170 EXPECT_TRUE(query.ToString().length() == 0);
171 query.NotEqualTo("", 1.23);
172 EXPECT_TRUE(query.ToString().length() == 0);
173 query.NotEqualTo("^", 1.23);
174 EXPECT_TRUE(query.ToString().length() == 0);
175 query.NotEqualTo("", false);
176 EXPECT_TRUE(query.ToString().length() == 0);
177 query.NotEqualTo("^^", false);
178 EXPECT_TRUE(query.ToString().length() == 0);
179 query.NotEqualTo("", std::string("test_value"));
180 EXPECT_TRUE(query.ToString().length() == 0);
181 query.NotEqualTo("$.test_field^_name", std::string("test_value"));
182 EXPECT_TRUE(query.ToString().length() == 0);
183 }
184
185 /**
186 * @tc.name: DataQuery
187 * @tc.desc: the predicate is notEqualTo, the field is valid
188 * @tc.type: FUNC
189 * @tc.require:
190 * @tc.author: zuojiangjiang
191 */
192 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryNotEqualToInvalidField, TestSize.Level1)
193 {
194 DataQuery query;
195 query.NotEqualTo("$.test_field_name", 100);
196 EXPECT_TRUE(query.ToString().length() > 0);
197 query.Reset();
198 query.NotEqualTo("$.test_field_name", (int64_t) 100);
199 EXPECT_TRUE(query.ToString().length() > 0);
200 query.Reset();
201 query.NotEqualTo("$.test_field_name", 1.23);
202 EXPECT_TRUE(query.ToString().length() > 0);
203 query.Reset();
204 query.NotEqualTo("$.test_field_name", false);
205 EXPECT_TRUE(query.ToString().length() > 0);
206 query.Reset();
207 std::string str = "test value";
208 query.NotEqualTo("$.test_field_name", str);
209 EXPECT_TRUE(query.ToString().length() > 0);
210 }
211
212 /**
213 * @tc.name: DataQuery
214 * @tc.desc: the predicate is greaterThan, the field is invalid.
215 * @tc.type: FUNC
216 * @tc.require:
217 * @tc.author: zuojiangjiang
218 */
219 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryGreaterThanInvalidField, TestSize.Level1)
220 {
221 DataQuery query;
222 query.GreaterThan("", 100);
223 EXPECT_TRUE(query.ToString().length() == 0);
224 query.GreaterThan("$.^^", 100);
225 EXPECT_TRUE(query.ToString().length() == 0);
226 query.GreaterThan("", (int64_t) 100);
227 EXPECT_TRUE(query.ToString().length() == 0);
228 query.GreaterThan("^$.test_field_name", (int64_t) 100);
229 EXPECT_TRUE(query.ToString().length() == 0);
230 query.GreaterThan("", 1.23);
231 EXPECT_TRUE(query.ToString().length() == 0);
232 query.GreaterThan("^", 1.23);
233 EXPECT_TRUE(query.ToString().length() == 0);
234 query.GreaterThan("", "test value");
235 EXPECT_TRUE(query.ToString().length() == 0);
236 query.GreaterThan("$.test_field_name^*%$#", "test value");
237 EXPECT_TRUE(query.ToString().length() == 0);
238 }
239
240 /**
241 * @tc.name: DataQuery
242 * @tc.desc: the predicate is greaterThan, the field is valid.
243 * @tc.type: FUNC
244 * @tc.require:
245 * @tc.author: zuojiangjiang
246 */
247 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryGreaterThanValidField, TestSize.Level1)
248 {
249 DataQuery query;
250 query.GreaterThan("$.test_field_name", 100);
251 EXPECT_TRUE(query.ToString().length() > 0);
252 query.Reset();
253 query.GreaterThan("$.test_field_name", (int64_t) 100);
254 EXPECT_TRUE(query.ToString().length() > 0);
255 query.Reset();
256 query.GreaterThan("$.test_field_name", 1.23);
257 EXPECT_TRUE(query.ToString().length() > 0);
258 query.Reset();
259 query.GreaterThan("$.test_field_name$$$", "test value");
260 EXPECT_TRUE(query.ToString().length() > 0);
261 }
262
263 /**
264 * @tc.name: DataQuery
265 * @tc.desc: the predicate is lessThan, the field is invalid.
266 * @tc.type: FUNC
267 * @tc.require:
268 * @tc.author: zuojiangjiang
269 */
270 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryLessThanInvalidField, TestSize.Level1)
271 {
272 DataQuery query;
273 query.LessThan("", 100);
274 EXPECT_TRUE(query.ToString().length() == 0);
275 query.LessThan("$.^", 100);
276 EXPECT_TRUE(query.ToString().length() == 0);
277 query.LessThan("", (int64_t) 100);
278 EXPECT_TRUE(query.ToString().length() == 0);
279 query.LessThan("^$.test_field_name", (int64_t) 100);
280 EXPECT_TRUE(query.ToString().length() == 0);
281 query.LessThan("", 1.23);
282 EXPECT_TRUE(query.ToString().length() == 0);
283 query.LessThan("^^^", 1.23);
284 EXPECT_TRUE(query.ToString().length() == 0);
285 query.LessThan("", "test value");
286 EXPECT_TRUE(query.ToString().length() == 0);
287 query.LessThan("$.test_field_name^", "test value");
288 EXPECT_TRUE(query.ToString().length() == 0);
289 }
290
291 /**
292 * @tc.name: DataQuery
293 * @tc.desc: the predicate is lessThan, the field is valid.
294 * @tc.type: FUNC
295 * @tc.require:
296 * @tc.author: zuojiangjiang
297 */
298 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryLessThanValidField, TestSize.Level1)
299 {
300 DataQuery query;
301 query.LessThan("$.test_field_name", 100);
302 EXPECT_TRUE(query.ToString().length() > 0);
303 query.Reset();
304 query.LessThan("$.test_field_name", (int64_t) 100);
305 EXPECT_TRUE(query.ToString().length() > 0);
306 query.Reset();
307 query.LessThan("$.test_field_name", 1.23);
308 EXPECT_TRUE(query.ToString().length() > 0);
309 query.Reset();
310 query.LessThan("$.test_field_name", "test value");
311 EXPECT_TRUE(query.ToString().length() > 0);
312 }
313
314 /**
315 * @tc.name: DataQuery
316 * @tc.desc: the predicate is greaterThanOrEqualTo, the field is invalid.
317 * @tc.type: FUNC
318 * @tc.require:
319 * @tc.author: zuojiangjiang
320 */
321 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryGreaterThanOrEqualToInvalidField, TestSize.Level1)
322 {
323 DataQuery query;
324 query.GreaterThanOrEqualTo("", 100);
325 EXPECT_TRUE(query.ToString().length() == 0);
326 query.GreaterThanOrEqualTo("^$.test_field_name", 100);
327 EXPECT_TRUE(query.ToString().length() == 0);
328 query.GreaterThanOrEqualTo("", (int64_t) 100);
329 EXPECT_TRUE(query.ToString().length() == 0);
330 query.GreaterThanOrEqualTo("$.test_field_name^", (int64_t) 100);
331 EXPECT_TRUE(query.ToString().length() == 0);
332 query.GreaterThanOrEqualTo("", 1.23);
333 EXPECT_TRUE(query.ToString().length() == 0);
334 query.GreaterThanOrEqualTo("^$.^", 1.23);
335 EXPECT_TRUE(query.ToString().length() == 0);
336 query.GreaterThanOrEqualTo("", "test value");
337 EXPECT_TRUE(query.ToString().length() == 0);
338 query.GreaterThanOrEqualTo("^^=", "test value");
339 EXPECT_TRUE(query.ToString().length() == 0);
340 }
341
342 /**
343 * @tc.name: DataQuery
344 * @tc.desc: the predicate is greaterThanOrEqualTo, the field is valid.
345 * @tc.type: FUNC
346 * @tc.require:
347 * @tc.author: zuojiangjiang
348 */
349 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryGreaterThanOrEqualToValidField, TestSize.Level1)
350 {
351 DataQuery query;
352 query.GreaterThanOrEqualTo("$.test_field_name", 100);
353 EXPECT_TRUE(query.ToString().length() > 0);
354 query.Reset();
355 query.GreaterThanOrEqualTo("$.test_field_name", (int64_t) 100);
356 EXPECT_TRUE(query.ToString().length() > 0);
357 query.Reset();
358 query.GreaterThanOrEqualTo("$.test_field_name", 1.23);
359 EXPECT_TRUE(query.ToString().length() > 0);
360 query.Reset();
361 query.GreaterThanOrEqualTo("$.test_field_name", "test value");
362 EXPECT_TRUE(query.ToString().length() > 0);
363 }
364
365 /**
366 * @tc.name: DataQuery
367 * @tc.desc: the predicate is lessThanOrEqualTo, the field is invalid.
368 * @tc.type: FUNC
369 * @tc.require:
370 * @tc.author: zuojiangjiang
371 */
372 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryLessThanOrEqualToInvalidField, TestSize.Level1)
373 {
374 DataQuery query;
375 query.LessThanOrEqualTo("", 100);
376 EXPECT_TRUE(query.ToString().length() == 0);
377 query.LessThanOrEqualTo("^$.test_field_name", 100);
378 EXPECT_TRUE(query.ToString().length() == 0);
379 query.LessThanOrEqualTo("", (int64_t) 100);
380 EXPECT_TRUE(query.ToString().length() == 0);
381 query.LessThanOrEqualTo("$.test_field_name^", (int64_t) 100);
382 EXPECT_TRUE(query.ToString().length() == 0);
383 query.LessThanOrEqualTo("", 1.23);
384 EXPECT_TRUE(query.ToString().length() == 0);
385 query.LessThanOrEqualTo("^", 1.23);
386 EXPECT_TRUE(query.ToString().length() == 0);
387 query.LessThanOrEqualTo("", "test value");
388 EXPECT_TRUE(query.ToString().length() == 0);
389 query.LessThanOrEqualTo("678678^", "test value");
390 EXPECT_TRUE(query.ToString().length() == 0);
391 }
392
393 /**
394 * @tc.name: DataQuery
395 * @tc.desc: the predicate is lessThanOrEqualTo, the field is valid.
396 * @tc.type: FUNC
397 * @tc.require:
398 * @tc.author: zuojiangjiang
399 */
400 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryLessThanOrEqualToValidField, TestSize.Level1)
401 {
402 DataQuery query;
403 query.LessThanOrEqualTo("$.test_field_name", 100);
404 EXPECT_TRUE(query.ToString().length() > 0);
405 query.Reset();
406 query.LessThanOrEqualTo("$.test_field_name", (int64_t) 100);
407 EXPECT_TRUE(query.ToString().length() > 0);
408 query.Reset();
409 query.LessThanOrEqualTo("$.test_field_name", 1.23);
410 EXPECT_TRUE(query.ToString().length() > 0);
411 query.Reset();
412 query.LessThanOrEqualTo("$.test_field_name", "test value");
413 EXPECT_TRUE(query.ToString().length() > 0);
414 }
415
416 /**
417 * @tc.name: DataQuery
418 * @tc.desc: the predicate is isNull, the field is invalid.
419 * @tc.type: FUNC
420 * @tc.require:
421 * @tc.author: zuojiangjiang
422 */
423 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryIsNullInvalidField, TestSize.Level1)
424 {
425 DataQuery query;
426 query.IsNull("");
427 EXPECT_TRUE(query.ToString().length() == 0);
428 query.IsNull("$.test^_field_name");
429 EXPECT_TRUE(query.ToString().length() == 0);
430 }
431
432 /**
433 * @tc.name: DataQuery
434 * @tc.desc: the predicate is isNull, the field is valid.
435 * @tc.type: FUNC
436 * @tc.require:
437 * @tc.author: zuojiangjiang
438 */
439 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryIsNullValidField, TestSize.Level1)
440 {
441 DataQuery query;
442 query.IsNull("$.test_field_name");
443 EXPECT_TRUE(query.ToString().length() > 0);
444 }
445
446 /**
447 * @tc.name: DataQuery
448 * @tc.desc: the predicate is in, the field is invalid.
449 * @tc.type: FUNC
450 * @tc.require:
451 * @tc.author: zuojiangjiang
452 */
453 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryInInvalidField, TestSize.Level1)
454 {
455 DataQuery query;
456 std::vector<int> vectInt{ 10, 20, 30 };
457 query.In("", vectInt);
458 EXPECT_TRUE(query.ToString().length() == 0);
459 query.In("^", vectInt);
460 EXPECT_TRUE(query.ToString().length() == 0);
461 std::vector<int64_t> vectLong{ (int64_t) 100, (int64_t) 200, (int64_t) 300 };
462 query.In("", vectLong);
463 EXPECT_TRUE(query.ToString().length() == 0);
464 query.In("$.test_field_name^", vectLong);
465 EXPECT_TRUE(query.ToString().length() == 0);
466 std::vector<double> vectDouble{1.23, 2.23, 3.23};
467 query.In("", vectDouble);
468 EXPECT_TRUE(query.ToString().length() == 0);
469 query.In("$.^test_field_name", vectDouble);
470 EXPECT_TRUE(query.ToString().length() == 0);
471 std::vector<std::string> vectString{ "value 1", "value 2", "value 3" };
472 query.In("", vectString);
473 EXPECT_TRUE(query.ToString().length() == 0);
474 query.In("$.test_field_^name^", vectString);
475 EXPECT_TRUE(query.ToString().length() == 0);
476 }
477
478 /**
479 * @tc.name: DataQuery
480 * @tc.desc: the predicate is in, the field is valid.
481 * @tc.type: FUNC
482 * @tc.require:
483 * @tc.author: zuojiangjiang
484 */
485 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryInValidField, TestSize.Level1)
486 {
487 DataQuery query;
488 std::vector<int> vectInt{ 10, 20, 30 };
489 query.In("$.test_field_name", vectInt);
490 EXPECT_TRUE(query.ToString().length() > 0);
491 query.Reset();
492 std::vector<int64_t> vectLong{ (int64_t) 100, (int64_t) 200, (int64_t) 300 };
493 query.In("$.test_field_name", vectLong);
494 EXPECT_TRUE(query.ToString().length() > 0);
495 query.Reset();
496 std::vector<double> vectDouble{1.23, 2.23, 3.23};
497 query.In("$.test_field_name", vectDouble);
498 EXPECT_TRUE(query.ToString().length() > 0);
499 query.Reset();
500 std::vector<std::string> vectString{ "value 1", "value 2", "value 3" };
501 query.In("$.test_field_name", vectString);
502 EXPECT_TRUE(query.ToString().length() > 0);
503 }
504
505 /**
506 * @tc.name: DataQuery
507 * @tc.desc: the predicate is notIn, the field is invalid.
508 * @tc.type: FUNC
509 * @tc.require:
510 * @tc.author: zuojiangjiang
511 */
512 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryNotInInvalidField, TestSize.Level1)
513 {
514 DataQuery query;
515 std::vector<int> vectInt{ 10, 20, 30 };
516 query.NotIn("", vectInt);
517 EXPECT_TRUE(query.ToString().length() == 0);
518 query.NotIn("$.^", vectInt);
519 EXPECT_TRUE(query.ToString().length() == 0);
520 std::vector<int64_t> vectLong{ (int64_t) 100, (int64_t) 200, (int64_t) 300 };
521 query.NotIn("", vectLong);
522 EXPECT_TRUE(query.ToString().length() == 0);
523 query.NotIn("^^", vectLong);
524 EXPECT_TRUE(query.ToString().length() == 0);
525 std::vector<double> vectDouble{ 1.23, 2.23, 3.23 };
526 query.NotIn("", vectDouble);
527 EXPECT_TRUE(query.ToString().length() == 0);
528 query.NotIn("^$.test_field_name", vectDouble);
529 EXPECT_TRUE(query.ToString().length() == 0);
530 std::vector<std::string> vectString{ "value 1", "value 2", "value 3" };
531 query.NotIn("", vectString);
532 EXPECT_TRUE(query.ToString().length() == 0);
533 query.NotIn("$.^", vectString);
534 EXPECT_TRUE(query.ToString().length() == 0);
535 }
536
537 /**
538 * @tc.name: DataQuery
539 * @tc.desc: the predicate is notIn, the field is valid.
540 * @tc.type: FUNC
541 * @tc.require:
542 * @tc.author: zuojiangjiang
543 */
544 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryNotInValidField, TestSize.Level1)
545 {
546 DataQuery query;
547 std::vector<int> vectInt{ 10, 20, 30 };
548 query.NotIn("$.test_field_name", vectInt);
549 EXPECT_TRUE(query.ToString().length() > 0);
550 query.Reset();
551 std::vector<int64_t> vectLong{ (int64_t) 100, (int64_t) 200, (int64_t) 300 };
552 query.NotIn("$.test_field_name", vectLong);
553 EXPECT_TRUE(query.ToString().length() > 0);
554 query.Reset();
555 std::vector<double> vectDouble{ 1.23, 2.23, 3.23 };
556 query.NotIn("$.test_field_name", vectDouble);
557 EXPECT_TRUE(query.ToString().length() > 0);
558 query.Reset();
559 std::vector<std::string> vectString{ "value 1", "value 2", "value 3" };
560 query.NotIn("$.test_field_name", vectString);
561 EXPECT_TRUE(query.ToString().length() > 0);
562 }
563
564 /**
565 * @tc.name: DataQuery
566 * @tc.desc: the predicate is like, the field is invalid.
567 * @tc.type: FUNC
568 * @tc.require:
569 * @tc.author: zuojiangjiang
570 */
571 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryLikeInvalidField, TestSize.Level1)
572 {
573 DataQuery query;
574 query.Like("", "test value");
575 EXPECT_TRUE(query.ToString().length() == 0);
576 query.Like("$.test_fi^eld_name", "test value");
577 EXPECT_TRUE(query.ToString().length() == 0);
578 }
579
580 /**
581 * @tc.name: DataQuery
582 * @tc.desc: the predicate is like, the field is valid.
583 * @tc.type: FUNC
584 * @tc.require:
585 * @tc.author: zuojiangjiang
586 */
587 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryLikeValidField, TestSize.Level1)
588 {
589 DataQuery query;
590 query.Like("$.test_field_name", "test value");
591 EXPECT_TRUE(query.ToString().length() > 0);
592 }
593
594 /**
595 * @tc.name: DataQuery
596 * @tc.desc: the predicate is unlike, the field is invalid.
597 * @tc.type: FUNC
598 * @tc.require:
599 * @tc.author: zuojiangjiang
600 */
601 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryUnlikeInvalidField, TestSize.Level1)
602 {
603 DataQuery query;
604 query.Unlike("", "test value");
605 EXPECT_TRUE(query.ToString().length() == 0);
606 query.Unlike("$.^", "test value");
607 EXPECT_TRUE(query.ToString().length() == 0);
608 }
609
610 /**
611 * @tc.name: DataQuery
612 * @tc.desc: the predicate is unlike, the field is valid.
613 * @tc.type: FUNC
614 * @tc.require:
615 * @tc.author: zuojiangjiang
616 */
617 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryUnlikeValidField, TestSize.Level1)
618 {
619 DataQuery query;
620 query.Unlike("$.test_field_name", "test value");
621 EXPECT_TRUE(query.ToString().length() > 0);
622 }
623
624 /**
625 * @tc.name: DataQuery
626 * @tc.desc: the predicate is and
627 * @tc.type: FUNC
628 * @tc.require:
629 * @tc.author: zuojiangjiang
630 */
631 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryAnd, TestSize.Level1)
632 {
633 DataQuery query;
634 query.Like("$.test_field_name1", "test value1");
635 query.And();
636 query.Like("$.test_field_name2", "test value2");
637 EXPECT_TRUE(query.ToString().length() > 0);
638 }
639
640 /**
641 * @tc.name: DataQuery
642 * @tc.desc: the predicate is or
643 * @tc.type: FUNC
644 * @tc.require:
645 * @tc.author: zuojiangjiang
646 */
647 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryOr, TestSize.Level1)
648 {
649 DataQuery query;
650 query.Like("$.test_field_name1", "test value1");
651 query.Or();
652 query.Like("$.test_field_name2", "test value2");
653 EXPECT_TRUE(query.ToString().length() > 0);
654 }
655
656 /**
657 * @tc.name: DataQuery
658 * @tc.desc: the predicate is orderByAsc, the field is invalid.
659 * @tc.type: FUNC
660 * @tc.require:
661 * @tc.author: zuojiangjiang
662 */
663 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryOrderByAscInvalidField, TestSize.Level1)
664 {
665 DataQuery query;
666 query.OrderByAsc("");
667 EXPECT_TRUE(query.ToString().length() == 0);
668 query.OrderByAsc("$.^");
669 EXPECT_TRUE(query.ToString().length() == 0);
670 }
671
672 /**
673 * @tc.name: DataQuery
674 * @tc.desc: the predicate is orderByAsc, the field is valid.
675 * @tc.type: FUNC
676 * @tc.require:
677 * @tc.author: zuojiangjiang
678 */
679 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryOrderByAscValidField, TestSize.Level1)
680 {
681 DataQuery query;
682 query.OrderByAsc("$.test_field_name1");
683 EXPECT_TRUE(query.ToString().length() > 0);
684 }
685
686 /**
687 * @tc.name: DataQuery
688 * @tc.desc: the predicate is orderByDesc, the field is invalid.
689 * @tc.type: FUNC
690 * @tc.require:
691 * @tc.author: zuojiangjiang
692 */
693 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryOrderByDescInvalidField, TestSize.Level1)
694 {
695 DataQuery query;
696 query.OrderByDesc("");
697 EXPECT_TRUE(query.ToString().length() == 0);
698 query.OrderByDesc("$.test^_field_name1");
699 EXPECT_TRUE(query.ToString().length() == 0);
700 }
701
702 /**
703 * @tc.name: DataQuery
704 * @tc.desc: the predicate is orderByDesc, the field is valid.
705 * @tc.type: FUNC
706 * @tc.require:
707 * @tc.author: zuojiangjiang
708 */
709 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryOrderByDescValidField, TestSize.Level1)
710 {
711 DataQuery query;
712 query.OrderByDesc("$.test_field_name1");
713 EXPECT_TRUE(query.ToString().length() > 0);
714 }
715
716 /**
717 * @tc.name: DataQuery
718 * @tc.desc: the predicate is limit, the field is invalid.
719 * @tc.type: FUNC
720 * @tc.require:
721 * @tc.author: zuojiangjiang
722 */
723 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryLimitInvalidField, TestSize.Level1)
724 {
725 DataQuery query;
726 query.Limit(INVALID_NUMBER, 100);
727 EXPECT_TRUE(query.ToString().length() == 0);
728 query.Limit(10, INVALID_NUMBER);
729 EXPECT_TRUE(query.ToString().length() == 0);
730 }
731
732 /**
733 * @tc.name: DataQuery
734 * @tc.desc: the predicate is limit, the field is valid.
735 * @tc.type: FUNC
736 * @tc.require:
737 * @tc.author: zuojiangjiang
738 */
739 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryLimitValidField, TestSize.Level1)
740 {
741 DataQuery query;
742 query.Limit(10, 100);
743 EXPECT_TRUE(query.ToString().length() > 0);
744 }
745
746 /**
747 * @tc.name: DataQuery
748 * @tc.desc: query single kvStore by dataQuery, the predicate is notEqualTo
749 * @tc.type: FUNC
750 * @tc.require:
751 * @tc.author: zuojiangjiang
752 */
753 HWTEST_F(SingleKvStoreClientQueryTest, SingleKvStoreQueryNotEqualTo, TestSize.Level1)
754 {
755 DistributedKvDataManager manager;
756 Options options = { .createIfMissing = true, .encrypt = true, .autoSync = true,
757 .kvStoreType = KvStoreType::SINGLE_VERSION, .schema = VALID_SCHEMA_STRICT_DEFINE };
758 options.area = EL1;
759 options.baseDir = "/data/service/el1/public/database/SingleKvStoreClientQueryTest";
760 AppId appId = { "SingleKvStoreClientQueryTest" };
761 StoreId storeId = { "SingleKvStoreClientQueryTestStoreId1" };
762 statusGetKvStore = manager.GetSingleKvStore(options, appId, storeId, singleKvStore);
763 EXPECT_NE(singleKvStore, nullptr) << "kvStorePtr is null.";
764 singleKvStore->Put("test_key_1", "{\"name\":1}");
765 singleKvStore->Put("test_key_2", "{\"name\":2}");
766 singleKvStore->Put("test_key_3", "{\"name\":3}");
767
768 DataQuery query;
769 query.NotEqualTo("$.name", 3);
770 std::vector<Entry> results;
771 Status status1 = singleKvStore->GetEntries(query, results);
772 ASSERT_EQ(status1, Status::SUCCESS);
773 EXPECT_TRUE(results.size() == 2);
774 results.clear();
775 Status status2 = singleKvStore->GetEntries(query, results);
776 ASSERT_EQ(status2, Status::SUCCESS);
777 EXPECT_TRUE(results.size() == 2);
778
779 std::shared_ptr<KvStoreResultSet> resultSet;
780 Status status3 = singleKvStore->GetResultSet(query, resultSet);
781 ASSERT_EQ(status3, Status::SUCCESS);
782 EXPECT_TRUE(resultSet->GetCount() == 2);
783 auto closeResultSetStatus = singleKvStore->CloseResultSet(resultSet);
784 ASSERT_EQ(closeResultSetStatus, Status::SUCCESS);
785 Status status4 = singleKvStore->GetResultSet(query, resultSet);
786 ASSERT_EQ(status4, Status::SUCCESS);
787 EXPECT_TRUE(resultSet->GetCount() == 2);
788
789 closeResultSetStatus = singleKvStore->CloseResultSet(resultSet);
790 ASSERT_EQ(closeResultSetStatus, Status::SUCCESS);
791
792 int resultSize1;
793 Status status5 = singleKvStore->GetCount(query, resultSize1);
794 ASSERT_EQ(status5, Status::SUCCESS);
795 EXPECT_TRUE(resultSize1 == 2);
796 int resultSize2;
797 Status status6 = singleKvStore->GetCount(query, resultSize2);
798 ASSERT_EQ(status6, Status::SUCCESS);
799 EXPECT_TRUE(resultSize2 == 2);
800
801 singleKvStore->Delete("test_key_1");
802 singleKvStore->Delete("test_key_2");
803 singleKvStore->Delete("test_key_3");
804 Status status = manager.CloseAllKvStore(appId);
805 EXPECT_EQ(status, Status::SUCCESS);
806 status = manager.DeleteAllKvStore(appId, options.baseDir);
807 EXPECT_EQ(status, Status::SUCCESS);
808 }
809
810 /**
811 * @tc.name: DataQuery
812 * @tc.desc: query single kvStore by dataQuery, the predicate is notEqualTo and equalTo
813 * @tc.type: FUNC
814 * @tc.require:
815 * @tc.author: zuojiangjiang
816 */
817 HWTEST_F(SingleKvStoreClientQueryTest, SingleKvStoreQueryNotEqualToAndEqualTo, TestSize.Level1)
818 {
819 DistributedKvDataManager manager;
820 Options options = { .createIfMissing = true, .encrypt = true, .autoSync = true,
821 .kvStoreType = KvStoreType::SINGLE_VERSION, .schema = VALID_SCHEMA_STRICT_DEFINE };
822 options.area = EL1;
823 options.baseDir = "/data/service/el1/public/database/SingleKvStoreClientQueryTest";
824 AppId appId = { "SingleKvStoreClientQueryTest" };
825 StoreId storeId = { "SingleKvStoreClientQueryTestStoreId2" };
826 statusGetKvStore = manager.GetSingleKvStore(options, appId, storeId, singleKvStore);
827 EXPECT_NE(singleKvStore, nullptr) << "kvStorePtr is null.";
828 singleKvStore->Put("test_key_1", "{\"name\":1}");
829 singleKvStore->Put("test_key_2", "{\"name\":2}");
830 singleKvStore->Put("test_key_3", "{\"name\":3}");
831
832 DataQuery query;
833 query.NotEqualTo("$.name", 3);
834 query.And();
835 query.EqualTo("$.name", 1);
836 std::vector<Entry> results1;
837 Status status1 = singleKvStore->GetEntries(query, results1);
838 ASSERT_EQ(status1, Status::SUCCESS);
839 EXPECT_TRUE(results1.size() == 1);
840 std::vector<Entry> results2;
841 Status status2 = singleKvStore->GetEntries(query, results2);
842 ASSERT_EQ(status2, Status::SUCCESS);
843 EXPECT_TRUE(results2.size() == 1);
844
845 std::shared_ptr<KvStoreResultSet> resultSet;
846 Status status3 = singleKvStore->GetResultSet(query, resultSet);
847 ASSERT_EQ(status3, Status::SUCCESS);
848 EXPECT_TRUE(resultSet->GetCount() == 1);
849 auto closeResultSetStatus = singleKvStore->CloseResultSet(resultSet);
850 ASSERT_EQ(closeResultSetStatus, Status::SUCCESS);
851 Status status4 = singleKvStore->GetResultSet(query, resultSet);
852 ASSERT_EQ(status4, Status::SUCCESS);
853 EXPECT_TRUE(resultSet->GetCount() == 1);
854
855 closeResultSetStatus = singleKvStore->CloseResultSet(resultSet);
856 ASSERT_EQ(closeResultSetStatus, Status::SUCCESS);
857
858 int resultSize1;
859 Status status5 = singleKvStore->GetCount(query, resultSize1);
860 ASSERT_EQ(status5, Status::SUCCESS);
861 EXPECT_TRUE(resultSize1 == 1);
862 int resultSize2;
863 Status status6 = singleKvStore->GetCount(query, resultSize2);
864 ASSERT_EQ(status6, Status::SUCCESS);
865 EXPECT_TRUE(resultSize2 == 1);
866
867 singleKvStore->Delete("test_key_1");
868 singleKvStore->Delete("test_key_2");
869 singleKvStore->Delete("test_key_3");
870 Status status = manager.CloseAllKvStore(appId);
871 EXPECT_EQ(status, Status::SUCCESS);
872 status = manager.DeleteAllKvStore(appId, options.baseDir);
873 EXPECT_EQ(status, Status::SUCCESS);
874 }
875
876 /**
877 * @tc.name: DataQuery
878 * @tc.desc: query group, the predicate is prefix, isNotNull, but field is invalid
879 * @tc.type: FUNC
880 * @tc.require:
881 * @tc.author: zuojiangjiang
882 */
883 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryGroupAbnormal, TestSize.Level1)
884 {
885 DataQuery query;
886 query.KeyPrefix("");
887 EXPECT_TRUE(query.ToString().length() == 0);
888 query.KeyPrefix("prefix^");
889 EXPECT_TRUE(query.ToString().length() == 0);
890 query.Reset();
891 query.BeginGroup();
892 query.IsNotNull("");
893 EXPECT_TRUE(query.ToString().length() > 0);
894 query.IsNotNull("^$.name");
895 EXPECT_TRUE(query.ToString().length() > 0);
896 query.EndGroup();
897 EXPECT_TRUE(query.ToString().length() > 0);
898 }
899
900 /**
901 * @tc.name: DataQuery
902 * @tc.desc: query group, the predicate is prefix, isNotNull.
903 * @tc.type: FUNC
904 * @tc.require:
905 * @tc.author: zuojiangjiang
906 */
907 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryByGroupNormal, TestSize.Level1)
908 {
909 DataQuery query;
910 query.KeyPrefix("prefix");
911 EXPECT_TRUE(query.ToString().length() > 0);
912 query.Reset();
913 query.BeginGroup();
914 query.IsNotNull("$.name");
915 query.EndGroup();
916 EXPECT_TRUE(query.ToString().length() > 0);
917 }
918
919 /**
920 * @tc.name: DataQuery
921 * @tc.desc: the predicate is setSuggestIndex, the field is invalid.
922 * @tc.type: FUNC
923 * @tc.require:
924 * @tc.author: liuwenhui
925 */
926 HWTEST_F(SingleKvStoreClientQueryTest, DataQuerySetSuggestIndexInvalidField, TestSize.Level1)
927 {
928 DataQuery query;
929 query.SetSuggestIndex("");
930 EXPECT_TRUE(query.ToString().length() == 0);
931 query.SetSuggestIndex("test_field^_name");
932 EXPECT_TRUE(query.ToString().length() == 0);
933 }
934
935 /**
936 * @tc.name: DataQuery
937 * @tc.desc: the predicate is setSuggestIndex, the field is valid.
938 * @tc.type: FUNC
939 * @tc.require:
940 * @tc.author: liuwenhui
941 */
942 HWTEST_F(SingleKvStoreClientQueryTest, DataQuerySetSuggestIndexValidField, TestSize.Level1)
943 {
944 DataQuery query;
945 query.SetSuggestIndex("test_field_name");
946 EXPECT_TRUE(query.ToString().length() > 0);
947 }
948
949 /**
950 * @tc.name: DataQuery
951 * @tc.desc: the predicate is inKeys
952 * @tc.type: FUNC
953 * @tc.require:
954 * @tc.author: taoyuxin
955 */
956 HWTEST_F(SingleKvStoreClientQueryTest, DataQuerySetInKeys, TestSize.Level1)
957 {
958 DataQuery query;
959 query.InKeys({});
960 EXPECT_TRUE(query.ToString().length() == 0);
961 query.InKeys({"test_field_name"});
962 EXPECT_TRUE(query.ToString().length() > 0);
963 query.InKeys({"test_field_name_hasKey"});
964 EXPECT_TRUE(query.ToString().length() > 0);
965 query.Reset();
966 std::vector<std::string> keys { "test_field", "", "^test_field", "^", "test_field_name" };
967 query.InKeys(keys);
968 EXPECT_TRUE(query.ToString().length() > 0);
969 }
970
971 /**
972 * @tc.name: DataQuery
973 * @tc.desc:the predicate is deviceId, the field is invalid
974 * @tc.type: FUNC
975 * @tc.require:
976 * @tc.author: zuojiangjiang
977 */
978 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryDeviceIdInvalidField, TestSize.Level1)
979 {
980 DataQuery query;
981 query.DeviceId("");
982 EXPECT_TRUE(query.ToString().length() == 0);
983 query.DeviceId("$$^");
984 EXPECT_TRUE(query.ToString().length() == 0);
985 query.DeviceId("device_id^");
986 EXPECT_TRUE(query.ToString().length() == 0);
987 }
988
989 /**
990 * @tc.name: DataQuery
991 * @tc.desc: the predicate is valid deviceId, the field is valid
992 * @tc.type: FUNC
993 * @tc.require:
994 * @tc.author: zuojiangjiang
995 */
996 HWTEST_F(SingleKvStoreClientQueryTest, DataQueryDeviceIdValidField, TestSize.Level1)
997 {
998 DataQuery query;
999 query.DeviceId("device_id");
1000 EXPECT_TRUE(query.ToString().length() > 0);
1001 query.Reset();
1002 std::string deviceId = "";
1003 uint32_t i = 0;
1004 while (i < MAX_QUERY_LENGTH) {
1005 deviceId += "device";
1006 i++;
1007 }
1008 query.DeviceId(deviceId);
1009 EXPECT_TRUE(query.ToString().length() == 0);
1010 }
1011 } // namespace