19 #include "eet_suite.h"
21 START_TEST(eet_test_init)
33 typedef struct _Eet_Test_Basic_Type Eet_Test_Basic_Type;
34 struct _Eet_Test_Basic_Type
48 unsigned long long ul;
49 Eet_Test_Basic_Type *empty;
50 Eet_Test_Basic_Type *with;
53 #define EET_TEST_CHAR 0x42
54 #define EET_TEST_SHORT 0x4224
55 #define EET_TEST_INT 0x42211224
56 #define EET_TEST_LONG_LONG 0x84CB42211224BC48
57 #define EET_TEST_STRING "my little test with escape \\\""
58 #define EET_TEST_KEY1 "key1"
59 #define EET_TEST_KEY2 "key2"
60 #define EET_TEST_FLOAT 123.45689
61 #define EET_TEST_FLOAT2 1.0
62 #define EET_TEST_FLOAT3 0.25
63 #define EET_TEST_FLOAT4 0.0001234
64 #define EET_TEST_DOUBLE 123456789.9876543210
65 #define EET_TEST_DOUBLE2 1.0
66 #define EET_TEST_DOUBLE3 0.25
67 #define EET_TEST_FILE_KEY1 "keys/data/1"
68 #define EET_TEST_FILE_KEY2 "keys/data/2"
69 #define EET_TEST_FILE_IMAGE "keys/images/"
71 typedef struct _Eet_Test_Image Eet_Test_Image;
72 struct _Eet_Test_Image
77 unsigned int color[64];
80 static const Eet_Test_Image test_noalpha = {
83 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
84 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
85 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
86 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
87 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
88 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
89 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
90 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA
94 static const Eet_Test_Image test_alpha = {
97 0x0FAA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x0F110000,
98 0x0000AA00, 0x0F0000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x0F110000, 0x00AA0000,
99 0x000000AA, 0x00110000, 0x0FAA0000, 0x0000AA00, 0x000000AA, 0x0F110000, 0x00AA0000, 0x0000AA00,
100 0x00110000, 0x00AA0000, 0x0000AA00, 0x0F0000AA, 0x0F110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
101 0x00AA0000, 0x0000AA00, 0x000000AA, 0x0F110000, 0x0FAA0000, 0x0000AA00, 0x000000AA, 0x00110000,
102 0x0000AA00, 0x000000AA, 0x0F110000, 0x00AA0000, 0x0000AA00, 0x0F0000AA, 0x00110000, 0x00AA0000,
103 0x000000AA, 0x0F110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x0FAA0000, 0x0000AA00,
104 0x0F110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x0F0000AA
109 _eet_test_basic_set(Eet_Test_Basic_Type *res, int i)
111 res->c = EET_TEST_CHAR;
112 res->s = EET_TEST_SHORT;
113 res->i = EET_TEST_INT + i;
114 res->l = EET_TEST_LONG_LONG;
115 res->str = EET_TEST_STRING;
116 res->istr = EET_TEST_STRING;
117 res->f1 = - EET_TEST_FLOAT;
118 res->d = - EET_TEST_DOUBLE;
119 res->f2 = EET_TEST_FLOAT4;
120 res->uc = EET_TEST_CHAR;
121 res->us = EET_TEST_SHORT;
122 res->ui = EET_TEST_INT;
123 res->ul = EET_TEST_LONG_LONG;
129 Eet_Test_Basic_Type *tmp;
131 tmp = malloc(sizeof (Eet_Test_Basic_Type));
135 tmp->c = EET_TEST_CHAR;
136 tmp->s = EET_TEST_SHORT;
137 tmp->i = EET_TEST_INT + i + 1;
138 tmp->l = EET_TEST_LONG_LONG;
139 tmp->str = EET_TEST_STRING;
140 tmp->istr = EET_TEST_STRING;
141 tmp->f1 = - EET_TEST_FLOAT;
142 tmp->d = - EET_TEST_DOUBLE;
143 tmp->f2 = EET_TEST_FLOAT4;
144 tmp->uc = EET_TEST_CHAR;
145 tmp->us = EET_TEST_SHORT;
146 tmp->ui = EET_TEST_INT;
147 tmp->ul = EET_TEST_LONG_LONG;
154 _eet_test_basic_check(Eet_Test_Basic_Type *result, int i)
158 fail_if(result->c != EET_TEST_CHAR);
159 fail_if(result->s != EET_TEST_SHORT);
160 fail_if(result->i != EET_TEST_INT + i);
161 fail_if(result->l != (long long) EET_TEST_LONG_LONG);
162 fail_if(strcmp(result->str, EET_TEST_STRING) != 0);
163 fail_if(strcmp(result->istr, EET_TEST_STRING) != 0);
164 fail_if(result->uc != EET_TEST_CHAR);
165 fail_if(result->us != EET_TEST_SHORT);
166 fail_if(result->ui != EET_TEST_INT);
167 fail_if(result->ul != EET_TEST_LONG_LONG);
169 tmp = (result->f1 + EET_TEST_FLOAT);
170 if (tmp < 0) tmp = -tmp;
171 fail_if(tmp > 0.005);
173 tmp = (result->f2 - EET_TEST_FLOAT4);
174 if (tmp < 0) tmp = -tmp;
175 fail_if(tmp > 0.005);
177 tmp = (result->d + EET_TEST_DOUBLE);
178 if (tmp < 0) tmp = -tmp;
179 fail_if(tmp > 0.00005);
181 fail_if(result->empty != NULL);
184 Eet_Test_Basic_Type *tmp;
187 fail_if(tmp == NULL);
189 fail_if(tmp->c != EET_TEST_CHAR);
190 fail_if(tmp->s != EET_TEST_SHORT);
191 fail_if(tmp->i != EET_TEST_INT + i + 1);
192 fail_if(tmp->l != (long long) EET_TEST_LONG_LONG);
193 fail_if(strcmp(tmp->str, EET_TEST_STRING) != 0);
194 fail_if(strcmp(tmp->istr, EET_TEST_STRING) != 0);
195 fail_if(tmp->uc != EET_TEST_CHAR);
196 fail_if(tmp->us != EET_TEST_SHORT);
197 fail_if(tmp->ui != EET_TEST_INT);
198 fail_if(tmp->ul != EET_TEST_LONG_LONG);
201 fail_if(result->with != NULL);
205 _eet_build_basic_descriptor(Eet_Data_Descriptor *edd)
207 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "c", c, EET_T_CHAR);
208 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "s", s, EET_T_SHORT);
209 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "i", i, EET_T_INT);
210 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "l", l, EET_T_LONG_LONG);
211 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "str", str, EET_T_STRING);
212 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "istr", istr, EET_T_INLINED_STRING);
213 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "f1", f1, EET_T_FLOAT);
214 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "f2", f2, EET_T_FLOAT);
215 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "d", d, EET_T_DOUBLE);
216 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "uc", uc, EET_T_UCHAR);
217 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "us", us, EET_T_USHORT);
218 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "ui", ui, EET_T_UINT);
219 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "ul", ul, EET_T_ULONG_LONG);
221 EET_DATA_DESCRIPTOR_ADD_SUB(edd, Eet_Test_Basic_Type, "empty", empty, edd);
222 EET_DATA_DESCRIPTOR_ADD_SUB(edd, Eet_Test_Basic_Type, "with", with, edd);
225 START_TEST(eet_test_basic_data_type_encoding_decoding)
227 Eet_Data_Descriptor *edd;
228 Eet_Test_Basic_Type *result;
229 Eet_Data_Descriptor_Class eddc;
230 Eet_Test_Basic_Type etbt;
236 _eet_test_basic_set(&etbt, 0);
238 eet_test_setup_eddc(&eddc);
239 eddc.name = "Eet_Test_Basic_Type";
240 eddc.size = sizeof(Eet_Test_Basic_Type);
242 edd = eet_data_descriptor_stream_new(&eddc);
245 _eet_build_basic_descriptor(edd);
247 transfert = eet_data_descriptor_encode(edd, &etbt, &size);
248 fail_if(!transfert || size <= 0);
250 result = eet_data_descriptor_decode(edd, transfert, size);
253 _eet_test_basic_check(result, 0);
258 eet_data_descriptor_free(edd);
264 typedef struct _Eet_Test_Ex_Type Eet_Test_Ex_Type;
265 struct _Eet_Test_Ex_Type
270 unsigned long long l;
287 Eet_Test_Basic_Type sarray1[10];
288 unsigned int sarray2[5];
289 unsigned int varray1_count;
290 unsigned int *varray1;
291 unsigned int varray2_count;
292 Eet_Test_Basic_Type *varray2;
296 unsigned long long ul;
305 _eet_build_ex_descriptor(Eet_Data_Descriptor *edd)
307 Eet_Data_Descriptor_Class eddc;
308 Eet_Test_Ex_Type etbt;
309 Eet_Data_Descriptor *eddb;
311 eet_test_setup_eddc(&eddc);
312 eddc.name = "Eet_Test_Basic_Type";
313 eddc.size = sizeof(Eet_Test_Basic_Type);
314 eddb = eet_data_descriptor_file_new(&eddc);
317 _eet_build_basic_descriptor(eddb);
319 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "c", c, EET_T_CHAR);
320 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "s", s, EET_T_SHORT);
321 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "i", i, EET_T_INT);
322 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "l", l, EET_T_LONG_LONG);
323 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "str", str, EET_T_STRING);
324 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "istr", istr, EET_T_INLINED_STRING);
325 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f1", f1, EET_T_FLOAT);
326 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f2", f2, EET_T_FLOAT);
327 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f3", f3, EET_T_FLOAT);
328 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f4", f4, EET_T_FLOAT);
329 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d1", d1, EET_T_DOUBLE);
330 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d2", d2, EET_T_DOUBLE);
331 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d3", d3, EET_T_DOUBLE);
332 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d4", d4, EET_T_DOUBLE);
333 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "uc", uc, EET_T_UCHAR);
334 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "us", us, EET_T_USHORT);
335 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "ui", ui, EET_T_UINT);
336 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "ul", ul, EET_T_ULONG_LONG);
337 EET_DATA_DESCRIPTOR_ADD_ARRAY(edd, Eet_Test_Ex_Type, "sarray1", sarray1, eddb);
338 EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(edd, Eet_Test_Ex_Type, "varray2", varray2, eddb);
339 eet_data_descriptor_element_add(edd, "varray1", EET_T_INT, EET_G_VAR_ARRAY,
340 (char *)(&(etbt.varray1)) - (char *)(&(etbt)),
341 (char *)(&(etbt.varray1_count)) - (char *)(&(etbt)), /* 0, */NULL, NULL);
342 eet_data_descriptor_element_add(edd, "sarray2", EET_T_INT, EET_G_ARRAY,
343 (char *)(&(etbt.sarray2)) - (char *)(&(etbt)),
344 /* 0, */sizeof(etbt.sarray2)/sizeof(etbt.sarray2[0]), NULL, NULL);
345 eet_data_descriptor_element_add(edd, "charray", EET_T_STRING, EET_G_ARRAY,
346 (char *)(&(etbt.charray)) - (char *)(&(etbt)),
347 /* 0, */sizeof(etbt.charray)/sizeof(etbt.charray[0]), NULL, NULL);
348 EET_DATA_DESCRIPTOR_ADD_LIST(edd, Eet_Test_Ex_Type, "list", list, edd);
349 EET_DATA_DESCRIPTOR_ADD_HASH(edd, Eet_Test_Ex_Type, "hash", hash, edd);
350 eet_data_descriptor_element_add(edd, "ilist", EET_T_INT, EET_G_LIST,
351 (char *)(&(etbt.ilist)) - (char *)(&(etbt)),
352 0, /* 0, */NULL, NULL);
353 eet_data_descriptor_element_add(edd, "ihash", EET_T_INT, EET_G_HASH,
354 (char *)(&(etbt.ihash)) - (char *)(&(etbt)),
355 0, /* 0, */NULL, NULL);
356 eet_data_descriptor_element_add(edd, "slist", EET_T_STRING, EET_G_LIST,
357 (char *)(&(etbt.slist)) - (char *)(&(etbt)),
358 0, /* 0, */NULL, NULL);
359 eet_data_descriptor_element_add(edd, "shash", EET_T_STRING, EET_G_HASH,
360 (char *)(&(etbt.shash)) - (char *)(&(etbt)),
361 0, /* 0, */NULL, NULL);
364 static Eet_Test_Ex_Type*
365 _eet_test_ex_set(Eet_Test_Ex_Type *res, int offset)
369 if (!res) res = malloc( sizeof(Eet_Test_Ex_Type));
370 if (!res) return NULL;
372 res->c = EET_TEST_CHAR + offset;
373 res->s = EET_TEST_SHORT + offset;
374 res->i = EET_TEST_INT + offset;
375 res->l = EET_TEST_LONG_LONG + offset;
376 res->str = EET_TEST_STRING;
377 res->istr = EET_TEST_STRING;
378 res->f1 = EET_TEST_FLOAT + offset;
379 res->f2 = -(EET_TEST_FLOAT2 + offset);
380 res->f3 = EET_TEST_FLOAT3 + offset;
381 res->f4 = EET_TEST_FLOAT2 + offset;
382 res->d1 = EET_TEST_DOUBLE + offset;
383 res->d2 = -(EET_TEST_DOUBLE2 + offset);
384 res->d3 = EET_TEST_DOUBLE3 + offset;
385 res->d4 = EET_TEST_DOUBLE2 + offset;
392 for (i = 0; i < sizeof(res->charray)/sizeof(res->charray[0]); ++i)
393 res->charray[i] = NULL;
395 res->varray2 = malloc(sizeof (Eet_Test_Basic_Type) * 10);
396 res->varray1 = malloc(sizeof (int) * 5);
397 fail_if(!res->varray1 || !res->varray2);
398 for (i = 0; i < 10; ++i)
400 _eet_test_basic_set(res->sarray1 + i, i);
401 _eet_test_basic_set(res->varray2 + i, i);
403 res->varray2_count = 10;
404 for (i = 0; i < 5; ++i)
406 res->sarray2[i] = i * 42 + 1;
407 res->varray1[i] = i * 42 + 1;
409 res->varray1_count = 5;
411 res->uc = EET_TEST_CHAR + offset;
412 res->us = EET_TEST_SHORT + offset;
413 res->ui = EET_TEST_INT + offset;
414 res->ul = EET_TEST_LONG_LONG + offset;
420 _eet_test_ex_check(Eet_Test_Ex_Type *stuff, int offset)
425 if (!stuff) return 1;
427 if (stuff->c != EET_TEST_CHAR + offset) return 1;
428 if (stuff->s != EET_TEST_SHORT + offset) return 1;
429 if (stuff->i != EET_TEST_INT + offset) return 1;
430 if (stuff->l != EET_TEST_LONG_LONG + offset) return 1;
431 if (strcmp(stuff->str, EET_TEST_STRING) != 0) return 1;
432 if (strcmp(stuff->istr, EET_TEST_STRING) != 0) return 1;
434 tmp = stuff->f1 - (EET_TEST_FLOAT + offset);
435 if (tmp < 0) tmp = -tmp;
436 if (tmp > 0.005) return 1;
438 tmp = stuff->d1 - (EET_TEST_DOUBLE + offset);
439 if (tmp < 0) tmp = -tmp;
440 if (tmp > 0.00005) return 1;
442 if (stuff->f2 != - (EET_TEST_FLOAT2 + offset)) return 1;
443 if (stuff->d2 != - (EET_TEST_DOUBLE2 + offset)) return 1;
445 if (stuff->f3 != EET_TEST_FLOAT3 + offset) return 1;
446 if (stuff->d3 != EET_TEST_DOUBLE3 + offset) return 1;
448 if (stuff->f4 != EET_TEST_FLOAT2 + offset) return 1;
449 if (stuff->d4 != EET_TEST_DOUBLE2 + offset) return 1;
451 if (stuff->uc != EET_TEST_CHAR + offset) return 1;
452 if (stuff->us != EET_TEST_SHORT + offset) return 1;
453 if (stuff->ui != (unsigned int) EET_TEST_INT + offset) return 1;
454 if (stuff->ul != EET_TEST_LONG_LONG + offset) return 1;
456 if (stuff->varray1_count != 5) return 1;
457 if (stuff->varray2_count != 10) return 1;
459 for (i = 0; i < 5; ++i)
460 if (stuff->sarray2[i] != i * 42 + 1 && stuff->varray1[i] != i * 42 + 1)
463 for (i = 0; i < 10; ++i)
465 _eet_test_basic_check(stuff->sarray1 + i, i);
466 _eet_test_basic_check(stuff->varray2 + i, i);
473 func(__UNUSED__ const Eina_Hash *hash, const void *key, void *data, void *fdata)
477 if (strcmp(key, EET_TEST_KEY1) != 0
478 && strcmp(key, EET_TEST_KEY2) != 0) *res = 1;
479 if (_eet_test_ex_check(data, 2)) *res = 1;
485 func7(__UNUSED__ const Eina_Hash *hash, __UNUSED__ const void *key, void *data, void *fdata)
492 if (*val != 7) *res = 1;
497 START_TEST(eet_test_data_type_encoding_decoding)
499 Eet_Data_Descriptor *edd;
500 Eet_Test_Ex_Type *result;
502 Eet_Data_Descriptor_Class eddc;
503 Eet_Test_Ex_Type etbt;
509 _eet_test_ex_set(&etbt, 0);
510 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
511 etbt.hash = eina_hash_string_superfast_new(NULL);
512 eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
513 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
514 etbt.ihash = eina_hash_string_superfast_new(NULL);
515 eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
516 etbt.slist = eina_list_prepend(NULL, "test");
517 etbt.shash = eina_hash_string_superfast_new(NULL);
518 eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
519 memset(&etbt.charray, 0, sizeof(etbt.charray));
520 etbt.charray[0] = "test";
521 etbt.charray[5] = "plouf";
523 eet_test_setup_eddc(&eddc);
524 eddc.name = "Eet_Test_Ex_Type";
525 eddc.size = sizeof(Eet_Test_Ex_Type);
527 edd = eet_data_descriptor_file_new(&eddc);
530 _eet_build_ex_descriptor(edd);
532 transfert = eet_data_descriptor_encode(edd, &etbt, &size);
533 fail_if(!transfert || size <= 0);
535 result = eet_data_descriptor_decode(edd, transfert, size);
538 fail_if(_eet_test_ex_check(result, 0) != 0);
539 fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
540 fail_if(eina_list_data_get(result->ilist) == NULL);
541 fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
542 fail_if(eina_list_data_get(result->slist) == NULL);
543 fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
544 fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
545 fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
546 fail_if(strcmp(result->charray[0], "test") != 0);
547 fail_if(strcmp(result->charray[5], "plouf") != 0);
550 if (result->hash) eina_hash_foreach(result->hash, func, &test);
552 if (result->ihash) eina_hash_foreach(result->ihash, func7, &test);
560 append_string(void *data, const char *str)
562 char **string = data;
567 length = *string ? strlen(*string) : 0;
568 *string = realloc(*string, strlen(str) + length + 1);
570 memcpy((*string) + length, str, strlen(str) + 1);
573 START_TEST(eet_test_data_type_dump_undump)
575 Eet_Data_Descriptor *edd;
576 Eet_Test_Ex_Type *result;
577 Eet_Data_Descriptor_Class eddc;
578 Eet_Test_Ex_Type etbt;
589 _eet_test_ex_set(&etbt, 0);
590 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
591 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
592 etbt.hash = eina_hash_string_superfast_new(NULL);
593 eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
594 etbt.hash = eina_hash_string_superfast_new(NULL);
595 eina_hash_add(etbt.hash, EET_TEST_KEY2, _eet_test_ex_set(NULL, 2));
596 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
597 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
598 etbt.ihash = eina_hash_string_superfast_new(NULL);
599 eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
600 etbt.ihash = eina_hash_string_superfast_new(NULL);
601 eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
602 etbt.slist = eina_list_prepend(NULL, "test");
603 etbt.shash = eina_hash_string_superfast_new(NULL);
604 eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
605 memset(&etbt.charray, 0, sizeof(etbt.charray));
606 etbt.charray[0] = "test";
608 eet_test_setup_eddc(&eddc);
609 eddc.name = "Eet_Test_Ex_Type";
610 eddc.size = sizeof(Eet_Test_Ex_Type);
612 edd = eet_data_descriptor_file_new(&eddc);
615 _eet_build_ex_descriptor(edd);
617 transfert1 = eet_data_descriptor_encode(edd, &etbt, &size1);
618 fail_if(!transfert1 || size1 <= 0);
621 eet_data_text_dump(transfert1, size1, append_string, &string1);
624 transfert2 = eet_data_text_undump(string1, string1 ? strlen(string1) : 0, &size2);
625 fail_if(!transfert2 && size2 <= 0);
628 eet_data_text_dump(transfert2, size2, append_string, &string2);
631 fail_if(strlen(string2) != strlen(string1));
633 result = eet_data_descriptor_decode(edd, transfert2, size2);
636 fail_if(_eet_test_ex_check(result, 0) != 0);
637 fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
638 fail_if(eina_list_data_get(result->ilist) == NULL);
639 fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
640 fail_if(eina_list_data_get(result->slist) == NULL);
641 fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
642 fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
643 fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
644 fail_if(strcmp(result->charray[0], "test") != 0);
647 if (result->hash) eina_hash_foreach(result->hash, func, &test);
649 if (result->ihash) eina_hash_foreach(result->ihash, func7, &test);
656 START_TEST(eet_file_simple_write)
658 const char *buffer = "Here is a string of data to save !";
661 char *file = strdup("/tmp/eet_suite_testXXXXXX");
666 fail_if(!mktemp(file));
668 fail_if(eet_mode_get(NULL) != EET_FILE_MODE_INVALID);
670 ef = eet_open(file, EET_FILE_MODE_WRITE);
673 fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 1));
675 fail_if(eet_mode_get(ef) != EET_FILE_MODE_WRITE);
677 fail_if(eet_list(ef, "*", &size) != NULL);
678 fail_if(eet_num_entries(ef) != -1);
682 /* Test read of simple file */
683 ef = eet_open(file, EET_FILE_MODE_READ);
686 test = eet_read(ef, "keys/tests", &size);
688 fail_if(size != (int) strlen(buffer) + 1);
690 fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
692 fail_if(eet_mode_get(ef) != EET_FILE_MODE_READ);
693 fail_if(eet_num_entries(ef) != 1);
697 /* Test eet cache system */
698 ef = eet_open(file, EET_FILE_MODE_READ);
701 test = eet_read(ef, "keys/tests", &size);
703 fail_if(size != (int) strlen(buffer) + 1);
705 fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
709 fail_if(unlink(file) != 0);
715 START_TEST(eet_file_data_test)
717 Eet_Data_Descriptor *edd;
718 Eet_Test_Ex_Type *result;
722 char *file = strdup("/tmp/eet_suite_testXXXXXX");
723 Eet_Data_Descriptor_Class eddc;
724 Eet_Test_Ex_Type etbt;
730 _eet_test_ex_set(&etbt, 0);
731 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
732 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
733 etbt.hash = eina_hash_string_superfast_new(NULL);
734 eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
735 etbt.hash = eina_hash_string_superfast_new(NULL);
736 eina_hash_add(etbt.hash, EET_TEST_KEY2, _eet_test_ex_set(NULL, 2));
737 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
738 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
739 etbt.ihash = eina_hash_string_superfast_new(NULL);
740 eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
741 etbt.ihash = eina_hash_string_superfast_new(NULL);
742 eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
743 etbt.slist = eina_list_prepend(NULL, "test");
744 etbt.shash = eina_hash_string_superfast_new(NULL);
745 eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
746 memset(&etbt.charray, 0, sizeof(etbt.charray));
747 etbt.charray[0] = "test";
749 eet_test_setup_eddc(&eddc);
750 eddc.name = "Eet_Test_Ex_Type";
751 eddc.size = sizeof(Eet_Test_Ex_Type);
753 edd = eet_data_descriptor_file_new(&eddc);
756 _eet_build_ex_descriptor(edd);
758 fail_if(!mktemp(file));
760 /* Insert an error in etbt. */
763 /* Save the encoded data in a file. */
764 ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
767 fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
769 result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
772 fail_if(eet_mode_get(ef) != EET_FILE_MODE_READ_WRITE);
774 /* Test string space. */
775 ed = eet_dictionary_get(ef);
777 fail_if(!eet_dictionary_string_check(ed, result->str));
778 fail_if(eet_dictionary_string_check(ed, result->istr));
782 /* Attempt to replace etbt by the correct one. */
783 etbt.i = EET_TEST_INT;
785 ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
788 fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
792 /* Read back the data. */
793 ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
796 fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY2, &etbt, 0));
798 result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
801 /* Test string space. */
802 ed = eet_dictionary_get(ef);
805 fail_if(!eet_dictionary_string_check(ed, result->str));
806 fail_if(eet_dictionary_string_check(ed, result->istr));
808 /* Test the resulting data. */
809 fail_if(_eet_test_ex_check(result, 0) != 0);
810 fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
811 fail_if(eina_list_data_get(result->ilist) == NULL);
812 fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
813 fail_if(eina_list_data_get(result->slist) == NULL);
814 fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
815 fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
816 fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
817 fail_if(strcmp(result->charray[0], "test") != 0);
820 if (result->hash) eina_hash_foreach(result->hash, func, &test);
822 if (result->ihash) eina_hash_foreach(result->ihash, func7, &test);
825 list = eet_list(ef, "keys/*", &size);
826 fail_if(eet_num_entries(ef) != 2);
828 fail_if(!(strcmp(list[0], EET_TEST_FILE_KEY1) == 0 && strcmp(list[1], EET_TEST_FILE_KEY2) == 0)
829 && !(strcmp(list[0], EET_TEST_FILE_KEY2) == 0 && strcmp(list[1], EET_TEST_FILE_KEY1) == 0));
832 fail_if(eet_delete(ef, NULL) != 0);
833 fail_if(eet_delete(NULL, EET_TEST_FILE_KEY1) != 0);
834 fail_if(eet_delete(ef, EET_TEST_FILE_KEY1) == 0);
836 list = eet_list(ef, "keys/*", &size);
838 fail_if(eet_num_entries(ef) != 1);
840 /* Test some more wrong case */
841 fail_if(eet_data_read(ef, edd, "plop") != NULL);
842 fail_if(eet_data_read(ef, edd, EET_TEST_FILE_KEY1) != NULL);
844 /* Reinsert and reread data */
845 fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
846 fail_if(eet_data_read(ef, edd, EET_TEST_FILE_KEY1) == NULL);
847 fail_if(eet_read_direct(ef, EET_TEST_FILE_KEY1, &size) == NULL);
851 fail_if(unlink(file) != 0);
857 START_TEST(eet_file_data_dump_test)
859 Eet_Data_Descriptor *edd;
860 Eet_Test_Ex_Type *result;
861 Eet_Data_Descriptor_Class eddc;
862 Eet_Test_Ex_Type etbt;
865 char *file = strdup("/tmp/eet_suite_testXXXXXX");
870 _eet_test_ex_set(&etbt, 0);
871 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
872 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
873 etbt.hash = eina_hash_string_superfast_new(NULL);
874 eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
875 eina_hash_add(etbt.hash, EET_TEST_KEY2, _eet_test_ex_set(NULL, 2));
876 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
877 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
878 etbt.ihash = eina_hash_string_superfast_new(NULL);
879 eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
880 eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
881 etbt.slist = eina_list_prepend(NULL, "test");
882 etbt.shash = eina_hash_string_superfast_new(NULL);
883 eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
884 memset(&etbt.charray, 0, sizeof(etbt.charray));
885 etbt.charray[0] = "test";
887 eet_eina_file_data_descriptor_class_set(&eddc, "Eet_Test_Ex_Type", sizeof(Eet_Test_Ex_Type));
889 edd = eet_data_descriptor_file_new(&eddc);
892 _eet_build_ex_descriptor(edd);
894 fail_if(!mktemp(file));
896 /* Save the encoded data in a file. */
897 ef = eet_open(file, EET_FILE_MODE_WRITE);
900 fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
904 /* Use dump/undump in the middle */
905 ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
909 fail_if(eet_data_dump(ef, EET_TEST_FILE_KEY1, append_string, &string1) != 1);
910 fail_if(eet_delete(ef, EET_TEST_FILE_KEY1) == 0);
911 fail_if(!eet_data_undump(ef, EET_TEST_FILE_KEY1, string1, strlen(string1), 1));
915 /* Test the correctness of the reinsertion. */
916 ef = eet_open(file, EET_FILE_MODE_READ);
919 result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
924 /* Test the resulting data. */
925 fail_if(_eet_test_ex_check(result, 0) != 0);
926 fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
927 fail_if(eina_list_data_get(result->ilist) == NULL);
928 fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
929 fail_if(eina_list_data_get(result->slist) == NULL);
930 fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
931 fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
932 fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
933 fail_if(strcmp(result->charray[0], "test") != 0);
936 if (result->hash) eina_hash_foreach(result->hash, func, &test);
938 if (result->ihash) eina_hash_foreach(result->ihash, func7, &test);
941 fail_if(unlink(file) != 0);
947 START_TEST(eet_image)
950 char *file = strdup("/tmp/eet_suite_testXXXXXX");
960 fail_if(!mktemp(file));
962 /* Save the encoded data in a file. */
963 ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
966 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "0", test_noalpha.color,
967 test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
969 fail_if(result == 0);
971 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "1", test_noalpha.color,
972 test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
974 fail_if(result == 0);
976 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "2", test_noalpha.color,
977 test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
979 fail_if(result == 0);
981 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "3", test_noalpha.color,
982 test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
984 fail_if(result == 0);
986 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "4", test_noalpha.color,
987 test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
989 fail_if(result == 0);
991 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "5", test_noalpha.color,
992 test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
994 fail_if(result == 0);
996 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "6", test_noalpha.color,
997 test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
999 fail_if(result == 0);
1001 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "7", test_alpha.color,
1002 test_alpha.w, test_alpha.h, test_alpha.alpha,
1004 fail_if(result == 0);
1006 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "8", test_alpha.color,
1007 test_alpha.w, test_alpha.h, test_alpha.alpha,
1009 fail_if(result == 0);
1011 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "9", test_alpha.color,
1012 test_alpha.w, test_alpha.h, test_alpha.alpha,
1014 fail_if(result == 0);
1016 data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "2", &w, &h, &alpha, &compress, &quality, &lossy);
1017 fail_if(data == NULL);
1018 fail_if(w != test_noalpha.w);
1019 fail_if(h != test_noalpha.h);
1020 fail_if(alpha != test_noalpha.alpha);
1021 fail_if(compress != 9);
1022 fail_if(lossy != 0);
1023 fail_if(data[0] != test_noalpha.color[0]);
1026 result = eet_data_image_header_read(ef, EET_TEST_FILE_IMAGE "2", &w, &h, &alpha, &compress, &quality, &lossy);
1027 fail_if(result == 0);
1028 fail_if(w != test_noalpha.w);
1029 fail_if(h != test_noalpha.h);
1030 fail_if(alpha != test_noalpha.alpha);
1031 fail_if(compress != 9);
1032 fail_if(lossy != 0);
1036 /* Test read of image */
1037 ef = eet_open(file, EET_FILE_MODE_READ);
1040 result = eet_data_image_header_read(ef, EET_TEST_FILE_IMAGE "0", &w, &h, &alpha, &compress, &quality, &lossy);
1041 fail_if(result == 0);
1042 fail_if(w != test_noalpha.w);
1043 fail_if(h != test_noalpha.h);
1044 fail_if(alpha != test_noalpha.alpha);
1045 fail_if(compress != 0);
1046 fail_if(lossy != 0);
1048 data = malloc(w * h * 4);
1049 fail_if(data == NULL);
1050 result = eet_data_image_read_to_surface(ef, EET_TEST_FILE_IMAGE "0", 4, 4, data, 2, 2, w * 4, &alpha, &compress, &quality, &lossy);
1051 fail_if(result != 1);
1052 fail_if(alpha != test_noalpha.alpha);
1053 fail_if(compress != 0);
1054 fail_if(quality != 100);
1055 fail_if(lossy != 0);
1056 fail_if(data[0] != test_noalpha.color[4 + 4 * w]);
1059 data = malloc(w * h * 4);
1060 fail_if(data == NULL);
1061 result = eet_data_image_read_to_surface(ef, EET_TEST_FILE_IMAGE "0", 0, 0, data, w, h, w * 4, &alpha, &compress, &quality, &lossy);
1062 fail_if(result != 1);
1063 fail_if(alpha != test_noalpha.alpha);
1064 fail_if(compress != 0);
1065 fail_if(quality != 100);
1066 fail_if(lossy != 0);
1067 fail_if(data[0] != test_noalpha.color[0]);
1070 data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "1", &w, &h, &alpha, &compress, &quality, &lossy);
1071 fail_if(data == NULL);
1072 fail_if(w != test_noalpha.w);
1073 fail_if(h != test_noalpha.h);
1074 fail_if(alpha != test_noalpha.alpha);
1075 fail_if(compress != 5);
1076 fail_if(quality != 100);
1077 fail_if(lossy != 0);
1078 fail_if(data[0] != test_noalpha.color[0]);
1081 data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "2", &w, &h, &alpha, &compress, &quality, &lossy);
1082 fail_if(data == NULL);
1083 fail_if(w != test_noalpha.w);
1084 fail_if(h != test_noalpha.h);
1085 fail_if(alpha != test_noalpha.alpha);
1086 fail_if(compress != 9);
1087 fail_if(lossy != 0);
1088 fail_if(data[0] != test_noalpha.color[0]);
1091 data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "3", &w, &h, &alpha, &compress, &quality, &lossy);
1092 fail_if(data == NULL);
1093 fail_if(w != test_noalpha.w);
1094 fail_if(h != test_noalpha.h);
1095 fail_if(alpha != test_noalpha.alpha);
1096 fail_if(lossy != 1);
1099 data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "5", &w, &h, &alpha, &compress, &quality, &lossy);
1100 fail_if(data == NULL);
1101 fail_if(w != test_noalpha.w);
1102 fail_if(h != test_noalpha.h);
1103 fail_if(alpha != test_noalpha.alpha);
1104 fail_if(lossy != 1);
1107 data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "6", &w, &h, &alpha, &compress, &quality, &lossy);
1108 fail_if(data == NULL);
1109 fail_if(w != test_noalpha.w);
1110 fail_if(h != test_noalpha.h);
1111 fail_if(alpha != test_noalpha.alpha);
1112 fail_if(lossy != 1);
1115 result = eet_data_image_header_read(ef, EET_TEST_FILE_IMAGE "7", &w, &h, &alpha, &compress, &quality, &lossy);
1116 fail_if(result == 0);
1117 fail_if(w != test_alpha.w);
1118 fail_if(h != test_alpha.h);
1119 fail_if(alpha != test_alpha.alpha);
1120 fail_if(compress != 9);
1121 fail_if(lossy != 0);
1123 data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "7", &w, &h, &alpha, &compress, &quality, &lossy);
1124 fail_if(data == NULL);
1125 fail_if(w != test_alpha.w);
1126 fail_if(h != test_alpha.h);
1127 fail_if(alpha != test_alpha.alpha);
1128 fail_if(compress != 9);
1129 fail_if(lossy != 0);
1130 fail_if(data[0] != test_alpha.color[0]);
1133 result = eet_data_image_header_read(ef, EET_TEST_FILE_IMAGE "9", &w, &h, &alpha, &compress, &quality, &lossy);
1134 fail_if(result == 0);
1135 fail_if(w != test_alpha.w);
1136 fail_if(h != test_alpha.h);
1137 fail_if(alpha != test_alpha.alpha);
1138 fail_if(lossy != 1);
1140 data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "9", &w, &h, &alpha, &compress, &quality, &lossy);
1141 fail_if(data == NULL);
1142 fail_if(w != test_alpha.w);
1143 fail_if(h != test_alpha.h);
1144 fail_if(alpha != test_alpha.alpha);
1145 fail_if(lossy != 1);
1154 #define IM0 0x00112233
1155 #define IM1 0x44556677
1156 #define IM2 0x8899aabb
1157 #define IM3 0xccddeeff
1159 START_TEST(eet_small_image)
1161 char *file = strdup("/tmp/eet_suite_testXXXXXX");
1162 unsigned int image[4];
1180 fail_if(!mktemp(file));
1182 ef = eet_open(file, EET_FILE_MODE_WRITE);
1185 result = eet_data_image_write(ef, "/images/test", image, 2, 2, 1, 9, 100, 0);
1186 fail_if(result == 0);
1190 ef = eet_open(file, EET_FILE_MODE_READ);
1193 data = (unsigned int*) eet_data_image_read(ef, "/images/test", &w, &h, &alpha, &compression, &quality, &lossy);
1194 fail_if(data == NULL);
1198 fail_if(data[0] != IM0);
1199 fail_if(data[1] != IM1);
1200 fail_if(data[2] != IM2);
1201 fail_if(data[3] != IM3);
1209 START_TEST(eet_identity_simple)
1211 const char *buffer = "Here is a string of data to save !";
1216 char *file = strdup("/tmp/eet_suite_testXXXXXX");
1222 fail_if(!mktemp(file));
1223 fail_if(chdir("src/tests"));
1225 /* Sign an eet file. */
1226 ef = eet_open(file, EET_FILE_MODE_WRITE);
1229 fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 0));
1231 k = eet_identity_open("cert.pem", "key.pem", NULL);
1234 fail_if(eet_identity_set(ef, k) != EET_ERROR_NONE);
1238 /* Open a signed file. */
1239 ef = eet_open(file, EET_FILE_MODE_READ);
1242 test = eet_read(ef, "keys/tests", &size);
1244 fail_if(size != (int) strlen(buffer) + 1);
1246 fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
1248 tmp = eet_identity_x509(ef, &size);
1249 fail_if(tmp == NULL);
1253 /* As we are changing file contain in less than 1s, this could get unnoticed
1254 by eet cache system. */
1257 /* Corrupting the file. */
1258 fd = open(file, O_WRONLY);
1261 fail_if(lseek(fd, 200, SEEK_SET) != 200);
1262 fail_if(write(fd, "42", 2) != 2);
1263 fail_if(lseek(fd, 50, SEEK_SET) != 50);
1264 fail_if(write(fd, "42", 2) != 2);
1265 fail_if(lseek(fd, 88, SEEK_SET) != 88);
1266 fail_if(write(fd, "42", 2) != 2);
1270 /* Attempt to open a modified file. */
1271 ef = eet_open(file, EET_FILE_MODE_READ);
1274 fail_if(unlink(file) != 0);
1280 START_TEST(eet_identity_open_simple)
1286 fail_if(chdir("src/tests"));
1288 k = eet_identity_open("cert.pem", "key.pem", NULL);
1291 if (k) eet_identity_close(k);
1297 START_TEST(eet_identity_open_pkcs8)
1303 fail_if(chdir("src/tests"));
1305 k = eet_identity_open("cert.pem", "key_enc_none.pem", NULL);
1308 if (k) eet_identity_close(k);
1314 static int pass_get(char *pass, int size, __UNUSED__ int rwflags, __UNUSED__ void *u)
1316 memset(pass, 0, size);
1318 if (strlen("password") > size)
1320 snprintf(pass, size, "%s", "password");
1321 return strlen(pass);
1324 static int badpass_get(char *pass, int size, __UNUSED__ int rwflags, __UNUSED__ void *u)
1326 memset(pass, 0, size);
1328 if (strlen("bad password") > size)
1330 snprintf(pass, size, "%s", "bad password");
1331 return strlen(pass);
1335 START_TEST(eet_identity_open_pkcs8_enc)
1341 fail_if(chdir("src/tests"));
1343 k = eet_identity_open("cert.pem", "key_enc.pem", NULL);
1346 if (k) eet_identity_close(k);
1348 k = eet_identity_open("cert.pem", "key_enc.pem", &badpass_get);
1351 if (k) eet_identity_close(k);
1353 k = eet_identity_open("cert.pem", "key_enc.pem", &pass_get);
1356 if (k) eet_identity_close(k);
1362 START_TEST(eet_cipher_decipher_simple)
1364 const char *buffer = "Here is a string of data to save !";
1365 const char *key = "This is a crypto key";
1366 const char *key_bad = "This is another crypto key";
1369 char *file = strdup("/tmp/eet_suite_testXXXXXX");
1374 fail_if(!mktemp(file));
1375 fail_if(chdir("src/tests"));
1377 /* Crypt an eet file. */
1378 ef = eet_open(file, EET_FILE_MODE_WRITE);
1381 fail_if(!eet_write_cipher(ef, "keys/tests", buffer, strlen(buffer) + 1, 0, key));
1385 /* Decrypt an eet file. */
1386 ef = eet_open(file, EET_FILE_MODE_READ);
1389 test = eet_read_cipher(ef, "keys/tests", &size, key);
1391 fail_if(size != (int) strlen(buffer) + 1);
1393 fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
1397 /* Decrypt an eet file. */
1398 ef = eet_open(file, EET_FILE_MODE_READ);
1401 test = eet_read_cipher(ef, "keys/tests", &size, key_bad);
1403 if (size == (int) strlen(buffer) + 1)
1404 fail_if(memcmp(test, buffer, strlen(buffer) + 1) == 0);
1408 fail_if(unlink(file) != 0);
1414 static Eina_Bool open_worker_stop;
1416 open_close_worker(void* path)
1418 while (!open_worker_stop)
1420 Eet_File* ef = eet_open((char const*)path, EET_FILE_MODE_READ);
1423 pthread_exit("eet_open() failed");
1427 Eet_Error err_code = eet_close(ef);
1428 if (err_code != EET_ERROR_NONE)
1429 pthread_exit("eet_close() failed");
1436 START_TEST(eet_cache_concurrency)
1438 char *file = strdup("/tmp/eet_suite_testXXXXXX");
1439 const char *buffer = "test data";
1446 /* create a file to test with */
1447 fail_if(!mktemp(file));
1448 ef = eet_open(file, EET_FILE_MODE_WRITE);
1450 fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 0));
1452 /* start a thread that repeatedly opens and closes a file */
1453 open_worker_stop = 0;
1455 pthread_create(&thread, NULL, open_close_worker, file);
1457 /* clear the cache repeatedly in this thread */
1458 for (n = 0; n < 50000; ++n)
1463 /* join the other thread, and fail if it returned an error message */
1464 open_worker_stop = 1;
1465 fail_if(pthread_join(thread, &thread_ret) != 0);
1466 fail_unless(thread_ret == NULL, (char const*)thread_ret);
1468 fail_if(unlink(file) != 0);
1473 typedef struct _Eet_Connection_Data Eet_Connection_Data;
1474 struct _Eet_Connection_Data
1476 Eet_Connection *conn;
1477 Eet_Data_Descriptor *edd;
1482 _eet_connection_read(const void *eet_data, size_t size, void *user_data)
1484 Eet_Connection_Data *dt = user_data;
1485 Eet_Test_Ex_Type *result;
1489 result = eet_data_descriptor_decode(dt->edd, eet_data, size);
1490 node = eet_data_node_decode_cipher(eet_data, NULL, size);
1492 /* Test the resulting data. */
1494 fail_if(_eet_test_ex_check(result, 0) != 0);
1495 fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
1496 fail_if(eina_list_data_get(result->ilist) == NULL);
1497 fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
1498 fail_if(eina_list_data_get(result->slist) == NULL);
1499 fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
1500 fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
1501 fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
1502 fail_if(strcmp(result->charray[0], "test") != 0);
1505 if (result->hash) eina_hash_foreach(result->hash, func, &test);
1507 if (result->ihash) eina_hash_foreach(result->ihash, func7, &test);
1512 dt->test = EINA_TRUE;
1513 fail_if(!eet_connection_node_send(dt->conn, node, NULL));
1520 _eet_connection_write(const void *data, size_t size, void *user_data)
1522 Eet_Connection_Data *dt = user_data;
1527 int step = size / 3;
1529 eet_connection_received(dt->conn, data, step);
1530 eet_connection_received(dt->conn, (char*) data + step, step);
1532 still = eet_connection_received(dt->conn, (char*) data + 2 * step, size);
1535 still = eet_connection_received(dt->conn, data, size);
1541 START_TEST(eet_connection_check)
1543 Eet_Connection *conn;
1544 Eet_Data_Descriptor *edd;
1545 Eet_Data_Descriptor_Class eddc;
1546 Eet_Connection_Data ecd;
1547 Eet_Test_Ex_Type etbt;
1552 _eet_test_ex_set(&etbt, 0);
1553 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
1554 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
1555 etbt.hash = eina_hash_string_superfast_new(NULL);
1556 eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
1557 eina_hash_add(etbt.hash, EET_TEST_KEY2, _eet_test_ex_set(NULL, 2));
1558 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
1559 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
1560 etbt.ihash = eina_hash_string_superfast_new(NULL);
1561 eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
1562 eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
1563 etbt.slist = eina_list_prepend(NULL, "test");
1564 etbt.shash = eina_hash_string_superfast_new(NULL);
1565 eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
1566 memset(&etbt.charray, 0, sizeof(etbt.charray));
1567 etbt.charray[0] = "test";
1569 eet_eina_file_data_descriptor_class_set(&eddc, "Eet_Test_Ex_Type", sizeof(Eet_Test_Ex_Type));
1571 edd = eet_data_descriptor_file_new(&eddc);
1574 _eet_build_ex_descriptor(edd);
1576 /* Create a connection. */
1577 conn = eet_connection_new(_eet_connection_read, _eet_connection_write, &ecd);
1581 ecd.test = EINA_FALSE;
1585 /* Test the connection. */
1586 fail_if(!eet_connection_send(conn, edd, &etbt, NULL));
1590 fail_if(!eet_connection_close(conn, &on_going));
1604 s = suite_create("Eet");
1606 tc = tcase_create("Eet_Init");
1607 tcase_add_test(tc, eet_test_init);
1608 suite_add_tcase(s, tc);
1610 tc = tcase_create("Eet Data Encoding/Decoding");
1611 tcase_add_test(tc, eet_test_basic_data_type_encoding_decoding);
1612 tcase_add_test(tc, eet_test_data_type_encoding_decoding);
1613 tcase_add_test(tc, eet_test_data_type_dump_undump);
1614 suite_add_tcase(s, tc);
1616 tc = tcase_create("Eet File");
1617 tcase_add_test(tc, eet_file_simple_write);
1618 tcase_add_test(tc, eet_file_data_test);
1619 tcase_add_test(tc, eet_file_data_dump_test);
1620 suite_add_tcase(s, tc);
1622 tc = tcase_create("Eet Image");
1623 tcase_add_test(tc, eet_image);
1624 tcase_add_test(tc, eet_small_image);
1625 suite_add_tcase(s, tc);
1627 #ifdef HAVE_SIGNATURE
1628 tc = tcase_create("Eet Identity");
1629 tcase_add_test(tc, eet_identity_simple);
1630 tcase_add_test(tc, eet_identity_open_simple);
1631 tcase_add_test(tc, eet_identity_open_pkcs8);
1632 tcase_add_test(tc, eet_identity_open_pkcs8_enc);
1633 suite_add_tcase(s, tc);
1637 tc = tcase_create("Eet Cipher");
1638 tcase_add_test(tc, eet_cipher_decipher_simple);
1639 suite_add_tcase(s, tc);
1642 tc = tcase_create("Eet Cache");
1643 tcase_add_test(tc, eet_cache_concurrency);
1644 suite_add_tcase(s, tc);
1646 tc = tcase_create("Eet Connection");
1647 tcase_add_test(tc, eet_connection_check);
1648 suite_add_tcase(s, tc);
1661 sr = srunner_create(s);
1662 srunner_run_all(sr, CK_NORMAL);
1663 failed_count = srunner_ntests_failed(sr);
1666 return (failed_count == 0) ? EXIT_SUCCESS : EXIT_FAILURE;