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 ret = pclInitLibrary(gTheAppId, shutdownReg);
67 fail_unless(ret <= 1, "Failed to init PCL");
71 * Logical DB ID: 0xFF with user 0 and seat 0
72 * ==> local value accessible by all users (user 0, seat 0)
74 ret = pclKeyReadData(0xFF, "pos/last_position", 0, 0, buffer, READ_SIZE);
75 fail_unless(strncmp((char*)buffer, "CACHE_ +48° 10' 38.95\", +8° 44' 39.06\"",
76 strlen((char*)buffer)) == 0, "Buffer not correctly read");
77 fail_unless(ret = strlen("CACHE_ +48° 10' 38.95\", +8° 44' 39.06\""));
79 memset(buffer, 0, READ_SIZE);
82 * Logical DB ID: 0xFF with user 0 and seat 0
83 * ==> local value accessible by all users (user 0, seat 0)
85 ret = pclKeyReadData(0xFF, "language/country_code", 0, 0, buffer, READ_SIZE);
86 fail_unless(strncmp((char*)buffer, "Custom plugin -> plugin_get_data: secure!",
87 strlen((char*)buffer)) == 0, "Buffer not correctly read");
88 fail_unless(ret = strlen("Custom plugin -> plugin_get_data_handle"));
90 memset(buffer, 0, READ_SIZE);
94 * Logical DB ID: 0 with user 3 and seat 0
95 * ==> public shared user value (user 3, seat 0)
97 ret = pclKeyReadData(0, "language/current_language", 3, 0, buffer, READ_SIZE);
98 fail_unless(strncmp((char*)buffer, "CACHE_ Kisuaheli", strlen((char*)buffer)) == 0, "Buffer not correctly read");
100 memset(buffer, 0, READ_SIZE);
103 * Logical DB ID: 0xFF with user 3 and seat 2
104 * ==> local USER value (user 3, seat 2)
106 ret = pclKeyReadData(0xFF, "status/open_document", 3, 2, buffer, READ_SIZE);
107 fail_unless(strncmp((char*)buffer, "WT_ /var/opt/user_manual_climateControl.pdf", strlen((char*)buffer)) == 0, "Buffer not correctly read");
109 memset(buffer, 0, READ_SIZE);
112 * Logical DB ID: 0x20 with user 4 and seat 0
113 * ==> shared user value accessible by a group (user 4 and seat 0)
115 ret = pclKeyReadData(0x20, "address/home_address", 4, 0, buffer, READ_SIZE);
116 fail_unless(strncmp((char*)buffer, "WT_ 55327 Heimatstadt, Wohnstrasse 31", strlen((char*)buffer)) == 0, "Buffer not correctly read");
118 memset(buffer, 0, READ_SIZE);
121 * Logical DB ID: 0xFF with user 0 and seat 0
122 * ==> local value accessible by ALL USERS (user 0, seat 0)
124 ret = pclKeyReadData(0xFF, "pos/last_satellites", 0, 0, buffer, READ_SIZE);
125 fail_unless(strncmp((char*)buffer, "WT_ 17", strlen((char*)buffer)) == 0, "Buffer not correctly read");
127 memset(buffer, 0, READ_SIZE);
130 * Logical DB ID: 0x84 with user 4 and seat 0
131 * ==> shared user value accessible by A GROUP (user 4 and seat 0)
133 ret = pclKeyReadData(0x84, "links/last_link", 2, 0, buffer, READ_SIZE);
134 fail_unless(strncmp((char*)buffer, "CACHE_ /last_exit/brooklyn", strlen((char*)buffer)) == 0, "Buffer not correctly read");
136 memset(buffer, 0, READ_SIZE);
139 * Logical DB ID: 0x84 with user 2 and seat 1
140 * ==> local merge value
142 ret = pclKeyReadData(0x84, "links/last_link", 2, 1, buffer, READ_SIZE);
143 fail_unless(strncmp((char*)buffer, "CACHE_ /last_exit/queens", strlen((char*)buffer)) == 0, "Buffer not correctly read");
152 * Test the key value h a n d l e interface using different logicalDB id's, users and seats
153 * Each resource below has an entry in the resource configuration table where
154 * the storage location (cached or write through) and type (e.g. custom) has bee configured.
156 START_TEST (test_GetDataHandle)
158 int ret = 0, handle = 0, handle2 = 0, handle3 = 0, handle4 = 0, size = 0;
159 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
161 unsigned char buffer[READ_SIZE] = {0};
164 char sysTimeBuffer[128];
166 ret = pclInitLibrary(gTheAppId, shutdownReg);
167 fail_unless(ret <= 1, "Failed to init PCL");
171 locTime = localtime(&t);
173 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),
174 locTime->tm_hour, locTime->tm_min, locTime->tm_sec);
177 // open handle ---------------------------------------------------
179 * Logical DB ID: 0xFF with user 0 and seat 0
180 * ==> local value accessible by ALL USERS (user 0, seat 0)
182 handle = pclKeyHandleOpen(0xFF, "posHandle/last_position", 0, 0);
183 fail_unless(handle >= 0, "Failed to open handle ==> /posHandle/last_position");
185 ret = pclKeyHandleReadData(handle, buffer, READ_SIZE);
186 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");
188 size = pclKeyHandleGetSize(handle);
189 fail_unless(size == strlen("WT_ H A N D L E: +48° 10' 38.95\", +8° 44' 39.06\""));
190 // ---------------------------------------------------------------------------------------------
193 // open handle ---------------------------------------------------
195 * Logical DB ID: 0xFF with user 3 and seat 2
196 * ==> local USER value (user 3, seat 2)
198 handle2 = pclKeyHandleOpen(0xFF, "statusHandle/open_document", 3, 2);
199 fail_unless(handle2 >= 0, "Failed to open handle /statusHandle/open_document");
201 size = pclKeyHandleWriteData(handle2, (unsigned char*)sysTimeBuffer, strlen(sysTimeBuffer));
202 fail_unless(size == strlen(sysTimeBuffer));
204 ret = pclKeyHandleClose(handle2);
205 // ---------------------------------------------------------------------------------------------
208 // open handle ---------------------------------------------------
210 * Logical DB ID: 0xFF with user 0 and seat 0
211 * ==> local value accessible by ALL USERS (user 0, seat 0)
213 #if 0 // plugin test case
214 memset(buffer, 0, READ_SIZE);
215 handle4 = pclKeyHandleOpen(0xFF, "language/country_code", 0, 0);
216 printf("H A N D L E: %d\n", handle4);
217 fail_unless(handle4 >= 0, "Failed to open handle /language/country_code");
219 ret = pclKeyHandleReadData(handle4, buffer, READ_SIZE);
220 fail_unless(strncmp((char*)buffer, "Custom plugin -> plugin_get_data_handle: secure!", -1) == 0, "Buffer not correctly read => 2");
222 size = pclKeyHandleGetSize(handle4);
223 fail_unless(size = strlen("Custom plugin -> plugin_get_data_handle"));
225 ret = pclKeyHandleWriteData(handle4, (unsigned char*)"Only dummy implementation behind custom library", READ_SIZE);
227 // ---------------------------------------------------------------------------------------------
230 // open handle ---------------------------------------------------
232 * Logical DB ID: 0xFF with user 3 and seat 2
233 * ==> local USER value (user 3, seat 2)
235 handle3 = pclKeyHandleOpen(0xFF, "statusHandle/open_document", 3, 2);
236 fail_unless(handle3 >= 0, "Failed to open handle /statusHandle/open_document");
238 ret = pclKeyHandleReadData(handle3, buffer, READ_SIZE);
239 fail_unless(strncmp((char*)buffer, sysTimeBuffer, strlen(sysTimeBuffer)) == 0, "Buffer not correctly read => 3");
241 size = pclKeyHandleGetSize(handle3);
242 fail_unless(size = strlen(sysTimeBuffer));
243 // ---------------------------------------------------------------------------------------------
247 ret = pclKeyHandleClose(handle);
248 ret = pclKeyHandleClose(handle3);
249 ret = pclKeyHandleClose(handle4);
257 * Write data to a key using the key interface.
258 * First write data to different keys and after
259 * read the data for verification.
261 START_TEST(test_SetData)
264 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
265 unsigned char buffer[READ_SIZE] = {0};
266 char write1[READ_SIZE] = {0};
267 char write2[READ_SIZE] = {0};
268 char sysTimeBuffer[256];
272 ret = pclInitLibrary(gTheAppId, shutdownReg);
273 fail_unless(ret <= 1, "Failed to init PCL");
277 locTime = localtime(&t);
280 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),
281 locTime->tm_hour, locTime->tm_min, locTime->tm_sec);
284 * Logical DB ID: 0xFF with user 1 and seat 2
285 * ==> local USER value (user 1, seat 2)
289 ret = pclKeyWriteData(0xFF, "69", 1, 2, (unsigned char*)sysTimeBuffer, strlen(sysTimeBuffer));
290 fail_unless(ret == strlen(sysTimeBuffer), "Wrong write size");
292 snprintf(write1, 128, "%s %s", "/70", sysTimeBuffer);
294 * Logical DB ID: 0xFF with user 1 and seat 2
295 * ==> local USER value (user 1, seat 2)
298 ret = pclKeyWriteData(0xFF, "70", 1, 2, (unsigned char*)write1, strlen(write1));
299 fail_unless(ret == strlen(write1), "Wrong write size");
301 snprintf(write2, 128, "%s %s", "/key_70", sysTimeBuffer);
303 * Logical DB ID: 0xFF with user 1 and seat 2
304 * ==> local USER value (user 1, seat 2)
305 * Resource ID: key_70
307 ret = pclKeyWriteData(0xFF, "key_70", 1, 2, (unsigned char*)write2, strlen(write2));
308 fail_unless(ret == strlen(write2), "Wrong write size");
311 /*******************************************************************************************************************************************/
312 /* used for changed notification testing */
313 /*******************************************************************************************************************************************/
315 * Logical DB ID: 0x84 with user 2 and seat 1
316 * ==> shared user value accessible by A GROUP (user 2 and seat 1)
318 * ==> used for shared testing
320 //printf("Write data to trigger change notification\n");
321 ret = pclKeyWriteData(0x84, "links/last_link2", 2, 1, (unsigned char*)"Test notify shared data", strlen("Test notify shared data"));
322 fail_unless(ret == strlen("Test notify shared data"), "Wrong write size");
325 * Logical DB ID: 0x84 with user 2 and seat 1
326 * ==> shared user value accessible by A GROUP (user 2 and seat 1)
328 * ==> used for shared testing
330 //printf("Write data to trigger change notification\n");
331 ret = pclKeyWriteData(0x84, "links/last_link3", 3, 2, (unsigned char*)"Test notify shared data", strlen("Test notify shared data"));
332 fail_unless(ret == strlen("Test notify shared data"), "Wrong write size");
335 * Logical DB ID: 0x84 with user 2 and seat 1
336 * ==> shared user value accessible by A GROUP (user 2 and seat 1)
338 * ==> used for shared testing
340 //printf("Write data to trigger change notification\n");
341 ret = pclKeyWriteData(0x84, "links/last_link4", 4, 1, (unsigned char*)"Test notify shared data", strlen("Test notify shared data"));
342 fail_unless(ret == strlen("Test notify shared data"), "Wrong write size");
343 /*******************************************************************************************************************************************/
344 /*******************************************************************************************************************************************/
348 * now read the data written in the previous steps to the keys
349 * and verify data has been written correctly.
351 memset(buffer, 0, READ_SIZE);
353 ret = pclKeyReadData(0xFF, "69", 1, 2, buffer, READ_SIZE);
354 fail_unless(strncmp((char*)buffer, sysTimeBuffer, strlen(sysTimeBuffer)) == 0, "Buffer not correctly read");
355 fail_unless(ret == strlen(sysTimeBuffer), "Wrong read size");
357 memset(buffer, 0, READ_SIZE);
359 ret = pclKeyReadData(0xFF, "70", 1, 2, buffer, READ_SIZE);
360 fail_unless(strncmp((char*)buffer, write1, strlen(write1)) == 0, "Buffer not correctly read");
361 fail_unless(ret == strlen(write1), "Wrong read size");
363 memset(buffer, 0, READ_SIZE);
365 ret = pclKeyReadData(0xFF, "key_70", 1, 2, buffer, READ_SIZE);
366 fail_unless(strncmp((char*)buffer, write2, strlen(write2)) == 0, "Buffer not correctly read");
367 fail_unless(ret == strlen(write2), "Wrong read size");
377 * Write data to a key using the key interface.
378 * The key is not in the persistence resource table.
379 * The key sill then be stored to the location local and cached.
381 START_TEST(test_SetDataNoPRCT)
384 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
385 unsigned char buffer[READ_SIZE] = {0};
388 ret = pclInitLibrary(gTheAppId, shutdownReg);
389 fail_unless(ret <= 1, "Failed to init PCL");
393 char sysTimeBuffer[128];
395 locTime = localtime(&t);
397 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),
398 locTime->tm_hour, locTime->tm_min, locTime->tm_sec);
401 * Logical DB ID: 0xFF with user 1 and seat 2
402 * ==> local USER value (user 1, seat 2)
404 ret = pclKeyWriteData(0xFF, "NoPRCT", 1, 2, (unsigned char*)sysTimeBuffer, strlen(sysTimeBuffer));
405 fail_unless(ret == strlen(sysTimeBuffer), "Wrong write size");
406 //printf("Write Buffer : %s\n", sysTimeBuffer);
408 // read data again and and verify datat has been written correctly
409 memset(buffer, 0, READ_SIZE);
411 ret = pclKeyReadData(0xFF, "NoPRCT", 1, 2, buffer, READ_SIZE);
412 fail_unless(strncmp((char*)buffer, sysTimeBuffer, strlen(sysTimeBuffer)) == 0, "Buffer not correctly read");
413 fail_unless(ret == strlen(sysTimeBuffer), "Wrong read size");
414 //printf("read buffer : %s\n", buffer);
423 * Test the key interface.
424 * Read the size of a key.
426 START_TEST(test_GetDataSize)
428 int size = 0, ret = 0;
430 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
432 ret = pclInitLibrary(gTheAppId, shutdownReg);
433 fail_unless(ret <= 1, "Failed to init PCL");
436 * Logical DB ID: 0xFF with user 3 and seat 2
437 * ==> local USER value (user 3, seat 2)
439 size = pclKeyGetSize(0xFF, "status/open_document", 3, 2);
440 fail_unless(size == strlen("WT_ /var/opt/user_manual_climateControl.pdf"), "Invalid size");
444 * Logical DB ID: 0x84 with user 2 and seat 1
445 * ==> shared user value accessible by A GROUP (user 2 and seat 1)
447 size = pclKeyGetSize(0x84, "links/last_link", 2, 1);
448 fail_unless(size == strlen("CACHE_ /last_exit/queens"), "Invalid size");
456 * Delete a key using the key value interface.
457 * First read a from a key, the delte the key
458 * and then try to read again. The Last read must fail.
460 START_TEST(test_DeleteData)
463 unsigned char buffer[READ_SIZE];
464 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
466 rval = pclInitLibrary(gTheAppId, shutdownReg);
467 fail_unless(rval <= 1, "Failed to init PCL");
469 // read data from key
470 rval = pclKeyReadData(0xFF, "key_70", 1, 2, buffer, READ_SIZE);
471 fail_unless(rval != EPERS_NOKEY, "Read form key key_70 fails");
474 rval = pclKeyDelete(0xFF, "key_70", 1, 2);
475 fail_unless(rval == 0, "Failed to delete key");
477 // after deleting the key, reading from key must fail now!
478 rval = pclKeyReadData(0xFF, "key_70", 1, 2, buffer, READ_SIZE);
479 fail_unless(rval == EPERS_NOKEY, "Read form key key_70 works, but should fail");
483 // read data from key
484 rval = pclKeyReadData(0xFF, "70", 1, 2, buffer, READ_SIZE);
485 fail_unless(rval != EPERS_NOKEY, "Read form key 70 fails");
488 rval = pclKeyDelete(0xFF, "70", 1, 2);
489 fail_unless(rval == 0, "Failed to delete key");
491 // after deleting the key, reading from key must fail now!
492 rval = pclKeyReadData(0xFF, "70", 1, 2, buffer, READ_SIZE);
493 fail_unless(rval == EPERS_NOKEY, "Read form key 70 works, but should fail");
502 * Test the file interface:
509 START_TEST(test_DataFile)
511 int fd = 0, i = 0, idx = 0;
512 int size = 0, ret = 0;
513 int writeSize = 16*1024;
514 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
516 unsigned char buffer[READ_SIZE] = {0};
517 const char* refBuffer = "/Data/mnt-wt/lt-persistence_client_library_test/user/1/seat/1/media";
519 char* fileMap = NULL;
521 ret = pclInitLibrary(gTheAppId, shutdownReg);
522 fail_unless(ret <= 1, "Failed to init PCL");
524 writeBuffer = malloc(writeSize);
527 // fill buffer a sequence
528 for(i = 0; i<(writeSize/8); i++)
530 writeBuffer[idx++] = 'A';
531 writeBuffer[idx++] = 'B';
532 writeBuffer[idx++] = 'C';
533 writeBuffer[idx++] = ' ';
534 writeBuffer[idx++] = 'D';
535 writeBuffer[idx++] = 'E';
536 writeBuffer[idx++] = 'F';
537 writeBuffer[idx++] = ' ';
540 fd = open("/Data/mnt-wt/lt-persistence_client_library_test/user/1/seat/1/media/mediaDBWrite.db",
541 O_CREAT|O_RDWR|O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
544 // open ------------------------------------------------------------
545 fd = pclFileOpen(0xFF, "media/mediaDB.db", 1, 1);
546 fail_unless(fd != -1, "Could not open file ==> /media/mediaDB.db");
548 size = pclFileGetSize(fd);
549 fail_unless(size == 68, "Wrong file size");
551 size = pclFileReadData(fd, buffer, READ_SIZE);
552 fail_unless(strncmp((char*)buffer, refBuffer, strlen(refBuffer)) == 0, "Buffer not correctly read => media/mediaDB.db");
553 fail_unless(size == (strlen(refBuffer)+1), "Wrong size returned"); // strlen + 1 ==> inlcude cr/lf
556 ret = pclFileClose(fd);
557 fail_unless(ret == 0, "Failed to close file");
559 // open ------------------------------------------------------------
560 fd = pclFileOpen(0xFF, "media/mediaDBWrite.db", 1, 1);
561 fail_unless(fd != -1, "Could not open file ==> /media/mediaDBWrite.db");
563 size = pclFileWriteData(fd, writeBuffer, strlen(writeBuffer));
564 fail_unless(size == strlen(writeBuffer), "Failed to write data");
566 ret = pclFileClose(fd);
567 fail_unless(ret == 0, "Failed to close file");
570 // remove ----------------------------------------------------------
571 ret = pclFileRemove(0xFF, "media/mediaDBWrite.db", 1, 1);
572 fail_unless(ret == 0, "File can't be removed ==> /media/mediaDBWrite.db");
574 fd = open("/Data/mnt-wt/lt-persistence_client_library_test/user/1/seat/1/media/mediaDBWrite.db",O_RDWR);
575 fail_unless(fd == -1, "Failed to remove file, file still exists");
579 // map file --------------------------------------------------------
580 fd = pclFileOpen(0xFF, "media/mediaDB.db", 1, 1);
582 size = pclFileGetSize(fd);
583 pclFileMapData(fileMap, size, 0, fd);
584 fail_unless(fileMap != MAP_FAILED, "Failed to map file");
586 ret = pclFileUnmapData(fileMap, size);
587 fail_unless(ret != -1, "Failed to unmap file");
590 size = pclFileGetSize(1024);
591 fail_unless(ret == 0, "Got size, but should not");
593 ret = pclFileClose(fd);
594 fail_unless(ret == 0, "Failed to close file");
606 START_TEST(test_DataFileRecovery)
608 int fd_RW = 0, fd_RO = 0;
610 char* wBuffer = "This is a buffer to write";
611 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
613 ret = pclInitLibrary(gTheAppId, shutdownReg);
614 fail_unless(ret <= 1, "Failed to init PCL");
616 // test backup creation --------------------------------------------
617 fd_RO = pclFileOpen(0xFF, "media/mediaDB_ReadOnly.db", 1, 1);
618 fail_unless(fd_RO != -1, "Could not open file ==> /media/mediaDB_ReadOnly.db");
620 fd_RW = pclFileOpen(0xFF, "media/mediaDB_ReadWrite.db", 1, 1);
621 fail_unless(fd_RW != -1, "Could not open file ==> /media/mediaDB_ReadWrite.db");
622 pclFileWriteData(fd_RW, wBuffer, strlen(wBuffer));
624 ret = pclFileClose(fd_RW);
627 ret = pclFileClose(fd_RO);
636 * The the handle function of the key and file interface.
638 START_TEST(test_DataHandle)
640 int handle1 = 0, handle2 = 0, size = 0;
641 int handleArray[4] = {0};
643 unsigned char buffer[READ_SIZE] = {0};
644 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
646 ret = pclInitLibrary(gTheAppId, shutdownReg);
647 fail_unless(ret <= 1, "Failed to init PCL");
650 handle1 = pclFileOpen(0xFF, "media/mediaDB.db", 1, 1);
651 fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB.db");
653 ret = pclFileClose(handle1);
654 fail_unless(handle1 != -1, "Could not closefile ==> /media/mediaDB.db");
656 ret = pclFileClose(1024);
657 fail_unless(ret == EPERS_MAXHANDLE, "Could close file, but should not!!");
659 ret = pclFileClose(17);
660 fail_unless(ret == -1, "Could close file, but should not!!");
662 // test multiple handles
663 handleArray[0] = pclFileOpen(0xFF, "media/mediaDB_write_01.db", 1, 1);
664 fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB_write_01.db");
666 handleArray[1] = pclFileOpen(0xFF, "media/mediaDB_write_02.db", 1, 1);
667 fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB_write_02.db");
669 handleArray[2] = pclFileOpen(0xFF, "media/mediaDB_write_03.db", 1, 1);
670 fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB_write_03.db");
672 handleArray[3] = pclFileOpen(0xFF, "media/mediaDB_write_04.db", 1, 1);
673 fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB_write_04.db");
675 size = pclFileReadData(handleArray[0], buffer, READ_SIZE);
676 fail_unless(strncmp((char*)buffer, "/user/1/seat/1/media/mediaDB_write_01.db",
677 strlen("/user/1/seat/1/media/mediaDB_write_01.db"))
678 == 0, "Buffer not correctly read => mediaDB_write_01.db");
680 size = pclFileReadData(handleArray[1], buffer, READ_SIZE);
681 fail_unless(strncmp((char*)buffer, "/user/1/seat/1/media/mediaDB_write_02.db",
682 strlen("/user/1/seat/1/media/mediaDB_write_02.db"))
683 == 0, "Buffer not correctly read => mediaDB_write_02.db");
685 size = pclFileReadData(handleArray[2], buffer, READ_SIZE);
686 fail_unless(strncmp((char*)buffer, "/user/1/seat/1/media/mediaDB_write_03.db",
687 strlen("/user/1/seat/1/media/mediaDB_write_03.db"))
688 == 0, "Buffer not correctly read => mediaDB_write_03.db");
690 size = pclFileReadData(handleArray[3], buffer, READ_SIZE);
691 fail_unless(strncmp((char*)buffer, "/user/1/seat/1/media/mediaDB_write_04.db",
692 strlen("/user/1/seat/1/media/mediaDB_write_04.db"))
693 == 0, "Buffer not correctly read => mediaDB_write_04.db");
695 ret = pclKeyHandleClose(handleArray[0]);
696 fail_unless(ret != -1, "Failed to close handle idx \"0\"!!");
698 ret = pclKeyHandleClose(handleArray[1]);
699 fail_unless(ret != -1, "Failed to close handle idx \"1\"!!");
701 ret = pclKeyHandleClose(handleArray[2]);
702 fail_unless(ret != -1, "Failed to close handle idx \"2\"!!");
704 ret = pclKeyHandleClose(handleArray[3]);
705 fail_unless(ret != -1, "Failed to close handle idx \"3\"!!");
708 handle2 = pclKeyHandleOpen(0xFF, "statusHandle/open_document", 3, 2);
709 fail_unless(handle2 >= 0, "Failed to open handle /statusHandle/open_document");
711 ret = pclKeyHandleClose(handle2);
712 fail_unless(ret != -1, "Failed to close handle!!");
714 ret = pclKeyHandleClose(1024);
715 fail_unless(ret == EPERS_MAXHANDLE, "Max handle!!");
724 * Extended key handle test.
725 * Test have been created after a bug in the key handle function occured.
727 START_TEST(test_DataHandleOpen)
729 int hd1 = -2, hd2 = -2, hd3 = -2, hd4 = -2, hd5 = -2, hd6 = -2, hd7 = -2, hd8 = -2, hd9 = -2, ret = 0;
730 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
732 ret = pclInitLibrary(gTheAppId, shutdownReg);
733 fail_unless(ret <= 1, "Failed to init PCL");
735 // open handles ----------------------------------------------------
736 hd1 = pclKeyHandleOpen(0xFF, "posHandle/last_position1", 0, 0);
737 fail_unless(hd1 == 1, "Failed to open handle ==> /posHandle/last_position1");
739 hd2 = pclKeyHandleOpen(0xFF, "posHandle/last_position2", 0, 0);
740 fail_unless(hd2 == 2, "Failed to open handle ==> /posHandle/last_position2");
742 hd3 = pclKeyHandleOpen(0xFF, "posHandle/last_position3", 0, 0);
743 fail_unless(hd3 == 3, "Failed to open handle ==> /posHandle/last_position3");
745 // close handles ---------------------------------------------------
746 ret = pclKeyHandleClose(hd1);
747 fail_unless(ret != -1, "Failed to close handle!!");
749 ret = pclKeyHandleClose(hd2);
750 fail_unless(ret != -1, "Failed to close handle!!");
752 ret = pclKeyHandleClose(hd3);
753 fail_unless(ret != -1, "Failed to close handle!!");
755 // open handles ----------------------------------------------------
756 hd4 = pclKeyHandleOpen(0xFF, "posHandle/last_position4", 0, 0);
757 fail_unless(hd4 == 3, "Failed to open handle ==> /posHandle/last_position4");
759 hd5 = pclKeyHandleOpen(0xFF, "posHandle/last_position5", 0, 0);
760 fail_unless(hd5 == 2, "Failed to open handle ==> /posHandle/last_position5");
762 hd6 = pclKeyHandleOpen(0xFF, "posHandle/last_position6", 0, 0);
763 fail_unless(hd6 == 1, "Failed to open handle ==> /posHandle/last_position6");
765 hd7 = pclKeyHandleOpen(0xFF, "posHandle/last_position7", 0, 0);
766 fail_unless(hd7 == 4, "Failed to open handle ==> /posHandle/last_position7");
768 hd8 = pclKeyHandleOpen(0xFF, "posHandle/last_position8", 0, 0);
769 fail_unless(hd8 == 5, "Failed to open handle ==> /posHandle/last_position8");
771 hd9 = pclKeyHandleOpen(0xFF, "posHandle/last_position9", 0, 0);
772 fail_unless(hd9 == 6, "Failed to open handle ==> /posHandle/last_position9");
774 // close handles ---------------------------------------------------
775 ret = pclKeyHandleClose(hd4);
776 fail_unless(ret != -1, "Failed to close handle!!");
778 ret = pclKeyHandleClose(hd5);
779 fail_unless(ret != -1, "Failed to close handle!!");
781 ret = pclKeyHandleClose(hd6);
782 fail_unless(ret != -1, "Failed to close handle!!");
784 ret = pclKeyHandleClose(hd7);
785 fail_unless(ret != -1, "Failed to close handle!!");
787 ret = pclKeyHandleClose(hd8);
788 fail_unless(ret != -1, "Failed to close handle!!");
790 ret = pclKeyHandleClose(hd9);
791 fail_unless(ret != -1, "Failed to close handle!!");
800 * Test for i n t e r n a l structures.
801 * Test the cursor functions.
803 START_TEST(test_Cursor)
805 int handle = -1, rval = 0, size = 0, handle1 = 0;
806 char bufferKeySrc[READ_SIZE] = {0};
807 char bufferDataSrc[READ_SIZE] = {0};
808 char bufferKeyDst[READ_SIZE] = {0};
809 char bufferDataDst[READ_SIZE] = {0};
810 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
812 rval = pclInitLibrary(gTheAppId, shutdownReg);
813 fail_unless(rval <= 1, "Failed to init PCL");
816 handle = pers_db_cursor_create("/Data/mnt-c/lt-persistence_client_library_test/cached.itz");
817 fail_unless(handle != -1, "Failed to create cursor!!");
820 handle1 = pers_db_cursor_create("/Data/mnt-wt/lt-persistence_client_library_test/wt.itz");
821 fail_unless(handle1 != -1, "Failed to create cursor!!");
825 memset(bufferKeySrc, 0, READ_SIZE);
826 memset(bufferDataSrc, 0, READ_SIZE);
827 memset(bufferKeyDst, 0, READ_SIZE);
828 memset(bufferDataDst, 0, READ_SIZE);
831 rval = pers_db_cursor_get_key(handle, bufferKeySrc, 128);
832 fail_unless(rval != -1, "Cursor failed to get key!!");
834 rval = pers_db_cursor_get_data(handle, bufferDataSrc, 128);
835 fail_unless(rval != -1, "Cursor failed to get data!!");
837 size = pers_db_cursor_get_data_size(handle);
838 fail_unless(size != -1, "Cursor failed to get size!!");
839 //printf("1. Key: %s | Data: %s » Size: %d \n", bufferKeySrc, bufferDataSrc, size);
842 rval = pers_db_cursor_get_key(handle1, bufferKeyDst, 128);
843 fail_unless(rval != -1, "Cursor failed to get key!!");
845 rval = pers_db_cursor_get_data(handle1, bufferDataDst, 128);
846 fail_unless(rval != -1, "Cursor failed to get data!!");
848 size = pers_db_cursor_get_data_size(handle1);
849 fail_unless(size != -1, "Cursor failed to get size!!");
850 //printf(" 2. Key: %s | Data: %s » Size: %d \n", bufferKeyDst, bufferDataDst, size);
852 while( (pers_db_cursor_next(handle) == 0) && (pers_db_cursor_next(handle1) == 0) ); // next cursor
855 rval = pers_db_cursor_destroy(handle);
856 fail_unless(rval != -1, "Failed to destroy cursor!!");
858 rval = pers_db_cursor_destroy(handle1);
859 fail_unless(rval != -1, "Failed to destroy cursor!!");
867 START_TEST(test_Plugin)
870 unsigned char buffer[READ_SIZE] = {0};
872 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
874 ret = pclInitLibrary(gTheAppId, shutdownReg);
875 fail_unless(ret <= 1, "Failed to init PCL");
877 ret = pclKeyReadData(0xFF, "language/country_code", 0, 0, buffer, READ_SIZE);
878 fail_unless(ret != EPERS_NOT_INITIALIZED);
879 fail_unless(strncmp((char*)buffer,"Custom plugin -> plugin_get_data: secure!",
880 strlen((char*)buffer)) == 0, "Buffer SECURE not correctly read");
883 ret = pclKeyReadData(0xFF, "language/country_code_early", 0, 0, buffer, READ_SIZE);
884 fail_unless(ret != EPERS_NOT_INITIALIZED);
885 //printf("B U F F E R - early: %s\n", buffer);
886 fail_unless(strncmp((char*)buffer,"Custom plugin -> plugin_get_data: early!",
887 strlen((char*)buffer)) == 0, "Buffer EARLY not correctly read");
889 ret = pclKeyReadData(0xFF, "language/country_code_emergency", 0, 0, buffer, READ_SIZE);
890 fail_unless(ret != EPERS_NOT_INITIALIZED);
891 //printf("B U F F E R - emergency: %s\n", buffer);
892 fail_unless(strncmp((char*)buffer,"Custom plugin -> plugin_get_data: emergency!",
893 strlen((char*)buffer)) == 0, "Buffer EMERGENCY not correctly read");
895 ret = pclKeyReadData(0xFF, "language/info", 0, 0, buffer, READ_SIZE);
896 fail_unless(ret != EPERS_NOT_INITIALIZED);
897 //printf("B U F F E R - hwinfo: %s\n", buffer);
898 fail_unless(strncmp((char*)buffer,"Custom plugin -> plugin_get_data: hwinfo!",
899 strlen((char*)buffer)) == 0, "Buffer HWINFO not correctly read");
901 ret = pclKeyReadData(0xFF, "language/country_code_custom3", 0, 0, buffer, READ_SIZE);
902 fail_unless(ret != EPERS_NOT_INITIALIZED);
903 //printf("B U F F E R - hwinfo: %s\n", buffer);
904 fail_unless(strncmp((char*)buffer,"Custom plugin -> plugin_get_data: custom3!",
905 strlen((char*)buffer)) == 0, "Buffer CUSTOM 3 not correctly read");
915 START_TEST(test_ReadDefault)
918 unsigned char buffer[READ_SIZE] = {0};
920 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
922 ret = pclInitLibrary(gTheAppId, shutdownReg);
923 fail_unless(ret <= 1, "Failed to init PCL");
925 ret = pclKeyReadData(0xFF, "statusHandle/default01", 3, 2, buffer, READ_SIZE);
926 fail_unless(ret != EPERS_NOT_INITIALIZED);
927 //printf("B U F F E R: %s\n", buffer);
928 fail_unless(strncmp((char*)buffer,"DEFAULT_01!", strlen((char*)buffer)) == 0, "Buffer not correctly read");
930 ret = pclKeyReadData(0xFF, "statusHandle/default02", 3, 2, buffer, READ_SIZE);
931 fail_unless(ret != EPERS_NOT_INITIALIZED);
932 //printf("B U F F E R: %s\n", buffer);
933 fail_unless(strncmp((char*)buffer,"DEFAULT_02!", strlen((char*)buffer)) == 0, "Buffer not correctly read");
941 START_TEST(test_ReadConfDefault)
944 unsigned char buffer[READ_SIZE] = {0};
946 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
948 ret = pclInitLibrary(gTheAppId, shutdownReg);
949 fail_unless(ret <= 1, "Failed to init PCL");
951 ret = pclKeyReadData(0xFF, "statusHandle/confdefault01", 3, 2, buffer, READ_SIZE);
952 fail_unless(ret != EPERS_NOT_INITIALIZED);
953 fail_unless(strncmp((char*)buffer,"CONF_DEFAULT_01!", strlen((char*)buffer)) == 0, "Buffer not correctly read");
955 ret = pclKeyReadData(0xFF, "statusHandle/confdefault02", 3, 2, buffer, READ_SIZE);
956 fail_unless(ret != EPERS_NOT_INITIALIZED);
957 fail_unless(strncmp((char*)buffer,"CONF_DEFAULT_02!", strlen((char*)buffer)) == 0, "Buffer not correctly read");
965 START_TEST(test_GetPath)
969 const char* thePath = "/Data/mnt-wt/lt-persistence_client_library_test/user/1/seat/1/media/mediaDB_create.db";
970 unsigned int pathSize = 0;
972 unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL;
974 ret = pclInitLibrary(gTheAppId, shutdownReg);
975 fail_unless(ret <= 1, "Failed to init PCL");
977 ret = pclFileCreatePath(0xFF, "media/mediaDB_create.db", 1, 1, &path, &pathSize);
978 fail_unless(strncmp((char*)path, thePath, strlen((char*)path)) == 0, "Path not correct");
979 fail_unless(pathSize == strlen((char*)path), "Path size not correct");
981 pclFileReleasePath(ret);
988 static Suite * persistencyClientLib_suite()
990 Suite * s = suite_create("Persistency client library");
992 TCase * tc_persGetData = tcase_create("GetData");
993 tcase_add_test(tc_persGetData, test_GetData);
995 TCase * tc_persSetData = tcase_create("SetData");
996 tcase_add_test(tc_persSetData, test_SetData);
998 TCase * tc_persSetDataNoPRCT = tcase_create("SetDataNoPRCT");
999 tcase_add_test(tc_persSetDataNoPRCT, test_SetDataNoPRCT);
1001 TCase * tc_persGetDataSize = tcase_create("GetDataSize");
1002 tcase_add_test(tc_persGetDataSize, test_GetDataSize);
1004 TCase * tc_persDeleteData = tcase_create("DeleteData");
1005 tcase_add_test(tc_persDeleteData, test_DeleteData);
1007 TCase * tc_persGetDataHandle = tcase_create("GetDataHandle");
1008 tcase_add_test(tc_persGetDataHandle, test_GetDataHandle);
1010 TCase * tc_persDataHandle = tcase_create("DataHandle");
1011 tcase_add_test(tc_persDataHandle, test_DataHandle);
1013 TCase * tc_persDataHandleOpen = tcase_create("DataHandleOpen");
1014 tcase_add_test(tc_persDataHandleOpen, test_DataHandleOpen);
1016 TCase * tc_persDataFile = tcase_create("DataFile");
1017 tcase_add_test(tc_persDataFile, test_DataFile);
1019 TCase * tc_persDataFileRecovery = tcase_create("DataFileRecovery");
1020 tcase_add_test(tc_persDataFileRecovery, test_DataFileRecovery);
1022 TCase * tc_Cursor = tcase_create("Cursor");
1023 tcase_add_test(tc_Cursor, test_Cursor);
1025 TCase * tc_Plugin = tcase_create("Plugin");
1026 tcase_add_test(tc_Plugin, test_Plugin);
1028 TCase * tc_ReadDefault = tcase_create("ReadDefault");
1029 tcase_add_test(tc_ReadDefault, test_ReadDefault);
1031 TCase * tc_ReadConfDefault = tcase_create("ReadConfDefault");
1032 tcase_add_test(tc_ReadConfDefault, test_ReadConfDefault);
1034 TCase * tc_GetPath = tcase_create("GetPath");
1035 tcase_add_test(tc_GetPath, test_GetPath);
1037 suite_add_tcase(s, tc_persSetData);
1040 suite_add_tcase(s, tc_persGetData);
1041 suite_add_tcase(s, tc_persSetDataNoPRCT);
1042 suite_add_tcase(s, tc_persGetDataSize);
1043 suite_add_tcase(s, tc_persDeleteData);
1044 suite_add_tcase(s, tc_persGetDataHandle);
1045 suite_add_tcase(s, tc_persDataHandle);
1046 suite_add_tcase(s, tc_persDataHandleOpen);
1047 suite_add_tcase(s, tc_persDataFile);
1048 suite_add_tcase(s, tc_persDataFileRecovery);
1049 suite_add_tcase(s, tc_Cursor);
1050 suite_add_tcase(s, tc_ReadDefault);
1051 suite_add_tcase(s, tc_ReadConfDefault);
1052 suite_add_tcase(s, tc_GetPath);
1054 //suite_add_tcase(s, tc_Plugin); // activate only if the plugins are available
1059 int main(int argc, char *argv[])
1063 // assign application name
1064 strncpy(gTheAppId, "lt-persistence_client_library_test", MaxAppNameLen);
1065 gTheAppId[MaxAppNameLen-1] = '\0';
1067 /// debug log and trace (DLT) setup
1068 DLT_REGISTER_APP("test","tests the persistence client library");
1071 Suite * s = persistencyClientLib_suite();
1072 SRunner * sr = srunner_create(s);
1073 srunner_run_all(sr, CK_VERBOSE);
1074 nr_failed = srunner_ntests_failed(sr);
1079 // unregister debug log and trace
1080 DLT_UNREGISTER_APP();
1084 return (0==nr_failed)?EXIT_SUCCESS:EXIT_FAILURE;