New release 0.3.0; license change to MPLv2, for more changes see ChangeLog
[profile/ivi/persistence-client-library.git] / test / persistence_client_library_test.c
1 /******************************************************************************
2  * Project         Persistency
3  * (c) copyright   2012
4  * Company         XS Embedded GmbH
5  *****************************************************************************/
6 /******************************************************************************
7  * This Source Code Form is subject to the terms of the
8  * Mozilla Public License, v. 2.0. If a  copy of the MPL was not distributed
9  * with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 ******************************************************************************/
11  /**
12  * @file           persistence_client_library_test.c
13  * @ingroup        Persistence client library test
14  * @author         Ingo Huerner
15  * @brief          Test of persistence client library
16  * @see            
17  */
18
19 #include <stdio.h>
20 #include <stdlib.h>
21 #include <string.h>
22 #include <errno.h>
23 #include <unistd.h>     /* exit */
24 #include <check.h>
25 #include <time.h>
26 #include <fcntl.h>
27 #include <sys/mman.h>
28
29 #include "../include/persistence_client_library_key.h"
30 #include "../include/persistence_client_library_file.h"
31 #include "../include/persistence_client_library_error_def.h"
32
33 // internal header, should normally not included in any application
34 // only for testing the cursor functionality
35 #include "../src/persistence_client_library_data_access.h"
36
37
38 #define BUF_SIZE     64
39 #define NUM_OF_FILES 3
40 #define READ_SIZE    1024
41
42
43 char* dayOfWeek[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
44
45
46
47 START_TEST (test_GetData)
48 {
49    int ret = 0;
50    unsigned char buffer[READ_SIZE];
51
52    memset(buffer, 0, READ_SIZE);
53    ret = key_read_data(0xFF, "language/country_code",         0, 0, buffer, READ_SIZE);
54    fail_unless(strncmp((char*)buffer, "Custom plugin -> plugin_get_data_handle",
55                strlen((char*)buffer)) == 0, "Buffer not correctly read");
56    fail_unless(ret = strlen("Custom plugin -> plugin_get_data_handle"));
57
58    memset(buffer, 0, READ_SIZE);
59    ret = key_read_data(0xFF, "pos/last_position",         0, 0, buffer, READ_SIZE);
60    fail_unless(strncmp((char*)buffer, "CACHE_ +48° 10' 38.95\", +8° 44' 39.06\"",
61                strlen((char*)buffer)) == 0, "Buffer not correctly read");
62    fail_unless(ret = strlen("CACHE_ +48° 10' 38.95\", +8° 44' 39.06\""));
63
64    memset(buffer, 0, READ_SIZE);
65    ret = key_read_data(0,    "language/current_language", 3, 0, buffer, READ_SIZE);
66    fail_unless(strncmp((char*)buffer, "CACHE_ Kisuaheli", strlen((char*)buffer)) == 0, "Buffer not correctly read");
67
68    memset(buffer, 0, READ_SIZE);
69    ret = key_read_data(0xFF, "status/open_document",      3, 2, buffer, READ_SIZE);
70    fail_unless(strncmp((char*)buffer, "WT_ /var/opt/user_manual_climateControl.pdf", strlen((char*)buffer)) == 0, "Buffer not correctly read");
71
72    memset(buffer, 0, READ_SIZE);
73    ret = key_read_data(0x20, "address/home_address",      4, 0, buffer, READ_SIZE);
74    fail_unless(strncmp((char*)buffer, "WT_ 55327 Heimatstadt, Wohnstrasse 31", strlen((char*)buffer)) == 0, "Buffer not correctly read");
75
76    memset(buffer, 0, READ_SIZE);
77    ret = key_read_data(0xFF, "pos/last_satellites",       0, 0, buffer, READ_SIZE);
78    fail_unless(strncmp((char*)buffer, "WT_ 17", strlen((char*)buffer)) == 0, "Buffer not correctly read");
79
80    memset(buffer, 0, READ_SIZE);
81    ret = key_read_data(0x84, "links/last_link",           2, 0, buffer, READ_SIZE);
82    fail_unless(strncmp((char*)buffer, "CACHE_ /last_exit/brooklyn", strlen((char*)buffer)) == 0, "Buffer not correctly read");
83
84    memset(buffer, 0, READ_SIZE);
85    ret = key_read_data(0x84, "links/last_link",           2, 1, buffer, READ_SIZE);
86    fail_unless(strncmp((char*)buffer, "CACHE_ /last_exit/queens", strlen((char*)buffer)) == 0, "Buffer not correctly read");
87 }
88 END_TEST
89
90
91
92 START_TEST (test_GetDataHandle)
93 {
94    int ret = 0, handle = 0, handle2 = 0, handle3 = 0, handle4 = 0, size = 0;
95    unsigned char buffer[READ_SIZE];
96    struct tm *locTime;
97    time_t t = time(0);
98
99    char sysTimeBuffer[128];
100    memset(buffer, 0, READ_SIZE);
101
102    locTime = localtime(&t);
103
104    snprintf(sysTimeBuffer, 128, "TimeAndData: \"%s %d.%d.%d - %d:%.2d:%.2d Uhr\"", dayOfWeek[locTime->tm_wday], locTime->tm_mday, locTime->tm_mon, (locTime->tm_year+1900),
105                                                                   locTime->tm_hour, locTime->tm_min, locTime->tm_sec);
106    // open handle ---------------------------------------------------
107    handle = key_handle_open(0xFF, "posHandle/last_position", 1, 0);
108    printf("Handle: %d\n", handle);
109    fail_unless(handle >= 0, "Failed to open handle ==> /posHandle/last_position");
110
111    ret = key_handle_read_data(handle, buffer, READ_SIZE);
112    fail_unless(strncmp((char*)buffer, "WT_ H A N D L E: +48° 10' 38.95\", +8° 44' 39.06\"", ret-1) == 0, "Buffer not correctly read");
113
114    size = key_handle_get_size(handle);
115    fail_unless(size = strlen("WT_ H A N D L E: +48° 10' 38.95\", +8° 44' 39.06\""));
116
117
118    // open handle ---------------------------------------------------
119    handle2 = key_handle_open(0xFF, "statusHandle/open_document", 3, 2);
120    fail_unless(handle2 >= 0, "Failed to open handle /statusHandle/open_document");
121
122    size = key_handle_write_data(handle2, (unsigned char*)sysTimeBuffer, strlen(sysTimeBuffer));
123    fail_unless(size = strlen(sysTimeBuffer));
124    // close
125    ret = key_handle_close(handle2);
126
127
128    // open handle ---------------------------------------------------
129    memset(buffer, 0, READ_SIZE);
130    handle4 = key_handle_open(0xFF, "language/country_code", 0, 0);
131    fail_unless(handle4 >= 0, "Failed to open handle /language/country_code");
132
133    ret = key_handle_read_data(handle4, buffer, READ_SIZE);
134    fail_unless(strncmp((char*)buffer, "Custom plugin -> plugin_get_data_handle", -1) == 0, "Buffer not correctly read");
135
136    size = key_handle_get_size(handle4);
137    fail_unless(size = strlen("Custom plugin -> plugin_get_data_handle"));
138
139    ret = key_handle_write_data(handle4, (unsigned char*)"Only dummy implementation behind custom library", READ_SIZE);
140
141
142    // open handle ---------------------------------------------------
143    handle3 = key_handle_open(0xFF, "statusHandle/open_document", 3, 2);
144    fail_unless(handle3 >= 0, "Failed to open handle /statusHandle/open_document");
145
146    ret = key_handle_read_data(handle3, buffer, READ_SIZE);
147    fail_unless(strncmp((char*)buffer, sysTimeBuffer, strlen(sysTimeBuffer)) == 0, "Buffer not correctly read");
148
149    size = key_handle_get_size(handle3);
150    fail_unless(size = strlen(sysTimeBuffer));
151
152    // close handle
153    ret = key_handle_close(handle);
154    ret = key_handle_close(handle3);
155    ret = key_handle_close(handle4);
156
157
158 }
159 END_TEST
160
161
162
163 START_TEST(test_SetData)
164 {
165    int ret = 0;
166    unsigned char buffer[READ_SIZE];
167    char write1[READ_SIZE];
168    char write2[READ_SIZE];
169    char sysTimeBuffer[256];
170
171    struct tm *locTime;
172    time_t t = time(0);
173
174    locTime = localtime(&t);
175    memset(buffer, 0, READ_SIZE);
176    memset(write1, 0, READ_SIZE);
177    memset(write2, 0, READ_SIZE);
178
179    // write data
180    snprintf(sysTimeBuffer, 128, "\"%s %d.%d.%d - %d:%.2d:%.2d Uhr\"", dayOfWeek[locTime->tm_wday], locTime->tm_mday, locTime->tm_mon, (locTime->tm_year+1900),
181                                                                  locTime->tm_hour, locTime->tm_min, locTime->tm_sec);
182
183    ret = key_write_data(0xFF, "69", 1, 2, (unsigned char*)sysTimeBuffer, strlen(sysTimeBuffer));
184    fail_unless(ret == strlen(sysTimeBuffer), "Wrong write size");
185
186    snprintf(write1, 128, "%s %s", "/70",  sysTimeBuffer);
187    ret = key_write_data(0xFF, "70", 1, 2, (unsigned char*)write1, strlen(write1));
188    fail_unless(ret == strlen(write1), "Wrong write size");
189
190    snprintf(write2, 128, "%s %s", "/key_70",  sysTimeBuffer);
191    ret = key_write_data(0xFF, "key_70", 1, 2, (unsigned char*)write2, strlen(write2));
192    fail_unless(ret == strlen(write2), "Wrong write size");
193
194    // read data again and and verify datat has been written correctly
195    memset(buffer, 0, READ_SIZE);
196    ret = key_read_data(0xFF, "69", 1, 2, buffer, READ_SIZE);
197    fail_unless(strncmp((char*)buffer, sysTimeBuffer, strlen(sysTimeBuffer)) == 0, "Buffer not correctly read");
198    fail_unless(ret == strlen(sysTimeBuffer), "Wrong read size");
199
200    memset(buffer, 0, READ_SIZE);
201    ret = key_read_data(0xFF, "70", 1, 2, buffer, READ_SIZE);
202    fail_unless(strncmp((char*)buffer, write1, strlen(write1)) == 0, "Buffer not correctly read");
203    fail_unless(ret == strlen(write1), "Wrong read size");
204
205    memset(buffer, 0, READ_SIZE);
206    ret = key_read_data(0xFF, "key_70", 1, 2, buffer, READ_SIZE);
207    fail_unless(strncmp((char*)buffer, write2, strlen(write2)) == 0, "Buffer not correctly read");
208    fail_unless(ret == strlen(write2), "Wrong read size");
209
210 }
211 END_TEST
212
213
214
215 START_TEST(test_GetDataSize)
216 {
217    int size = 0;
218
219    size = key_get_size(0xFF, "status/open_document", 3, 2);
220    fail_unless(size == strlen("WT_ /var/opt/user_manual_climateControl.pdf"), "Invalid size");
221
222    size = key_get_size(0x84, "links/last_link", 2, 1);
223    fail_unless(size == strlen("CACHE_ /last_exit/queens"), "Invalid size");
224 }
225 END_TEST
226
227
228
229 START_TEST(test_DeleteData)
230 {
231    int rval = 0;
232    unsigned char buffer[READ_SIZE];
233
234    // delete key
235    rval = key_delete(0xFF, "key_70", 1, 2);
236    fail_unless(rval == 0, "Failed to delete key");
237    // reading from key must fail now
238    rval = key_read_data(0xFF, "key_70", 1, 2, buffer, READ_SIZE);
239    fail_unless(rval == EPERS_NOKEY, "Read form key key_70 works, but should fail");
240
241
242    rval = key_delete(0xFF, "70", 1, 2);
243    fail_unless(rval == 0, "Failed to delete key");
244    rval = key_read_data(0xFF, "70", 1, 2, buffer, READ_SIZE);
245    fail_unless(rval == EPERS_NOKEY, "Read form key 70 works, but should fail");
246 }
247 END_TEST
248
249
250
251 START_TEST(test_DataFile)
252 {
253    int fd = 0, i = 0, idx = 0;
254    int size = 0, ret = 0;
255    int writeSize = 16*1024;
256    unsigned char buffer[READ_SIZE];
257    const char* refBuffer = "/Data/mnt-wt/lt-persistence_client_library_test/user/1/seat/1/media";
258    char* writeBuffer;
259    char* fileMap = NULL;
260    writeBuffer = malloc(writeSize);
261
262
263    // fill buffer a sequence
264    for(i = 0; i<(writeSize/8); i++)
265    {
266       writeBuffer[idx++] = 'A';
267       writeBuffer[idx++] = 'B';
268       writeBuffer[idx++] = 'C';
269       writeBuffer[idx++] = ' ';
270       writeBuffer[idx++] = 'D';
271       writeBuffer[idx++] = 'E';
272       writeBuffer[idx++] = 'F';
273       writeBuffer[idx++] = ' ';
274    }
275    memset(buffer, 0, READ_SIZE);
276
277    // create file
278    fd = open("/Data/mnt-wt/lt-persistence_client_library_test/user/1/seat/1/media/mediaDBWrite.db",
279              O_CREAT|O_RDWR|O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
280    close(fd);
281
282    // open ----------------------------------------------------------
283    fd = file_open(0xFF, "media/mediaDB.db", 1, 1);
284    fail_unless(fd != -1, "Could not open file ==> /media/mediaDB.db");
285
286    size = file_get_size(fd);
287    fail_unless(size == 68, "Wrong file size");
288
289    size = file_read_data(fd, buffer, READ_SIZE);
290    fail_unless(strncmp((char*)buffer, refBuffer, strlen(refBuffer)) == 0, "Buffer not correctly read");
291    fail_unless(size == (strlen(refBuffer)+1), "Wrong size returned");      // strlen + 1 ==> inlcude cr/lf
292
293    ret = file_close(fd);
294    fail_unless(ret == 0, "Failed to close file");
295
296
297    // open ----------------------------------------------------------
298    fd = file_open(0xFF, "media/mediaDBWrite.db", 1, 1);
299    fail_unless(fd != -1, "Could not open file ==> /media/mediaDBWrite.db");
300
301    size = file_write_data(fd, writeBuffer, strlen(writeBuffer));
302    fail_unless(size == strlen(writeBuffer), "Failed to write data");
303
304    ret = file_close(fd);
305    fail_unless(ret == 0, "Failed to close file");
306
307
308    // remove ----------------------------------------------------------
309    ret = file_remove(0xFF, "media/mediaDBWrite.db", 1, 1);
310    fail_unless(ret == 0, "File can't be removed ==> /media/mediaDBWrite.db");
311
312    fd = file_open(0xFF, "media/mediaDBWrite.db", 1, 1);
313    fail_unless(fd == -1, "File can be opend, but should not ==> /media/mediaDBWrite.db");
314
315
316    // map file ------------------------------------------------------
317    fd = file_open(0xFF, "media/mediaDB.db", 1, 1);
318
319    size = file_get_size(fd);
320    file_map_data(fileMap, size, 0, fd);
321    fail_unless(fileMap != MAP_FAILED, "Failed to map file");
322
323    ret = file_unmap_data(fileMap, size);
324    fail_unless(ret != -1, "Failed to unmap file");
325
326    // negative test
327    size = file_get_size(1024);
328    fail_unless(ret == 0, "Got size, but should not");
329
330
331    free(writeBuffer);
332 }
333 END_TEST
334
335
336
337 START_TEST(test_DataHandle)
338 {
339    int handle1 = 0, handle2 = 0;
340    int ret = 0;
341
342    // test file handles
343    handle1 = file_open(0xFF, "media/mediaDB.db", 1, 1);
344    fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB.db");
345
346    ret = file_close(handle1);
347    fail_unless(handle1 != -1, "Could not closefile ==> /media/mediaDB.db");
348
349    ret = file_close(1024);
350    fail_unless(ret == -1, "Could close file, but should not!!");
351
352    ret = file_close(17);
353    fail_unless(ret == -1, "Could close file, but should not!!");
354
355
356    // test key handles
357    handle2 = key_handle_open(0xFF, "statusHandle/open_document", 3, 2);
358    fail_unless(handle2 >= 0, "Failed to open handle /statusHandle/open_document");
359
360    ret = key_handle_close(handle2);
361    fail_unless(ret != -1, "Failed to close handle!!");
362
363    ret = key_handle_close(1024);
364    fail_unless(ret == -1, "Could close, but should not!!");
365 }
366 END_TEST
367
368
369
370 START_TEST(test_DataHandleOpen)
371 {
372    int hd1 = -2, hd2 = -2, hd3 = -2, hd4 = -2, hd5 = -2, hd6 = -2, hd7 = -2, hd8 = -2, hd9 = -2, ret = 0;
373
374    // open handles ----------------------------------------------------
375    hd1 = key_handle_open(0xFF, "posHandle/last_position1", 0, 0);
376    fail_unless(hd1 == 1, "Failed to open handle ==> /posHandle/last_position1");
377
378    hd2 = key_handle_open(0xFF, "posHandle/last_position2", 0, 0);
379    fail_unless(hd2 == 2, "Failed to open handle ==> /posHandle/last_position2");
380
381    hd3 = key_handle_open(0xFF, "posHandle/last_position3", 0, 0);
382    fail_unless(hd3 == 3, "Failed to open handle ==> /posHandle/last_position3");
383
384    // close handles ---------------------------------------------------
385    ret = key_handle_close(hd1);
386    fail_unless(ret != -1, "Failed to close handle!!");
387
388    ret = key_handle_close(hd2);
389    fail_unless(ret != -1, "Failed to close handle!!");
390
391    ret = key_handle_close(hd3);
392    fail_unless(ret != -1, "Failed to close handle!!");
393
394    // open handles ----------------------------------------------------
395    hd4 = key_handle_open(0xFF, "posHandle/last_position4", 0, 0);
396    fail_unless(hd4 == 3, "Failed to open handle ==> /posHandle/last_position4");
397
398    hd5 = key_handle_open(0xFF, "posHandle/last_position5", 0, 0);
399    fail_unless(hd5 == 2, "Failed to open handle ==> /posHandle/last_position5");
400
401    hd6 = key_handle_open(0xFF, "posHandle/last_position6", 0, 0);
402    fail_unless(hd6 == 1, "Failed to open handle ==> /posHandle/last_position6");
403
404    hd7 = key_handle_open(0xFF, "posHandle/last_position7", 0, 0);
405    fail_unless(hd7 == 4, "Failed to open handle ==> /posHandle/last_position7");
406
407    hd8 = key_handle_open(0xFF, "posHandle/last_position8", 0, 0);
408    fail_unless(hd8 == 5, "Failed to open handle ==> /posHandle/last_position8");
409
410    hd9 = key_handle_open(0xFF, "posHandle/last_position9", 0, 0);
411    fail_unless(hd9 == 6, "Failed to open handle ==> /posHandle/last_position9");
412
413    // close handles ---------------------------------------------------
414    ret = key_handle_close(hd4);
415    fail_unless(ret != -1, "Failed to close handle!!");
416
417    ret = key_handle_close(hd5);
418    fail_unless(ret != -1, "Failed to close handle!!");
419
420    ret = key_handle_close(hd6);
421    fail_unless(ret != -1, "Failed to close handle!!");
422
423    ret = key_handle_close(hd7);
424    fail_unless(ret != -1, "Failed to close handle!!");
425
426    ret = key_handle_close(hd8);
427    fail_unless(ret != -1, "Failed to close handle!!");
428
429    ret = key_handle_close(hd9);
430    fail_unless(ret != -1, "Failed to close handle!!");
431 }
432 END_TEST
433
434
435
436 START_TEST(test_Cursor)
437 {
438    int handle = -1, rval = 0, size = 0, handle1 = 0;
439    char bufferKeySrc[READ_SIZE];
440    char bufferDataSrc[READ_SIZE];
441    char bufferKeyDst[READ_SIZE];
442    char bufferDataDst[READ_SIZE];
443
444    memset(bufferKeySrc, 0, READ_SIZE);
445    memset(bufferDataSrc, 0, READ_SIZE);
446
447    memset(bufferKeyDst, 0, READ_SIZE);
448    memset(bufferDataDst, 0, READ_SIZE);
449
450    // create cursor
451    handle = persistence_db_cursor_create("/Data/mnt-c/lt-persistence_client_library_test/cached.itz",
452                                           PersistenceStorage_local, PersistencePolicy_wc);
453
454    fail_unless(handle != -1, "Failed to create cursor!!");
455
456    // create cursor
457    handle1 = persistence_db_cursor_create("/Data/mnt-c/lt-persistence_client_library_test/wt.itz",
458                                            PersistenceStorage_local, PersistencePolicy_wt);
459
460    fail_unless(handle1 != -1, "Failed to create cursor!!");
461
462    do
463    {
464       memset(bufferKeySrc, 0, READ_SIZE);
465       memset(bufferDataSrc, 0, READ_SIZE);
466       memset(bufferKeyDst, 0, READ_SIZE);
467       memset(bufferDataDst, 0, READ_SIZE);
468
469       // get key
470       rval = persistence_db_cursor_get_key(handle, bufferKeySrc, 128);
471       fail_unless(rval != -1, "Cursor failed to get key!!");
472       // get data
473       rval = persistence_db_cursor_get_data(handle, bufferDataSrc, 128);
474       fail_unless(rval != -1, "Cursor failed to get data!!");
475       // get size
476       size = persistence_db_cursor_get_data_size(handle);
477       fail_unless(size != -1, "Cursor failed to get size!!");
478       //printf("1. Key: %s | Data: %s » Size: %d \n", bufferKeySrc, bufferDataSrc, size);
479
480       // get key
481       rval = persistence_db_cursor_get_key(handle1, bufferKeyDst, 128);
482       fail_unless(rval != -1, "Cursor failed to get key!!");
483       // get data
484       rval = persistence_db_cursor_get_data(handle1, bufferDataDst, 128);
485       fail_unless(rval != -1, "Cursor failed to get data!!");
486       // get size
487       size = persistence_db_cursor_get_data_size(handle1);
488       fail_unless(size != -1, "Cursor failed to get size!!");
489       //printf("  2. Key: %s | Data: %s » Size: %d \n", bufferKeyDst, bufferDataDst, size);
490    }
491    while( (persistence_db_cursor_next(handle) == 0) && (persistence_db_cursor_next(handle1) == 0) ); // next cursor
492
493    // destory cursor
494    rval = persistence_db_cursor_destroy(handle);
495    fail_unless(rval != -1, "Failed to destroy cursor!!");
496
497    rval = persistence_db_cursor_destroy(handle1);
498    fail_unless(rval != -1, "Failed to destroy cursor!!");
499 }
500 END_TEST
501
502
503
504 static Suite * persistencyClientLib_suite()
505 {
506    Suite * s  = suite_create("Persistency client library");
507
508    TCase * tc_persGetData = tcase_create("GetData");
509    tcase_add_test(tc_persGetData, test_GetData);
510
511    TCase * tc_persSetData = tcase_create("SetData");
512    tcase_add_test(tc_persSetData, test_SetData);
513
514    TCase * tc_persGetDataSize = tcase_create("GetDataSize");
515    tcase_add_test(tc_persGetDataSize, test_GetDataSize);
516
517    TCase * tc_persDeleteData = tcase_create("DeleteData");
518    tcase_add_test(tc_persDeleteData, test_DeleteData);
519
520    TCase * tc_persGetDataHandle = tcase_create("GetDataHandle");
521    tcase_add_test(tc_persGetDataHandle, test_GetDataHandle);
522
523    TCase * tc_persDataHandle = tcase_create("DataHandle");
524    tcase_add_test(tc_persDataHandle, test_DataHandle);
525
526    TCase * tc_persDataHandleOpen = tcase_create("DataHandleOpen");
527    tcase_add_test(tc_persDataHandleOpen, test_DataHandleOpen);
528
529    TCase * tc_persDataFile = tcase_create("DataFile");
530    tcase_add_test(tc_persDataFile, test_DataFile);
531
532    TCase * tc_Cursor = tcase_create("Cursor");
533    tcase_add_test(tc_Cursor, test_Cursor);
534
535    suite_add_tcase(s, tc_persGetData);
536    suite_add_tcase(s, tc_persSetData);
537    suite_add_tcase(s, tc_persGetDataSize);
538    suite_add_tcase(s, tc_persDeleteData);
539    suite_add_tcase(s, tc_persGetDataHandle);
540    suite_add_tcase(s, tc_persDataHandle);
541    suite_add_tcase(s, tc_persDataHandleOpen);
542    suite_add_tcase(s, tc_persDataFile);
543    suite_add_tcase(s, tc_Cursor);
544
545    return s;
546 }
547
548
549
550
551 int main(int argc, char *argv[])
552 {
553    int nr_failed = 0;
554
555    Suite * s = persistencyClientLib_suite();
556    SRunner * sr = srunner_create(s);
557    srunner_run_all(sr, CK_VERBOSE);
558    nr_failed = srunner_ntests_failed(sr);
559
560    srunner_free(sr);
561    return (0==nr_failed)?EXIT_SUCCESS:EXIT_FAILURE;
562
563 }
564