1 /******************************************************************************
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 ******************************************************************************/
12 * @file persistence_client_library_test.c
13 * @ingroup Persistence client library test
14 * @author Ingo Huerner
15 * @brief Test of persistence client library
23 #include <unistd.h> /* exit */
30 #include <dlt/dlt_common.h>
32 #include "../include/persistence_client_library_file.h"
33 #include "../include/persistence_client_library_key.h"
34 #include "../include/persistence_client_library.h"
37 // protected header, should be used only be persistence components
38 // included here for testing purpose
39 #include "../include_protected/persistence_client_library_db_access.h"
43 #define NUM_OF_FILES 3
44 #define READ_SIZE 1024
47 char gTheAppId[MaxAppNameLen] = {0};
49 // definition of weekday
50 char* dayOfWeek[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
55 * Test the key value interface using different logicalDB id's, users and seats.
56 * Each resource below has an entry in the resource configuration table where the
57 * storage location (cached or write through) and type (e.g. custom) has been configured.
59 START_TEST (test_GetData)
62 unsigned int shutdownReg = (PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL);
64 unsigned char buffer[READ_SIZE] = {0};
66 pclInitLibrary(gTheAppId, shutdownReg);
69 * Logical DB ID: 0xFF with user 0 and seat 0
70 * ==> local value accessible by all users (user 0, seat 0)
72 ret = pclKeyReadData(0xFF, "pos/last_position", 0, 0, buffer, READ_SIZE);
73 fail_unless(strncmp((char*)buffer, "CACHE_ +48° 10' 38.95\", +8° 44' 39.06\"",
74 strlen((char*)buffer)) == 0, "Buffer not correctly read");
75 fail_unless(ret = strlen("CACHE_ +48° 10' 38.95\", +8° 44' 39.06\""));
77 memset(buffer, 0, READ_SIZE);
80 * Logical DB ID: 0xFF with user 0 and seat 0
81 * ==> local value accessible by all users (user 0, seat 0)
83 ret = pclKeyReadData(0xFF, "language/country_code", 0, 0, buffer, READ_SIZE);
84 fail_unless(strncmp((char*)buffer, "Custom plugin -> plugin_get_data: secure!",
85 strlen((char*)buffer)) == 0, "Buffer not correctly read");
86 fail_unless(ret = strlen("Custom plugin -> plugin_get_data_handle"));
88 memset(buffer, 0, READ_SIZE);
92 * Logical DB ID: 0 with user 3 and seat 0
93 * ==> public shared user value (user 3, seat 0)
95 ret = pclKeyReadData(0, "language/current_language", 3, 0, buffer, READ_SIZE);
96 fail_unless(strncmp((char*)buffer, "CACHE_ Kisuaheli", strlen((char*)buffer)) == 0, "Buffer not correctly read");
98 memset(buffer, 0, READ_SIZE);
101 * Logical DB ID: 0xFF with user 3 and seat 2
102 * ==> local USER value (user 3, seat 2)
104 ret = pclKeyReadData(0xFF, "status/open_document", 3, 2, buffer, READ_SIZE);
105 fail_unless(strncmp((char*)buffer, "WT_ /var/opt/user_manual_climateControl.pdf", strlen((char*)buffer)) == 0, "Buffer not correctly read");
107 memset(buffer, 0, READ_SIZE);
110 * Logical DB ID: 0x20 with user 4 and seat 0
111 * ==> shared user value accessible by a group (user 4 and seat 0)
113 ret = pclKeyReadData(0x20, "address/home_address", 4, 0, buffer, READ_SIZE);
114 fail_unless(strncmp((char*)buffer, "WT_ 55327 Heimatstadt, Wohnstrasse 31", strlen((char*)buffer)) == 0, "Buffer not correctly read");
116 memset(buffer, 0, READ_SIZE);
119 * Logical DB ID: 0xFF with user 0 and seat 0
120 * ==> local value accessible by ALL USERS (user 0, seat 0)
122 ret = pclKeyReadData(0xFF, "pos/last_satellites", 0, 0, buffer, READ_SIZE);
123 fail_unless(strncmp((char*)buffer, "WT_ 17", strlen((char*)buffer)) == 0, "Buffer not correctly read");
125 memset(buffer, 0, READ_SIZE);
128 * Logical DB ID: 0x84 with user 4 and seat 0
129 * ==> shared user value accessible by A GROUP (user 4 and seat 0)
131 ret = pclKeyReadData(0x84, "links/last_link", 2, 0, buffer, READ_SIZE);
132 fail_unless(strncmp((char*)buffer, "CACHE_ /last_exit/brooklyn", strlen((char*)buffer)) == 0, "Buffer not correctly read");
134 memset(buffer, 0, READ_SIZE);
137 * Logical DB ID: 0x84 with user 2 and seat 1
138 * ==> local merge value
140 ret = pclKeyReadData(0x84, "links/last_link", 2, 1, buffer, READ_SIZE);
141 fail_unless(strncmp((char*)buffer, "CACHE_ /last_exit/queens", strlen((char*)buffer)) == 0, "Buffer not correctly read");
150 * Test the key value h a n d l e interface using different logicalDB id's, users and seats
151 * Each resource below has an entry in the resource configuration table where
152 * the storage location (cached or write through) and type (e.g. custom) has bee configured.
154 START_TEST (test_GetDataHandle)
156 int ret = 0, handle = 0, handle2 = 0, handle3 = 0, handle4 = 0, size = 0;
157 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
159 unsigned char buffer[READ_SIZE] = {0};
162 char sysTimeBuffer[128];
164 pclInitLibrary(gTheAppId, shutdownReg);
168 locTime = localtime(&t);
170 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),
171 locTime->tm_hour, locTime->tm_min, locTime->tm_sec);
174 // open handle ---------------------------------------------------
176 * Logical DB ID: 0xFF with user 0 and seat 0
177 * ==> local value accessible by ALL USERS (user 0, seat 0)
179 handle = pclKeyHandleOpen(0xFF, "posHandle/last_position", 0, 0);
180 fail_unless(handle >= 0, "Failed to open handle ==> /posHandle/last_position");
182 ret = pclKeyHandleReadData(handle, buffer, READ_SIZE);
183 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 => 1");
185 size = pclKeyHandleGetSize(handle);
186 fail_unless(size = strlen("WT_ H A N D L E: +48° 10' 38.95\", +8° 44' 39.06\""));
187 // ---------------------------------------------------------------------------------------------
190 // open handle ---------------------------------------------------
192 * Logical DB ID: 0xFF with user 3 and seat 2
193 * ==> local USER value (user 3, seat 2)
195 handle2 = pclKeyHandleOpen(0xFF, "statusHandle/open_document", 3, 2);
196 fail_unless(handle2 >= 0, "Failed to open handle /statusHandle/open_document");
198 size = pclKeyHandleWriteData(handle2, (unsigned char*)sysTimeBuffer, strlen(sysTimeBuffer));
199 fail_unless(size = strlen(sysTimeBuffer));
201 ret = pclKeyHandleClose(handle2);
202 // ---------------------------------------------------------------------------------------------
205 // open handle ---------------------------------------------------
207 * Logical DB ID: 0xFF with user 0 and seat 0
208 * ==> local value accessible by ALL USERS (user 0, seat 0)
210 memset(buffer, 0, READ_SIZE);
211 handle4 = pclKeyHandleOpen(0xFF, "language/country_code", 0, 0);
212 fail_unless(handle4 >= 0, "Failed to open handle /language/country_code");
214 ret = pclKeyHandleReadData(handle4, buffer, READ_SIZE);
215 fail_unless(strncmp((char*)buffer, "Custom plugin -> plugin_get_data_handle: secure!", -1) == 0, "Buffer not correctly read => 2");
217 size = pclKeyHandleGetSize(handle4);
218 fail_unless(size = strlen("Custom plugin -> plugin_get_data_handle"));
220 ret = pclKeyHandleWriteData(handle4, (unsigned char*)"Only dummy implementation behind custom library", READ_SIZE);
221 // ---------------------------------------------------------------------------------------------
224 // open handle ---------------------------------------------------
226 * Logical DB ID: 0xFF with user 3 and seat 2
227 * ==> local USER value (user 3, seat 2)
229 handle3 = pclKeyHandleOpen(0xFF, "statusHandle/open_document", 3, 2);
230 fail_unless(handle3 >= 0, "Failed to open handle /statusHandle/open_document");
232 ret = pclKeyHandleReadData(handle3, buffer, READ_SIZE);
233 fail_unless(strncmp((char*)buffer, sysTimeBuffer, strlen(sysTimeBuffer)) == 0, "Buffer not correctly read => 3");
235 size = pclKeyHandleGetSize(handle3);
236 fail_unless(size = strlen(sysTimeBuffer));
237 // ---------------------------------------------------------------------------------------------
241 ret = pclKeyHandleClose(handle);
242 ret = pclKeyHandleClose(handle3);
243 ret = pclKeyHandleClose(handle4);
252 * Write data to a key using the key interface.
253 * First write data to different keys and after
254 * read the data for verification.
256 START_TEST(test_SetData)
259 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
260 unsigned char buffer[READ_SIZE] = {0};
261 char write1[READ_SIZE] = {0};
262 char write2[READ_SIZE] = {0};
263 char sysTimeBuffer[256];
267 pclInitLibrary(gTheAppId, shutdownReg);
271 locTime = localtime(&t);
274 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),
275 locTime->tm_hour, locTime->tm_min, locTime->tm_sec);
278 * Logical DB ID: 0xFF with user 1 and seat 2
279 * ==> local USER value (user 1, seat 2)
282 ret = pclKeyWriteData(0xFF, "69", 1, 2, (unsigned char*)sysTimeBuffer, strlen(sysTimeBuffer));
283 fail_unless(ret == strlen(sysTimeBuffer), "Wrong write size");
285 snprintf(write1, 128, "%s %s", "/70", sysTimeBuffer);
287 * Logical DB ID: 0xFF with user 1 and seat 2
288 * ==> local USER value (user 1, seat 2)
291 ret = pclKeyWriteData(0xFF, "70", 1, 2, (unsigned char*)write1, strlen(write1));
292 fail_unless(ret == strlen(write1), "Wrong write size");
294 snprintf(write2, 128, "%s %s", "/key_70", sysTimeBuffer);
296 * Logical DB ID: 0xFF with user 1 and seat 2
297 * ==> local USER value (user 1, seat 2)
298 * Resource ID: key_70
300 ret = pclKeyWriteData(0xFF, "key_70", 1, 2, (unsigned char*)write2, strlen(write2));
301 fail_unless(ret == strlen(write2), "Wrong write size");
304 /*******************************************************************************************************************************************/
305 /* used for changed notification testing */
306 /*******************************************************************************************************************************************/
308 * Logical DB ID: 0x84 with user 2 and seat 1
309 * ==> shared user value accessible by A GROUP (user 2 and seat 1)
311 * ==> used for shared testing
313 //printf("Write data to trigger change notification\n");
314 ret = pclKeyWriteData(0x84, "links/last_link2", 2, 1, (unsigned char*)"Test notify shared data", strlen("Test notify shared data"));
317 * Logical DB ID: 0x84 with user 2 and seat 1
318 * ==> shared user value accessible by A GROUP (user 2 and seat 1)
320 * ==> used for shared testing
322 //printf("Write data to trigger change notification\n");
323 ret = pclKeyWriteData(0x84, "links/last_link3", 3, 2, (unsigned char*)"Test notify shared data", strlen("Test notify shared data"));
326 * Logical DB ID: 0x84 with user 2 and seat 1
327 * ==> shared user value accessible by A GROUP (user 2 and seat 1)
329 * ==> used for shared testing
331 //printf("Write data to trigger change notification\n");
332 ret = pclKeyWriteData(0x84, "links/last_link4", 4, 1, (unsigned char*)"Test notify shared data", strlen("Test notify shared data"));
333 /*******************************************************************************************************************************************/
334 /*******************************************************************************************************************************************/
338 * now read the data written in the previous steps to the keys
339 * and verify data has been written correctly.
341 memset(buffer, 0, READ_SIZE);
343 ret = pclKeyReadData(0xFF, "69", 1, 2, buffer, READ_SIZE);
344 fail_unless(strncmp((char*)buffer, sysTimeBuffer, strlen(sysTimeBuffer)) == 0, "Buffer not correctly read");
345 fail_unless(ret == strlen(sysTimeBuffer), "Wrong read size");
347 memset(buffer, 0, READ_SIZE);
349 ret = pclKeyReadData(0xFF, "70", 1, 2, buffer, READ_SIZE);
350 fail_unless(strncmp((char*)buffer, write1, strlen(write1)) == 0, "Buffer not correctly read");
351 fail_unless(ret == strlen(write1), "Wrong read size");
353 memset(buffer, 0, READ_SIZE);
355 ret = pclKeyReadData(0xFF, "key_70", 1, 2, buffer, READ_SIZE);
356 fail_unless(strncmp((char*)buffer, write2, strlen(write2)) == 0, "Buffer not correctly read");
357 fail_unless(ret == strlen(write2), "Wrong read size");
366 * Write data to a key using the key interface.
367 * The key is not in the persistence resource table.
368 * The key sill then be stored to the location local and cached.
370 START_TEST(test_SetDataNoPRCT)
373 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
374 unsigned char buffer[READ_SIZE] = {0};
377 pclInitLibrary(gTheAppId, shutdownReg);
380 char sysTimeBuffer[128];
382 locTime = localtime(&t);
384 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),
385 locTime->tm_hour, locTime->tm_min, locTime->tm_sec);
388 * Logical DB ID: 0xFF with user 1 and seat 2
389 * ==> local USER value (user 1, seat 2)
391 ret = pclKeyWriteData(0xFF, "NoPRCT", 1, 2, (unsigned char*)sysTimeBuffer, strlen(sysTimeBuffer));
392 fail_unless(ret == strlen(sysTimeBuffer), "Wrong write size");
393 //printf("Write Buffer : %s\n", sysTimeBuffer);
395 // read data again and and verify datat has been written correctly
396 memset(buffer, 0, READ_SIZE);
398 ret = pclKeyReadData(0xFF, "NoPRCT", 1, 2, buffer, READ_SIZE);
399 fail_unless(strncmp((char*)buffer, sysTimeBuffer, strlen(sysTimeBuffer)) == 0, "Buffer not correctly read");
400 fail_unless(ret == strlen(sysTimeBuffer), "Wrong read size");
401 //printf("read buffer : %s\n", buffer);
410 * Test the key interface.
411 * Read the size of a key.
413 START_TEST(test_GetDataSize)
417 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
419 pclInitLibrary(gTheAppId, shutdownReg);
422 * Logical DB ID: 0xFF with user 3 and seat 2
423 * ==> local USER value (user 3, seat 2)
425 size = pclKeyGetSize(0xFF, "status/open_document", 3, 2);
426 fail_unless(size == strlen("WT_ /var/opt/user_manual_climateControl.pdf"), "Invalid size");
430 * Logical DB ID: 0x84 with user 2 and seat 1
431 * ==> shared user value accessible by A GROUP (user 2 and seat 1)
433 size = pclKeyGetSize(0x84, "links/last_link", 2, 1);
434 fail_unless(size == strlen("CACHE_ /last_exit/queens"), "Invalid size");
442 * Delete a key using the key value interface.
443 * First read a from a key, the delte the key
444 * and then try to read again. The Last read must fail.
446 START_TEST(test_DeleteData)
449 unsigned char buffer[READ_SIZE];
450 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
452 pclInitLibrary(gTheAppId, shutdownReg);
454 // read data from key
455 rval = pclKeyReadData(0xFF, "key_70", 1, 2, buffer, READ_SIZE);
456 fail_unless(rval != EPERS_NOKEY, "Read form key key_70 fails");
459 rval = pclKeyDelete(0xFF, "key_70", 1, 2);
460 fail_unless(rval == 0, "Failed to delete key");
462 // after deleting the key, reading from key must fail now!
463 rval = pclKeyReadData(0xFF, "key_70", 1, 2, buffer, READ_SIZE);
464 fail_unless(rval == EPERS_NOKEY, "Read form key key_70 works, but should fail");
468 // read data from key
469 rval = pclKeyReadData(0xFF, "70", 1, 2, buffer, READ_SIZE);
470 fail_unless(rval != EPERS_NOKEY, "Read form key 70 fails");
473 rval = pclKeyDelete(0xFF, "70", 1, 2);
474 fail_unless(rval == 0, "Failed to delete key");
476 // after deleting the key, reading from key must fail now!
477 rval = pclKeyReadData(0xFF, "70", 1, 2, buffer, READ_SIZE);
478 fail_unless(rval == EPERS_NOKEY, "Read form key 70 works, but should fail");
487 * Test the file interface:
494 START_TEST(test_DataFile)
496 int fd = 0, i = 0, idx = 0;
497 int size = 0, ret = 0;
498 int writeSize = 16*1024;
499 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
501 unsigned char buffer[READ_SIZE] = {0};
502 const char* refBuffer = "/Data/mnt-wt/lt-persistence_client_library_test/user/1/seat/1/media";
504 char* fileMap = NULL;
506 pclInitLibrary(gTheAppId, shutdownReg);
508 writeBuffer = malloc(writeSize);
511 // fill buffer a sequence
512 for(i = 0; i<(writeSize/8); i++)
514 writeBuffer[idx++] = 'A';
515 writeBuffer[idx++] = 'B';
516 writeBuffer[idx++] = 'C';
517 writeBuffer[idx++] = ' ';
518 writeBuffer[idx++] = 'D';
519 writeBuffer[idx++] = 'E';
520 writeBuffer[idx++] = 'F';
521 writeBuffer[idx++] = ' ';
524 fd = open("/Data/mnt-wt/lt-persistence_client_library_test/user/1/seat/1/media/mediaDBWrite.db",
525 O_CREAT|O_RDWR|O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
528 // open ------------------------------------------------------------
529 fd = pclFileOpen(0xFF, "media/mediaDB.db", 1, 1);
530 fail_unless(fd != -1, "Could not open file ==> /media/mediaDB.db");
532 size = pclFileGetSize(fd);
533 fail_unless(size == 68, "Wrong file size");
535 size = pclFileReadData(fd, buffer, READ_SIZE);
536 fail_unless(strncmp((char*)buffer, refBuffer, strlen(refBuffer)) == 0, "Buffer not correctly read => media/mediaDB.db");
537 fail_unless(size == (strlen(refBuffer)+1), "Wrong size returned"); // strlen + 1 ==> inlcude cr/lf
540 ret = pclFileClose(fd);
541 fail_unless(ret == 0, "Failed to close file");
543 // open ------------------------------------------------------------
544 fd = pclFileOpen(0xFF, "media/mediaDBWrite.db", 1, 1);
545 fail_unless(fd != -1, "Could not open file ==> /media/mediaDBWrite.db");
547 size = pclFileWriteData(fd, writeBuffer, strlen(writeBuffer));
548 fail_unless(size == strlen(writeBuffer), "Failed to write data");
550 ret = pclFileClose(fd);
551 fail_unless(ret == 0, "Failed to close file");
554 // remove ----------------------------------------------------------
555 ret = pclFileRemove(0xFF, "media/mediaDBWrite.db", 1, 1);
556 fail_unless(ret == 0, "File can't be removed ==> /media/mediaDBWrite.db");
558 fd = open("/Data/mnt-wt/lt-persistence_client_library_test/user/1/seat/1/media/mediaDBWrite.db",O_RDWR);
559 fail_unless(fd == -1, "Failed to remove file, file still exists");
563 // map file --------------------------------------------------------
564 fd = pclFileOpen(0xFF, "media/mediaDB.db", 1, 1);
566 size = pclFileGetSize(fd);
567 pclFileMapData(fileMap, size, 0, fd);
568 fail_unless(fileMap != MAP_FAILED, "Failed to map file");
570 ret = pclFileUnmapData(fileMap, size);
571 fail_unless(ret != -1, "Failed to unmap file");
574 size = pclFileGetSize(1024);
575 fail_unless(ret == 0, "Got size, but should not");
577 ret = pclFileClose(fd);
578 fail_unless(ret == 0, "Failed to close file");
590 START_TEST(test_DataFileRecovery)
592 int fd_RW = 0, fd_RO = 0;
594 char* wBuffer = "This is a buffer to write";
595 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
597 pclInitLibrary(gTheAppId, shutdownReg);
599 // test backup creation --------------------------------------------
600 fd_RO = pclFileOpen(0xFF, "media/mediaDB_ReadOnly.db", 1, 1);
601 fail_unless(fd_RO != -1, "Could not open file ==> /media/mediaDB_ReadOnly.db");
603 fd_RW = pclFileOpen(0xFF, "media/mediaDB_ReadWrite.db", 1, 1);
604 fail_unless(fd_RW != -1, "Could not open file ==> /media/mediaDB_ReadWrite.db");
605 pclFileWriteData(fd_RW, wBuffer, strlen(wBuffer));
607 ret = pclFileClose(fd_RW);
610 ret = pclFileClose(fd_RO);
619 * The the handle function of the key and file interface.
621 START_TEST(test_DataHandle)
623 int handle1 = 0, handle2 = 0;
625 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
627 pclInitLibrary(gTheAppId, shutdownReg);
630 handle1 = pclFileOpen(0xFF, "media/mediaDB.db", 1, 1);
631 fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB.db");
633 ret = pclFileClose(handle1);
634 fail_unless(handle1 != -1, "Could not closefile ==> /media/mediaDB.db");
636 ret = pclFileClose(1024);
637 fail_unless(ret == -1, "Could close file, but should not!!");
639 ret = pclFileClose(17);
640 fail_unless(ret == -1, "Could close file, but should not!!");
645 handle2 = pclKeyHandleOpen(0xFF, "statusHandle/open_document", 3, 2);
646 fail_unless(handle2 >= 0, "Failed to open handle /statusHandle/open_document");
648 ret = pclKeyHandleClose(handle2);
649 fail_unless(ret != -1, "Failed to close handle!!");
651 ret = pclKeyHandleClose(1024);
652 fail_unless(ret == -4, "Max handle!!");
661 * Extended key handle test.
662 * Test have been created after a bug in the key handle function occured.
664 START_TEST(test_DataHandleOpen)
666 int hd1 = -2, hd2 = -2, hd3 = -2, hd4 = -2, hd5 = -2, hd6 = -2, hd7 = -2, hd8 = -2, hd9 = -2, ret = 0;
667 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
669 pclInitLibrary(gTheAppId, shutdownReg);
671 // open handles ----------------------------------------------------
672 hd1 = pclKeyHandleOpen(0xFF, "posHandle/last_position1", 0, 0);
673 fail_unless(hd1 == 1, "Failed to open handle ==> /posHandle/last_position1");
675 hd2 = pclKeyHandleOpen(0xFF, "posHandle/last_position2", 0, 0);
676 fail_unless(hd2 == 2, "Failed to open handle ==> /posHandle/last_position2");
678 hd3 = pclKeyHandleOpen(0xFF, "posHandle/last_position3", 0, 0);
679 fail_unless(hd3 == 3, "Failed to open handle ==> /posHandle/last_position3");
681 // close handles ---------------------------------------------------
682 ret = pclKeyHandleClose(hd1);
683 fail_unless(ret != -1, "Failed to close handle!!");
685 ret = pclKeyHandleClose(hd2);
686 fail_unless(ret != -1, "Failed to close handle!!");
688 ret = pclKeyHandleClose(hd3);
689 fail_unless(ret != -1, "Failed to close handle!!");
691 // open handles ----------------------------------------------------
692 hd4 = pclKeyHandleOpen(0xFF, "posHandle/last_position4", 0, 0);
693 fail_unless(hd4 == 3, "Failed to open handle ==> /posHandle/last_position4");
695 hd5 = pclKeyHandleOpen(0xFF, "posHandle/last_position5", 0, 0);
696 fail_unless(hd5 == 2, "Failed to open handle ==> /posHandle/last_position5");
698 hd6 = pclKeyHandleOpen(0xFF, "posHandle/last_position6", 0, 0);
699 fail_unless(hd6 == 1, "Failed to open handle ==> /posHandle/last_position6");
701 hd7 = pclKeyHandleOpen(0xFF, "posHandle/last_position7", 0, 0);
702 fail_unless(hd7 == 4, "Failed to open handle ==> /posHandle/last_position7");
704 hd8 = pclKeyHandleOpen(0xFF, "posHandle/last_position8", 0, 0);
705 fail_unless(hd8 == 5, "Failed to open handle ==> /posHandle/last_position8");
707 hd9 = pclKeyHandleOpen(0xFF, "posHandle/last_position9", 0, 0);
708 fail_unless(hd9 == 6, "Failed to open handle ==> /posHandle/last_position9");
710 // close handles ---------------------------------------------------
711 ret = pclKeyHandleClose(hd4);
712 fail_unless(ret != -1, "Failed to close handle!!");
714 ret = pclKeyHandleClose(hd5);
715 fail_unless(ret != -1, "Failed to close handle!!");
717 ret = pclKeyHandleClose(hd6);
718 fail_unless(ret != -1, "Failed to close handle!!");
720 ret = pclKeyHandleClose(hd7);
721 fail_unless(ret != -1, "Failed to close handle!!");
723 ret = pclKeyHandleClose(hd8);
724 fail_unless(ret != -1, "Failed to close handle!!");
726 ret = pclKeyHandleClose(hd9);
727 fail_unless(ret != -1, "Failed to close handle!!");
736 * Test for i n t e r n a l structures.
737 * Test the cursor functions.
739 START_TEST(test_Cursor)
741 int handle = -1, rval = 0, size = 0, handle1 = 0;
742 char bufferKeySrc[READ_SIZE] = {0};
743 char bufferDataSrc[READ_SIZE] = {0};
744 char bufferKeyDst[READ_SIZE] = {0};
745 char bufferDataDst[READ_SIZE] = {0};
746 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
748 pclInitLibrary(gTheAppId, shutdownReg);
751 handle = pers_db_cursor_create("/Data/mnt-c/lt-persistence_client_library_test/cached.itz");
752 fail_unless(handle != -1, "Failed to create cursor!!");
755 handle1 = pers_db_cursor_create("/Data/mnt-wt/lt-persistence_client_library_test/wt.itz");
756 fail_unless(handle1 != -1, "Failed to create cursor!!");
760 memset(bufferKeySrc, 0, READ_SIZE);
761 memset(bufferDataSrc, 0, READ_SIZE);
762 memset(bufferKeyDst, 0, READ_SIZE);
763 memset(bufferDataDst, 0, READ_SIZE);
766 rval = pers_db_cursor_get_key(handle, bufferKeySrc, 128);
767 fail_unless(rval != -1, "Cursor failed to get key!!");
769 rval = pers_db_cursor_get_data(handle, bufferDataSrc, 128);
770 fail_unless(rval != -1, "Cursor failed to get data!!");
772 size = pers_db_cursor_get_data_size(handle);
773 fail_unless(size != -1, "Cursor failed to get size!!");
774 //printf("1. Key: %s | Data: %s » Size: %d \n", bufferKeySrc, bufferDataSrc, size);
777 rval = pers_db_cursor_get_key(handle1, bufferKeyDst, 128);
778 fail_unless(rval != -1, "Cursor failed to get key!!");
780 rval = pers_db_cursor_get_data(handle1, bufferDataDst, 128);
781 fail_unless(rval != -1, "Cursor failed to get data!!");
783 size = pers_db_cursor_get_data_size(handle1);
784 fail_unless(size != -1, "Cursor failed to get size!!");
785 //printf(" 2. Key: %s | Data: %s » Size: %d \n", bufferKeyDst, bufferDataDst, size);
787 while( (pers_db_cursor_next(handle) == 0) && (pers_db_cursor_next(handle1) == 0) ); // next cursor
790 rval = pers_db_cursor_destroy(handle);
791 fail_unless(rval != -1, "Failed to destroy cursor!!");
793 rval = pers_db_cursor_destroy(handle1);
794 fail_unless(rval != -1, "Failed to destroy cursor!!");
802 START_TEST(test_Plugin)
805 unsigned char buffer[READ_SIZE] = {0};
807 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
808 pclInitLibrary(gTheAppId, shutdownReg);
810 ret = pclKeyReadData(0xFF, "language/country_code", 0, 0, buffer, READ_SIZE);
811 fail_unless(ret != EPERS_NOT_INITIALIZED);
812 fail_unless(strncmp((char*)buffer,"Custom plugin -> plugin_get_data: secure!",
813 strlen((char*)buffer)) == 0, "Buffer SECURE not correctly read");
816 ret = pclKeyReadData(0xFF, "language/country_code_early", 0, 0, buffer, READ_SIZE);
817 fail_unless(ret != EPERS_NOT_INITIALIZED);
818 //printf("B U F F E R - early: %s\n", buffer);
819 fail_unless(strncmp((char*)buffer,"Custom plugin -> plugin_get_data: early!",
820 strlen((char*)buffer)) == 0, "Buffer EARLY not correctly read");
822 ret = pclKeyReadData(0xFF, "language/country_code_emergency", 0, 0, buffer, READ_SIZE);
823 fail_unless(ret != EPERS_NOT_INITIALIZED);
824 //printf("B U F F E R - emergency: %s\n", buffer);
825 fail_unless(strncmp((char*)buffer,"Custom plugin -> plugin_get_data: emergency!",
826 strlen((char*)buffer)) == 0, "Buffer EMERGENCY not correctly read");
828 ret = pclKeyReadData(0xFF, "language/info", 0, 0, buffer, READ_SIZE);
829 fail_unless(ret != EPERS_NOT_INITIALIZED);
830 //printf("B U F F E R - hwinfo: %s\n", buffer);
831 fail_unless(strncmp((char*)buffer,"Custom plugin -> plugin_get_data: hwinfo!",
832 strlen((char*)buffer)) == 0, "Buffer HWINFO not correctly read");
834 ret = pclKeyReadData(0xFF, "language/country_code_custom3", 0, 0, buffer, READ_SIZE);
835 fail_unless(ret != EPERS_NOT_INITIALIZED);
836 //printf("B U F F E R - hwinfo: %s\n", buffer);
837 fail_unless(strncmp((char*)buffer,"Custom plugin -> plugin_get_data: custom3!",
838 strlen((char*)buffer)) == 0, "Buffer CUSTOM 3 not correctly read");
848 START_TEST(test_ReadDefault)
851 unsigned char buffer[READ_SIZE] = {0};
853 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
854 pclInitLibrary(gTheAppId, shutdownReg);
856 ret = pclKeyReadData(0xFF, "statusHandle/default01", 3, 2, buffer, READ_SIZE);
857 fail_unless(ret != EPERS_NOT_INITIALIZED);
858 printf("B U F F E R: %s\n", buffer);
859 fail_unless(strncmp((char*)buffer,"DEFAULT_01!", strlen((char*)buffer)) == 0, "Buffer not correctly read");
861 ret = pclKeyReadData(0xFF, "statusHandle/default02", 3, 2, buffer, READ_SIZE);
862 fail_unless(ret != EPERS_NOT_INITIALIZED);
863 printf("B U F F E R: %s\n", buffer);
864 fail_unless(strncmp((char*)buffer,"DEFAULT_02!", strlen((char*)buffer)) == 0, "Buffer not correctly read");
872 START_TEST(test_ReadConfDefault)
875 unsigned char buffer[READ_SIZE] = {0};
877 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
878 pclInitLibrary(gTheAppId, shutdownReg);
880 ret = pclKeyReadData(0xFF, "statusHandle/confdefault01", 3, 2, buffer, READ_SIZE);
881 fail_unless(ret != EPERS_NOT_INITIALIZED);
882 fail_unless(strncmp((char*)buffer,"CONF_DEFAULT_01!", strlen((char*)buffer)) == 0, "Buffer not correctly read");
884 ret = pclKeyReadData(0xFF, "statusHandle/confdefault02", 3, 2, buffer, READ_SIZE);
885 fail_unless(ret != EPERS_NOT_INITIALIZED);
886 fail_unless(strncmp((char*)buffer,"CONF_DEFAULT_02!", strlen((char*)buffer)) == 0, "Buffer not correctly read");
894 static Suite * persistencyClientLib_suite()
896 Suite * s = suite_create("Persistency client library");
898 TCase * tc_persGetData = tcase_create("GetData");
899 tcase_add_test(tc_persGetData, test_GetData);
901 TCase * tc_persSetData = tcase_create("SetData");
902 tcase_add_test(tc_persSetData, test_SetData);
904 TCase * tc_persSetDataNoPRCT = tcase_create("SetDataNoPRCT");
905 tcase_add_test(tc_persSetDataNoPRCT, test_SetDataNoPRCT);
907 TCase * tc_persGetDataSize = tcase_create("GetDataSize");
908 tcase_add_test(tc_persGetDataSize, test_GetDataSize);
910 TCase * tc_persDeleteData = tcase_create("DeleteData");
911 tcase_add_test(tc_persDeleteData, test_DeleteData);
913 TCase * tc_persGetDataHandle = tcase_create("GetDataHandle");
914 tcase_add_test(tc_persGetDataHandle, test_GetDataHandle);
916 TCase * tc_persDataHandle = tcase_create("DataHandle");
917 tcase_add_test(tc_persDataHandle, test_DataHandle);
919 TCase * tc_persDataHandleOpen = tcase_create("DataHandleOpen");
920 tcase_add_test(tc_persDataHandleOpen, test_DataHandleOpen);
922 TCase * tc_persDataFile = tcase_create("DataFile");
923 tcase_add_test(tc_persDataFile, test_DataFile);
925 TCase * tc_persDataFileRecovery = tcase_create("DataFileRecovery");
926 tcase_add_test(tc_persDataFileRecovery, test_DataFileRecovery);
928 TCase * tc_Cursor = tcase_create("Cursor");
929 tcase_add_test(tc_Cursor, test_Cursor);
931 TCase * tc_Plugin = tcase_create("Plugin");
932 tcase_add_test(tc_Plugin, test_Plugin);
934 TCase * tc_ReadDefault = tcase_create("ReadDefault");
935 tcase_add_test(tc_ReadDefault, test_ReadDefault);
937 TCase * tc_ReadConfDefault = tcase_create("ReadConfDefault");
938 tcase_add_test(tc_ReadConfDefault, test_ReadConfDefault);
940 suite_add_tcase(s, tc_persGetData);
941 suite_add_tcase(s, tc_persSetData);
942 suite_add_tcase(s, tc_persSetDataNoPRCT);
943 suite_add_tcase(s, tc_persGetDataSize);
944 suite_add_tcase(s, tc_persDeleteData);
945 suite_add_tcase(s, tc_persGetDataHandle);
946 suite_add_tcase(s, tc_persDataHandle);
947 suite_add_tcase(s, tc_persDataHandleOpen);
948 suite_add_tcase(s, tc_persDataFile);
949 suite_add_tcase(s, tc_persDataFileRecovery);
950 suite_add_tcase(s, tc_Cursor);
951 suite_add_tcase(s, tc_ReadDefault);
952 suite_add_tcase(s, tc_ReadConfDefault);
954 suite_add_tcase(s, tc_Plugin); // activate only if the plugins are available
959 int main(int argc, char *argv[])
963 // assign application name
964 strncpy(gTheAppId, "lt-persistence_client_library_test", MaxAppNameLen);
965 gTheAppId[MaxAppNameLen-1] = '\0';
967 /// debug log and trace (DLT) setup
968 DLT_REGISTER_APP("test","tests the persistence client library");
971 Suite * s = persistencyClientLib_suite();
972 SRunner * sr = srunner_create(s);
973 srunner_run_all(sr, CK_VERBOSE);
974 nr_failed = srunner_ntests_failed(sr);
981 // unregister debug log and trace
982 DLT_UNREGISTER_APP();
986 return (0==nr_failed)?EXIT_SUCCESS:EXIT_FAILURE;