• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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