1 /*
2 * Copyright (c) 2020-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 #include <securec.h>
17 #include "hctest.h"
18
19 #include "dbm_errno.h"
20 #include "dbm_kv_store.h"
21 #include "dbm_config.h"
22
23 #define MAX_KEY_LEN_TEST 32
24 #define MAX_VALUE_LEN_TEST 512
25 #define MAX_KEY_NUM_TEST 45
26 #define INVALID_KEY_NUM 55
27
28 #define STORE_FULL_PATH ""
29 static KVStoreHandle g_KVStoreHandle = NULL;
30
31 /**
32 * @tc.desc : register a test suite, this suite is used to test basic flow and interface dependency
33 * @param : subsystem name is utils
34 * @param : module name is kvStore
35 * @param : test suit name is DBMKvStoreFuncTestSuite
36 */
37 LITE_TEST_SUIT(utils, kvStore, DBMKvStoreFuncTestSuite);
38
39 /**
40 * @tc.setup : setup for all testcases
41 * @return : setup result, TRUE is success, FALSE is fail
42 */
DBMKvStoreFuncTestSuiteSetUp(void)43 static BOOL DBMKvStoreFuncTestSuiteSetUp(void)
44 {
45 printf("+-begin----------------------------------------+\n");
46 int status = DBM_GetKVStore(STORE_FULL_PATH, &g_KVStoreHandle);
47 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
48
49 status = DBM_CloseKVStore(g_KVStoreHandle);
50 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
51
52 status = DBM_DeleteKVStore(STORE_FULL_PATH);
53 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
54
55 int tickCount1 = osKernelGetTickCount();
56 status = DBM_GetKVStore(STORE_FULL_PATH, &g_KVStoreHandle);
57 int tickCount2 = osKernelGetTickCount();
58 printf("GetKVStore: begin[%d] finish[%d] use[%d]\n", tickCount1, tickCount2, tickCount2 - tickCount1);
59 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
60
61 return TRUE;
62 }
63
64 /**
65 * @tc.teardown : teardown for all testcases
66 * @return : teardown result, TRUE is success, FALSE is fail
67 */
DBMKvStoreFuncTestSuiteTearDown(void)68 static BOOL DBMKvStoreFuncTestSuiteTearDown(void)
69 {
70 printf("+-finish--------------------------------------+\n");
71
72 int tickCount1 = osKernelGetTickCount();
73 int status = DBM_CloseKVStore(g_KVStoreHandle);
74 int tickCount2 = osKernelGetTickCount();
75 printf("CloseKVStore: begin[%d] finish[%d] use[%d]\n", tickCount1, tickCount2, tickCount2 - tickCount1);
76 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
77
78 tickCount1 = osKernelGetTickCount();
79 status = DBM_DeleteKVStore(STORE_FULL_PATH);
80 tickCount2 = osKernelGetTickCount();
81 printf("DeleteKVStore: begin[%d] finish[%d] use[%d]\n", tickCount1, tickCount2, tickCount2 - tickCount1);
82
83 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
84 return TRUE;
85 }
86
87 /* Create files in batches. */
PutKVs(int num,const char * key,const char * content)88 static BOOL PutKVs(int num, const char* key, const char* content)
89 {
90 int size;
91 int status;
92 char keytemp[MAX_KEY_LEN_TEST] = {0};
93 struct {
94 int num;
95 char content[200];
96 } value, value1;
97
98 if (num <= 0) {
99 return FALSE;
100 }
101 for (int i = 1; i <= num; i++) {
102 size = sprintf_s(keytemp, MAX_KEY_LEN_TEST, "%s_%d", key, i);
103 if (size < 0) {
104 return FALSE;
105 }
106
107 memset_s(&value, sizeof(value), 0, sizeof(value));
108 value.num = i;
109
110 int ret = strcpy_s(value.content, sizeof(value.content), content);
111 TEST_ASSERT_EQUAL_INT(0, ret);
112
113 status = DBM_Put(g_KVStoreHandle, keytemp, (void*)&value, sizeof(value));
114 if (i <= MAX_KEY_NUM_TEST) {
115 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
116 } else {
117 TEST_ASSERT_EQUAL_INT(DBM_OVER_MAX_LIMITS, status);
118 }
119
120 memset_s(&value1, sizeof(value1), 0, sizeof(value1));
121 unsigned int realValLen = 0;
122 status = DBM_Get(g_KVStoreHandle, keytemp, &value1, sizeof(value1), &realValLen);
123 if (i <= MAX_KEY_NUM_TEST) {
124 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
125 TEST_ASSERT_EQUAL_INT(sizeof(value1), realValLen);
126 TEST_ASSERT_EQUAL_INT(value1.num, value.num);
127 TEST_ASSERT_EQUAL_STRING(value1.content, value.content);
128 TEST_ASSERT_EQUAL_MEMORY(&value1, &value, sizeof(value));
129 } else {
130 TEST_ASSERT_EQUAL_INT(DBM_NOT_FOUND, status);
131 }
132
133 memset_s(keytemp, MAX_KEY_LEN_TEST, 0, MAX_KEY_LEN_TEST);
134 IoTWatchDogKick();
135 }
136 IoTWatchDogKick();
137 return TRUE;
138 }
139
140 /* Read files in batches. */
GetKVs(int num,const char * key,const char * content)141 static BOOL GetKVs(int num, const char* key, const char* content)
142 {
143 int size;
144 int status;
145 char keytemp[MAX_KEY_LEN_TEST] = {0};
146 struct {
147 int num;
148 char content[200];
149 } value, value1;
150
151 if (num <= 0) {
152 return FALSE;
153 }
154 for (int loop = num; loop > 0; loop--) {
155 size = sprintf_s(keytemp, MAX_KEY_LEN_TEST, "%s_%d", key, loop);
156 if (size < 0) {
157 return FALSE;
158 }
159
160 memset_s(&value, sizeof(value), 0, sizeof(value));
161 value.num = loop;
162
163 int ret = strcpy_s(value.content, sizeof(value.content), content);
164 TEST_ASSERT_EQUAL_INT(0, ret);
165
166 memset_s(&value1, sizeof(value1), 0, sizeof(value1));
167 unsigned int realValLen = 0;
168 status = DBM_Get(g_KVStoreHandle, keytemp, &value1, sizeof(value1), &realValLen);
169 if (loop <= MAX_KEY_NUM_TEST) {
170 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
171 TEST_ASSERT_EQUAL_INT(sizeof(value1), realValLen);
172 TEST_ASSERT_EQUAL_INT(value1.num, value.num);
173 TEST_ASSERT_EQUAL_STRING(value1.content, value.content);
174 TEST_ASSERT_EQUAL_MEMORY(&value1, &value, sizeof(value));
175 } else {
176 TEST_ASSERT_EQUAL_INT(DBM_NOT_FOUND, status);
177 }
178
179 memset_s(keytemp, MAX_KEY_LEN_TEST, 0, MAX_KEY_LEN_TEST);
180 IoTWatchDogKick();
181 }
182 IoTWatchDogKick();
183 return TRUE;
184 }
185
186 /* Delete files in batches. */
DeleteKVs(int num,const char * key)187 static BOOL DeleteKVs(int num, const char* key)
188 {
189 int size;
190 int status;
191 char keytemp[MAX_KEY_LEN_TEST] = {0};
192
193 if (num <= 0) {
194 return FALSE;
195 }
196 for (int i = 1; i <= num; i++) {
197 size = sprintf_s(keytemp, MAX_KEY_LEN_TEST, "%s_%d", key, i);
198 if (size < 0) {
199 return FALSE;
200 }
201
202 status = DBM_Delete(g_KVStoreHandle, keytemp);
203 TEST_ASSERT_EQUAL_INT(DBM_OK, status); // same as > L2, if key not existed, still return OK
204
205 memset_s(keytemp, MAX_KEY_LEN_TEST, 0, MAX_KEY_LEN_TEST);
206 IoTWatchDogKick();
207 }
208 IoTWatchDogKick();
209 return TRUE;
210 }
211
212 /**
213 * @tc.number : SUB_UTILS_KV_STORE_0100
214 * @tc.name : DBM_Put parameter legal test
215 * @tc.desc : [C- SOFTWARE -0200]
216 */
217 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreSetValue001, Function | MediumTest | Level1)
218 {
219 int status;
220 char key[] = "rw.sys.version";
221 struct {
222 int num;
223 char content[200];
224 } value;
225 memset_s(&value, sizeof(value), 0, sizeof(value));
226 value.num = 1;
227 strcpy_s(value.content, sizeof(value.content), "Hello world !");
228
229 int tickCount1 = osKernelGetTickCount();
230 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
231 int tickCount2 = osKernelGetTickCount();
232 printf("Insert One: begin[%d] finish[%d] use[%d]\n", tickCount1, tickCount2, tickCount2 - tickCount1);
233 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
234
235
236 tickCount1 = osKernelGetTickCount();
237 status = DBM_Delete(g_KVStoreHandle, key);
238 tickCount2 = osKernelGetTickCount();
239 printf("Delete One: begin[%d] finish[%d] use[%d]\n", tickCount1, tickCount2, tickCount2 - tickCount1);
240
241 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
242 };
243
244 /**
245 * @tc.number : SUB_UTILS_KV_STORE_0200
246 * @tc.name : DBM_Put parameter legal test using key with underline
247 * @tc.desc : [C- SOFTWARE -0200]
248 */
249 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreSetValue002, Function | MediumTest | Level1)
250 {
251 int status;
252 char key[] = "rw.sys.version_100";
253 struct {
254 int num;
255 char content[200];
256 } value;
257 memset_s(&value, sizeof(value), 0, sizeof(value));
258 value.num = 1;
259 strcpy_s(value.content, sizeof(value.content), "Hello world !");
260
261 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
262 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
263
264 status = DBM_Delete(g_KVStoreHandle, key);
265 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
266 };
267
268 /**
269 * @tc.number : SUB_UTILS_KV_STORE_0300
270 * @tc.name : DBM_Put parameter legal test when key contains only number
271 * @tc.desc : [C- SOFTWARE -0200]
272 */
273 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreSetValue003, Function | MediumTest | Level1)
274 {
275 int status;
276 char key[] = "100";
277 struct {
278 int num;
279 char content[200];
280 } value;
281 memset_s(&value, sizeof(value), 0, sizeof(value));
282 value.num = 1;
283 strcpy_s(value.content, sizeof(value.content), "Hello world !");
284
285 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
286 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
287
288 status = DBM_Delete(g_KVStoreHandle, key);
289 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
290 };
291
292 /**
293 * @tc.number : SUB_UTILS_KV_STORE_0400
294 * @tc.name : DBM_Put parameter legal test when key is equal to 31 Byte
295 * @tc.desc : [C- SOFTWARE -0200]
296 */
297 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreSetValue004, Function | MediumTest | Level1)
298 {
299 int status;
300 char key[] = "rw.sys.version.utilskvparameter";
301 struct {
302 int num;
303 char content[200];
304 } value;
305 memset_s(&value, sizeof(value), 0, sizeof(value));
306 value.num = 1;
307 strcpy_s(value.content, sizeof(value.content), "Hello world !");
308
309 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
310 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
311
312 status = DBM_Delete(g_KVStoreHandle, key);
313 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
314 };
315
316 /**
317 * @tc.number : SUB_UTILS_KV_STORE_0500
318 * @tc.name : DBM_Put parameter Illegal test when key is equal to 32 Byte
319 * @tc.desc : [C- SOFTWARE -0200]
320 */
321 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreSetValue005, Function | MediumTest | Level1)
322 {
323 int status;
324 char key[] = "rw.sys.version.utilskvparameter1";
325 struct {
326 int num;
327 char content[200];
328 } value;
329 memset_s(&value, sizeof(value), 0, sizeof(value));
330 value.num = 1;
331 strcpy_s(value.content, sizeof(value.content), "Hello world !");
332
333 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
334 TEST_ASSERT_EQUAL_INT(DBM_INVALID_ARGS, status);
335 };
336
337 /**
338 * @tc.number : SUB_UTILS_KV_STORE_0600
339 * @tc.name : DBM_Put parameter Illegal test when key is gteater than 32 Byte
340 * @tc.desc : [C- SOFTWARE -0200]
341 */
342 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreSetValue006, Function | MediumTest | Level1)
343 {
344 int status;
345 char key[] = "rw.sys.version.utilskvparameterforillegal";
346 struct {
347 int num;
348 char content[200];
349 } value;
350 memset_s(&value, sizeof(value), 0, sizeof(value));
351 value.num = 1;
352 strcpy_s(value.content, sizeof(value.content), "Hello world !");
353
354 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
355 TEST_ASSERT_EQUAL_INT(DBM_INVALID_ARGS, status);
356 };
357
358 /**
359 * @tc.number : SUB_UTILS_KV_STORE_0700
360 * @tc.name : DBM_Put parameter Illegal test when key contains uppercase
361 * @tc.desc : [C- SOFTWARE -0200]
362 */
363 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreSetValue007, Function | MediumTest | Level1)
364 {
365 int status;
366 char key[] = "Rw.sys.version";
367 struct {
368 int num;
369 char content[200];
370 } value;
371 memset_s(&value, sizeof(value), 0, sizeof(value));
372 value.num = 1;
373 strcpy_s(value.content, sizeof(value.content), "Hello world !");
374
375 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
376 TEST_ASSERT_EQUAL_INT(DBM_INVALID_ARGS, status);
377 };
378
379 /**
380 * @tc.number : SUB_UTILS_KV_STORE_0800
381 * @tc.name : DBM_Put parameter Illegal test when key contains horizontal line
382 * @tc.desc : [C- SOFTWARE -0200]
383 */
384 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreSetValue008, Function | MediumTest | Level1)
385 {
386 int status;
387 char key[] = "rw.sys.version-r3";
388 struct {
389 int num;
390 char content[200];
391 } value;
392 memset_s(&value, sizeof(value), 0, sizeof(value));
393 value.num = 1;
394 strcpy_s(value.content, sizeof(value.content), "Hello world !");
395
396 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
397 TEST_ASSERT_EQUAL_INT(DBM_INVALID_ARGS, status);
398 };
399
400 /**
401 * @tc.number : SUB_UTILS_KV_STORE_0900
402 * @tc.name : DBM_Put parameter Illegal test when key contains plus sign
403 * @tc.desc : [C- SOFTWARE -0200]
404 */
405 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreSetValue009, Function | MediumTest | Level1)
406 {
407 int status;
408 char key[] = "re+r3";
409 struct {
410 int num;
411 char content[200];
412 } value;
413 memset_s(&value, sizeof(value), 0, sizeof(value));
414 value.num = 1;
415 strcpy_s(value.content, sizeof(value.content), "Hello world !");
416
417 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
418 TEST_ASSERT_EQUAL_INT(DBM_INVALID_ARGS, status);
419 };
420
421 /**
422 * @tc.number : SUB_UTILS_KV_STORE_1000
423 * @tc.name : DBM_Put parameter Illegal test when key contains asterisk
424 * @tc.desc : [C- SOFTWARE -0200]
425 */
426 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreSetValue010, Function | MediumTest | Level1)
427 {
428 int status;
429 char key[] = "rw.sys.version*r3";
430 struct {
431 int num;
432 char content[200];
433 } value;
434 memset_s(&value, sizeof(value), 0, sizeof(value));
435 value.num = 1;
436 strcpy_s(value.content, sizeof(value.content), "Hello world !");
437
438 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
439 TEST_ASSERT_EQUAL_INT(DBM_INVALID_ARGS, status);
440 };
441
442 /**
443 * @tc.number : SUB_UTILS_KV_STORE_1100
444 * @tc.name : DBM_Put parameter legal test when Value is equal to 512 characters
445 * @tc.desc : [C- SOFTWARE -0200]
446 */
447 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreSetValue011, Function | MediumTest | Level1)
448 {
449 int status;
450 char key[] = "rw.sys.version";
451 struct {
452 int num;
453 char content[507];
454 } value;
455 memset_s(&value, sizeof(value), 0, sizeof(value));
456 value.num = 1;
457 strcpy_s(value.content, sizeof(value.content), "Hello world !");
458
459 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
460 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
461
462 status = DBM_Delete(g_KVStoreHandle, key);
463 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
464 };
465
466 /**
467 * @tc.number : SUB_UTILS_KV_STORE_1200
468 * @tc.name : DBM_Put parameter Illegal test when Value is equal to 513 characters
469 * @tc.desc : [C- SOFTWARE -0200]
470 */
471 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreSetValue012, Function | MediumTest | Level1)
472 {
473 int status;
474 char key[] = "rw.sys.version";
475 struct {
476 int num;
477 char content[509];
478 } value;
479 memset_s(&value, sizeof(value), 0, sizeof(value));
480 value.num = 1;
481 strcpy_s(value.content, sizeof(value.content), "Hello world !");
482
483 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
484 TEST_ASSERT_EQUAL_INT(DBM_INVALID_ARGS, status);
485 };
486
487 /**
488 * @tc.number : SUB_UTILS_KV_STORE_1300
489 * @tc.name : DBM_Put parameter Illegal test when Value greater than 512 characters
490 * @tc.desc : [C- SOFTWARE -0200]
491 */
492 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreSetValue013, Function | MediumTest | Level1)
493 {
494 int status;
495 char key[] = "rw.sys.version";
496 struct {
497 int num;
498 char content[512];
499 } value;
500 memset_s(&value, sizeof(value), 0, sizeof(value));
501 value.num = 1;
502 strcpy_s(value.content, sizeof(value.content), "Hello world !");
503
504 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
505 TEST_ASSERT_EQUAL_INT(DBM_INVALID_ARGS, status);
506 };
507
508 /**
509 * @tc.number : SUB_UTILS_KV_STORE_1400
510 * @tc.name : Value greater than 512 characters and key is an invalid character
511 * @tc.desc : [C- SOFTWARE -0200]
512 */
513 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreSetValue014, Function | MediumTest | Level1)
514 {
515 int status;
516 char key[] = "Rw.sys.version";
517 struct {
518 int num;
519 char content[512];
520 } value;
521 memset_s(&value, sizeof(value), 0, sizeof(value));
522 value.num = 1;
523 strcpy_s(value.content, sizeof(value.content), "Hello world !");
524
525 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
526 TEST_ASSERT_EQUAL_INT(DBM_INVALID_ARGS, status);
527 };
528
529 /**
530 * @tc.number : SUB_UTILS_KV_STORE_1500
531 * @tc.name : DBM_Put parameter legal test with Special characters
532 * @tc.desc : [C- SOFTWARE -0200]
533 */
534 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreSetValue015, Function | MediumTest | Level1)
535 {
536 int status;
537 char key[] = "_._..__...___";
538 struct {
539 int num;
540 char content[508];
541 } value;
542 memset_s(&value, sizeof(value), 0, sizeof(value));
543 value.num = 1;
544 strcpy_s(value.content, sizeof(value.content), "!@#¥%……&*()——+~《》?,。、“‘;:、12345767890");
545
546 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
547 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
548
549 status = DBM_Delete(g_KVStoreHandle, key);
550 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
551 };
552
553 /**
554 * @tc.number : SUB_UTILS_KV_STORE_1600
555 * @tc.name : DBM_Put parameter Illegal test when key contains blank
556 * @tc.desc : [C- SOFTWARE -0200]
557 */
558 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreSetValue016, Function | MediumTest | Level1)
559 {
560 int status;
561 char key[] = "rw.sys.version space test";
562 struct {
563 int num;
564 char content[200];
565 } value;
566 memset_s(&value, sizeof(value), 0, sizeof(value));
567 value.num = 1;
568 strcpy_s(value.content, sizeof(value.content), "Hello world !");
569
570 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
571 TEST_ASSERT_EQUAL_INT(DBM_INVALID_ARGS, status);
572 };
573
574 /**
575 * @tc.number : SUB_UTILS_KV_STORE_1700
576 * @tc.name : DBM_Put parameter legal test when value contains only blank
577 * @tc.desc : [C- SOFTWARE -0200]
578 */
579 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreSetValue017, Function | MediumTest | Level1)
580 {
581 int status;
582 char key[] = "rw.sys.version";
583 struct {
584 int num;
585 char content[200];
586 } value;
587 memset_s(&value, sizeof(value), 0, sizeof(value));
588 value.num = 1;
589 strcpy_s(value.content, sizeof(value.content), " ");
590
591 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
592 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
593
594 status = DBM_Delete(g_KVStoreHandle, key);
595 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
596 };
597
598 /**
599 * @tc.number : SUB_UTILS_KV_STORE_1800
600 * @tc.name : Use the interface to get the kv value
601 * @tc.desc : [C- SOFTWARE -0200]
602 */
603 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreGetValue001, Function | MediumTest | Level1)
604 {
605 int status;
606 char key[] = "rw.sys.version";
607 struct {
608 int num;
609 char content[200];
610 } value, value1;
611 memset_s(&value, sizeof(value), 0, sizeof(value));
612 value.num = 1;
613 strcpy_s(value.content, sizeof(value.content), "It is never too old to learn");
614
615 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
616 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
617
618 memset_s(&value1, sizeof(value1), 0, sizeof(value1));
619 unsigned int realValLen = 0;
620 status = DBM_Get(g_KVStoreHandle, key, &value1, sizeof(value1), &realValLen);
621 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
622 TEST_ASSERT_EQUAL_INT(sizeof(value1), realValLen);
623 TEST_ASSERT_EQUAL_INT(value1.num, value.num);
624 TEST_ASSERT_EQUAL_STRING(value1.content, value.content);
625 TEST_ASSERT_EQUAL_MEMORY(&value1, &value, sizeof(value));
626
627 status = DBM_Delete(g_KVStoreHandle, key);
628 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
629 };
630
631 /**
632 * @tc.number : SUB_UTILS_KV_STORE_1900
633 * @tc.name : Use the interface to get the kv value when key contains only number
634 * @tc.desc : [C- SOFTWARE -0200]
635 */
636 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreGetValue002, Function | MediumTest | Level1)
637 {
638 int status;
639 char key[] = "100";
640 struct {
641 int num;
642 char content[200];
643 } value, value1;
644 memset_s(&value, sizeof(value), 0, sizeof(value));
645 value.num = 1;
646 strcpy_s(value.content, sizeof(value.content), "!@#¥%……&*()——+~《》?,。、“‘;:、12345767890");
647
648 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
649 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
650
651 memset_s(&value1, sizeof(value1), 0, sizeof(value1));
652 unsigned int realValLen = 0;
653 status = DBM_Get(g_KVStoreHandle, key, &value1, sizeof(value1), &realValLen);
654 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
655 TEST_ASSERT_EQUAL_INT(sizeof(value1), realValLen);
656 TEST_ASSERT_EQUAL_INT(value1.num, value.num);
657 TEST_ASSERT_EQUAL_STRING(value1.content, value.content);
658 TEST_ASSERT_EQUAL_MEMORY(&value1, &value, sizeof(value));
659
660 status = DBM_Delete(g_KVStoreHandle, key);
661 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
662 };
663
664 /**
665 * @tc.number : SUB_UTILS_KV_STORE_2000
666 * @tc.name : Use the interface to get the kv value after value is updated
667 * @tc.desc : [C- SOFTWARE -0200]
668 */
669 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreGetValue003, Function | MediumTest | Level1)
670 {
671 int status;
672 char key[] = "rw.sys.version.utils";
673 struct {
674 int num;
675 char content[200];
676 } value, value1, value2;
677 memset_s(&value, sizeof(value), 0, sizeof(value));
678 value.num = 1;
679 strcpy_s(value.content, sizeof(value.content), "It is never too old to learn");
680
681 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
682 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
683
684 // Update the value of key
685 memset_s(&value1, sizeof(value1), 0, sizeof(value1));
686 value1.num = 1;
687 strcpy_s(value1.content, sizeof(value1.content), "Two tigers Two tigers two tiger running so fast");
688
689 int tickCount1 = osKernelGetTickCount();
690 status = DBM_Put(g_KVStoreHandle, key, (void*)&value1, sizeof(value1));
691 int tickCount2 = osKernelGetTickCount();
692 printf("Update One: begin[%d] finish[%d] use[%d]\n", tickCount1, tickCount2, tickCount2 - tickCount1);
693 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
694
695 memset_s(&value2, sizeof(value2), 0, sizeof(value2));
696 unsigned int realValLen = 0;
697 status = DBM_Get(g_KVStoreHandle, key, &value2, sizeof(value2), &realValLen);
698 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
699 TEST_ASSERT_EQUAL_INT(sizeof(value2), realValLen);
700 TEST_ASSERT_EQUAL_INT(value2.num, value1.num);
701 TEST_ASSERT_EQUAL_STRING(value2.content, value1.content);
702 TEST_ASSERT_EQUAL_MEMORY(&value2, &value1, sizeof(value1));
703
704 status = DBM_Delete(g_KVStoreHandle, key);
705 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
706 };
707
708 /**
709 * @tc.number : SUB_UTILS_KV_STORE_2100
710 * @tc.name : DBM_Get parameter Illegal test
711 * @tc.desc : [C- SOFTWARE -0200]
712 */
713 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreGetValue004, Function | MediumTest | Level1)
714 {
715 int status;
716 char key[] = "Rw.sys.version";
717 struct {
718 int num;
719 char content[200];
720 } value;
721 memset_s(&value, sizeof(value), 0, sizeof(value));
722
723 unsigned int realValLen = 0;
724 status = DBM_Get(g_KVStoreHandle, key, &value, sizeof(value), &realValLen);
725 TEST_ASSERT_EQUAL_INT(DBM_INVALID_ARGS, status);
726 };
727
728 /**
729 * @tc.number : SUB_UTILS_KV_STORE_2200
730 * @tc.name : Get the kv value when key contains only special characters and value contains only blank
731 * @tc.desc : [C- SOFTWARE -0200]
732 */
733 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreGetValue005, Function | MediumTest | Level1)
734 {
735 int status;
736 char key[] = "_._..__...___";
737 struct {
738 int num;
739 char content[200];
740 } value, value1;
741 memset_s(&value, sizeof(value), 0, sizeof(value));
742 value.num = 1;
743 strcpy_s(value.content, sizeof(value.content), " ");
744
745 status = DBM_Put(g_KVStoreHandle, key, (void*)&value, sizeof(value));
746 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
747
748 memset_s(&value1, sizeof(value1), 0, sizeof(value1));
749 unsigned int realValLen = 0;
750 status = DBM_Get(g_KVStoreHandle, key, &value1, sizeof(value1), &realValLen);
751 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
752 TEST_ASSERT_EQUAL_INT(sizeof(value1), realValLen);
753 TEST_ASSERT_EQUAL_INT(value1.num, value.num);
754 TEST_ASSERT_EQUAL_STRING(value1.content, value.content);
755 TEST_ASSERT_EQUAL_MEMORY(&value1, &value, sizeof(value));
756
757 status = DBM_Delete(g_KVStoreHandle, key);
758 TEST_ASSERT_EQUAL_INT(DBM_OK, status);
759 };
760
761 /**
762 * @tc.number : SUB_UTILS_KV_STORE_2300
763 * @tc.name : DBM_Delete parameter Illegal test
764 * @tc.desc : [C- SOFTWARE -0200]
765 */
766 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreDeleteValue, Function | MediumTest | Level1)
767 {
768 int status;
769 char key[] = "Rw.sys.version";
770
771 status = DBM_Delete(g_KVStoreHandle, key);
772 TEST_ASSERT_EQUAL_INT(DBM_INVALID_ARGS, status);
773 };
774
775 /**
776 * @tc.number : SUB_UTILS_KV_STORE_2900
777 * @tc.name : Specification test when MaxKeyNum
778 * @tc.desc : [C- SOFTWARE -0200]
779 */
780 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreMaxSize001, Function | MediumTest | Level1)
781 {
782 char key[] = "rw.sys.version";
783 char value[] = "It is never too old to learn";
784 BOOL ret = FALSE;
785
786 ret = PutKVs(MAX_KEY_NUM_TEST-1, key, value);
787 if (ret != TRUE)
788 {
789 TEST_FAIL();
790 }
791
792 ret = GetKVs(MAX_KEY_NUM_TEST-1, key, value);
793 if (ret != TRUE)
794 {
795 TEST_FAIL();
796 }
797 ret = DeleteKVs(MAX_KEY_NUM_TEST-1, key);
798 if (ret != TRUE)
799 {
800 TEST_FAIL();
801 }
802 };
803
804 /**
805 * @tc.number : SUB_UTILS_KV_STORE_3000
806 * @tc.name : Specification test when MaxKeyNum is 200
807 * @tc.desc : [C- SOFTWARE -0200]
808 */
809 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreMaxSize002, Function | MediumTest | Level1)
810 {
811 char key[] = "rw.sys.version";
812 char value[] = "It is never too old to learn";
813 BOOL ret = FALSE;
814
815 ret = PutKVs(MAX_KEY_NUM_TEST, key, value);
816 if (ret != TRUE)
817 {
818 TEST_FAIL();
819 }
820 ret = GetKVs(MAX_KEY_NUM_TEST, key, value);
821 if (ret != TRUE)
822 {
823 TEST_FAIL();
824 }
825 ret = DeleteKVs(MAX_KEY_NUM_TEST, key);
826 if (ret != TRUE)
827 {
828 TEST_FAIL();
829 }
830 };
831
832 /**
833 * @tc.number : SUB_UTILS_KV_STORE_3100
834 * @tc.name : Specification test when MaxKeyNum
835 * @tc.desc : [C- SOFTWARE -0200]
836 */
837 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreMaxSize003, Function | MediumTest | Level1)
838 {
839 char key[] = "rw.sys.version";
840 char value[] = "It is never too old to learn";
841 BOOL ret = FALSE;
842
843 ret = PutKVs(MAX_KEY_NUM_TEST+1, key, value);
844 if (ret != TRUE)
845 {
846 TEST_FAIL();
847 }
848 ret = GetKVs(MAX_KEY_NUM_TEST+1, key, value);
849 if (ret != TRUE)
850 {
851 TEST_FAIL();
852 }
853
854 ret = DeleteKVs(MAX_KEY_NUM_TEST+1, key);
855 if (ret != TRUE)
856 {
857 TEST_FAIL();
858 }
859 };
860
861 /**
862 * @tc.number : SUB_UTILS_KV_STORE_3200
863 * @tc.name : Specification test using InvalidKeyNum
864 * @tc.desc : [C- SOFTWARE -0200]
865 */
866 LITE_TEST_CASE(DBMKvStoreFuncTestSuite, testKvStoreMaxSize004, Function | MediumTest | Level1)
867 {
868 char key[] = "rw.sys.version";
869 char value[] = "It is never too old to learn";
870 char value1[] = "Two tigers Two tigers two tiger running so fast \
871 running so fast one has no ears one has no tail How strange How strange";
872 BOOL ret = FALSE;
873
874 ret = PutKVs(INVALID_KEY_NUM, key, value);
875 if (ret != TRUE)
876 {
877 TEST_FAIL();
878 }
879 // Update operation
880 ret = PutKVs(INVALID_KEY_NUM, key, value1);
881 if (ret != TRUE)
882 {
883 TEST_FAIL();
884 }
885 ret = GetKVs(INVALID_KEY_NUM, key, value1);
886 if (ret != TRUE)
887 {
888 TEST_FAIL();
889 }
890 ret = DeleteKVs(INVALID_KEY_NUM, key);
891 if (ret != TRUE)
892 {
893 TEST_FAIL();
894 }
895 };
896
897 RUN_TEST_SUITE(DBMKvStoreFuncTestSuite);
898