windows port - replaced sleep with g_usleep
[opensync.git] / tests / sync-tests / check_sync_error.c
blob40e39a966cf4eb726a197c37ccdcd4be1d60f345
1 #include "support.h"
3 #include "opensync/group/opensync_group_internals.h"
4 #include "opensync/engine/opensync_engine_internals.h"
6 /* Regression test for Ticket #988 */
7 START_TEST (single_init_error_noerror)
9 char *testbed = setup_testbed("sync");
10 char *formatdir = g_strdup_printf("%s/formats", testbed);
11 char *plugindir = g_strdup_printf("%s/plugins", testbed);
13 g_setenv("INIT_NULL_NOERROR", "2", TRUE);
15 OSyncError *error = NULL;
16 OSyncGroup *group = osync_group_new(&error);
17 fail_unless(group != NULL, NULL);
18 fail_unless(error == NULL, NULL);
20 osync_group_set_schemadir(group, testbed);
21 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
22 fail_unless(error == NULL, NULL);
24 OSyncEngine *engine = osync_engine_new(group, &error);
25 fail_unless(engine != NULL, NULL);
26 fail_unless(error == NULL, NULL);
27 osync_group_unref(group);
29 osync_engine_set_schemadir(engine, testbed);
30 osync_engine_set_plugindir(engine, plugindir);
31 osync_engine_set_formatdir(engine, formatdir);
33 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
35 fail_unless(!osync_engine_initialize(engine, &error), NULL);
36 fail_unless(error != NULL, NULL);
38 osync_engine_unref(engine);
39 g_free(formatdir);
40 g_free(plugindir);
42 destroy_testbed(testbed);
44 END_TEST
46 START_TEST (single_init_error)
48 char *testbed = setup_testbed("multisync_easy_new");
50 g_setenv("INIT_NULL", "2", TRUE);
52 OSyncError *error = NULL;
53 OSyncGroup *group = osync_group_new(&error);
54 fail_unless(group != NULL, NULL);
55 fail_unless(error == NULL, NULL);
57 osync_group_set_schemadir(group, testbed);
58 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
59 fail_unless(error == NULL, NULL);
61 OSyncEngine *engine = osync_engine_new(group, &error);
62 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
63 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
64 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
65 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
67 /* this is a bug - please see sml_fail_unless for details */
68 fail_unless(osync_engine_initialize(engine, &error), osync_error_print(&error));
69 fail_unless(!synchronize_once(engine, &error), NULL);
70 fail_unless(osync_error_is_set(&error), NULL);
72 osync_error_unref(&error);
73 osync_engine_finalize(engine, &error);
74 osync_engine_unref(engine);
76 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
78 destroy_testbed(testbed);
80 END_TEST
82 START_TEST (dual_connect_error)
84 char *testbed = setup_testbed("sync_easy_new");
86 g_setenv("CONNECT_ERROR", "3", TRUE);
88 OSyncError *error = NULL;
89 OSyncGroup *group = osync_group_new(&error);
90 fail_unless(group != NULL, NULL);
91 fail_unless(error == NULL, NULL);
93 osync_group_set_schemadir(group, testbed);
94 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
95 fail_unless(error == NULL, NULL);
97 OSyncEngine *engine = osync_engine_new(group, &error);
98 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
99 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
100 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
101 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
102 fail_unless(osync_engine_initialize(engine, &error), NULL);
104 fail_unless(!synchronize_once(engine, &error), NULL);
105 fail_unless(osync_error_is_set(&error), NULL);
107 fail_unless(num_client_errors == 2, NULL);
108 fail_unless(num_client_connected == 0, NULL);
109 fail_unless(num_client_disconnected == 0, NULL);
110 fail_unless(num_engine_errors == 1, NULL);
112 osync_error_unref(&error);
113 osync_engine_finalize(engine, &error);
114 osync_engine_unref(engine);
116 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
118 destroy_testbed(testbed);
120 END_TEST
122 START_TEST (one_of_two_connect_error)
124 char *testbed = setup_testbed("sync_easy_new");
126 g_setenv("CONNECT_ERROR", "1", TRUE);
128 OSyncError *error = NULL;
129 OSyncGroup *group = osync_group_new(&error);
130 fail_unless(group != NULL, NULL);
131 fail_unless(error == NULL, NULL);
133 osync_group_set_schemadir(group, testbed);
134 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
135 fail_unless(error == NULL, NULL);
137 OSyncEngine *engine = osync_engine_new(group, &error);
138 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
139 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
140 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
141 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
142 fail_unless(osync_engine_initialize(engine, &error), NULL);
144 fail_unless(!synchronize_once(engine, &error), NULL);
145 fail_unless(osync_error_is_set(&error), NULL);
147 fail_unless(num_client_errors == 1, NULL);
148 fail_unless(num_client_connected == 1, NULL);
149 fail_unless(num_client_disconnected == 1, NULL);
150 //fail_unless(num_member_sent_changes == 0, NULL);
151 fail_unless(num_engine_errors == 1, NULL);
153 osync_error_unref(&error);
154 osync_engine_finalize(engine, &error);
155 osync_engine_unref(engine);
157 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
159 destroy_testbed(testbed);
161 END_TEST
163 START_TEST (two_of_three_connect_error)
165 char *testbed = setup_testbed("multisync_easy_new");
167 g_setenv("CONNECT_ERROR", "5", TRUE);
169 OSyncError *error = NULL;
170 OSyncGroup *group = osync_group_new(&error);
171 fail_unless(group != NULL, NULL);
172 fail_unless(error == NULL, NULL);
174 osync_group_set_schemadir(group, testbed);
175 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
176 fail_unless(error == NULL, NULL);
178 OSyncEngine *engine = osync_engine_new(group, &error);
179 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
180 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
181 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
182 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
183 fail_unless(osync_engine_initialize(engine, &error), NULL);
185 fail_unless(!synchronize_once(engine, &error), NULL);
186 fail_unless(osync_error_is_set(&error), NULL);
188 fail_unless(num_client_errors == 2, NULL);
189 fail_unless(num_client_connected == 1, NULL);
190 fail_unless(num_client_disconnected == 1, NULL);
191 //fail_unless(num_member_sent_changes == 0, NULL);
192 fail_unless(num_engine_errors == 1, NULL);
194 osync_error_unref(&error);
195 osync_engine_finalize(engine, &error);
196 osync_engine_unref(engine);
198 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
200 destroy_testbed(testbed);
202 END_TEST
204 START_TEST (two_of_three_connect_error2)
206 char *testbed = setup_testbed("multisync_easy_new");
208 g_setenv("CONNECT_ERROR", "6", TRUE);
210 OSyncError *error = NULL;
211 OSyncGroup *group = osync_group_new(&error);
212 fail_unless(group != NULL, NULL);
213 fail_unless(error == NULL, NULL);
215 osync_group_set_schemadir(group, testbed);
216 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
217 fail_unless(error == NULL, NULL);
219 OSyncEngine *engine = osync_engine_new(group, &error);
220 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
221 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
222 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
223 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
224 fail_unless(osync_engine_initialize(engine, &error), NULL);
226 fail_unless(!synchronize_once(engine, &error), NULL);
227 fail_unless(osync_error_is_set(&error), NULL);
229 fail_unless(num_client_errors == 2, NULL);
230 fail_unless(num_client_connected == 1, NULL);
231 fail_unless(num_client_disconnected == 1, NULL);
232 //fail_unless(num_member_sent_changes == 0, NULL);
233 fail_unless(num_engine_errors == 1, NULL);
235 osync_error_unref(&error);
236 osync_engine_finalize(engine, &error);
237 osync_engine_unref(engine);
239 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
241 destroy_testbed(testbed);
243 END_TEST
245 START_TEST (three_of_three_connect_error)
247 char *testbed = setup_testbed("multisync_easy_new");
249 g_setenv("CONNECT_ERROR", "7", TRUE);
251 OSyncError *error = NULL;
252 OSyncGroup *group = osync_group_new(&error);
253 fail_unless(group != NULL, NULL);
254 fail_unless(error == NULL, NULL);
256 osync_group_set_schemadir(group, testbed);
257 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
258 fail_unless(error == NULL, NULL);
260 OSyncEngine *engine = osync_engine_new(group, &error);
261 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
262 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
263 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
264 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
265 fail_unless(osync_engine_initialize(engine, &error), NULL);
267 fail_unless(!synchronize_once(engine, &error), NULL);
268 fail_unless(osync_error_is_set(&error), NULL);
270 fail_unless(num_client_errors == 3, NULL);
271 fail_unless(num_client_connected == 0, NULL);
272 fail_unless(num_client_disconnected == 0, NULL);
273 //fail_unless(num_member_sent_changes == 0, NULL);
274 fail_unless(num_engine_errors == 1, NULL);
276 osync_error_unref(&error);
277 osync_engine_finalize(engine, &error);
278 osync_engine_unref(engine);
280 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
282 destroy_testbed(testbed);
284 END_TEST
286 START_TEST (one_of_three_connect_error)
288 char *testbed = setup_testbed("multisync_easy_new");
290 g_setenv("CONNECT_ERROR", "2", TRUE);
292 OSyncError *error = NULL;
293 OSyncGroup *group = osync_group_new(&error);
294 fail_unless(group != NULL, NULL);
295 fail_unless(error == NULL, NULL);
297 osync_group_set_schemadir(group, testbed);
298 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
299 fail_unless(error == NULL, NULL);
301 OSyncEngine *engine = osync_engine_new(group, &error);
302 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
303 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
304 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
305 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
306 fail_unless(osync_engine_initialize(engine, &error), NULL);
308 fail_unless(!synchronize_once(engine, &error), NULL);
309 fail_unless(osync_error_is_set(&error), NULL);
311 fail_unless(num_client_errors == 1, NULL);
312 fail_unless(num_client_connected == 2, NULL);
313 fail_unless(num_client_disconnected == 2, NULL);
314 //fail_unless(num_member_sent_changes == 0, NULL);
315 fail_unless(num_engine_errors == 1, NULL);
317 osync_error_unref(&error);
318 osync_engine_finalize(engine, &error);
319 osync_engine_unref(engine);
321 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
323 destroy_testbed(testbed);
325 END_TEST
327 START_TEST (no_connect_error)
329 char *testbed = setup_testbed("multisync_easy_new");
331 g_setenv("CONNECT_ERROR", "0", TRUE);
333 OSyncError *error = NULL;
334 OSyncGroup *group = osync_group_new(&error);
335 fail_unless(group != NULL, NULL);
336 fail_unless(error == NULL, NULL);
338 osync_group_set_schemadir(group, testbed);
339 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
340 fail_unless(error == NULL, NULL);
342 OSyncEngine *engine = osync_engine_new(group, &error);
343 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
344 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
345 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
346 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
347 fail_unless(osync_engine_initialize(engine, &error), NULL);
349 fail_unless(synchronize_once(engine, &error), NULL);
350 fail_unless(!osync_error_is_set(&error), NULL);
352 fail_unless(num_client_errors == 0, NULL);
353 fail_unless(num_client_connected == 3, NULL);
354 fail_unless(num_client_disconnected == 3, NULL);
355 //fail_unless(num_member_sent_changes == 3, NULL);
356 fail_unless(num_engine_errors == 0, NULL);
357 fail_unless(num_engine_successful == 1, NULL);
359 osync_engine_finalize(engine, &error);
360 osync_engine_unref(engine);
362 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" == \"x\""), NULL);
363 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" == \"x\""), NULL);
365 destroy_testbed(testbed);
367 END_TEST
369 START_TEST (single_connect_timeout)
371 char *testbed = setup_testbed("sync_easy_new");
373 g_setenv("CONNECT_TIMEOUT", "2", TRUE);
375 OSyncError *error = NULL;
376 OSyncGroup *group = osync_group_new(&error);
377 fail_unless(group != NULL, NULL);
378 fail_unless(error == NULL, NULL);
380 osync_group_set_schemadir(group, testbed);
381 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
382 fail_unless(error == NULL, NULL);
384 OSyncEngine *engine = osync_engine_new(group, &error);
385 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
386 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
387 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
388 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
389 fail_unless(osync_engine_initialize(engine, &error), NULL);
391 fail_unless(!synchronize_once(engine, &error), NULL);
392 fail_unless(osync_error_is_set(&error), NULL);
394 fail_unless(num_client_errors == 1, NULL);
395 fail_unless(num_client_connected == 1, NULL);
396 fail_unless(num_client_disconnected == 1, NULL);
397 //fail_unless(num_member_sent_changes == 0, NULL);
398 fail_unless(num_engine_errors == 1, NULL);
399 fail_unless(num_engine_successful == 0, NULL);
401 osync_error_unref(&error);
402 osync_engine_finalize(engine, &error);
403 osync_engine_unref(engine);
405 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
407 destroy_testbed(testbed);
409 END_TEST
411 START_TEST (dual_connect_timeout)
413 char *testbed = setup_testbed("sync_easy_new");
415 g_setenv("CONNECT_TIMEOUT", "3", TRUE);
417 OSyncError *error = NULL;
418 OSyncGroup *group = osync_group_new(&error);
419 fail_unless(group != NULL, NULL);
420 fail_unless(error == NULL, NULL);
422 osync_group_set_schemadir(group, testbed);
423 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
424 fail_unless(error == NULL, NULL);
426 OSyncEngine *engine = osync_engine_new(group, &error);
427 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
428 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
429 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
430 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
431 fail_unless(osync_engine_initialize(engine, &error), NULL);
433 fail_unless(!synchronize_once(engine, &error), NULL);
434 fail_unless(osync_error_is_set(&error), NULL);
436 fail_unless(num_client_errors == 2, NULL);
437 fail_unless(num_client_connected == 0, NULL);
438 fail_unless(num_client_disconnected == 0, NULL);
439 //fail_unless(num_member_sent_changes == 0, NULL);
440 fail_unless(num_engine_errors == 1, NULL);
441 fail_unless(num_engine_successful == 0, NULL);
443 osync_error_unref(&error);
444 osync_engine_finalize(engine, &error);
445 osync_engine_unref(engine);
447 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
449 destroy_testbed(testbed);
451 END_TEST
453 START_TEST (one_of_three_timeout)
455 char *testbed = setup_testbed("multisync_easy_new");
457 g_setenv("CONNECT_TIMEOUT", "2", TRUE);
459 OSyncError *error = NULL;
460 OSyncGroup *group = osync_group_new(&error);
461 fail_unless(group != NULL, NULL);
462 fail_unless(error == NULL, NULL);
464 osync_group_set_schemadir(group, testbed);
465 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
466 fail_unless(error == NULL, NULL);
468 OSyncEngine *engine = osync_engine_new(group, &error);
469 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
470 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
471 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
472 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
473 fail_unless(osync_engine_initialize(engine, &error), NULL);
475 fail_unless(!synchronize_once(engine, &error), NULL);
476 fail_unless(osync_error_is_set(&error), NULL);
478 fail_unless(num_client_errors == 1, NULL);
479 fail_unless(num_client_connected == 2, NULL);
480 fail_unless(num_client_disconnected == 2, NULL);
481 //fail_unless(num_member_sent_changes == 0, NULL);
482 fail_unless(num_engine_errors == 1, NULL);
483 fail_unless(num_engine_successful == 0, NULL);
485 osync_error_unref(&error);
486 osync_engine_finalize(engine, &error);
487 osync_engine_unref(engine);
489 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
491 destroy_testbed(testbed);
493 END_TEST
495 START_TEST (timeout_and_error)
497 char *testbed = setup_testbed("multisync_easy_new");
499 g_setenv("CONNECT_TIMEOUT", "2", TRUE);
500 g_setenv("CONNECT_ERROR", "4", TRUE);
502 OSyncError *error = NULL;
503 OSyncGroup *group = osync_group_new(&error);
504 fail_unless(group != NULL, NULL);
505 fail_unless(error == NULL, NULL);
507 osync_group_set_schemadir(group, testbed);
508 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
509 fail_unless(error == NULL, NULL);
511 OSyncEngine *engine = osync_engine_new(group, &error);
512 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
513 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
514 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
515 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
516 fail_unless(osync_engine_initialize(engine, &error), NULL);
518 fail_unless(!synchronize_once(engine, &error), NULL);
519 fail_unless(osync_error_is_set(&error), NULL);
521 fail_unless(num_client_errors == 2, NULL);
522 fail_unless(num_client_connected == 1, NULL);
523 fail_unless(num_client_disconnected == 1, NULL);
524 //fail_unless(num_member_sent_changes == 0, NULL);
525 fail_unless(num_engine_errors == 1, NULL);
526 fail_unless(num_engine_successful == 0, NULL);
528 osync_error_unref(&error);
529 osync_engine_finalize(engine, &error);
530 osync_engine_unref(engine);
532 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
534 destroy_testbed(testbed);
536 END_TEST
538 START_TEST (single_get_changes_error)
540 char *testbed = setup_testbed("sync_easy_conflict");
542 g_setenv("GET_CHANGES_ERROR", "2", TRUE);
543 g_setenv("NO_COMMITTED_ALL_CHECK", "1", TRUE);
545 OSyncError *error = NULL;
546 OSyncGroup *group = osync_group_new(&error);
547 fail_unless(group != NULL, NULL);
548 fail_unless(error == NULL, NULL);
550 osync_group_set_schemadir(group, testbed);
551 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
552 fail_unless(error == NULL, NULL);
554 OSyncEngine *engine = osync_engine_new(group, &error);
555 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
556 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
557 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
558 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
559 fail_unless(osync_engine_initialize(engine, &error), NULL);
561 fail_unless(!synchronize_once(engine, &error), NULL);
562 fail_unless(osync_error_is_set(&error), NULL);
564 fail_unless(num_client_errors == 0, NULL);
565 fail_unless(num_client_connected == 2, NULL);
566 fail_unless(num_client_disconnected == 2, NULL);
567 //fail_unless(num_member_get_changes_errors == 1, NULL);
568 fail_unless(num_client_written == 0, NULL);
569 //fail_unless(num_conflicts == 0, NULL);
570 fail_unless(num_engine_errors == 1, NULL);
571 fail_unless(num_engine_successful == 0, NULL);
573 osync_error_unref(&error);
574 osync_engine_finalize(engine, &error);
575 osync_engine_unref(engine);
577 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
579 destroy_testbed(testbed);
581 END_TEST
583 START_TEST (dual_get_changes_error)
585 char *testbed = setup_testbed("sync_easy_conflict");
587 g_setenv("GET_CHANGES_ERROR", "3", TRUE);
589 OSyncError *error = NULL;
590 OSyncGroup *group = osync_group_new(&error);
591 fail_unless(group != NULL, NULL);
592 fail_unless(error == NULL, NULL);
594 osync_group_set_schemadir(group, testbed);
595 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
596 fail_unless(error == NULL, NULL);
598 OSyncEngine *engine = osync_engine_new(group, &error);
599 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
600 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
601 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
602 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
603 fail_unless(osync_engine_initialize(engine, &error), NULL);
605 fail_unless(!synchronize_once(engine, &error), NULL);
606 fail_unless(osync_error_is_set(&error), NULL);
608 fail_unless(num_client_errors == 0, NULL);
609 fail_unless(num_client_connected == 2, NULL);
610 fail_unless(num_client_disconnected == 2, NULL);
611 //fail_unless(num_member_sent_changes == 0, NULL);
612 fail_unless(num_client_read == 0, NULL);
613 fail_unless(num_client_written == 0, NULL);
614 //fail_unless(num_conflicts == 0, NULL);
615 fail_unless(num_engine_errors == 1, NULL);
616 fail_unless(num_engine_successful == 0, NULL);
618 osync_error_unref(&error);
619 osync_engine_finalize(engine, &error);
620 osync_engine_unref(engine);
622 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
624 destroy_testbed(testbed);
626 END_TEST
628 START_TEST (two_of_three_get_changes_error)
630 char *testbed = setup_testbed("multisync_conflict_data_choose2");
632 g_setenv("GET_CHANGES_ERROR", "5", TRUE);
633 g_setenv("NO_COMMITTED_ALL_CHECK", "1", TRUE);
635 OSyncError *error = NULL;
636 OSyncGroup *group = osync_group_new(&error);
637 fail_unless(group != NULL, NULL);
638 fail_unless(error == NULL, NULL);
640 osync_group_set_schemadir(group, testbed);
641 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
642 fail_unless(error == NULL, NULL);
644 OSyncEngine *engine = osync_engine_new(group, &error);
645 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
646 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
647 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
648 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
649 fail_unless(osync_engine_initialize(engine, &error), NULL);
651 fail_unless(!synchronize_once(engine, &error), NULL);
652 fail_unless(osync_error_is_set(&error), NULL);
654 fail_unless(num_client_errors == 0, NULL);
655 fail_unless(num_client_connected == 3, NULL);
656 fail_unless(num_client_disconnected == 3, NULL);
657 fail_unless(num_client_written == 0, NULL);
658 //fail_unless(num_conflicts == 0, NULL);
659 fail_unless(num_engine_errors == 1, NULL);
660 fail_unless(num_engine_successful == 0, NULL);
662 osync_error_unref(&error);
663 osync_engine_finalize(engine, &error);
664 osync_engine_unref(engine);
666 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
668 destroy_testbed(testbed);
670 END_TEST
672 START_TEST (one_of_three_get_changes_error)
674 char *testbed = setup_testbed("multisync_conflict_data_choose2");
676 g_setenv("GET_CHANGES_ERROR", "1", TRUE);
677 g_setenv("NO_COMMITTED_ALL_CHECK", "1", TRUE);
679 OSyncError *error = NULL;
680 OSyncGroup *group = osync_group_new(&error);
681 fail_unless(group != NULL, NULL);
682 fail_unless(error == NULL, NULL);
684 osync_group_set_schemadir(group, testbed);
685 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
686 fail_unless(error == NULL, NULL);
688 OSyncEngine *engine = osync_engine_new(group, &error);
689 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
690 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
691 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
692 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
693 fail_unless(osync_engine_initialize(engine, &error), NULL);
695 fail_unless(!synchronize_once(engine, &error), NULL);
696 fail_unless(osync_error_is_set(&error), NULL);
698 fail_unless(num_client_errors == 0, NULL);
699 fail_unless(num_client_connected == 3, NULL);
700 fail_unless(num_client_disconnected == 3, NULL);
701 //fail_unless(num_member_get_changes_errors == 1, NULL);
702 fail_unless(num_client_written == 0, NULL);
703 //fail_unless(num_conflicts == 0, NULL);
704 fail_unless(num_engine_errors == 1, NULL);
705 fail_unless(num_engine_successful == 0, NULL);
707 osync_error_unref(&error);
708 osync_engine_finalize(engine, &error);
709 osync_engine_unref(engine);
711 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
713 destroy_testbed(testbed);
715 END_TEST
717 START_TEST (one_of_three_get_changes_timeout)
719 char *testbed = setup_testbed("multisync_conflict_data_choose2");
721 g_setenv("GET_CHANGES_TIMEOUT", "1", TRUE);
722 g_setenv("NO_COMMITTED_ALL_CHECK", "1", TRUE);
724 OSyncError *error = NULL;
725 OSyncGroup *group = osync_group_new(&error);
726 fail_unless(group != NULL, NULL);
727 fail_unless(error == NULL, NULL);
729 osync_group_set_schemadir(group, testbed);
730 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
731 fail_unless(error == NULL, NULL);
733 OSyncEngine *engine = osync_engine_new(group, &error);
734 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
735 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
736 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
737 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
738 fail_unless(osync_engine_initialize(engine, &error), NULL);
740 fail_unless(!synchronize_once(engine, &error), NULL);
741 fail_unless(osync_error_is_set(&error), NULL);
743 fail_unless(num_client_errors == 0, NULL);
744 fail_unless(num_client_connected == 3, NULL);
745 fail_unless(num_client_disconnected == 3, NULL);
746 //fail_unless(num_member_get_changes_errors == 1, NULL);
747 //fail_unless(num_member_sent_changes == 2, NULL);
748 fail_unless(num_client_read == 2, NULL);
749 fail_unless(num_client_written == 0, NULL);
750 //fail_unless(num_conflicts == 0, NULL);
751 fail_unless(num_engine_errors == 1, NULL);
752 fail_unless(num_engine_successful == 0, NULL);
754 osync_error_unref(&error);
755 osync_engine_finalize(engine, &error);
756 osync_engine_unref(engine);
758 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
760 destroy_testbed(testbed);
762 END_TEST
764 START_TEST (get_changes_timeout_and_error)
766 char *testbed = setup_testbed("multisync_conflict_data_choose2");
768 g_setenv("GET_CHANGES_TIMEOUT", "3", TRUE);
769 g_setenv("GET_CHANGES_ERROR", "4", TRUE);
771 OSyncError *error = NULL;
772 OSyncGroup *group = osync_group_new(&error);
773 fail_unless(group != NULL, NULL);
774 fail_unless(error == NULL, NULL);
776 osync_group_set_schemadir(group, testbed);
777 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
778 fail_unless(error == NULL, NULL);
780 OSyncEngine *engine = osync_engine_new(group, &error);
781 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
782 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
783 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
784 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
785 fail_unless(osync_engine_initialize(engine, &error), NULL);
787 fail_unless(!synchronize_once(engine, &error), NULL);
788 fail_unless(osync_error_is_set(&error), NULL);
790 fail_unless(num_client_errors == 0, NULL);
791 fail_unless(num_client_connected == 3, NULL);
792 fail_unless(num_client_disconnected == 3, NULL);
793 //fail_unless(num_member_sent_changes == 0, NULL);
794 fail_unless(num_client_read == 0, NULL);
795 fail_unless(num_client_written == 0, NULL);
796 //fail_unless(num_conflicts == 0, NULL);
797 fail_unless(num_engine_errors == 1, NULL);
798 fail_unless(num_engine_successful == 0, NULL);
800 osync_error_unref(&error);
801 osync_engine_finalize(engine, &error);
802 osync_engine_unref(engine);
804 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
806 destroy_testbed(testbed);
808 END_TEST
810 START_TEST (get_changes_timeout_sleep)
812 char *testbed = setup_testbed("multisync_conflict_data_choose2");
814 g_setenv("GET_CHANGES_TIMEOUT2", "7", TRUE);
815 g_setenv("NO_COMMITTED_ALL_CHECK", "1", TRUE);
817 OSyncError *error = NULL;
818 OSyncGroup *group = osync_group_new(&error);
819 fail_unless(group != NULL, NULL);
820 fail_unless(error == NULL, NULL);
822 osync_group_set_schemadir(group, testbed);
823 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
824 fail_unless(error == NULL, NULL);
826 OSyncEngine *engine = osync_engine_new(group, &error);
827 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
828 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
829 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
830 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
831 fail_unless(osync_engine_initialize(engine, &error), NULL);
833 fail_unless(!synchronize_once(engine, &error), NULL);
834 fail_unless(osync_error_is_set(&error), NULL);
836 mark_point();
837 osync_error_unref(&error);
838 mark_point();
839 osync_engine_finalize(engine, &error);
840 mark_point();
841 osync_engine_unref(engine);
843 fail_unless(num_client_errors == 0, NULL);
844 fail_unless(num_client_connected == 3, NULL);
845 fail_unless(num_client_disconnected == 3, NULL);
846 //fail_unless(num_member_sent_changes == 0, NULL);
847 fail_unless(num_client_read == 0, NULL);
848 fail_unless(num_client_written == 0, NULL);
849 //fail_unless(num_conflicts == 0, NULL);
850 fail_unless(num_engine_errors == 1, NULL);
851 fail_unless(num_engine_successful == 0, NULL);
853 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
855 destroy_testbed(testbed);
857 END_TEST
859 START_TEST (single_commit_error)
861 char *testbed = setup_testbed("multisync_easy_new");
863 g_setenv("COMMIT_ERROR", "4", TRUE);
865 OSyncError *error = NULL;
866 OSyncGroup *group = osync_group_new(&error);
867 fail_unless(group != NULL, NULL);
868 fail_unless(error == NULL, NULL);
870 osync_group_set_schemadir(group, testbed);
871 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
872 fail_unless(error == NULL, NULL);
874 OSyncEngine *engine = osync_engine_new(group, &error);
875 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
876 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
877 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
878 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
879 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
880 fail_unless(osync_engine_initialize(engine, &error), NULL);
882 fail_unless(!synchronize_once(engine, &error), NULL);
883 fail_unless(osync_error_is_set(&error), NULL);
885 mark_point();
886 osync_error_unref(&error);
887 mark_point();
888 osync_engine_finalize(engine, &error);
889 mark_point();
890 osync_engine_unref(engine);
892 fail_unless(num_client_errors == 0, NULL);
893 fail_unless(num_client_connected == 3, NULL);
894 fail_unless(num_client_disconnected == 3, NULL);
895 //fail_unless(num_member_sent_changes == 3, NULL);
896 fail_unless(num_client_read == 1, NULL);
897 fail_unless(num_client_written == 1, NULL);
898 //fail_unless(num_written_errors == 1, NULL);
899 fail_unless(num_mapping_errors == 1, NULL);
900 //fail_unless(num_conflicts == 0, NULL);
901 fail_unless(num_engine_errors == 1, NULL);
902 fail_unless(num_engine_successful == 0, NULL);
904 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" == \"x\""), NULL);
905 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" != \"x\""), NULL);
907 destroy_testbed(testbed);
909 END_TEST
911 START_TEST (dual_commit_error)
913 char *testbed = setup_testbed("multisync_easy_new");
915 g_setenv("COMMIT_ERROR", "6", TRUE);
917 OSyncError *error = NULL;
918 OSyncGroup *group = osync_group_new(&error);
919 fail_unless(group != NULL, NULL);
920 fail_unless(error == NULL, NULL);
922 osync_group_set_schemadir(group, testbed);
923 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
924 fail_unless(error == NULL, NULL);
926 OSyncEngine *engine = osync_engine_new(group, &error);
927 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
928 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
929 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
930 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
931 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
932 fail_unless(osync_engine_initialize(engine, &error), NULL);
934 fail_unless(!synchronize_once(engine, &error), NULL);
935 fail_unless(osync_error_is_set(&error), NULL);
937 mark_point();
938 osync_error_unref(&error);
939 mark_point();
940 osync_engine_finalize(engine, &error);
941 mark_point();
942 osync_engine_unref(engine);
944 fail_unless(num_client_errors == 0, NULL);
945 fail_unless(num_client_connected == 3, NULL);
946 fail_unless(num_client_disconnected == 3, NULL);
947 //fail_unless(num_member_sent_changes == 3, NULL);
948 fail_unless(num_client_read == 1, NULL);
949 fail_unless(num_client_written == 0, NULL);
950 //fail_unless(num_written_errors == 2, NULL);
951 fail_unless(num_mapping_errors == 2, NULL);
952 //fail_unless(num_conflicts == 0, NULL);
953 fail_unless(num_engine_errors == 1, NULL);
954 fail_unless(num_engine_successful == 0, NULL);
956 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
957 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" != \"x\""), NULL);
959 destroy_testbed(testbed);
961 END_TEST
963 START_TEST (single_commit_timeout)
965 char *testbed = setup_testbed("multisync_easy_new");
967 g_setenv("COMMIT_TIMEOUT", "4", TRUE);
969 OSyncError *error = NULL;
970 OSyncGroup *group = osync_group_new(&error);
971 fail_unless(group != NULL, NULL);
972 fail_unless(error == NULL, NULL);
974 osync_group_set_schemadir(group, testbed);
975 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
976 fail_unless(error == NULL, NULL);
978 OSyncEngine *engine = osync_engine_new(group, &error);
979 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
980 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
981 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
982 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
983 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
984 fail_unless(osync_engine_initialize(engine, &error), NULL);
986 fail_unless(!synchronize_once(engine, &error), NULL);
987 fail_unless(osync_error_is_set(&error), NULL);
989 mark_point();
990 osync_error_unref(&error);
991 mark_point();
992 osync_engine_finalize(engine, &error);
993 mark_point();
994 osync_engine_unref(engine);
996 fail_unless(num_client_errors == 0, NULL);
997 fail_unless(num_client_connected == 3, NULL);
998 fail_unless(num_client_disconnected == 3, NULL);
999 //fail_unless(num_member_sent_changes == 3, NULL);
1000 fail_unless(num_client_read == 1, NULL);
1001 fail_unless(num_client_written == 1, NULL);
1002 //fail_unless(num_written_errors == 1, NULL);
1003 fail_unless(num_mapping_errors == 1, NULL);
1004 //fail_unless(num_conflicts == 0, NULL);
1005 fail_unless(num_engine_errors == 1, NULL);
1006 fail_unless(num_engine_successful == 0, NULL);
1008 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" == \"x\""), NULL);
1009 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" != \"x\""), NULL);
1011 destroy_testbed(testbed);
1013 END_TEST
1015 START_TEST (dual_commit_timeout)
1017 char *testbed = setup_testbed("multisync_easy_new");
1019 g_setenv("COMMIT_TIMEOUT", "6", TRUE);
1021 OSyncError *error = NULL;
1022 OSyncGroup *group = osync_group_new(&error);
1023 fail_unless(group != NULL, NULL);
1024 fail_unless(error == NULL, NULL);
1026 osync_group_set_schemadir(group, testbed);
1027 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1028 fail_unless(error == NULL, NULL);
1030 OSyncEngine *engine = osync_engine_new(group, &error);
1031 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1032 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1033 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1034 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1035 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1036 fail_unless(osync_engine_initialize(engine, &error), NULL);
1038 fail_unless(!synchronize_once(engine, &error), NULL);
1039 fail_unless(osync_error_is_set(&error), NULL);
1041 mark_point();
1042 osync_error_unref(&error);
1043 mark_point();
1044 osync_engine_finalize(engine, &error);
1045 mark_point();
1046 osync_engine_unref(engine);
1048 fail_unless(num_client_errors == 0, NULL);
1049 fail_unless(num_client_connected == 3, NULL);
1050 fail_unless(num_client_disconnected == 3, NULL);
1051 //fail_unless(num_member_sent_changes == 3, NULL);
1052 fail_unless(num_client_read == 1, NULL);
1053 fail_unless(num_client_written == 0, NULL);
1054 //fail_unless(num_written_errors == 2, NULL);
1055 fail_unless(num_mapping_errors == 2, NULL);
1056 //fail_unless(num_conflicts == 0, NULL);
1057 fail_unless(num_engine_errors == 1, NULL);
1058 fail_unless(num_engine_successful == 0, NULL);
1060 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
1061 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" != \"x\""), NULL);
1063 destroy_testbed(testbed);
1065 END_TEST
1067 START_TEST (commit_timeout_and_error)
1069 char *testbed = setup_testbed("multisync_easy_new");
1071 g_setenv("COMMIT_TIMEOUT", "4", TRUE);
1072 g_setenv("COMMIT_ERROR", "2", TRUE);
1074 OSyncError *error = NULL;
1075 OSyncGroup *group = osync_group_new(&error);
1076 fail_unless(group != NULL, NULL);
1077 fail_unless(error == NULL, NULL);
1079 osync_group_set_schemadir(group, testbed);
1080 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1081 fail_unless(error == NULL, NULL);
1083 OSyncEngine *engine = osync_engine_new(group, &error);
1084 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1085 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1086 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1087 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1088 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1089 fail_unless(osync_engine_initialize(engine, &error), NULL);
1091 fail_unless(!synchronize_once(engine, &error), NULL);
1092 fail_unless(osync_error_is_set(&error), NULL);
1094 mark_point();
1095 osync_error_unref(&error);
1096 mark_point();
1097 osync_engine_finalize(engine, &error);
1098 mark_point();
1099 osync_engine_unref(engine);
1101 fail_unless(num_client_errors == 0, NULL);
1102 fail_unless(num_client_connected == 3, NULL);
1103 fail_unless(num_client_disconnected == 3, NULL);
1104 //fail_unless(num_member_sent_changes == 3, NULL);
1105 fail_unless(num_client_read == 1, NULL);
1106 fail_unless(num_client_written == 0, NULL);
1107 //fail_unless(num_written_errors == 2, NULL);
1108 fail_unless(num_mapping_errors == 2, NULL);
1109 //fail_unless(num_conflicts == 0, NULL);
1110 fail_unless(num_engine_errors == 1, NULL);
1111 fail_unless(num_engine_successful == 0, NULL);
1113 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
1114 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" != \"x\""), NULL);
1116 destroy_testbed(testbed);
1118 END_TEST
1120 START_TEST (commit_timeout_and_error2)
1122 char *testbed = setup_testbed("multisync_easy_new");
1124 g_setenv("COMMIT_TIMEOUT", "2", TRUE);
1125 g_setenv("COMMIT_ERROR", "4", TRUE);
1127 OSyncError *error = NULL;
1128 OSyncGroup *group = osync_group_new(&error);
1129 fail_unless(group != NULL, NULL);
1130 fail_unless(error == NULL, NULL);
1132 osync_group_set_schemadir(group, testbed);
1133 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1134 fail_unless(error == NULL, NULL);
1136 OSyncEngine *engine = osync_engine_new(group, &error);
1137 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1138 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1139 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1140 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1141 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1142 fail_unless(osync_engine_initialize(engine, &error), NULL);
1144 fail_unless(!synchronize_once(engine, &error), NULL);
1145 fail_unless(osync_error_is_set(&error), NULL);
1147 mark_point();
1148 osync_error_unref(&error);
1149 mark_point();
1150 osync_engine_finalize(engine, &error);
1151 mark_point();
1152 osync_engine_unref(engine);
1154 fail_unless(num_client_errors == 0, NULL);
1155 fail_unless(num_client_connected == 3, NULL);
1156 fail_unless(num_client_disconnected == 3, NULL);
1157 //fail_unless(num_member_sent_changes == 3, NULL);
1158 fail_unless(num_client_read == 1, NULL);
1159 fail_unless(num_client_written == 0, NULL);
1160 //fail_unless(num_written_errors == 2, NULL);
1161 fail_unless(num_mapping_errors == 2, NULL);
1162 //fail_unless(num_conflicts == 0, NULL);
1163 fail_unless(num_engine_errors == 1, NULL);
1164 fail_unless(num_engine_successful == 0, NULL);
1166 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
1167 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" != \"x\""), NULL);
1169 destroy_testbed(testbed);
1171 END_TEST
1173 START_TEST (commit_error_modify)
1175 char *testbed = setup_testbed("multisync_easy_new");
1177 OSyncError *error = NULL;
1178 OSyncGroup *group = osync_group_new(&error);
1179 fail_unless(group != NULL, NULL);
1180 fail_unless(error == NULL, NULL);
1182 osync_group_set_schemadir(group, testbed);
1183 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1184 fail_unless(error == NULL, NULL);
1186 OSyncEngine *engine = osync_engine_new(group, &error);
1187 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1188 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1189 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1190 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1191 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1192 fail_unless(osync_engine_initialize(engine, &error), NULL);
1194 fail_unless(synchronize_once(engine, &error), NULL);
1195 fail_unless(!osync_error_is_set(&error), NULL);
1197 g_setenv("COMMIT_TIMEOUT", "2", TRUE);
1198 g_setenv("COMMIT_ERROR", "4", TRUE);
1200 g_usleep(2*G_USEC_PER_SEC);
1202 osync_testing_system_abort("cp newdata2 data1/testdata");
1204 fail_unless(!synchronize_once(engine, &error), NULL);
1205 fail_unless(osync_error_is_set(&error), NULL);
1207 mark_point();
1208 osync_error_unref(&error);
1209 mark_point();
1210 osync_engine_finalize(engine, &error);
1211 mark_point();
1212 osync_engine_unref(engine);
1214 fail_unless(num_client_errors == 0, NULL);
1215 fail_unless(num_client_connected == 3, NULL);
1216 fail_unless(num_client_disconnected == 3, NULL);
1217 //fail_unless(num_member_sent_changes == 3, NULL);
1218 fail_unless(num_client_read == 1, NULL);
1219 fail_unless(num_client_written == 0, NULL);
1220 //fail_unless(num_written_errors == 2, NULL);
1221 fail_unless(num_mapping_errors == 2, NULL);
1222 //fail_unless(num_conflicts == 0, NULL);
1223 fail_unless(num_engine_errors == 1, NULL);
1224 fail_unless(num_engine_successful == 0, NULL);
1226 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
1227 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" != \"x\""), NULL);
1228 fail_unless(!system("test \"x$(diff -x \".*\" data2 data3)\" == \"x\""), NULL);
1230 destroy_testbed(testbed);
1232 END_TEST
1234 START_TEST (commit_error_delete)
1236 char *testbed = setup_testbed("multisync_easy_new");
1238 OSyncError *error = NULL;
1239 OSyncGroup *group = osync_group_new(&error);
1240 fail_unless(group != NULL, NULL);
1241 fail_unless(error == NULL, NULL);
1243 osync_group_set_schemadir(group, testbed);
1244 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1245 fail_unless(error == NULL, NULL);
1247 OSyncEngine *engine = osync_engine_new(group, &error);
1248 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1249 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1250 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1251 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1252 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1253 fail_unless(osync_engine_initialize(engine, &error), NULL);
1255 fail_unless(synchronize_once(engine, &error), NULL);
1256 fail_unless(!osync_error_is_set(&error), NULL);
1258 g_setenv("COMMIT_TIMEOUT", "2", TRUE);
1259 g_setenv("COMMIT_ERROR", "4", TRUE);
1261 g_usleep(2*G_USEC_PER_SEC);
1263 osync_testing_system_abort("rm -f data1/testdata");
1265 fail_unless(!synchronize_once(engine, &error), NULL);
1266 fail_unless(osync_error_is_set(&error), NULL);
1268 mark_point();
1269 osync_error_unref(&error);
1270 mark_point();
1271 osync_engine_finalize(engine, &error);
1272 mark_point();
1273 osync_engine_unref(engine);
1275 fail_unless(num_client_errors == 0, NULL);
1276 fail_unless(num_client_connected == 3, NULL);
1277 fail_unless(num_client_disconnected == 3, NULL);
1278 //fail_unless(num_member_sent_changes == 3, NULL);
1279 fail_unless(num_client_read == 1, NULL);
1280 fail_unless(num_client_written == 0, NULL);
1281 //fail_unless(num_written_errors == 2, NULL);
1282 fail_unless(num_mapping_errors == 2, NULL);
1283 //fail_unless(num_conflicts == 0, NULL);
1284 fail_unless(num_engine_errors == 1, NULL);
1285 fail_unless(num_engine_successful == 0, NULL);
1287 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
1288 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" != \"x\""), NULL);
1289 fail_unless(!system("test \"x$(diff -x \".*\" data2 data3)\" == \"x\""), NULL);
1291 destroy_testbed(testbed);
1293 END_TEST
1295 START_TEST (committed_all_error)
1297 char *testbed = setup_testbed("multisync_easy_new");
1299 g_setenv("COMMITTED_ALL_ERROR", "3", TRUE);
1301 OSyncError *error = NULL;
1302 OSyncGroup *group = osync_group_new(&error);
1303 fail_unless(group != NULL, NULL);
1304 fail_unless(error == NULL, NULL);
1306 osync_group_set_schemadir(group, testbed);
1307 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1308 fail_unless(error == NULL, NULL);
1310 OSyncEngine *engine = osync_engine_new(group, &error);
1311 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1312 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1313 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1314 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1315 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1316 fail_unless(osync_engine_initialize(engine, &error), NULL);
1318 fail_unless(!synchronize_once(engine, &error), NULL);
1319 fail_unless(osync_error_is_set(&error), NULL);
1321 mark_point();
1322 osync_error_unref(&error);
1323 mark_point();
1324 osync_engine_finalize(engine, &error);
1325 mark_point();
1326 osync_engine_unref(engine);
1328 fail_unless(num_client_errors == 0, NULL);
1329 fail_unless(num_client_connected == 3, NULL);
1330 fail_unless(num_client_disconnected == 3, NULL);
1331 //fail_unless(num_member_sent_changes == 3, NULL);
1332 fail_unless(num_client_read == 1, NULL);
1333 fail_unless(num_client_written == 2, NULL);
1334 //fail_unless(num_written_errors == 0, NULL);
1335 fail_unless(num_mapping_errors == 0, NULL);
1336 //fail_unless(num_conflicts == 0, NULL);
1337 fail_unless(num_engine_errors == 1, NULL);
1338 fail_unless(num_engine_successful == 0, NULL);
1340 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
1341 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" = \"x\""), NULL);
1343 destroy_testbed(testbed);
1345 END_TEST
1347 START_TEST (committed_all_batch_error)
1349 char *testbed = setup_testbed("multisync_easy_new");
1351 g_setenv("BATCH_COMMIT", "7", TRUE);
1352 g_setenv("COMMITTED_ALL_ERROR", "3", TRUE);
1354 OSyncError *error = NULL;
1355 OSyncGroup *group = osync_group_new(&error);
1356 fail_unless(group != NULL, NULL);
1357 fail_unless(error == NULL, NULL);
1359 osync_group_set_schemadir(group, testbed);
1360 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1361 fail_unless(error == NULL, NULL);
1363 OSyncEngine *engine = osync_engine_new(group, &error);
1364 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1365 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1366 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1367 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1368 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1369 fail_unless(osync_engine_initialize(engine, &error), NULL);
1371 fail_unless(!synchronize_once(engine, &error), NULL);
1372 fail_unless(osync_error_is_set(&error), NULL);
1374 mark_point();
1375 osync_error_unref(&error);
1376 mark_point();
1377 osync_engine_finalize(engine, &error);
1378 mark_point();
1379 osync_engine_unref(engine);
1381 fail_unless(num_client_errors == 0, NULL);
1382 fail_unless(num_client_connected == 3, NULL);
1383 fail_unless(num_client_disconnected == 3, NULL);
1384 //fail_unless(num_member_sent_changes == 3, NULL);
1385 fail_unless(num_client_read == 1, NULL);
1386 fail_unless(num_client_written == 2, NULL);
1387 //fail_unless(num_written_errors == 0, NULL);
1388 fail_unless(num_mapping_errors == 0, NULL);
1389 //fail_unless(num_conflicts == 0, NULL);
1390 fail_unless(num_engine_errors == 1, NULL);
1391 fail_unless(num_engine_successful == 0, NULL);
1393 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
1394 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" = \"x\""), NULL);
1396 destroy_testbed(testbed);
1398 END_TEST
1400 START_TEST (single_sync_done_error)
1402 char *testbed = setup_testbed("multisync_easy_new");
1404 g_setenv("SYNC_DONE_ERROR", "4", TRUE);
1406 OSyncError *error = NULL;
1407 OSyncGroup *group = osync_group_new(&error);
1408 fail_unless(group != NULL, NULL);
1409 fail_unless(error == NULL, NULL);
1411 osync_group_set_schemadir(group, testbed);
1412 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1413 fail_unless(error == NULL, NULL);
1415 OSyncEngine *engine = osync_engine_new(group, &error);
1416 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1417 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1418 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1419 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1420 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1421 fail_unless(osync_engine_initialize(engine, &error), NULL);
1423 fail_unless(!synchronize_once(engine, &error), NULL);
1424 fail_unless(osync_error_is_set(&error), NULL);
1426 mark_point();
1427 osync_error_unref(&error);
1428 mark_point();
1429 osync_engine_finalize(engine, &error);
1430 mark_point();
1431 osync_engine_unref(engine);
1433 fail_unless(num_client_errors == 0, NULL);
1434 fail_unless(num_client_connected == 3, NULL);
1435 fail_unless(num_client_disconnected == 3, NULL);
1436 //fail_unless(num_member_sent_changes == 3, NULL);
1437 fail_unless(num_client_read == 1, NULL);
1438 fail_unless(num_client_written == 2, NULL);
1439 //fail_unless(num_written_errors == 0, NULL);
1440 fail_unless(num_mapping_errors == 0, NULL);
1441 //fail_unless(num_member_sync_done_errors == 1, NULL);
1442 //fail_unless(num_conflicts == 0, NULL);
1443 fail_unless(num_engine_errors == 1, NULL);
1444 fail_unless(num_engine_successful == 0, NULL);
1446 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" == \"x\""), NULL);
1447 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" == \"x\""), NULL);
1449 destroy_testbed(testbed);
1451 END_TEST
1453 START_TEST (dual_sync_done_error)
1455 char *testbed = setup_testbed("multisync_easy_new");
1457 g_setenv("SYNC_DONE_ERROR", "6", TRUE);
1459 OSyncError *error = NULL;
1460 OSyncGroup *group = osync_group_new(&error);
1461 fail_unless(group != NULL, NULL);
1462 fail_unless(error == NULL, NULL);
1464 osync_group_set_schemadir(group, testbed);
1465 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1466 fail_unless(error == NULL, NULL);
1468 OSyncEngine *engine = osync_engine_new(group, &error);
1469 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1470 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1471 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1472 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1473 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1474 fail_unless(osync_engine_initialize(engine, &error), NULL);
1476 fail_unless(!synchronize_once(engine, &error), NULL);
1477 fail_unless(osync_error_is_set(&error), NULL);
1479 mark_point();
1480 osync_error_unref(&error);
1481 mark_point();
1482 osync_engine_finalize(engine, &error);
1483 mark_point();
1484 osync_engine_unref(engine);
1486 fail_unless(num_client_errors == 0, NULL);
1487 fail_unless(num_client_connected == 3, NULL);
1488 fail_unless(num_client_disconnected == 3, NULL);
1489 //fail_unless(num_member_sent_changes == 3, NULL);
1490 fail_unless(num_client_read == 1, NULL);
1491 fail_unless(num_client_written == 2, NULL);
1492 //fail_unless(num_written_errors == 0, NULL);
1493 fail_unless(num_mapping_errors == 0, NULL);
1494 //fail_unless(num_conflicts == 0, NULL);
1495 //fail_unless(num_member_sync_done_errors == 2, NULL);
1496 fail_unless(num_engine_errors == 1, NULL);
1497 fail_unless(num_engine_successful == 0, NULL);
1499 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" == \"x\""), NULL);
1500 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" == \"x\""), NULL);
1502 destroy_testbed(testbed);
1504 END_TEST
1506 START_TEST (triple_sync_done_error)
1508 char *testbed = setup_testbed("multisync_easy_new");
1510 g_setenv("SYNC_DONE_ERROR", "7", TRUE);
1512 OSyncError *error = NULL;
1513 OSyncGroup *group = osync_group_new(&error);
1514 fail_unless(group != NULL, NULL);
1515 fail_unless(error == NULL, NULL);
1517 osync_group_set_schemadir(group, testbed);
1518 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1519 fail_unless(error == NULL, NULL);
1521 OSyncEngine *engine = osync_engine_new(group, &error);
1522 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1523 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1524 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1525 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1526 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1527 fail_unless(osync_engine_initialize(engine, &error), NULL);
1529 fail_unless(!synchronize_once(engine, &error), NULL);
1530 fail_unless(osync_error_is_set(&error), NULL);
1532 mark_point();
1533 osync_error_unref(&error);
1534 mark_point();
1535 osync_engine_finalize(engine, &error);
1536 mark_point();
1537 osync_engine_unref(engine);
1539 fail_unless(num_client_errors == 0, NULL);
1540 fail_unless(num_client_connected == 3, NULL);
1541 fail_unless(num_client_disconnected == 3, NULL);
1542 //fail_unless(num_member_sent_changes == 3, NULL);
1543 fail_unless(num_client_read == 1, NULL);
1544 fail_unless(num_client_written == 2, NULL);
1545 //fail_unless(num_written_errors == 0, NULL);
1546 fail_unless(num_mapping_errors == 0, NULL);
1547 //fail_unless(num_conflicts == 0, NULL);
1548 //fail_unless(num_member_sync_done_errors == 3, NULL);
1549 fail_unless(num_engine_errors == 1, NULL);
1550 fail_unless(num_engine_successful == 0, NULL);
1552 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" == \"x\""), NULL);
1553 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" == \"x\""), NULL);
1555 destroy_testbed(testbed);
1557 END_TEST
1559 START_TEST (single_sync_done_timeout)
1561 char *testbed = setup_testbed("multisync_easy_new");
1563 g_setenv("SYNC_DONE_TIMEOUT", "4", TRUE);
1565 OSyncError *error = NULL;
1566 OSyncGroup *group = osync_group_new(&error);
1567 fail_unless(group != NULL, NULL);
1568 fail_unless(error == NULL, NULL);
1570 osync_group_set_schemadir(group, testbed);
1571 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1572 fail_unless(error == NULL, NULL);
1574 OSyncEngine *engine = osync_engine_new(group, &error);
1575 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1576 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1577 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1578 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1579 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1580 fail_unless(osync_engine_initialize(engine, &error), NULL);
1582 fail_unless(!synchronize_once(engine, &error), NULL);
1583 fail_unless(osync_error_is_set(&error), NULL);
1585 mark_point();
1586 osync_error_unref(&error);
1587 mark_point();
1588 osync_engine_finalize(engine, &error);
1589 mark_point();
1590 osync_engine_unref(engine);
1592 fail_unless(num_client_errors == 0, NULL);
1593 fail_unless(num_client_connected == 3, NULL);
1594 fail_unless(num_client_disconnected == 3, NULL);
1595 //fail_unless(num_member_sent_changes == 3, NULL);
1596 fail_unless(num_client_read == 1, NULL);
1597 fail_unless(num_client_written == 2, NULL);
1598 //fail_unless(num_written_errors == 0, NULL);
1599 fail_unless(num_mapping_errors == 0, NULL);
1600 //fail_unless(num_conflicts == 0, NULL);
1601 //fail_unless(num_member_sync_done_errors == 1, NULL);
1602 fail_unless(num_engine_errors == 1, NULL);
1603 fail_unless(num_engine_successful == 0, NULL);
1605 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" == \"x\""), NULL);
1606 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" == \"x\""), NULL);
1608 destroy_testbed(testbed);
1610 END_TEST
1612 START_TEST (dual_sync_done_timeout)
1614 char *testbed = setup_testbed("multisync_easy_new");
1616 g_setenv("SYNC_DONE_TIMEOUT", "6", TRUE);
1618 OSyncError *error = NULL;
1619 OSyncGroup *group = osync_group_new(&error);
1620 fail_unless(group != NULL, NULL);
1621 fail_unless(error == NULL, NULL);
1623 osync_group_set_schemadir(group, testbed);
1624 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1625 fail_unless(error == NULL, NULL);
1627 OSyncEngine *engine = osync_engine_new(group, &error);
1628 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1629 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1630 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1631 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1632 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1633 fail_unless(osync_engine_initialize(engine, &error), NULL);
1635 fail_unless(!synchronize_once(engine, &error), NULL);
1636 fail_unless(osync_error_is_set(&error), NULL);
1638 mark_point();
1639 osync_error_unref(&error);
1640 mark_point();
1641 osync_engine_finalize(engine, &error);
1642 mark_point();
1643 osync_engine_unref(engine);
1645 fail_unless(num_client_errors == 0, NULL);
1646 fail_unless(num_client_connected == 3, NULL);
1647 fail_unless(num_client_disconnected == 3, NULL);
1648 //fail_unless(num_member_sent_changes == 3, NULL);
1649 fail_unless(num_client_read == 1, NULL);
1650 fail_unless(num_client_written == 2, NULL);
1651 //fail_unless(num_written_errors == 0, NULL);
1652 fail_unless(num_mapping_errors == 0, NULL);
1653 //fail_unless(num_conflicts == 0, NULL);
1654 //fail_unless(num_member_sync_done_errors == 2, NULL);
1655 fail_unless(num_engine_errors == 1, NULL);
1656 fail_unless(num_engine_successful == 0, NULL);
1658 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" == \"x\""), NULL);
1659 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" == \"x\""), NULL);
1661 destroy_testbed(testbed);
1663 END_TEST
1665 START_TEST (sync_done_timeout_and_error)
1667 char *testbed = setup_testbed("multisync_easy_new");
1669 g_setenv("SYNC_DONE_TIMEOUT", "5", TRUE);
1670 g_setenv("SYNC_DONE_ERROR", "2", TRUE);
1672 OSyncError *error = NULL;
1673 OSyncGroup *group = osync_group_new(&error);
1674 fail_unless(group != NULL, NULL);
1675 fail_unless(error == NULL, NULL);
1677 osync_group_set_schemadir(group, testbed);
1678 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1679 fail_unless(error == NULL, NULL);
1681 OSyncEngine *engine = osync_engine_new(group, &error);
1682 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1683 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1684 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1685 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1686 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1687 fail_unless(osync_engine_initialize(engine, &error), NULL);
1689 fail_unless(!synchronize_once(engine, &error), NULL);
1690 fail_unless(osync_error_is_set(&error), NULL);
1692 mark_point();
1693 osync_error_unref(&error);
1694 mark_point();
1695 osync_engine_finalize(engine, &error);
1696 mark_point();
1697 osync_engine_unref(engine);
1699 fail_unless(num_client_errors == 0, NULL);
1700 fail_unless(num_client_connected == 3, NULL);
1701 fail_unless(num_client_disconnected == 3, NULL);
1702 //fail_unless(num_member_sent_changes == 3, NULL);
1703 fail_unless(num_client_read == 1, NULL);
1704 fail_unless(num_client_written == 2, NULL);
1705 //fail_unless(num_written_errors == 0, NULL);
1706 fail_unless(num_mapping_errors == 0, NULL);
1707 //fail_unless(num_conflicts == 0, NULL);
1708 //fail_unless(num_member_sync_done_errors == 3, NULL);
1709 fail_unless(num_engine_errors == 1, NULL);
1710 fail_unless(num_engine_successful == 0, NULL);
1712 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" == \"x\""), NULL);
1713 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" == \"x\""), NULL);
1715 destroy_testbed(testbed);
1717 END_TEST
1719 START_TEST (single_disconnect_error)
1721 char *testbed = setup_testbed("multisync_easy_new");
1723 g_setenv("DISCONNECT_ERROR", "4", TRUE);
1725 OSyncError *error = NULL;
1726 OSyncGroup *group = osync_group_new(&error);
1727 fail_unless(group != NULL, NULL);
1728 fail_unless(error == NULL, NULL);
1730 osync_group_set_schemadir(group, testbed);
1731 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1732 fail_unless(error == NULL, NULL);
1734 OSyncEngine *engine = osync_engine_new(group, &error);
1735 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1736 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1737 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1738 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1739 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1740 fail_unless(osync_engine_initialize(engine, &error), NULL);
1742 fail_unless(synchronize_once(engine, &error), NULL);
1743 fail_unless(!osync_error_is_set(&error), NULL);
1745 mark_point();
1746 osync_error_unref(&error);
1747 mark_point();
1748 osync_engine_finalize(engine, &error);
1749 mark_point();
1750 osync_engine_unref(engine);
1752 fail_unless(num_client_errors == 1, NULL);
1753 fail_unless(num_client_connected == 3, NULL);
1754 fail_unless(num_client_disconnected == 2, NULL);
1755 //fail_unless(num_member_sent_changes == 3, NULL);
1756 fail_unless(num_client_read == 1, NULL);
1757 fail_unless(num_client_written == 2, NULL);
1758 //fail_unless(num_written_errors == 0, NULL);
1759 fail_unless(num_mapping_errors == 0, NULL);
1760 //fail_unless(num_member_sync_done_errors == 0, NULL);
1761 //fail_unless(num_conflicts == 0, NULL);
1762 fail_unless(num_engine_errors == 0, NULL);
1763 fail_unless(num_engine_successful == 1, NULL);
1765 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" == \"x\""), NULL);
1766 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" == \"x\""), NULL);
1768 destroy_testbed(testbed);
1770 END_TEST
1772 START_TEST (dual_disconnect_error)
1774 char *testbed = setup_testbed("multisync_easy_new");
1776 g_setenv("DISCONNECT_ERROR", "6", TRUE);
1778 OSyncError *error = NULL;
1779 OSyncGroup *group = osync_group_new(&error);
1780 fail_unless(group != NULL, NULL);
1781 fail_unless(error == NULL, NULL);
1783 osync_group_set_schemadir(group, testbed);
1784 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1785 fail_unless(error == NULL, NULL);
1787 OSyncEngine *engine = osync_engine_new(group, &error);
1788 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1789 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1790 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1791 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1792 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1793 fail_unless(osync_engine_initialize(engine, &error), NULL);
1795 fail_unless(synchronize_once(engine, &error), NULL);
1796 fail_unless(!osync_error_is_set(&error), NULL);
1798 mark_point();
1799 osync_error_unref(&error);
1800 mark_point();
1801 osync_engine_finalize(engine, &error);
1802 mark_point();
1803 osync_engine_unref(engine);
1805 fail_unless(num_client_errors == 2, NULL);
1806 fail_unless(num_client_connected == 3, NULL);
1807 fail_unless(num_client_disconnected == 1, NULL);
1808 //fail_unless(num_member_sent_changes == 3, NULL);
1809 fail_unless(num_client_read == 1, NULL);
1810 fail_unless(num_client_written == 2, NULL);
1811 //fail_unless(num_written_errors == 0, NULL);
1812 fail_unless(num_mapping_errors == 0, NULL);
1813 //fail_unless(num_conflicts == 0, NULL);
1814 //fail_unless(num_member_sync_done_errors == 0, NULL);
1815 fail_unless(num_engine_errors == 0, NULL);
1816 fail_unless(num_engine_successful == 1, NULL);
1818 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" == \"x\""), NULL);
1819 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" == \"x\""), NULL);
1821 destroy_testbed(testbed);
1823 END_TEST
1825 START_TEST (triple_disconnect_error)
1827 char *testbed = setup_testbed("multisync_easy_new");
1829 g_setenv("DISCONNECT_ERROR", "7", TRUE);
1831 OSyncError *error = NULL;
1832 OSyncGroup *group = osync_group_new(&error);
1833 fail_unless(group != NULL, NULL);
1834 fail_unless(error == NULL, NULL);
1836 osync_group_set_schemadir(group, testbed);
1837 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1838 fail_unless(error == NULL, NULL);
1840 OSyncEngine *engine = osync_engine_new(group, &error);
1841 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1842 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1843 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1844 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1845 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1846 fail_unless(osync_engine_initialize(engine, &error), NULL);
1848 fail_unless(synchronize_once(engine, &error), NULL);
1849 fail_unless(!osync_error_is_set(&error), NULL);
1851 mark_point();
1852 osync_error_unref(&error);
1853 mark_point();
1854 osync_engine_finalize(engine, &error);
1855 mark_point();
1856 osync_engine_unref(engine);
1858 fail_unless(num_client_errors == 3, NULL);
1859 fail_unless(num_client_connected == 3, NULL);
1860 fail_unless(num_client_disconnected == 0, NULL);
1861 //fail_unless(num_member_sent_changes == 3, NULL);
1862 fail_unless(num_client_read == 1, NULL);
1863 fail_unless(num_client_written == 2, NULL);
1864 //fail_unless(num_written_errors == 0, NULL);
1865 fail_unless(num_mapping_errors == 0, NULL);
1866 //fail_unless(num_conflicts == 0, NULL);
1867 //fail_unless(num_member_sync_done_errors == 0, NULL);
1868 fail_unless(num_engine_errors == 0, NULL);
1869 fail_unless(num_engine_successful == 1, NULL);
1871 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" == \"x\""), NULL);
1872 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" == \"x\""), NULL);
1874 destroy_testbed(testbed);
1876 END_TEST
1878 START_TEST (single_disconnect_timeout)
1880 char *testbed = setup_testbed("multisync_easy_new");
1882 g_setenv("DISCONNECT_TIMEOUT", "4", TRUE);
1884 OSyncError *error = NULL;
1885 OSyncGroup *group = osync_group_new(&error);
1886 fail_unless(group != NULL, NULL);
1887 fail_unless(error == NULL, NULL);
1889 osync_group_set_schemadir(group, testbed);
1890 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1891 fail_unless(error == NULL, NULL);
1893 OSyncEngine *engine = osync_engine_new(group, &error);
1894 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1895 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1896 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1897 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1898 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1899 fail_unless(osync_engine_initialize(engine, &error), NULL);
1901 fail_unless(synchronize_once(engine, &error), NULL);
1902 fail_unless(!osync_error_is_set(&error), NULL);
1904 mark_point();
1905 osync_error_unref(&error);
1906 mark_point();
1907 osync_engine_finalize(engine, &error);
1908 mark_point();
1909 osync_engine_unref(engine);
1911 fail_unless(num_client_errors == 1, NULL);
1912 fail_unless(num_client_connected == 3, NULL);
1913 fail_unless(num_client_disconnected == 2, NULL);
1914 //fail_unless(num_member_sent_changes == 3, NULL);
1915 fail_unless(num_client_read == 1, NULL);
1916 fail_unless(num_client_written == 2, NULL);
1917 //fail_unless(num_written_errors == 0, NULL);
1918 fail_unless(num_mapping_errors == 0, NULL);
1919 //fail_unless(num_conflicts == 0, NULL);
1920 //fail_unless(num_member_sync_done_errors == 0, NULL);
1921 fail_unless(num_engine_errors == 0, NULL);
1922 fail_unless(num_engine_successful == 1, NULL);
1924 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" == \"x\""), NULL);
1925 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" == \"x\""), NULL);
1927 destroy_testbed(testbed);
1929 END_TEST
1931 START_TEST (dual_disconnect_timeout)
1933 char *testbed = setup_testbed("multisync_easy_new");
1935 g_setenv("DISCONNECT_TIMEOUT", "6", TRUE);
1937 OSyncError *error = NULL;
1938 OSyncGroup *group = osync_group_new(&error);
1939 fail_unless(group != NULL, NULL);
1940 fail_unless(error == NULL, NULL);
1942 osync_group_set_schemadir(group, testbed);
1943 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1944 fail_unless(error == NULL, NULL);
1946 OSyncEngine *engine = osync_engine_new(group, &error);
1947 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
1948 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
1949 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
1950 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
1951 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
1952 fail_unless(osync_engine_initialize(engine, &error), NULL);
1954 fail_unless(synchronize_once(engine, &error), NULL);
1955 fail_unless(!osync_error_is_set(&error), NULL);
1957 mark_point();
1958 osync_error_unref(&error);
1959 mark_point();
1960 osync_engine_finalize(engine, &error);
1961 mark_point();
1962 osync_engine_unref(engine);
1964 fail_unless(num_client_errors == 2, NULL);
1965 fail_unless(num_client_connected == 3, NULL);
1966 fail_unless(num_client_disconnected == 1, NULL);
1967 //fail_unless(num_member_sent_changes == 3, NULL);
1968 fail_unless(num_client_read == 1, NULL);
1969 fail_unless(num_client_written == 2, NULL);
1970 //fail_unless(num_written_errors == 0, NULL);
1971 fail_unless(num_mapping_errors == 0, NULL);
1972 //fail_unless(num_conflicts == 0, NULL);
1973 //fail_unless(num_member_sync_done_errors == 0, NULL);
1974 fail_unless(num_engine_errors == 0, NULL);
1975 fail_unless(num_engine_successful == 1, NULL);
1977 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" == \"x\""), NULL);
1978 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" == \"x\""), NULL);
1980 destroy_testbed(testbed);
1982 END_TEST
1984 START_TEST (disconnect_timeout_and_error)
1986 char *testbed = setup_testbed("multisync_easy_new");
1988 g_setenv("DISCONNECT_TIMEOUT", "5", TRUE);
1989 g_setenv("DISCONNECT_ERROR", "2", TRUE);
1991 OSyncError *error = NULL;
1992 OSyncGroup *group = osync_group_new(&error);
1993 fail_unless(group != NULL, NULL);
1994 fail_unless(error == NULL, NULL);
1996 osync_group_set_schemadir(group, testbed);
1997 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1998 fail_unless(error == NULL, NULL);
2000 OSyncEngine *engine = osync_engine_new(group, &error);
2001 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
2002 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
2003 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
2004 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
2005 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
2006 fail_unless(osync_engine_initialize(engine, &error), NULL);
2008 fail_unless(synchronize_once(engine, &error), NULL);
2009 fail_unless(!osync_error_is_set(&error), NULL);
2011 mark_point();
2012 osync_error_unref(&error);
2013 mark_point();
2014 osync_engine_finalize(engine, &error);
2015 mark_point();
2016 osync_engine_unref(engine);
2018 fail_unless(num_client_errors == 3, NULL);
2019 fail_unless(num_client_connected == 3, NULL);
2020 fail_unless(num_client_disconnected == 0, NULL);
2021 //fail_unless(num_member_sent_changes == 3, NULL);
2022 fail_unless(num_client_read == 1, NULL);
2023 fail_unless(num_client_written == 2, NULL);
2024 //fail_unless(num_written_errors == 0, NULL);
2025 fail_unless(num_mapping_errors == 0, NULL);
2026 //fail_unless(num_conflicts == 0, NULL);
2027 //fail_unless(num_member_sync_done_errors == 0, NULL);
2028 fail_unless(num_engine_errors == 0, NULL);
2029 fail_unless(num_engine_successful == 1, NULL);
2031 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" == \"x\""), NULL);
2032 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" == \"x\""), NULL);
2034 destroy_testbed(testbed);
2036 END_TEST
2038 START_TEST (get_changes_disconnect_error)
2040 char *testbed = setup_testbed("multisync_easy_new");
2042 g_setenv("DISCONNECT_TIMEOUT", "1", TRUE);
2043 g_setenv("DISCONNECT_ERROR", "2", TRUE);
2044 g_setenv("GET_CHANGES_TIMEOUT", "6", TRUE);
2045 g_setenv("NO_COMMITTED_ALL_CHECK", "1", TRUE);
2047 OSyncError *error = NULL;
2048 OSyncGroup *group = osync_group_new(&error);
2049 fail_unless(group != NULL, NULL);
2050 fail_unless(error == NULL, NULL);
2052 osync_group_set_schemadir(group, testbed);
2053 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
2054 fail_unless(error == NULL, NULL);
2056 OSyncEngine *engine = osync_engine_new(group, &error);
2057 osync_engine_set_memberstatus_callback(engine, member_status, NULL);
2058 osync_engine_set_enginestatus_callback(engine, engine_status, NULL);
2059 osync_engine_set_changestatus_callback(engine, entry_status, NULL);
2060 osync_engine_set_mappingstatus_callback(engine, mapping_status, NULL);
2061 osync_engine_set_conflict_callback(engine, conflict_handler_choose_modified, GINT_TO_POINTER(3));
2062 fail_unless(osync_engine_initialize(engine, &error), NULL);
2064 fail_unless(!synchronize_once(engine, &error), NULL);
2065 fail_unless(osync_error_is_set(&error), NULL);
2067 fail_unless(num_client_errors == 2, NULL);
2068 fail_unless(num_client_connected == 3, NULL);
2069 fail_unless(num_client_disconnected == 1, NULL);
2070 //fail_unless(num_member_sent_changes == 1, NULL);
2071 fail_unless(num_client_read == 1, NULL);
2072 fail_unless(num_client_written == 0, NULL);
2073 //fail_unless(num_written_errors == 0, NULL);
2074 fail_unless(num_mapping_errors == 0, NULL);
2075 //fail_unless(num_conflicts == 0, NULL);
2076 //fail_unless(num_member_sync_done_errors == 0, NULL);
2077 fail_unless(num_engine_errors == 1, NULL);
2078 fail_unless(num_engine_successful == 0, NULL);
2080 mark_point();
2081 osync_error_unref(&error);
2082 mark_point();
2083 osync_engine_finalize(engine, &error);
2084 mark_point();
2085 osync_engine_unref(engine);
2087 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
2088 fail_unless(!system("test \"x$(diff -x \".*\" data1 data3)\" != \"x\""), NULL);
2090 destroy_testbed(testbed);
2092 END_TEST
2095 Suite *multisync_suite(void)
2097 Suite *s = suite_create("Error Codes");
2098 //Suite *s2 = suite_create("Error Codes");
2099 create_case(s, "single_init_error_noerror", single_init_error_noerror);
2101 /* Disabled as not ported see http://opensync.org/ticket/980
2103 create_case(s, "single_init_error", single_init_error);
2104 create_case(s, "dual_connect_error", dual_connect_error);
2105 create_case(s, "one_of_two_connect_error", one_of_two_connect_error);
2106 create_case(s, "two_of_three_connect_error", two_of_three_connect_error);
2107 create_case(s, "two_of_three_connect_error2", two_of_three_connect_error2);
2108 create_case(s, "three_of_three_connect_error", three_of_three_connect_error);
2109 create_case(s, "one_of_three_connect_error", one_of_three_connect_error);
2110 create_case(s, "no_connect_error", no_connect_error);
2111 create_case(s, "single_connect_timeout", single_connect_timeout);
2112 create_case(s, "dual_connect_timeout", dual_connect_timeout);
2113 create_case(s, "one_of_three_timeout", one_of_three_timeout);
2114 create_case(s, "timeout_and_error", timeout_and_error);
2115 create_case(s, "single_get_changes_error", single_get_changes_error);
2116 create_case(s, "dual_get_changes_error", dual_get_changes_error);
2117 create_case(s, "two_of_three_get_changes_error", two_of_three_get_changes_error);
2118 create_case(s, "one_of_three_get_changes_error", one_of_three_get_changes_error);
2119 create_case(s, "one_of_three_get_changes_timeout", one_of_three_get_changes_timeout);
2120 create_case(s, "get_changes_timeout_and_error", get_changes_timeout_and_error);
2121 create_case(s, "get_changes_timeout_sleep", get_changes_timeout_sleep);
2122 create_case(s, "single_commit_error", single_commit_error);
2123 create_case(s, "dual_commit_error", dual_commit_error);
2124 create_case(s, "single_commit_timeout", single_commit_timeout);
2125 create_case(s, "dual_commit_timeout", dual_commit_timeout);
2126 create_case(s, "commit_timeout_and_error", commit_timeout_and_error);
2127 create_case(s, "commit_timeout_and_error2", commit_timeout_and_error2);
2128 create_case(s, "commit_error_modify", commit_error_modify);
2129 create_case(s, "commit_error_delete", commit_error_delete);
2130 create_case(s, "committed_all_error", committed_all_error);
2131 create_case(s, "committed_all_batch_error", committed_all_batch_error);
2132 create_case(s, "single_sync_done_error", single_sync_done_error);
2133 create_case(s, "dual_sync_done_error", dual_sync_done_error);
2134 create_case(s, "triple_sync_done_error", triple_sync_done_error);
2135 create_case(s, "single_sync_done_timeout", single_sync_done_timeout);
2136 create_case(s, "dual_sync_done_timeout", dual_sync_done_timeout);
2137 create_case(s, "sync_done_timeout_and_error", sync_done_timeout_and_error);
2138 create_case(s, "single_disconnect_error", single_disconnect_error);
2139 create_case(s, "dual_disconnect_error", dual_disconnect_error);
2140 create_case(s, "triple_disconnect_error", triple_disconnect_error);
2141 create_case(s, "single_disconnect_timeout", single_disconnect_timeout);
2142 create_case(s, "dual_disconnect_timeout", dual_disconnect_timeout);
2143 create_case(s, "disconnect_timeout_and_error", disconnect_timeout_and_error);
2144 create_case(s, "get_changes_disconnect_error", get_changes_disconnect_error);
2146 return s;
2149 int main(void)
2151 int nf;
2153 check_env();
2155 Suite *s = multisync_suite();
2157 SRunner *sr;
2158 sr = srunner_create(s);
2159 srunner_run_all(sr, CK_VERBOSE);
2160 nf = srunner_ntests_failed(sr);
2161 srunner_free(sr);
2162 return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE;