1 /******************************************************************************
4 * Company XS Embedded GmbH
5 *****************************************************************************/
6 /******************************************************************************
7 Permission is hereby granted, free of charge, to any person obtaining
8 a copy of this software and associated documentation files (the "Software"),
9 to deal in the Software without restriction, including without limitation
10 the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 and/or sell copies of the Software, and to permit persons to whom the
12 Software is furnished to do so, subject to the following conditions:
14 The above copyright notice and this permission notice shall be included
15 in all copies or substantial portions of the Software.
17 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
21 DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
23 OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 ******************************************************************************/
26 * @file persistence_client_library_test.c
27 * @ingroup Persistence client library test
28 * @author Ingo Huerner
29 * @brief Test of persistence client library
37 #include <unistd.h> /* exit */
43 #include "../include/persistence_client_library_key.h"
44 #include "../include/persistence_client_library_file.h"
45 #include "../include/persistence_client_library_error_def.h"
49 #define NUM_OF_FILES 3
50 #define READ_SIZE 1024
53 char* dayOfWeek[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
57 START_TEST (test_persGetData)
60 unsigned char buffer[READ_SIZE];
62 memset(buffer, 0, READ_SIZE);
63 ret = key_read_data(0xFF, "/language/country_code", 0, 0, buffer, READ_SIZE); // "/Data/mnt-c/Appl-1/cached.gvdb" => "/Node/pos/last position"
64 fail_unless(strncmp((char*)buffer, "Custom plugin -> plugin_get_data_handle", strlen((char*)buffer)) == 0, "Buffer not correctly read");
65 fail_unless(ret = strlen("Custom plugin -> plugin_get_data_handle"));
67 memset(buffer, 0, READ_SIZE);
68 ret = key_read_data(0xFF, "/pos/last_position", 0, 0, buffer, READ_SIZE); // "/Data/mnt-c/Appl-1/cached.gvdb" => "/Node/pos/last position"
69 fail_unless(strncmp((char*)buffer, "+48° 10' 38.95\", +8° 44' 39.06\"", strlen((char*)buffer)) == 0, "Buffer not correctly read");
70 fail_unless(ret = strlen("+48° 10' 38.95\", +8° 44' 39.06\""));
72 memset(buffer, 0, READ_SIZE);
73 ret = key_read_data(0, "/language/current_language", 3, 0, buffer, READ_SIZE); // "/Data/mnt-wt/Shared/Public/wt.dconf" => "/User/3/language/current_language"
74 fail_unless(strncmp((char*)buffer, "S H A R E D D A T A => not implemented yet", strlen((char*)buffer)) == 0, "Buffer not correctly read");
76 memset(buffer, 0, READ_SIZE);
77 ret = key_read_data(0xFF, "/status/open_document", 3, 2, buffer, READ_SIZE); // "/Data/mnt-c/Appl-1/cached.gvdb" => "/User/3/Seat/2/status/open_document"
78 fail_unless(strncmp((char*)buffer, "/var/opt/user_manual_climateControl.pdf", strlen((char*)buffer)) == 0, "Buffer not correctly read");
80 memset(buffer, 0, READ_SIZE);
81 ret = key_read_data(0x20, "/address/home_address", 4, 0, buffer, READ_SIZE); // "/Data/mnt-c/Shared/Group/20/cached.dconf" => "/User/4/address/home_address"
82 fail_unless(strncmp((char*)buffer, "S H A R E D D A T A => not implemented yet", strlen((char*)buffer)) == 0, "Buffer not correctly read");
84 memset(buffer, 0, READ_SIZE);
85 ret = key_read_data(0xFF, "/pos/last satellites", 0, 0, buffer, READ_SIZE); // "/Data/mnt-wt/Appl-1/wt.gvdb" => "/Node/pos/last satellites"
86 fail_unless(strncmp((char*)buffer, "17", strlen((char*)buffer)) == 0, "Buffer not correctly read");
88 memset(buffer, 0, READ_SIZE);
89 ret = key_read_data(0x84, "/links/last link", 2, 0, buffer, READ_SIZE); // "/Data/mnt-wt/Appl-2/wt.gvdb" => "/84/User/2/links/last link"
90 fail_unless(strncmp((char*)buffer, "/last_exit/brooklyn", strlen((char*)buffer)) == 0, "Buffer not correctly read");
92 memset(buffer, 0, READ_SIZE);
93 ret = key_read_data(0x84, "/links/last link", 2, 1, buffer, READ_SIZE); // "/Data/mnt-wt/Appl-2/wt.gvdb" => "/84/User/2/links/last link"
94 fail_unless(strncmp((char*)buffer, "/last_exit/queens", strlen((char*)buffer)) == 0, "Buffer not correctly read");
100 START_TEST (test_persGetDataHandle)
102 int ret = 0, handle = 0, handle2 = 0, handle3 = 0, handle4 = 0, size = 0;
103 unsigned char buffer[READ_SIZE];
107 char sysTimeBuffer[128];
108 memset(buffer, 0, READ_SIZE);
110 locTime = localtime(&t);
112 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),
113 locTime->tm_hour, locTime->tm_min, locTime->tm_sec);
114 // open handle ---------------------------------------------------
115 handle = key_handle_open(0xFF, "/posHandle/last position", 0, 0);
116 fail_unless(handle >= 0, "Failed to open handle ==> /posHandle/last position");
118 ret = key_handle_read_data(handle, buffer, READ_SIZE);
119 fail_unless(strncmp((char*)buffer, "H A N D L E: +48° 10' 38.95\", +8° 44' 39.06\"", ret-1) == 0, "Buffer not correctly read");
121 size = key_handle_get_size(handle);
122 fail_unless(size = strlen("H A N D L E: +48° 10' 38.95\", +8° 44' 39.06\""));
125 // open handle ---------------------------------------------------
126 handle2 = key_handle_open(0xFF, "/statusHandle/open_document", 3, 2);
127 fail_unless(handle2 >= 0, "Failed to open handle /statusHandle/open_document");
129 size = key_handle_write_data(handle2, (unsigned char*)sysTimeBuffer, strlen(sysTimeBuffer));
130 fail_unless(size = strlen(sysTimeBuffer));
132 ret = key_handle_close(handle2);
135 // open handle ---------------------------------------------------
136 memset(buffer, 0, READ_SIZE);
137 handle4 = key_handle_open(0xFF, "/language/country_code", 0, 0);
138 fail_unless(handle4 >= 0, "Failed to open handle /language/country_code");
140 ret = key_handle_read_data(handle4, buffer, READ_SIZE);
141 fail_unless(strncmp((char*)buffer, "Custom plugin -> plugin_get_data_handle", -1) == 0, "Buffer not correctly read");
143 size = key_handle_get_size(handle4);
144 fail_unless(size = strlen("Custom plugin -> plugin_get_data_handle"));
146 ret = key_handle_write_data(handle4, (unsigned char*)"Only dummy implementation behind custom library", READ_SIZE);
149 // open handle ---------------------------------------------------
150 handle3 = key_handle_open(0xFF, "/statusHandle/open_document", 3, 2);
151 fail_unless(handle3 >= 0, "Failed to open handle /statusHandle/open_document");
153 ret = key_handle_read_data(handle3, buffer, READ_SIZE);
154 fail_unless(strncmp((char*)buffer, sysTimeBuffer, strlen(sysTimeBuffer)) == 0, "Buffer not correctly read");
156 size = key_handle_get_size(handle3);
157 fail_unless(size = strlen(sysTimeBuffer));
160 ret = key_handle_close(handle);
161 ret = key_handle_close(handle3);
162 ret = key_handle_close(handle4);
170 START_TEST(test_persSetData)
173 unsigned char buffer[READ_SIZE];
174 char write1[READ_SIZE];
175 char write2[READ_SIZE];
176 char sysTimeBuffer[256];
181 locTime = localtime(&t);
182 memset(buffer, 0, READ_SIZE);
183 memset(write1, 0, READ_SIZE);
184 memset(write2, 0, READ_SIZE);
187 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),
188 locTime->tm_hour, locTime->tm_min, locTime->tm_sec);
189 ret = key_write_data(0xFF, "/69", 1, 2, (unsigned char*)sysTimeBuffer, strlen(sysTimeBuffer));
190 fail_unless(ret == strlen(sysTimeBuffer), "Wrong write size");
192 snprintf(write1, 128, "%s %s", "/70", sysTimeBuffer);
193 ret = key_write_data(0xFF, "/70", 1, 2, (unsigned char*)write1, strlen(write1));
194 fail_unless(ret == strlen(write1), "Wrong write size");
196 snprintf(write2, 128, "%s %s", "/key_70", sysTimeBuffer);
197 ret = key_write_data(0xFF, "/key_70", 1, 2, (unsigned char*)write2, strlen(write2));
198 fail_unless(ret == strlen(write2), "Wrong write size");
200 // read data again and and verify datat has been written correctly
201 memset(buffer, 0, READ_SIZE);
202 ret = key_read_data(0xFF, "/69", 1, 2, buffer, READ_SIZE);
203 fail_unless(strncmp((char*)buffer, sysTimeBuffer, strlen(sysTimeBuffer)) == 0, "Buffer not correctly read");
204 fail_unless(ret == strlen(sysTimeBuffer), "Wrong read size");
206 memset(buffer, 0, READ_SIZE);
207 ret = key_read_data(0xFF, "/70", 1, 2, buffer, READ_SIZE);
208 fail_unless(strncmp((char*)buffer, write1, strlen(write1)) == 0, "Buffer not correctly read");
209 fail_unless(ret == strlen(write1), "Wrong read size");
211 memset(buffer, 0, READ_SIZE);
212 ret = key_read_data(0xFF, "/key_70", 1, 2, buffer, READ_SIZE);
213 fail_unless(strncmp((char*)buffer, write2, strlen(write2)) == 0, "Buffer not correctly read");
214 fail_unless(ret == strlen(write2), "Wrong read size");
221 START_TEST(test_persGetDataSize)
225 size = key_get_size(0xFF, "/status/open_document", 3, 2);
226 fail_unless(size == strlen("/var/opt/user_manual_climateControl.pdf"), "Invalid size");
228 size = key_get_size(0x84, "/links/last link", 2, 1);
229 fail_unless(size == strlen("/last_exit/queens"), "Invalid size");
235 START_TEST(test_persDeleteData)
238 unsigned char buffer[READ_SIZE];
241 rval = key_delete(0xFF, "/key_70", 1, 2);
242 fail_unless(rval == 0, "Failed to delete key");
243 // reading from key must fail now
244 rval = key_read_data(0xFF, "/key_70", 1, 2, buffer, READ_SIZE);
245 fail_unless(rval == EPERS_NOKEY, "Read form key key_70 works, but should fail");
248 rval = key_delete(0xFF, "/70", 1, 2);
249 fail_unless(rval == 0, "Failed to delete key");
250 rval = key_read_data(0xFF, "/70", 1, 2, buffer, READ_SIZE);
251 fail_unless(rval == EPERS_NOKEY, "Read form key 70 works, but should fail");
257 START_TEST(test_persDataFile)
259 int fd = 0, i = 0, idx = 0;
260 int size = 0, ret = 0;
261 int writeSize = 16*1024;
262 unsigned char buffer[READ_SIZE];
263 const char* refBuffer = "/Data/mnt-wt/lt-persistence_client_library_test/user/1/seat/1/media";
265 char* fileMap = NULL;
266 writeBuffer = malloc(writeSize);
269 // fill buffer a sequence
270 for(i = 0; i<(writeSize/8); i++)
272 writeBuffer[idx++] = 'A';
273 writeBuffer[idx++] = 'B';
274 writeBuffer[idx++] = 'C';
275 writeBuffer[idx++] = ' ';
276 writeBuffer[idx++] = 'D';
277 writeBuffer[idx++] = 'E';
278 writeBuffer[idx++] = 'F';
279 writeBuffer[idx++] = ' ';
281 memset(buffer, 0, READ_SIZE);
284 fd = open("/Data/mnt-wt/lt-persistence_client_library_test/user/1/seat/1/media/mediaDBWrite.db",
285 O_CREAT|O_RDWR|O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
288 // open ----------------------------------------------------------
289 fd = file_open(0xFF, "/media/mediaDB.db", 1, 1);
290 fail_unless(fd != -1, "Could not open file ==> /media/mediaDB.db");
292 size = file_get_size(fd);
293 fail_unless(size == 68, "Wrong file size");
295 size = file_read_data(fd, buffer, READ_SIZE);
296 fail_unless(strncmp((char*)buffer, refBuffer, strlen(refBuffer)) == 0, "Buffer not correctly read");
297 fail_unless(size == (strlen(refBuffer)+1), "Wrong size returned"); // strlen + 1 ==> inlcude cr/lf
299 ret = file_close(fd);
300 fail_unless(ret == 0, "Failed to close file");
303 // open ----------------------------------------------------------
304 fd = file_open(0xFF, "/media/mediaDBWrite.db", 1, 1);
305 fail_unless(fd != -1, "Could not open file ==> /media/mediaDBWrite.db");
307 size = file_write_data(fd, writeBuffer, strlen(writeBuffer));
308 fail_unless(size == strlen(writeBuffer), "Failed to write data");
310 ret = file_close(fd);
311 fail_unless(ret == 0, "Failed to close file");
314 // remove ----------------------------------------------------------
315 ret = file_remove(0xFF, "/media/mediaDBWrite.db", 1, 1);
316 fail_unless(ret == 0, "File can't be removed ==> /media/mediaDBWrite.db");
318 fd = file_open(0xFF, "/media/mediaDBWrite.db", 1, 1);
319 fail_unless(fd == -1, "File can be opend, but should not ==> /media/mediaDBWrite.db");
322 // map file ------------------------------------------------------
323 fd = file_open(0xFF, "/media/mediaDB.db", 1, 1);
325 size = file_get_size(fd);
326 file_map_data(fileMap, size, 0, fd);
327 fail_unless(fileMap != MAP_FAILED, "Failed to map file");
329 ret = file_unmap_data(fileMap, size);
330 fail_unless(ret != -1, "Failed to unmap file");
333 size = file_get_size(1024);
334 fail_unless(ret == 0, "Got size, but should not");
343 START_TEST(test_persDataHandle)
345 int handle1 = 0, handle2 = 0;
349 handle1 = file_open(0xFF, "/media/mediaDB.db", 1, 1);
350 fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB.db");
352 ret = file_close(handle1);
353 fail_unless(handle1 != -1, "Could not open file ==> /media/mediaDB.db");
355 ret = file_close(1024);
356 fail_unless(ret == -1, "Could close file, but should not!!");
358 ret = file_close(17);
359 fail_unless(ret == -1, "Could close file, but should not!!");
363 handle2 = key_handle_open(0xFF, "/statusHandle/open_document", 3, 2);
364 fail_unless(handle2 >= 0, "Failed to open handle /statusHandle/open_document");
366 ret = key_handle_close(handle2);
367 fail_unless(ret != -1, "Failed to close handle!!");
369 ret = key_handle_close(1024);
370 fail_unless(ret == -1, "Could close, but should not!!");
376 static Suite * persistencyClientLib_suite()
378 Suite * s = suite_create("Persistency client library");
380 TCase * tc_persGetData = tcase_create("persGetData");
381 tcase_add_test(tc_persGetData, test_persGetData);
383 TCase * tc_persSetData = tcase_create("persSetData");
384 tcase_add_test(tc_persSetData, test_persSetData);
386 TCase * tc_persGetDataSize = tcase_create("persGetDataSize");
387 tcase_add_test(tc_persGetDataSize, test_persGetDataSize);
389 TCase * tc_persDeleteData = tcase_create("persDeleteData");
390 tcase_add_test(tc_persDeleteData, test_persDeleteData);
392 TCase * tc_persGetDataHandle = tcase_create("persGetDataHandle");
393 tcase_add_test(tc_persGetDataHandle, test_persGetDataHandle);
395 TCase * tc_persDataHandle = tcase_create("persDataHandle");
396 tcase_add_test(tc_persDataHandle, test_persDataHandle);
398 TCase * tc_persDataFile = tcase_create("persDataFile");
399 tcase_add_test(tc_persDataFile, test_persDataFile);
402 suite_add_tcase(s, tc_persGetData);
403 suite_add_tcase(s, tc_persSetData);
404 suite_add_tcase(s, tc_persGetDataSize);
405 suite_add_tcase(s, tc_persDeleteData);
406 suite_add_tcase(s, tc_persGetDataHandle);
407 suite_add_tcase(s, tc_persDataHandle);
408 suite_add_tcase(s, tc_persDataFile);
416 int main(int argc, char *argv[])
420 Suite * s = persistencyClientLib_suite();
421 SRunner * sr = srunner_create(s);
422 srunner_run_all(sr, CK_NORMAL);
423 nr_failed = srunner_ntests_failed(sr);
426 return (0==nr_failed)?EXIT_SUCCESS:EXIT_FAILURE;