windows port - replaced sleep with g_usleep
[opensync.git] / tests / sync-tests / check_sync.c
blob1bf13b1be0fbb69c9f40c10c7d2195b17dff7a7c
1 #include "support.h"
3 #include <opensync/opensync-group.h>
4 #include <opensync/opensync-data.h>
5 #include <opensync/opensync-helper.h>
6 #include <opensync/opensync-engine.h>
7 #include <opensync/opensync-mapping.h>
9 #include "opensync/group/opensync_group_internals.h"
10 #include "opensync/engine/opensync_engine_internals.h"
12 START_TEST (sync_setup_connect)
14 char *testbed = setup_testbed("sync");
15 char *formatdir = g_strdup_printf("%s/formats", testbed);
16 char *plugindir = g_strdup_printf("%s/plugins", testbed);
18 OSyncError *error = NULL;
19 OSyncGroup *group = osync_group_new(&error);
20 fail_unless(group != NULL, NULL);
21 fail_unless(error == NULL, NULL);
23 osync_group_set_schemadir(group, testbed);
24 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
25 fail_unless(error == NULL, NULL);
27 OSyncEngine *engine = osync_engine_new(group, &error);
28 fail_unless(engine != NULL, NULL);
29 fail_unless(error == NULL, NULL);
30 osync_group_unref(group);
32 osync_engine_set_schemadir(engine, testbed);
33 osync_engine_set_plugindir(engine, plugindir);
34 osync_engine_set_formatdir(engine, formatdir);
36 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
38 fail_unless(osync_engine_initialize(engine, &error), NULL);
39 fail_unless(error == NULL, NULL);
41 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
42 fail_unless(error == NULL, NULL);
44 fail_unless(osync_engine_finalize(engine, &error), NULL);
45 fail_unless(error == NULL, NULL);
47 osync_engine_unref(engine);
49 fail_unless(num_client_connected == 2, NULL);
50 fail_unless(num_client_main_connected == 2, NULL);
51 fail_unless(num_client_disconnected == 2, NULL);
52 fail_unless(num_client_main_disconnected == 2, NULL);
53 //fail_unless(num_engine_end_conflicts == 0, NULL);
55 g_free(formatdir);
56 g_free(plugindir);
58 destroy_testbed(testbed);
60 END_TEST
62 START_TEST (sync_easy_new)
64 char *testbed = setup_testbed("sync");
65 char *formatdir = g_strdup_printf("%s/formats", testbed);
66 char *plugindir = g_strdup_printf("%s/plugins", testbed);
68 osync_testing_system_abort("cp testdata data1/testdata");
70 OSyncError *error = NULL;
71 OSyncGroup *group = osync_group_new(&error);
72 fail_unless(group != NULL, NULL);
73 fail_unless(error == NULL, NULL);
75 osync_group_set_schemadir(group, testbed);
76 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
77 fail_unless(error == NULL, NULL);
79 OSyncEngine *engine = osync_engine_new(group, &error);
80 fail_unless(engine != NULL, NULL);
81 fail_unless(error == NULL, NULL);
82 osync_group_unref(group);
84 osync_engine_set_schemadir(engine, testbed);
85 osync_engine_set_plugindir(engine, plugindir);
86 osync_engine_set_formatdir(engine, formatdir);
88 osync_engine_set_conflict_callback(engine, conflict_handler_choose_first, GINT_TO_POINTER(1));
89 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
90 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
91 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
92 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
95 fail_unless(osync_engine_initialize(engine, &error), NULL);
96 fail_unless(error == NULL, NULL);
98 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
99 fail_unless(error == NULL, NULL);
101 fail_unless(osync_engine_finalize(engine, &error), NULL);
102 fail_unless(error == NULL, NULL);
104 osync_engine_unref(engine);
106 /* Client checks */
107 fail_unless(num_client_connected == 2, NULL);
108 fail_unless(num_client_main_connected == 2, NULL);
109 fail_unless(num_client_read == 2, NULL);
110 fail_unless(num_client_main_read == 2, NULL);
111 fail_unless(num_client_written == 2, NULL);
112 fail_unless(num_client_main_written == 2, NULL);
113 fail_unless(num_client_disconnected == 2, NULL);
114 fail_unless(num_client_main_disconnected == 2, NULL);
115 fail_unless(num_client_errors == 0, NULL);
116 fail_unless(num_client_sync_done == 2, NULL);
117 fail_unless(num_client_main_sync_done == 2, NULL);
119 /* Client checks */
120 fail_unless(num_engine_connected == 1, NULL);
121 fail_unless(num_engine_errors == 0, NULL);
122 fail_unless(num_engine_read == 1, NULL);
123 fail_unless(num_engine_written == 1, NULL);
124 fail_unless(num_engine_sync_done == 1, NULL);
125 fail_unless(num_engine_disconnected == 1, NULL);
126 fail_unless(num_engine_successful == 1, NULL);
127 fail_unless(num_engine_end_conflicts == 1, NULL);
128 fail_unless(num_engine_prev_unclean == 0, NULL);
130 /* Change checks */
131 fail_unless(num_change_read == 1, NULL);
132 fail_unless(num_change_written == 1, NULL);
133 fail_unless(num_change_error == 0, NULL);
135 /* Mapping checks */
136 fail_unless(num_mapping_solved == 1, NULL);
137 //fail_unless(num_mapping_written == 1, NULL);
138 fail_unless(num_mapping_errors == 0, NULL);
139 fail_unless(num_mapping_conflicts == 0, NULL);
141 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
143 char *path = g_strdup_printf("%s/configs/group/archive.db", testbed);
144 OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 1);
145 g_free(path);
146 check_mapping(maptable, 1, 1, 2, "testdata");
147 check_mapping(maptable, 2, 1, 2, "testdata");
148 osync_mapping_table_close(maptable);
149 osync_mapping_table_unref(maptable);
151 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
152 OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 1);
153 g_free(path);
154 check_hash(table, "testdata");
155 osync_hashtable_unref(table);
157 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
158 table = hashtable_load(path, "mockobjtype1", 1);
159 g_free(path);
160 check_hash(table, "testdata");
161 osync_hashtable_unref(table);
163 g_free(formatdir);
164 g_free(plugindir);
166 destroy_testbed(testbed);
168 END_TEST
170 START_TEST (sync_easy_new_del)
172 char *testbed = setup_testbed("sync");
173 char *formatdir = g_strdup_printf("%s/formats", testbed);
174 char *plugindir = g_strdup_printf("%s/plugins", testbed);
176 osync_testing_system_abort("cp testdata data1/testdata");
178 OSyncError *error = NULL;
179 OSyncGroup *group = osync_group_new(&error);
180 fail_unless(group != NULL, NULL);
181 fail_unless(error == NULL, NULL);
183 osync_group_set_schemadir(group, testbed);
184 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
185 fail_unless(error == NULL, NULL);
187 OSyncEngine *engine = osync_engine_new(group, &error);
188 fail_unless(engine != NULL, NULL);
189 fail_unless(error == NULL, NULL);
190 osync_group_unref(group);
192 osync_engine_set_schemadir(engine, testbed);
193 osync_engine_set_plugindir(engine, plugindir);
194 osync_engine_set_formatdir(engine, formatdir);
196 osync_engine_set_conflict_callback(engine, conflict_handler_choose_first, GINT_TO_POINTER(1));
197 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
198 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
199 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
200 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
203 fail_unless(osync_engine_initialize(engine, &error), NULL);
204 fail_unless(error == NULL, NULL);
206 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
207 fail_unless(error == NULL, NULL);
209 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
211 char *path = g_strdup_printf("%s/configs/group/archive.db", testbed);
212 OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 1);
213 g_free(path);
214 check_mapping(maptable, 1, 1, 2, "testdata");
215 check_mapping(maptable, 2, 1, 2, "testdata");
216 osync_mapping_table_close(maptable);
217 osync_mapping_table_unref(maptable);
219 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
220 OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 1);
221 g_free(path);
222 check_hash(table, "testdata");
223 osync_hashtable_unref(table);
225 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
226 table = hashtable_load(path, "mockobjtype1", 1);
227 g_free(path);
228 check_hash(table, "testdata");
229 osync_hashtable_unref(table);
231 reset_counters();
232 osync_testing_system_abort("rm data1/testdata");
234 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
235 fail_unless(error == NULL, NULL);
237 fail_unless(osync_engine_finalize(engine, &error), NULL);
238 fail_unless(error == NULL, NULL);
240 osync_engine_unref(engine);
242 /* Client checks */
243 fail_unless(num_client_connected == 2, NULL);
244 fail_unless(num_client_main_connected == 2, NULL);
245 fail_unless(num_client_read == 2, NULL);
246 fail_unless(num_client_main_read == 2, NULL);
247 fail_unless(num_client_written == 2, NULL);
248 fail_unless(num_client_main_written == 2, NULL);
249 fail_unless(num_client_disconnected == 2, NULL);
250 fail_unless(num_client_main_disconnected == 2, NULL);
251 fail_unless(num_client_errors == 0, NULL);
252 fail_unless(num_client_sync_done == 2, NULL);
253 fail_unless(num_client_main_sync_done == 2, NULL);
255 /* Client checks */
256 fail_unless(num_engine_connected == 1, NULL);
257 fail_unless(num_engine_errors == 0, NULL);
258 fail_unless(num_engine_read == 1, NULL);
259 fail_unless(num_engine_written == 1, NULL);
260 fail_unless(num_engine_sync_done == 1, NULL);
261 fail_unless(num_engine_disconnected == 1, NULL);
262 fail_unless(num_engine_successful == 1, NULL);
263 fail_unless(num_engine_end_conflicts == 1, NULL);
264 fail_unless(num_engine_prev_unclean == 0, NULL);
266 /* Change checks */
267 fail_unless(num_change_read == 1, NULL);
268 fail_unless(num_change_written == 1, NULL);
269 fail_unless(num_change_error == 0, NULL);
271 /* Mapping checks */
272 fail_unless(num_mapping_solved == 1, NULL);
273 //fail_unless(num_mapping_written == 1, NULL);
274 fail_unless(num_mapping_errors == 0, NULL);
275 fail_unless(num_mapping_conflicts == 0, NULL);
277 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
279 path = g_strdup_printf("%s/configs/group/archive.db", testbed);
280 maptable = mappingtable_load(path, "mockobjtype1", 0);
281 g_free(path);
282 osync_mapping_table_close(maptable);
283 osync_mapping_table_unref(maptable);
285 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
286 table = hashtable_load(path, "mockobjtype1", 0);
287 g_free(path);
288 osync_hashtable_unref(table);
290 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
291 table = hashtable_load(path, "mockobjtype1", 0);
292 g_free(path);
293 osync_hashtable_unref(table);
295 g_free(formatdir);
296 g_free(plugindir);
298 destroy_testbed(testbed);
300 END_TEST
302 START_TEST (sync_easy_conflict)
304 char *testbed = setup_testbed("sync");
305 char *formatdir = g_strdup_printf("%s/formats", testbed);
306 char *plugindir = g_strdup_printf("%s/plugins", testbed);
308 osync_testing_system_abort("cp testdata data1/testdata");
309 osync_testing_system_abort("cp testdata comp_data");
310 osync_testing_system_abort("cp new_data1 data2/testdata");
312 OSyncError *error = NULL;
313 OSyncGroup *group = osync_group_new(&error);
314 fail_unless(group != NULL, NULL);
315 fail_unless(error == NULL, NULL);
317 osync_group_set_schemadir(group, testbed);
318 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
319 fail_unless(error == NULL, NULL);
321 OSyncEngine *engine = osync_engine_new(group, &error);
322 fail_unless(engine != NULL, NULL);
323 fail_unless(error == NULL, NULL);
324 osync_group_unref(group);
326 osync_engine_set_schemadir(engine, testbed);
327 osync_engine_set_plugindir(engine, plugindir);
328 osync_engine_set_formatdir(engine, formatdir);
330 osync_engine_set_conflict_callback(engine, conflict_handler_choose_first, GINT_TO_POINTER(2));
331 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
332 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
333 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
334 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
337 fail_unless(osync_engine_initialize(engine, &error), NULL);
338 fail_unless(error == NULL, NULL);
340 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
341 fail_unless(error == NULL, NULL);
343 fail_unless(osync_engine_finalize(engine, &error), NULL);
344 fail_unless(error == NULL, NULL);
346 osync_engine_unref(engine);
348 /* Client checks */
349 fail_unless(num_client_connected == 2, NULL);
350 fail_unless(num_client_main_connected == 2, NULL);
351 fail_unless(num_client_read == 2, NULL);
352 fail_unless(num_client_main_read == 2, NULL);
353 fail_unless(num_client_written == 2, NULL);
354 fail_unless(num_client_main_written == 2, NULL);
355 fail_unless(num_client_disconnected == 2, NULL);
356 fail_unless(num_client_main_disconnected == 2, NULL);
357 fail_unless(num_client_errors == 0, NULL);
358 fail_unless(num_client_sync_done == 2, NULL);
359 fail_unless(num_client_main_sync_done == 2, NULL);
361 /* Client checks */
362 fail_unless(num_engine_connected == 1, NULL);
363 fail_unless(num_engine_errors == 0, NULL);
364 fail_unless(num_engine_read == 1, NULL);
365 fail_unless(num_engine_written == 1, NULL);
366 fail_unless(num_engine_sync_done == 1, NULL);
367 fail_unless(num_engine_disconnected == 1, NULL);
368 fail_unless(num_engine_successful == 1, NULL);
369 fail_unless(num_engine_end_conflicts == 1, NULL);
370 fail_unless(num_engine_prev_unclean == 0, NULL);
372 /* Change checks */
373 fail_unless(num_change_read == 2, NULL);
374 fail_unless(num_change_written == 1, NULL);
375 fail_unless(num_change_error == 0, NULL);
377 /* Mapping checks */
378 fail_unless(num_mapping_solved == 1, NULL);
379 //fail_unless(num_mapping_written == 1, NULL);
380 fail_unless(num_mapping_errors == 0, NULL);
381 fail_unless(num_mapping_conflicts == 1, NULL);
383 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
384 fail_unless(!system("test \"x$(diff -x \".*\" data1/testdata comp_data)\" = \"x\""), NULL);
385 fail_unless(!system("test \"x$(diff -x \".*\" data2/testdata comp_data)\" = \"x\""), NULL);
387 char *path = g_strdup_printf("%s/configs/group/archive.db", testbed);
388 OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 1);
389 g_free(path);
390 check_mapping(maptable, 1, 1, 2, "testdata");
391 check_mapping(maptable, 2, 1, 2, "testdata");
392 osync_mapping_table_close(maptable);
393 osync_mapping_table_unref(maptable);
395 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
396 OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 1);
397 g_free(path);
398 check_hash(table, "testdata");
399 osync_hashtable_unref(table);
401 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
402 table = hashtable_load(path, "mockobjtype1", 1);
403 g_free(path);
404 check_hash(table, "testdata");
405 osync_hashtable_unref(table);
407 g_free(formatdir);
408 g_free(plugindir);
410 destroy_testbed(testbed);
412 END_TEST
414 START_TEST (sync_easy_new_mapping)
416 char *testbed = setup_testbed("sync");
417 char *formatdir = g_strdup_printf("%s/formats", testbed);
418 char *plugindir = g_strdup_printf("%s/plugins", testbed);
420 osync_testing_system_abort("cp testdata data1/testdata");
421 osync_testing_system_abort("cp testdata data2/testdata");
423 OSyncError *error = NULL;
424 OSyncGroup *group = osync_group_new(&error);
425 fail_unless(group != NULL, NULL);
426 fail_unless(error == NULL, NULL);
428 osync_group_set_schemadir(group, testbed);
429 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
430 fail_unless(error == NULL, NULL);
432 OSyncEngine *engine = osync_engine_new(group, &error);
433 fail_unless(engine != NULL, NULL);
434 fail_unless(error == NULL, NULL);
435 osync_group_unref(group);
437 osync_engine_set_schemadir(engine, testbed);
438 osync_engine_set_plugindir(engine, plugindir);
439 osync_engine_set_formatdir(engine, formatdir);
441 osync_engine_set_conflict_callback(engine, conflict_handler_choose_first, GINT_TO_POINTER(2));
442 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
443 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
444 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
445 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
448 fail_unless(osync_engine_initialize(engine, &error), NULL);
449 fail_unless(error == NULL, NULL);
451 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
452 fail_unless(error == NULL, NULL);
454 /* Client checks */
455 fail_unless(num_client_connected == 2, NULL);
456 fail_unless(num_client_main_connected == 2, NULL);
457 fail_unless(num_client_read == 2, NULL);
458 fail_unless(num_client_main_read == 2, NULL);
459 fail_unless(num_client_written == 2, NULL);
460 fail_unless(num_client_main_written == 2, NULL);
461 fail_unless(num_client_disconnected == 2, NULL);
462 fail_unless(num_client_main_disconnected == 2, NULL);
463 fail_unless(num_client_errors == 0, NULL);
464 fail_unless(num_client_sync_done == 2, NULL);
465 fail_unless(num_client_main_sync_done == 2, NULL);
467 /* Client checks */
468 fail_unless(num_engine_connected == 1, NULL);
469 fail_unless(num_engine_errors == 0, NULL);
470 fail_unless(num_engine_read == 1, NULL);
471 fail_unless(num_engine_written == 1, NULL);
472 fail_unless(num_engine_sync_done == 1, NULL);
473 fail_unless(num_engine_disconnected == 1, NULL);
474 fail_unless(num_engine_successful == 1, NULL);
475 fail_unless(num_engine_end_conflicts == 1, NULL);
476 fail_unless(num_engine_prev_unclean == 0, NULL);
478 /* Change checks */
479 fail_unless(num_change_read == 2, NULL);
480 fail_unless(num_change_written == 0, NULL);
481 fail_unless(num_change_error == 0, NULL);
483 /* Mapping checks */
484 fail_unless(num_mapping_solved == 1, NULL);
485 //fail_unless(num_mapping_written == 1, NULL);
486 fail_unless(num_mapping_errors == 0, NULL);
487 fail_unless(num_mapping_conflicts == 0, NULL);
489 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
491 char *path = g_strdup_printf("%s/configs/group/archive.db", testbed);
492 OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 1);
493 g_free(path);
494 check_mapping(maptable, 1, 1, 2, "testdata");
495 check_mapping(maptable, 2, 1, 2, "testdata");
496 osync_mapping_table_close(maptable);
497 osync_mapping_table_unref(maptable);
499 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
500 OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 1);
501 g_free(path);
502 check_hash(table, "testdata");
503 osync_hashtable_unref(table);
505 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
506 table = hashtable_load(path, "mockobjtype1", 1);
507 g_free(path);
508 check_hash(table, "testdata");
509 osync_hashtable_unref(table);
511 reset_counters();
512 osync_testing_system_abort("rm data1/testdata");
514 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
515 fail_unless(error == NULL, NULL);
517 fail_unless(osync_engine_finalize(engine, &error), NULL);
518 fail_unless(error == NULL, NULL);
520 osync_engine_unref(engine);
522 /* Client checks */
523 fail_unless(num_client_connected == 2, NULL);
524 fail_unless(num_client_main_connected == 2, NULL);
525 fail_unless(num_client_read == 2, NULL);
526 fail_unless(num_client_main_read == 2, NULL);
527 fail_unless(num_client_written == 2, NULL);
528 fail_unless(num_client_main_written == 2, NULL);
529 fail_unless(num_client_disconnected == 2, NULL);
530 fail_unless(num_client_main_disconnected == 2, NULL);
531 fail_unless(num_client_errors == 0, NULL);
532 fail_unless(num_client_sync_done == 2, NULL);
533 fail_unless(num_client_main_sync_done == 2, NULL);
535 /* Client checks */
536 fail_unless(num_engine_connected == 1, NULL);
537 fail_unless(num_engine_errors == 0, NULL);
538 fail_unless(num_engine_read == 1, NULL);
539 fail_unless(num_engine_written == 1, NULL);
540 fail_unless(num_engine_sync_done == 1, NULL);
541 fail_unless(num_engine_disconnected == 1, NULL);
542 fail_unless(num_engine_successful == 1, NULL);
543 fail_unless(num_engine_end_conflicts == 1, NULL);
544 fail_unless(num_engine_prev_unclean == 0, NULL);
546 /* Change checks */
547 fail_unless(num_change_read == 1, NULL);
548 fail_unless(num_change_written == 1, NULL);
549 fail_unless(num_change_error == 0, NULL);
551 /* Mapping checks */
552 fail_unless(num_mapping_solved == 1, NULL);
553 //fail_unless(num_mapping_written == 1, NULL);
554 fail_unless(num_mapping_errors == 0, NULL);
555 fail_unless(num_mapping_conflicts == 0, NULL);
557 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
559 path = g_strdup_printf("%s/configs/group/archive.db", testbed);
560 maptable = mappingtable_load(path, "mockobjtype1", 0);
561 g_free(path);
562 osync_mapping_table_close(maptable);
563 osync_mapping_table_unref(maptable);
565 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
566 table = hashtable_load(path, "mockobjtype1", 0);
567 g_free(path);
568 osync_hashtable_unref(table);
570 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
571 table = hashtable_load(path, "mockobjtype1", 0);
572 g_free(path);
573 osync_hashtable_unref(table);
575 g_free(formatdir);
576 g_free(plugindir);
578 destroy_testbed(testbed);
580 END_TEST
582 START_TEST (sync_easy_conflict_duplicate)
584 char *testbed = setup_testbed("sync");
585 char *formatdir = g_strdup_printf("%s/formats", testbed);
586 char *plugindir = g_strdup_printf("%s/plugins", testbed);
588 osync_testing_system_abort("cp testdata data1/testdata");
589 osync_testing_system_abort("cp new_data1 data2/testdata");
591 OSyncError *error = NULL;
592 OSyncGroup *group = osync_group_new(&error);
593 fail_unless(group != NULL, NULL);
594 fail_unless(error == NULL, NULL);
596 osync_group_set_schemadir(group, testbed);
597 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
598 fail_unless(error == NULL, NULL);
600 OSyncEngine *engine = osync_engine_new(group, &error);
601 fail_unless(engine != NULL, NULL);
602 fail_unless(error == NULL, NULL);
603 osync_group_unref(group);
605 osync_engine_set_schemadir(engine, testbed);
606 osync_engine_set_plugindir(engine, plugindir);
607 osync_engine_set_formatdir(engine, formatdir);
609 osync_engine_set_conflict_callback(engine, conflict_handler_duplicate, GINT_TO_POINTER(2));
610 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
611 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
612 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
613 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
616 fail_unless(osync_engine_initialize(engine, &error), NULL);
617 fail_unless(error == NULL, NULL);
619 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
620 fail_unless(error == NULL, NULL);
622 /* Client checks */
623 fail_unless(num_client_connected == 2, NULL);
624 fail_unless(num_client_main_connected == 2, NULL);
625 fail_unless(num_client_read == 2, NULL);
626 fail_unless(num_client_main_read == 2, NULL);
627 fail_unless(num_client_written == 2, NULL);
628 fail_unless(num_client_main_written == 2, NULL);
629 fail_unless(num_client_disconnected == 2, NULL);
630 fail_unless(num_client_main_disconnected == 2, NULL);
631 fail_unless(num_client_errors == 0, NULL);
632 fail_unless(num_client_sync_done == 2, NULL);
633 fail_unless(num_client_main_sync_done == 2, NULL);
635 /* Client checks */
636 fail_unless(num_engine_connected == 1, NULL);
637 fail_unless(num_engine_errors == 0, NULL);
638 fail_unless(num_engine_read == 1, NULL);
639 fail_unless(num_engine_written == 1, NULL);
640 fail_unless(num_engine_sync_done == 1, NULL);
641 fail_unless(num_engine_disconnected == 1, NULL);
642 fail_unless(num_engine_successful == 1, NULL);
643 fail_unless(num_engine_end_conflicts == 1, NULL);
644 fail_unless(num_engine_prev_unclean == 0, NULL);
646 /* Change checks */
647 fail_unless(num_change_read == 2, NULL);
648 fail_unless(num_change_written == 3, NULL);
649 fail_unless(num_change_error == 0, NULL);
651 /* Mapping checks */
652 fail_unless(num_mapping_solved == 1, NULL);
653 //fail_unless(num_mapping_written == 1, NULL);
654 fail_unless(num_mapping_errors == 0, NULL);
655 fail_unless(num_mapping_conflicts == 1, NULL);
657 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
659 char *path = g_strdup_printf("%s/configs/group/archive.db", testbed);
660 OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 2);
661 g_free(path);
662 check_mapping(maptable, 1, -1, 2, "testdata");
663 check_mapping(maptable, 1, -1, 2, "testdata-dupe");
664 check_mapping(maptable, 2, -1, 2, "testdata");
665 check_mapping(maptable, 1, -1, 2, "testdata-dupe");
666 osync_mapping_table_close(maptable);
667 osync_mapping_table_unref(maptable);
669 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
670 OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 2);
671 g_free(path);
672 check_hash(table, "testdata");
673 check_hash(table, "testdata-dupe");
674 osync_hashtable_unref(table);
676 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
677 table = hashtable_load(path, "mockobjtype1", 2);
678 g_free(path);
679 check_hash(table, "testdata");
680 check_hash(table, "testdata-dupe");
681 osync_hashtable_unref(table);
683 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
684 osync_testing_system_abort("rm -f data1/testdata-dupe");
686 reset_counters();
687 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
688 fail_unless(error == NULL, NULL);
690 fail_unless(osync_engine_finalize(engine, &error), NULL);
691 fail_unless(error == NULL, NULL);
693 osync_engine_unref(engine);
695 /* Client checks */
696 fail_unless(num_client_connected == 2, NULL);
697 fail_unless(num_client_main_connected == 2, NULL);
698 fail_unless(num_client_read == 2, NULL);
699 fail_unless(num_client_main_read == 2, NULL);
700 fail_unless(num_client_written == 2, NULL);
701 fail_unless(num_client_main_written == 2, NULL);
702 fail_unless(num_client_disconnected == 2, NULL);
703 fail_unless(num_client_main_disconnected == 2, NULL);
704 fail_unless(num_client_errors == 0, NULL);
705 fail_unless(num_client_sync_done == 2, NULL);
706 fail_unless(num_client_main_sync_done == 2, NULL);
708 /* Client checks */
709 fail_unless(num_engine_connected == 1, NULL);
710 fail_unless(num_engine_errors == 0, NULL);
711 fail_unless(num_engine_read == 1, NULL);
712 fail_unless(num_engine_written == 1, NULL);
713 fail_unless(num_engine_sync_done == 1, NULL);
714 fail_unless(num_engine_disconnected == 1, NULL);
715 fail_unless(num_engine_successful == 1, NULL);
716 fail_unless(num_engine_end_conflicts == 1, NULL);
717 fail_unless(num_engine_prev_unclean == 0, NULL);
719 /* Change checks */
720 fail_unless(num_change_read == 1, NULL);
721 fail_unless(num_change_written == 1, NULL);
722 fail_unless(num_change_error == 0, NULL);
724 /* Mapping checks */
725 fail_unless(num_mapping_solved == 1, NULL);
726 //fail_unless(num_mapping_written == 1, NULL);
727 fail_unless(num_mapping_errors == 0, NULL);
728 fail_unless(num_mapping_conflicts == 0, NULL);
730 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
733 path = g_strdup_printf("%s/configs/group/archive.db", testbed);
734 maptable = mappingtable_load(path, "mockobjtype1", 1);
735 g_free(path);
736 check_mapping(maptable, 1, -1, 2, "testdata");
737 check_mapping(maptable, 2, -1, 2, "testdata");
738 osync_mapping_table_close(maptable);
739 osync_mapping_table_unref(maptable);
741 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
742 table = hashtable_load(path, "mockobjtype1", 1);
743 g_free(path);
744 check_hash(table, "testdata");
745 osync_hashtable_unref(table);
747 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
748 table = hashtable_load(path, "mockobjtype1", 1);
749 g_free(path);
750 check_hash(table, "testdata");
751 osync_hashtable_unref(table);
753 g_free(formatdir);
754 g_free(plugindir);
756 destroy_testbed(testbed);
758 END_TEST
760 /* Aborting the entire synchronization while conflict resolution. Bug ticket: #700 */
761 START_TEST (sync_easy_conflict_abort)
763 char *testbed = setup_testbed("sync");
764 char *formatdir = g_strdup_printf("%s/formats", testbed);
765 char *plugindir = g_strdup_printf("%s/plugins", testbed);
767 osync_testing_system_abort("cp testdata data1/testdata");
768 osync_testing_system_abort("cp new_data1 data2/testdata");
770 g_setenv("NO_COMMITTED_ALL_CHECK", "1", TRUE);
772 OSyncError *error = NULL;
773 OSyncGroup *group = osync_group_new(&error);
774 fail_unless(group != NULL, NULL);
775 fail_unless(error == NULL, NULL);
777 osync_group_set_schemadir(group, testbed);
778 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
779 fail_unless(error == NULL, NULL);
781 OSyncEngine *engine = osync_engine_new(group, &error);
782 fail_unless(engine != NULL, NULL);
783 fail_unless(error == NULL, NULL);
784 osync_group_unref(group);
786 osync_engine_set_schemadir(engine, testbed);
787 osync_engine_set_plugindir(engine, plugindir);
788 osync_engine_set_formatdir(engine, formatdir);
790 osync_engine_set_conflict_callback(engine, conflict_handler_abort, GINT_TO_POINTER(2));
791 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
792 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
793 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
794 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
797 fail_unless(osync_engine_initialize(engine, &error), NULL);
798 fail_unless(error == NULL, NULL);
800 fail_unless(!osync_engine_synchronize_and_block(engine, &error), NULL);
801 fail_unless(error != NULL, NULL);
802 osync_error_unref(&error);
804 /* Client checks */
805 fail_unless(num_client_connected == 2, NULL);
806 fail_unless(num_client_main_connected == 2, NULL);
807 fail_unless(num_client_read == 2, NULL);
808 fail_unless(num_client_main_read == 2, NULL);
809 fail_unless(num_client_written == 0, NULL);
810 fail_unless(num_client_main_written == 2, NULL);
811 fail_unless(num_client_disconnected == 2, NULL);
812 fail_unless(num_client_main_disconnected == 2, NULL);
813 fail_unless(num_client_errors == 0, NULL);
814 fail_unless(num_client_sync_done == 0, NULL);
815 fail_unless(num_client_main_sync_done == 0, NULL);
817 /* Client checks */
818 fail_unless(num_engine_connected == 1, NULL);
819 fail_unless(num_engine_errors == 1, "errors: %i", num_engine_errors);
820 fail_unless(num_engine_read == 1, NULL);
821 fail_unless(num_engine_written == 0, NULL);
822 fail_unless(num_engine_sync_done == 0, NULL);
823 fail_unless(num_engine_disconnected == 1, NULL);
824 fail_unless(num_engine_successful == 0, NULL);
825 /* FIXME: END_CONFLICTS even when we aborted the entire sync while solving the conflicts?!i
826 Review if this shouldn't be 0 .. very likely this signal got emitted in the wrong place within OSyncEngine. */
827 fail_unless(num_engine_end_conflicts == 1, NULL);
828 fail_unless(num_engine_prev_unclean == 0, NULL);
830 /* Change checks */
831 fail_unless(num_change_read == 2, NULL);
832 fail_unless(num_change_written == 0, NULL);
833 fail_unless(num_change_error == 0, NULL);
835 /* Mapping checks */
836 fail_unless(num_mapping_solved == 0, NULL);
837 //fail_unless(num_mapping_written == 1, NULL);
838 fail_unless(num_mapping_errors == 0, NULL);
839 fail_unless(num_mapping_conflicts == 0, NULL);
841 /* Still conflicts! */
842 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
844 char *path = g_strdup_printf("%s/configs/group/archive.db", testbed);
845 OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 0);
846 g_free(path);
847 osync_mapping_table_close(maptable);
848 osync_mapping_table_unref(maptable);
851 /* Don't care about the hashtable. The engine got aborted - this MUST and WILL
852 cause a slow-sync next time. A slow-sync ends up in flushing the persistent
853 hashtable. */
856 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
857 OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 1);
858 g_free(path);
859 check_hash(table, "testdata");
860 // check_hash(table, "testdata-dupe");
861 osync_hashtable_unref(table);
863 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
864 table = hashtable_load(path, "mockobjtype1", 1);
865 g_free(path);
866 check_hash(table, "testdata");
867 // check_hash(table, "testdata-dupe");
868 osync_hashtable_unref(table);
871 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
872 // osync_testing_system_abort("rm -f data1/testdata-dupe");
874 reset_counters();
875 fail_unless(!osync_engine_synchronize_and_block(engine, &error), NULL);
876 fail_unless(error != NULL, NULL);
877 osync_error_unref(&error);
879 fail_unless(osync_engine_finalize(engine, &error), NULL);
880 fail_unless(error == NULL, "error: %s", osync_error_print(&error));
882 osync_engine_unref(engine);
884 /* Client checks */
885 fail_unless(num_client_connected == 2, NULL);
886 fail_unless(num_client_main_connected == 2, NULL);
887 fail_unless(num_client_read == 2, NULL);
888 fail_unless(num_client_main_read == 2, NULL);
889 fail_unless(num_client_written == 0, NULL);
890 fail_unless(num_client_main_written == 2, NULL);
891 fail_unless(num_client_disconnected == 2, NULL);
892 fail_unless(num_client_main_disconnected == 2, NULL);
893 fail_unless(num_client_errors == 0, NULL);
894 fail_unless(num_client_sync_done == 0, NULL);
895 fail_unless(num_client_main_sync_done == 0, NULL);
897 /* Client checks */
898 fail_unless(num_engine_connected == 1, NULL);
899 fail_unless(num_engine_errors == 1, NULL);
900 fail_unless(num_engine_read == 1, NULL);
901 fail_unless(num_engine_written == 0, NULL);
902 fail_unless(num_engine_sync_done == 0, NULL);
903 fail_unless(num_engine_disconnected == 1, NULL);
904 fail_unless(num_engine_successful == 0, NULL);
905 /* FIXME: END_CONFLICTS even when we aborted the entire sync while solving the conflicts?!i
906 Review if this shouldn't be 0 .. very likely this signal got emitted in the wrong place within OSyncEngine. */
907 fail_unless(num_engine_end_conflicts == 1, NULL);
908 fail_unless(num_engine_prev_unclean == 0, NULL);
910 /* Change checks */
911 fail_unless(num_change_read == 2, NULL);
912 fail_unless(num_change_written == 0, NULL);
913 fail_unless(num_change_error == 0, NULL);
915 /* Mapping checks */
916 fail_unless(num_mapping_solved == 0, NULL);
917 //fail_unless(num_mapping_written == 1, NULL);
918 fail_unless(num_mapping_errors == 0, NULL);
919 fail_unless(num_mapping_conflicts == 0, NULL);
921 /* Still different */
922 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" != \"x\""), NULL);
925 path = g_strdup_printf("%s/configs/group/archive.db", testbed);
926 maptable = mappingtable_load(path, "mockobjtype1", 0);
927 g_free(path);
928 osync_mapping_table_close(maptable);
929 osync_mapping_table_unref(maptable);
931 /* Don't care about the hashtable. The engine got aborted - this MUST and WILL
932 cause a slow-sync next time. A slow-sync ends up in flushing the persistent
933 hashtable. */
936 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
937 table = hashtable_load(path, "mockobjtype1", 1);
938 g_free(path);
939 check_hash(table, "testdata");
940 osync_hashtable_unref(table);
942 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
943 table = hashtable_load(path, "mockobjtype1", 1);
944 g_free(path);
945 check_hash(table, "testdata");
946 osync_hashtable_unref(table);
949 g_free(formatdir);
950 g_free(plugindir);
952 destroy_testbed(testbed);
954 END_TEST
957 #if 0
958 START_TEST (sync_conflict_duplicate)
960 char *testbed = setup_testbed("sync_conflict_duplicate");
961 char *formatdir = g_strdup_printf("%s/formats", testbed);
962 char *plugindir = g_strdup_printf("%s/plugins", testbed);
964 num_conflicts = 0;
965 OSyncEnv *osync = init_env();
966 OSyncGroup *group = osync_group_load(osync, "configs/group", NULL);
968 OSyncError *error = NULL;
969 OSyncEngine *engine = osengine_new(group, &error);
970 osengine_set_conflict_callback(engine, conflict_handler_duplication, GINT_TO_POINTER(2));
971 osengine_init(engine, &error);
973 synchronize_once(engine, NULL);
975 osync_testing_system_abort("diff -x \".*\" data1 data2");
976 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
978 OSyncMappingTable *maptable = mappingtable_load(group, 3, 0);
979 check_mapping(maptable, 1, -1, 2, "testdata");
980 check_mapping(maptable, 1, -1, 2, "testdata-dupe");
981 check_mapping(maptable, 1, -1, 2, "testdata-dupe-dupe");
982 check_mapping(maptable, 2, -1, 2, "testdata");
983 check_mapping(maptable, 2, -1, 2, "testdata-dupe");
984 check_mapping(maptable, 2, -1, 2, "testdata-dupe-dupe");
985 mappingtable_close(maptable);
987 OSyncHashTable *table = hashtable_load(group, 1, 3);
988 check_hash(table, "testdata");
989 check_hash(table, "testdata-dupe");
990 check_hash(table, "testdata-dupe-dupe");
991 osync_hashtable_close(table);
993 table = hashtable_load(group, 2, 3);
994 check_hash(table, "testdata");
995 check_hash(table, "testdata-dupe");
996 check_hash(table, "testdata-dupe-dupe");
997 osync_hashtable_close(table);
999 fail_unless(!system("rm -f data1/testdata-dupe data2/testdata-dupe-dupe"), NULL);
1001 synchronize_once(engine, NULL);
1002 osengine_finalize(engine);
1003 osengine_free(engine);
1004 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
1005 fail_unless(num_conflicts == 0, NULL);
1007 maptable = mappingtable_load(group, 1, 0);
1008 check_mapping(maptable, 1, 0, 2, "testdata");
1009 check_mapping(maptable, 2, 0, 2, "testdata");
1010 mappingtable_close(maptable);
1012 table = hashtable_load(group, 1, 1);
1013 check_hash(table, "testdata");
1014 osync_hashtable_close(table);
1016 table = hashtable_load(group, 2, 1);
1017 check_hash(table, "testdata");
1018 osync_hashtable_close(table);
1020 g_free(formatdir);
1021 g_free(plugindir);
1023 destroy_testbed(testbed);
1025 END_TEST
1026 #endif
1028 START_TEST (sync_conflict_duplicate2)
1030 char *testbed = setup_testbed("sync");
1031 char *formatdir = g_strdup_printf("%s/formats", testbed);
1032 char *plugindir = g_strdup_printf("%s/plugins", testbed);
1034 osync_testing_system_abort("cp testdata data1/testdata");
1035 osync_testing_system_abort("cp testdata comp_data");
1036 osync_testing_system_abort("cp new_data1 data2/testdata");
1038 OSyncError *error = NULL;
1039 OSyncGroup *group = osync_group_new(&error);
1040 fail_unless(group != NULL, NULL);
1041 fail_unless(error == NULL, NULL);
1043 osync_group_set_schemadir(group, testbed);
1044 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1045 fail_unless(error == NULL, NULL);
1047 OSyncEngine *engine = osync_engine_new(group, &error);
1048 fail_unless(engine != NULL, NULL);
1049 fail_unless(error == NULL, NULL);
1050 osync_group_unref(group);
1052 osync_engine_set_schemadir(engine, testbed);
1053 osync_engine_set_plugindir(engine, plugindir);
1054 osync_engine_set_formatdir(engine, formatdir);
1056 osync_engine_set_conflict_callback(engine, conflict_handler_duplicate, GINT_TO_POINTER(2));
1057 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
1058 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
1059 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
1060 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
1063 fail_unless(osync_engine_initialize(engine, &error), NULL);
1064 fail_unless(error == NULL, NULL);
1066 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
1067 fail_unless(error == NULL, NULL);
1069 /* Client checks */
1070 fail_unless(num_client_connected == 2, NULL);
1071 fail_unless(num_client_main_connected == 2, NULL);
1072 fail_unless(num_client_read == 2, NULL);
1073 fail_unless(num_client_main_read == 2, NULL);
1074 fail_unless(num_client_written == 2, NULL);
1075 fail_unless(num_client_main_written == 2, NULL);
1076 fail_unless(num_client_disconnected == 2, NULL);
1077 fail_unless(num_client_main_disconnected == 2, NULL);
1078 fail_unless(num_client_errors == 0, NULL);
1079 fail_unless(num_client_sync_done == 2, NULL);
1080 fail_unless(num_client_main_sync_done == 2, NULL);
1082 /* Client checks */
1083 fail_unless(num_engine_connected == 1, NULL);
1084 fail_unless(num_engine_errors == 0, NULL);
1085 fail_unless(num_engine_read == 1, NULL);
1086 fail_unless(num_engine_written == 1, NULL);
1087 fail_unless(num_engine_sync_done == 1, NULL);
1088 fail_unless(num_engine_disconnected == 1, NULL);
1089 fail_unless(num_engine_successful == 1, NULL);
1090 fail_unless(num_engine_end_conflicts == 1, NULL);
1091 fail_unless(num_engine_prev_unclean == 0, NULL);
1093 /* Change checks */
1094 fail_unless(num_change_read == 2, NULL);
1095 fail_unless(num_change_written == 3, NULL);
1096 fail_unless(num_change_error == 0, NULL);
1098 /* Mapping checks */
1099 fail_unless(num_mapping_solved == 1, NULL);
1100 //fail_unless(num_mapping_written == 1, NULL);
1101 fail_unless(num_mapping_errors == 0, NULL);
1102 fail_unless(num_mapping_conflicts == 1, NULL);
1104 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
1106 char *path = g_strdup_printf("%s/configs/group/archive.db", testbed);
1107 OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 2);
1108 g_free(path);
1109 check_mapping(maptable, 1, -1, 2, "testdata");
1110 check_mapping(maptable, 1, -1, 2, "testdata-dupe");
1111 check_mapping(maptable, 2, -1, 2, "testdata");
1112 check_mapping(maptable, 1, -1, 2, "testdata-dupe");
1113 osync_mapping_table_close(maptable);
1114 osync_mapping_table_unref(maptable);
1116 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
1117 OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 2);
1118 g_free(path);
1119 check_hash(table, "testdata");
1120 check_hash(table, "testdata-dupe");
1121 osync_hashtable_unref(table);
1123 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
1124 table = hashtable_load(path, "mockobjtype1", 2);
1125 g_free(path);
1126 check_hash(table, "testdata");
1127 check_hash(table, "testdata-dupe");
1128 osync_hashtable_unref(table);
1131 osync_testing_system_abort("rm -f data1/testdata");
1132 osync_testing_system_abort("rm -f data2/testdata-dupe");
1133 g_usleep(2*G_USEC_PER_SEC);
1134 osync_testing_system_abort("cp new_data1 data2/testdata");
1135 osync_testing_system_abort("cp new_data1 comp_data");
1137 reset_counters();
1138 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
1139 fail_unless(error == NULL, NULL);
1141 fail_unless(osync_engine_finalize(engine, &error), NULL);
1142 fail_unless(error == NULL, NULL);
1144 osync_engine_unref(engine);
1146 /* Client checks */
1147 fail_unless(num_client_connected == 2, NULL);
1148 fail_unless(num_client_main_connected == 2, NULL);
1149 fail_unless(num_client_read == 2, NULL);
1150 fail_unless(num_client_main_read == 2, NULL);
1151 fail_unless(num_client_written == 2, NULL);
1152 fail_unless(num_client_main_written == 2, NULL);
1153 fail_unless(num_client_disconnected == 2, NULL);
1154 fail_unless(num_client_main_disconnected == 2, NULL);
1155 fail_unless(num_client_errors == 0, NULL);
1156 fail_unless(num_client_sync_done == 2, NULL);
1157 fail_unless(num_client_main_sync_done == 2, NULL);
1159 /* Client checks */
1160 fail_unless(num_engine_connected == 1, NULL);
1161 fail_unless(num_engine_errors == 0, NULL);
1162 fail_unless(num_engine_read == 1, NULL);
1163 fail_unless(num_engine_written == 1, NULL);
1164 fail_unless(num_engine_sync_done == 1, NULL);
1165 fail_unless(num_engine_disconnected == 1, NULL);
1166 fail_unless(num_engine_successful == 1, NULL);
1167 fail_unless(num_engine_end_conflicts == 1, NULL);
1168 fail_unless(num_engine_prev_unclean == 0, NULL);
1170 /* Change checks */
1171 fail_unless(num_change_read == 3, NULL);
1172 fail_unless(num_change_written == 2, NULL);
1173 fail_unless(num_change_error == 0, NULL);
1175 /* Mapping checks */
1176 fail_unless(num_mapping_solved == 2, NULL);
1177 //fail_unless(num_mapping_written == 1, NULL);
1178 fail_unless(num_mapping_errors == 0, NULL);
1179 fail_unless(num_mapping_conflicts == 1, NULL);
1181 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
1182 fail_unless(!system("test \"x$(diff -x \".*\" data1/testdata comp_data)\" = \"x\""), NULL);
1184 path = g_strdup_printf("%s/configs/group/archive.db", testbed);
1185 maptable = mappingtable_load(path, "mockobjtype1", 1);
1186 g_free(path);
1187 check_mapping(maptable, 1, -1, 2, "testdata");
1188 check_mapping(maptable, 2, -1, 2, "testdata");
1189 osync_mapping_table_close(maptable);
1190 osync_mapping_table_unref(maptable);
1192 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
1193 table = hashtable_load(path, "mockobjtype1", 1);
1194 g_free(path);
1195 check_hash(table, "testdata");
1196 osync_hashtable_unref(table);
1198 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
1199 table = hashtable_load(path, "mockobjtype1", 1);
1200 g_free(path);
1201 check_hash(table, "testdata");
1202 osync_hashtable_unref(table);
1204 g_free(formatdir);
1205 g_free(plugindir);
1207 destroy_testbed(testbed);
1209 END_TEST
1211 START_TEST (sync_conflict_delay)
1213 char *testbed = setup_testbed("sync");
1214 char *formatdir = g_strdup_printf("%s/formats", testbed);
1215 char *plugindir = g_strdup_printf("%s/plugins", testbed);
1217 create_random_file("data1/testdata1");
1218 create_random_file("data1/testdata2");
1219 create_random_file("data1/testdata3");
1221 create_random_file("data2/testdata1");
1222 create_random_file("data2/testdata2");
1223 create_random_file("data2/testdata3");
1225 OSyncError *error = NULL;
1226 OSyncGroup *group = osync_group_new(&error);
1227 fail_unless(group != NULL, NULL);
1228 fail_unless(error == NULL, NULL);
1230 osync_group_set_schemadir(group, testbed);
1231 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1232 fail_unless(error == NULL, NULL);
1234 OSyncEngine *engine = osync_engine_new(group, &error);
1235 fail_unless(engine != NULL, NULL);
1236 fail_unless(error == NULL, NULL);
1237 osync_group_unref(group);
1239 osync_engine_set_schemadir(engine, testbed);
1240 osync_engine_set_plugindir(engine, plugindir);
1241 osync_engine_set_formatdir(engine, formatdir);
1243 osync_engine_set_conflict_callback(engine, conflict_handler_delay, GINT_TO_POINTER(2));
1244 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
1245 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
1246 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
1247 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
1250 fail_unless(osync_engine_initialize(engine, &error), NULL);
1251 fail_unless(error == NULL, NULL);
1253 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
1254 fail_unless(error == NULL, NULL);
1256 /* Client checks */
1257 fail_unless(num_client_connected == 2, NULL);
1258 fail_unless(num_client_main_connected == 2, NULL);
1259 fail_unless(num_client_read == 2, NULL);
1260 fail_unless(num_client_main_read == 2, NULL);
1261 fail_unless(num_client_written == 2, NULL);
1262 fail_unless(num_client_main_written == 2, NULL);
1263 fail_unless(num_client_disconnected == 2, NULL);
1264 fail_unless(num_client_main_disconnected == 2, NULL);
1265 fail_unless(num_client_errors == 0, NULL);
1266 fail_unless(num_client_sync_done == 2, NULL);
1267 fail_unless(num_client_main_sync_done == 2, NULL);
1269 /* Client checks */
1270 fail_unless(num_engine_connected == 1, NULL);
1271 fail_unless(num_engine_errors == 0, NULL);
1272 fail_unless(num_engine_read == 1, NULL);
1273 fail_unless(num_engine_written == 1, NULL);
1274 fail_unless(num_engine_sync_done == 1, NULL);
1275 fail_unless(num_engine_disconnected == 1, NULL);
1276 fail_unless(num_engine_successful == 1, NULL);
1277 fail_unless(num_engine_end_conflicts == 1, NULL);
1278 fail_unless(num_engine_prev_unclean == 0, NULL);
1280 /* Change checks */
1281 fail_unless(num_change_read == 6, NULL);
1282 fail_unless(num_change_written == 3, NULL);
1283 fail_unless(num_change_error == 0, NULL);
1285 /* Mapping checks */
1286 fail_unless(num_mapping_solved == 3, NULL);
1287 //fail_unless(num_mapping_written == 1, NULL);
1288 fail_unless(num_mapping_errors == 0, NULL);
1289 fail_unless(num_mapping_conflicts == 3, NULL);
1291 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
1293 char *path = g_strdup_printf("%s/configs/group/archive.db", testbed);
1294 OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 3);
1295 g_free(path);
1296 check_mapping(maptable, 1, -1, 2, "testdata1");
1297 check_mapping(maptable, 2, -1, 2, "testdata1");
1298 check_mapping(maptable, 1, -1, 2, "testdata2");
1299 check_mapping(maptable, 2, -1, 2, "testdata2");
1300 check_mapping(maptable, 1, -1, 2, "testdata3");
1301 check_mapping(maptable, 2, -1, 2, "testdata3");
1302 osync_mapping_table_close(maptable);
1303 osync_mapping_table_unref(maptable);
1305 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
1306 OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 3);
1307 g_free(path);
1308 check_hash(table, "testdata1");
1309 check_hash(table, "testdata2");
1310 check_hash(table, "testdata3");
1311 osync_hashtable_unref(table);
1313 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
1314 table = hashtable_load(path, "mockobjtype1", 3);
1315 g_free(path);
1316 check_hash(table, "testdata1");
1317 check_hash(table, "testdata2");
1318 check_hash(table, "testdata3");
1319 osync_hashtable_unref(table);
1321 osync_testing_system_abort("rm -f data1/testdata1");
1322 osync_testing_system_abort("rm -f data2/testdata2");
1323 osync_testing_system_abort("rm -f data1/testdata3");
1325 reset_counters();
1326 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
1327 fail_unless(error == NULL, NULL);
1329 fail_unless(osync_engine_finalize(engine, &error), NULL);
1330 fail_unless(error == NULL, NULL);
1332 osync_engine_unref(engine);
1334 /* Client checks */
1335 fail_unless(num_client_connected == 2, NULL);
1336 fail_unless(num_client_main_connected == 2, NULL);
1337 fail_unless(num_client_read == 2, NULL);
1338 fail_unless(num_client_main_read == 2, NULL);
1339 fail_unless(num_client_written == 2, NULL);
1340 fail_unless(num_client_main_written == 2, NULL);
1341 fail_unless(num_client_disconnected == 2, NULL);
1342 fail_unless(num_client_main_disconnected == 2, NULL);
1343 fail_unless(num_client_errors == 0, NULL);
1344 fail_unless(num_client_sync_done == 2, NULL);
1345 fail_unless(num_client_main_sync_done == 2, NULL);
1347 /* Client checks */
1348 fail_unless(num_engine_connected == 1, NULL);
1349 fail_unless(num_engine_errors == 0, NULL);
1350 fail_unless(num_engine_read == 1, NULL);
1351 fail_unless(num_engine_written == 1, NULL);
1352 fail_unless(num_engine_sync_done == 1, NULL);
1353 fail_unless(num_engine_disconnected == 1, NULL);
1354 fail_unless(num_engine_successful == 1, NULL);
1355 fail_unless(num_engine_end_conflicts == 1, NULL);
1356 fail_unless(num_engine_prev_unclean == 0, NULL);
1358 /* Change checks */
1359 fail_unless(num_change_read == 3, NULL);
1360 fail_unless(num_change_written == 3, NULL);
1361 fail_unless(num_change_error == 0, NULL);
1363 /* Mapping checks */
1364 fail_unless(num_mapping_solved == 3, NULL);
1365 //fail_unless(num_mapping_written == 1, NULL);
1366 fail_unless(num_mapping_errors == 0, NULL);
1367 fail_unless(num_mapping_conflicts == 0, NULL);
1369 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
1371 path = g_strdup_printf("%s/configs/group/archive.db", testbed);
1372 maptable = mappingtable_load(path, "mockobjtype1", 0);
1373 g_free(path);
1374 osync_mapping_table_close(maptable);
1375 osync_mapping_table_unref(maptable);
1377 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
1378 table = hashtable_load(path, "mockobjtype1", 0);
1379 g_free(path);
1380 osync_hashtable_unref(table);
1382 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
1383 table = hashtable_load(path, "mockobjtype1", 0);
1384 g_free(path);
1385 osync_hashtable_unref(table);
1387 g_free(formatdir);
1388 g_free(plugindir);
1390 destroy_testbed(testbed);
1392 END_TEST
1394 START_TEST (sync_conflict_deldel)
1396 char *testbed = setup_testbed("sync");
1397 char *formatdir = g_strdup_printf("%s/formats", testbed);
1398 char *plugindir = g_strdup_printf("%s/plugins", testbed);
1400 osync_testing_system_abort("cp testdata data1/testdata");
1402 OSyncError *error = NULL;
1403 OSyncGroup *group = osync_group_new(&error);
1404 fail_unless(group != NULL, NULL);
1405 fail_unless(error == NULL, NULL);
1407 osync_group_set_schemadir(group, testbed);
1408 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1409 fail_unless(error == NULL, NULL);
1411 OSyncEngine *engine = osync_engine_new(group, &error);
1412 fail_unless(engine != NULL, NULL);
1413 fail_unless(error == NULL, NULL);
1414 osync_group_unref(group);
1416 osync_engine_set_schemadir(engine, testbed);
1417 osync_engine_set_plugindir(engine, plugindir);
1418 osync_engine_set_formatdir(engine, formatdir);
1420 osync_engine_set_conflict_callback(engine, conflict_handler_choose_first, GINT_TO_POINTER(2));
1421 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
1422 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
1423 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
1424 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
1427 fail_unless(osync_engine_initialize(engine, &error), NULL);
1428 fail_unless(error == NULL, NULL);
1430 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
1431 fail_unless(error == NULL, NULL);
1433 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
1435 reset_counters();
1436 osync_testing_system_abort("rm data1/testdata");
1437 osync_testing_system_abort("rm data2/testdata");
1439 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
1440 fail_unless(error == NULL, NULL);
1442 fail_unless(osync_engine_finalize(engine, &error), NULL);
1443 fail_unless(error == NULL, NULL);
1445 osync_engine_unref(engine);
1447 /* Client checks */
1448 fail_unless(num_client_connected == 2, NULL);
1449 fail_unless(num_client_main_connected == 2, NULL);
1450 fail_unless(num_client_read == 2, NULL);
1451 fail_unless(num_client_main_read == 2, NULL);
1452 fail_unless(num_client_written == 2, NULL);
1453 fail_unless(num_client_main_written == 2, NULL);
1454 fail_unless(num_client_disconnected == 2, NULL);
1455 fail_unless(num_client_main_disconnected == 2, NULL);
1456 fail_unless(num_client_errors == 0, NULL);
1457 fail_unless(num_client_sync_done == 2, NULL);
1458 fail_unless(num_client_main_sync_done == 2, NULL);
1460 /* Client checks */
1461 fail_unless(num_engine_connected == 1, NULL);
1462 fail_unless(num_engine_errors == 0, NULL);
1463 fail_unless(num_engine_read == 1, NULL);
1464 fail_unless(num_engine_written == 1, NULL);
1465 fail_unless(num_engine_sync_done == 1, NULL);
1466 fail_unless(num_engine_disconnected == 1, NULL);
1467 fail_unless(num_engine_successful == 1, NULL);
1468 fail_unless(num_engine_end_conflicts == 1, NULL);
1469 fail_unless(num_engine_prev_unclean == 0, NULL);
1471 /* Change checks */
1472 fail_unless(num_change_read == 2, NULL);
1473 fail_unless(num_change_written == 0, NULL);
1474 fail_unless(num_change_error == 0, NULL);
1476 /* Mapping checks */
1477 fail_unless(num_mapping_solved == 1, NULL);
1478 fail_unless(num_mapping_errors == 0, NULL);
1479 fail_unless(num_mapping_conflicts == 0, NULL);
1481 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
1483 char *path = g_strdup_printf("%s/configs/group/archive.db", testbed);
1484 OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 0);
1485 g_free(path);
1486 osync_mapping_table_close(maptable);
1487 osync_mapping_table_unref(maptable);
1489 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
1490 OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 0);
1491 g_free(path);
1492 osync_hashtable_unref(table);
1494 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
1495 table = hashtable_load(path, "mockobjtype1", 0);
1496 g_free(path);
1497 osync_hashtable_unref(table);
1499 g_free(formatdir);
1500 g_free(plugindir);
1502 destroy_testbed(testbed);
1504 END_TEST
1506 START_TEST (sync_moddel)
1508 char *testbed = setup_testbed("sync");
1509 char *formatdir = g_strdup_printf("%s/formats", testbed);
1510 char *plugindir = g_strdup_printf("%s/plugins", testbed);
1512 osync_testing_system_abort("cp testdata data1/testdata");
1514 OSyncError *error = NULL;
1515 OSyncGroup *group = osync_group_new(&error);
1516 fail_unless(group != NULL, NULL);
1517 fail_unless(error == NULL, NULL);
1519 osync_group_set_schemadir(group, testbed);
1520 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1521 fail_unless(error == NULL, NULL);
1523 OSyncEngine *engine = osync_engine_new(group, &error);
1524 fail_unless(engine != NULL, NULL);
1525 fail_unless(error == NULL, NULL);
1526 osync_group_unref(group);
1528 osync_engine_set_schemadir(engine, testbed);
1529 osync_engine_set_plugindir(engine, plugindir);
1530 osync_engine_set_formatdir(engine, formatdir);
1532 osync_engine_set_conflict_callback(engine, conflict_handler_choose_first, GINT_TO_POINTER(2));
1533 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
1534 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
1535 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
1536 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
1539 fail_unless(osync_engine_initialize(engine, &error), NULL);
1540 fail_unless(error == NULL, NULL);
1542 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
1543 fail_unless(error == NULL, NULL);
1545 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
1546 fail_unless(num_mapping_conflicts == 0, NULL);
1547 reset_counters();
1549 g_usleep(2*G_USEC_PER_SEC);
1550 osync_testing_system_abort("cp new_data1 data1/testdata");
1551 osync_testing_system_abort("cp new_data2 data2/testdata");
1553 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
1554 fail_unless(error == NULL, NULL);
1556 /* Client checks */
1557 fail_unless(num_client_connected == 2, NULL);
1558 fail_unless(num_client_main_connected == 2, NULL);
1559 fail_unless(num_client_read == 2, NULL);
1560 fail_unless(num_client_main_read == 2, NULL);
1561 fail_unless(num_client_written == 2, NULL);
1562 fail_unless(num_client_main_written == 2, NULL);
1563 fail_unless(num_client_disconnected == 2, NULL);
1564 fail_unless(num_client_main_disconnected == 2, NULL);
1565 fail_unless(num_client_errors == 0, NULL);
1566 fail_unless(num_client_sync_done == 2, NULL);
1567 fail_unless(num_client_main_sync_done == 2, NULL);
1569 /* Client checks */
1570 fail_unless(num_engine_connected == 1, NULL);
1571 fail_unless(num_engine_errors == 0, NULL);
1572 fail_unless(num_engine_read == 1, NULL);
1573 fail_unless(num_engine_written == 1, NULL);
1574 fail_unless(num_engine_sync_done == 1, NULL);
1575 fail_unless(num_engine_disconnected == 1, NULL);
1576 fail_unless(num_engine_successful == 1, NULL);
1577 fail_unless(num_engine_end_conflicts == 1, NULL);
1578 fail_unless(num_engine_prev_unclean == 0, NULL);
1580 /* Change checks */
1581 fail_unless(num_change_read == 2, NULL);
1582 fail_unless(num_change_written == 1, NULL);
1583 fail_unless(num_change_error == 0, NULL);
1585 /* Mapping checks */
1586 fail_unless(num_mapping_solved == 1, NULL);
1587 fail_unless(num_mapping_errors == 0, NULL);
1588 fail_unless(num_mapping_conflicts == 1, NULL);
1590 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
1592 char *path = g_strdup_printf("%s/configs/group/archive.db", testbed);
1593 OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 1);
1594 g_free(path);
1595 check_mapping(maptable, 1, 1, 2, "testdata");
1596 check_mapping(maptable, 2, 1, 2, "testdata");
1597 osync_mapping_table_close(maptable);
1598 osync_mapping_table_unref(maptable);
1600 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
1601 OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 1);
1602 g_free(path);
1603 check_hash(table, "testdata");
1604 osync_hashtable_unref(table);
1606 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
1607 table = hashtable_load(path, "mockobjtype1", 1);
1608 g_free(path);
1609 check_hash(table, "testdata");
1610 osync_hashtable_unref(table);
1612 reset_counters();
1614 osync_testing_system_abort("rm data2/testdata");
1616 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
1617 fail_unless(error == NULL, NULL);
1619 fail_unless(osync_engine_finalize(engine, &error), NULL);
1620 fail_unless(error == NULL, NULL);
1622 osync_engine_unref(engine);
1624 /* Client checks */
1625 fail_unless(num_client_connected == 2, NULL);
1626 fail_unless(num_client_main_connected == 2, NULL);
1627 fail_unless(num_client_read == 2, NULL);
1628 fail_unless(num_client_main_read == 2, NULL);
1629 fail_unless(num_client_written == 2, NULL);
1630 fail_unless(num_client_main_written == 2, NULL);
1631 fail_unless(num_client_disconnected == 2, NULL);
1632 fail_unless(num_client_main_disconnected == 2, NULL);
1633 fail_unless(num_client_errors == 0, NULL);
1634 fail_unless(num_client_sync_done == 2, NULL);
1635 fail_unless(num_client_main_sync_done == 2, NULL);
1637 /* Client checks */
1638 fail_unless(num_engine_connected == 1, NULL);
1639 fail_unless(num_engine_errors == 0, NULL);
1640 fail_unless(num_engine_read == 1, NULL);
1641 fail_unless(num_engine_written == 1, NULL);
1642 fail_unless(num_engine_sync_done == 1, NULL);
1643 fail_unless(num_engine_disconnected == 1, NULL);
1644 fail_unless(num_engine_successful == 1, NULL);
1645 fail_unless(num_engine_end_conflicts == 1, NULL);
1646 fail_unless(num_engine_prev_unclean == 0, NULL);
1648 /* Change checks */
1649 fail_unless(num_change_read == 1, NULL);
1650 fail_unless(num_change_written == 1, NULL);
1651 fail_unless(num_change_error == 0, NULL);
1653 /* Mapping checks */
1654 fail_unless(num_mapping_solved == 1, NULL);
1655 fail_unless(num_mapping_errors == 0, NULL);
1656 fail_unless(num_mapping_conflicts == 0, NULL);
1658 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
1660 path = g_strdup_printf("%s/configs/group/archive.db", testbed);
1661 maptable = mappingtable_load(path, "mockobjtype1", 0);
1662 g_free(path);
1663 osync_mapping_table_close(maptable);
1664 osync_mapping_table_unref(maptable);
1666 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
1667 table = hashtable_load(path, "mockobjtype1", 0);
1668 g_free(path);
1669 osync_hashtable_unref(table);
1671 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
1672 table = hashtable_load(path, "mockobjtype1", 0);
1673 g_free(path);
1674 osync_hashtable_unref(table);
1676 g_free(formatdir);
1677 g_free(plugindir);
1679 destroy_testbed(testbed);
1681 END_TEST
1683 START_TEST (sync_conflict_moddel)
1685 char *testbed = setup_testbed("sync");
1686 char *formatdir = g_strdup_printf("%s/formats", testbed);
1687 char *plugindir = g_strdup_printf("%s/plugins", testbed);
1689 osync_testing_system_abort("cp testdata data1/testdata");
1691 OSyncError *error = NULL;
1692 OSyncGroup *group = osync_group_new(&error);
1693 fail_unless(group != NULL, NULL);
1694 fail_unless(error == NULL, NULL);
1696 osync_group_set_schemadir(group, testbed);
1697 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1698 fail_unless(error == NULL, NULL);
1700 OSyncEngine *engine = osync_engine_new(group, &error);
1701 fail_unless(engine != NULL, NULL);
1702 fail_unless(error == NULL, NULL);
1703 osync_group_unref(group);
1705 osync_engine_set_schemadir(engine, testbed);
1706 osync_engine_set_plugindir(engine, plugindir);
1707 osync_engine_set_formatdir(engine, formatdir);
1709 osync_engine_set_conflict_callback(engine, conflict_handler_choose_deleted, GINT_TO_POINTER(2));
1710 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
1711 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
1712 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
1713 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
1716 fail_unless(osync_engine_initialize(engine, &error), NULL);
1717 fail_unless(error == NULL, NULL);
1719 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
1720 fail_unless(error == NULL, NULL);
1722 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
1723 fail_unless(num_mapping_conflicts == 0, NULL);
1724 reset_counters();
1726 g_usleep(2*G_USEC_PER_SEC);
1727 osync_testing_system_abort("cp new_data2 data1/testdata");
1728 osync_testing_system_abort("rm -f data2/testdata");
1730 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
1731 fail_unless(error == NULL, NULL);
1733 fail_unless(osync_engine_finalize(engine, &error), NULL);
1734 fail_unless(error == NULL, NULL);
1736 osync_engine_unref(engine);
1738 /* Client checks */
1739 fail_unless(num_client_connected == 2, NULL);
1740 fail_unless(num_client_main_connected == 2, NULL);
1741 fail_unless(num_client_read == 2, NULL);
1742 fail_unless(num_client_main_read == 2, NULL);
1743 fail_unless(num_client_written == 2, NULL);
1744 fail_unless(num_client_main_written == 2, NULL);
1745 fail_unless(num_client_disconnected == 2, NULL);
1746 fail_unless(num_client_main_disconnected == 2, NULL);
1747 fail_unless(num_client_errors == 0, NULL);
1748 fail_unless(num_client_sync_done == 2, NULL);
1749 fail_unless(num_client_main_sync_done == 2, NULL);
1751 /* Client checks */
1752 fail_unless(num_engine_connected == 1, NULL);
1753 fail_unless(num_engine_errors == 0, NULL);
1754 fail_unless(num_engine_read == 1, NULL);
1755 fail_unless(num_engine_written == 1, NULL);
1756 fail_unless(num_engine_sync_done == 1, NULL);
1757 fail_unless(num_engine_disconnected == 1, NULL);
1758 fail_unless(num_engine_successful == 1, NULL);
1759 fail_unless(num_engine_end_conflicts == 1, NULL);
1760 fail_unless(num_engine_prev_unclean == 0, NULL);
1762 /* Change checks */
1763 fail_unless(num_change_read == 2, NULL);
1764 fail_unless(num_change_written == 1, NULL);
1765 fail_unless(num_change_error == 0, NULL);
1767 /* Mapping checks */
1768 fail_unless(num_mapping_solved == 1, NULL);
1769 fail_unless(num_mapping_errors == 0, NULL);
1770 fail_unless(num_mapping_conflicts == 1, NULL);
1772 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
1774 char *path = g_strdup_printf("%s/configs/group/archive.db", testbed);
1775 OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 0);
1776 g_free(path);
1777 osync_mapping_table_close(maptable);
1778 osync_mapping_table_unref(maptable);
1780 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
1781 OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 0);
1782 g_free(path);
1783 osync_hashtable_unref(table);
1785 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
1786 table = hashtable_load(path, "mockobjtype1", 0);
1787 g_free(path);
1788 osync_hashtable_unref(table);
1790 fail_unless(!system("test \"x$(ls data1)\" = \"x\""), NULL);
1791 fail_unless(!system("test \"x$(ls data2)\" = \"x\""), NULL);
1793 g_free(formatdir);
1794 g_free(plugindir);
1796 destroy_testbed(testbed);
1798 END_TEST
1800 START_TEST (sync_easy_dualdel)
1802 char *testbed = setup_testbed("sync");
1803 char *formatdir = g_strdup_printf("%s/formats", testbed);
1804 char *plugindir = g_strdup_printf("%s/plugins", testbed);
1806 osync_testing_system_abort("cp testdata data1/testdata");
1807 osync_testing_system_abort("cp new_data1 data1/testdata2");
1809 OSyncError *error = NULL;
1810 OSyncGroup *group = osync_group_new(&error);
1811 fail_unless(group != NULL, NULL);
1812 fail_unless(error == NULL, NULL);
1814 osync_group_set_schemadir(group, testbed);
1815 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
1816 fail_unless(error == NULL, NULL);
1818 OSyncEngine *engine = osync_engine_new(group, &error);
1819 fail_unless(engine != NULL, NULL);
1820 fail_unless(error == NULL, NULL);
1821 osync_group_unref(group);
1823 osync_engine_set_schemadir(engine, testbed);
1824 osync_engine_set_plugindir(engine, plugindir);
1825 osync_engine_set_formatdir(engine, formatdir);
1827 osync_engine_set_conflict_callback(engine, conflict_handler_choose_deleted, GINT_TO_POINTER(2));
1828 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
1829 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
1830 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
1831 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
1834 fail_unless(osync_engine_initialize(engine, &error), NULL);
1835 fail_unless(error == NULL, NULL);
1837 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
1838 fail_unless(error == NULL, NULL);
1840 /* Client checks */
1841 fail_unless(num_client_connected == 2, NULL);
1842 fail_unless(num_client_main_connected == 2, NULL);
1843 fail_unless(num_client_read == 2, NULL);
1844 fail_unless(num_client_main_read == 2, NULL);
1845 fail_unless(num_client_written == 2, NULL);
1846 fail_unless(num_client_main_written == 2, NULL);
1847 fail_unless(num_client_disconnected == 2, NULL);
1848 fail_unless(num_client_main_disconnected == 2, NULL);
1849 fail_unless(num_client_errors == 0, NULL);
1850 fail_unless(num_client_sync_done == 2, NULL);
1851 fail_unless(num_client_main_sync_done == 2, NULL);
1853 /* Client checks */
1854 fail_unless(num_engine_connected == 1, NULL);
1855 fail_unless(num_engine_errors == 0, NULL);
1856 fail_unless(num_engine_read == 1, NULL);
1857 fail_unless(num_engine_written == 1, NULL);
1858 fail_unless(num_engine_sync_done == 1, NULL);
1859 fail_unless(num_engine_disconnected == 1, NULL);
1860 fail_unless(num_engine_successful == 1, NULL);
1861 fail_unless(num_engine_end_conflicts == 1, NULL);
1862 fail_unless(num_engine_prev_unclean == 0, NULL);
1864 /* Change checks */
1865 fail_unless(num_change_read == 2, NULL);
1866 fail_unless(num_change_written == 2, NULL);
1867 fail_unless(num_change_error == 0, NULL);
1869 /* Mapping checks */
1870 fail_unless(num_mapping_solved == 2, NULL);
1871 fail_unless(num_mapping_errors == 0, NULL);
1872 fail_unless(num_mapping_conflicts == 0, NULL);
1874 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
1876 char *path = g_strdup_printf("%s/configs/group/archive.db", testbed);
1877 OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 2);
1878 g_free(path);
1880 check_mapping(maptable, 2, -1, 2, "testdata2");
1881 check_mapping(maptable, 1, -1, 2, "testdata2");
1882 check_mapping(maptable, 2, -1, 2, "testdata");
1883 check_mapping(maptable, 1, -1, 2, "testdata");
1885 osync_mapping_table_close(maptable);
1886 osync_mapping_table_unref(maptable);
1888 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
1889 OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 2);
1890 g_free(path);
1891 check_hash(table, "testdata");
1892 check_hash(table, "testdata2");
1893 osync_hashtable_unref(table);
1895 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
1896 table = hashtable_load(path, "mockobjtype1", 2);
1897 g_free(path);
1898 check_hash(table, "testdata");
1899 check_hash(table, "testdata2");
1900 osync_hashtable_unref(table);
1902 reset_counters();
1904 g_usleep(2*G_USEC_PER_SEC);
1905 osync_testing_system_abort("rm -f data1/testdata");
1906 osync_testing_system_abort("rm -f data1/testdata2");
1908 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
1909 fail_unless(error == NULL, NULL);
1911 fail_unless(osync_engine_finalize(engine, &error), NULL);
1912 fail_unless(error == NULL, NULL);
1914 osync_engine_unref(engine);
1916 /* Client checks */
1917 fail_unless(num_client_connected == 2, NULL);
1918 fail_unless(num_client_main_connected == 2, NULL);
1919 fail_unless(num_client_read == 2, NULL);
1920 fail_unless(num_client_main_read == 2, NULL);
1921 fail_unless(num_client_written == 2, NULL);
1922 fail_unless(num_client_main_written == 2, NULL);
1923 fail_unless(num_client_disconnected == 2, NULL);
1924 fail_unless(num_client_main_disconnected == 2, NULL);
1925 fail_unless(num_client_errors == 0, NULL);
1926 fail_unless(num_client_sync_done == 2, NULL);
1927 fail_unless(num_client_main_sync_done == 2, NULL);
1929 /* Client checks */
1930 fail_unless(num_engine_connected == 1, NULL);
1931 fail_unless(num_engine_errors == 0, NULL);
1932 fail_unless(num_engine_read == 1, NULL);
1933 fail_unless(num_engine_written == 1, NULL);
1934 fail_unless(num_engine_sync_done == 1, NULL);
1935 fail_unless(num_engine_disconnected == 1, NULL);
1936 fail_unless(num_engine_successful == 1, NULL);
1937 fail_unless(num_engine_end_conflicts == 1, NULL);
1938 fail_unless(num_engine_prev_unclean == 0, NULL);
1940 /* Change checks */
1941 fail_unless(num_change_read == 2, NULL);
1942 fail_unless(num_change_written == 2, NULL);
1943 fail_unless(num_change_error == 0, NULL);
1945 /* Mapping checks */
1946 fail_unless(num_mapping_solved == 2, NULL);
1947 fail_unless(num_mapping_errors == 0, NULL);
1948 fail_unless(num_mapping_conflicts == 0, NULL);
1950 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
1952 path = g_strdup_printf("%s/configs/group/archive.db", testbed);
1953 maptable = mappingtable_load(path, "mockobjtype1", 0);
1954 g_free(path);
1955 osync_mapping_table_close(maptable);
1956 osync_mapping_table_unref(maptable);
1958 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
1959 table = hashtable_load(path, "mockobjtype1", 0);
1960 g_free(path);
1961 osync_hashtable_unref(table);
1963 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
1964 table = hashtable_load(path, "mockobjtype1", 0);
1965 g_free(path);
1966 osync_hashtable_unref(table);
1968 fail_unless(!system("test \"x$(ls data1)\" = \"x\""), NULL);
1969 fail_unless(!system("test \"x$(ls data2)\" = \"x\""), NULL);
1971 g_free(formatdir);
1972 g_free(plugindir);
1974 destroy_testbed(testbed);
1976 END_TEST
1978 START_TEST (sync_large)
1980 char *testbed = setup_testbed("sync");
1981 char *formatdir = g_strdup_printf("%s/formats", testbed);
1982 char *plugindir = g_strdup_printf("%s/plugins", testbed);
1984 create_random_file("data1/file1");
1985 create_random_file("data1/file2");
1986 create_random_file("data1/file4");
1987 create_random_file("data1/file5");
1988 create_random_file("data1/file9");
1989 create_random_file("data1/file10");
1991 osync_testing_system_abort("cp data1/file2 data2/file2");
1992 create_random_file("data2/file3");
1993 create_random_file("data2/file4");
1994 osync_testing_system_abort("cp data1/file5 data2/file5");
1995 create_random_file("data2/file6");
1996 create_random_file("data2/file7");
1997 create_random_file("data2/file8");
1998 create_random_file("data2/file10");
2000 OSyncError *error = NULL;
2001 OSyncGroup *group = osync_group_new(&error);
2002 fail_unless(group != NULL, NULL);
2003 fail_unless(error == NULL, NULL);
2005 osync_group_set_schemadir(group, testbed);
2006 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
2007 fail_unless(error == NULL, NULL);
2009 OSyncEngine *engine = osync_engine_new(group, &error);
2010 fail_unless(engine != NULL, NULL);
2011 fail_unless(error == NULL, NULL);
2012 osync_group_unref(group);
2014 osync_engine_set_schemadir(engine, testbed);
2015 osync_engine_set_plugindir(engine, plugindir);
2016 osync_engine_set_formatdir(engine, formatdir);
2018 osync_engine_set_conflict_callback(engine, conflict_handler_choose_first, GINT_TO_POINTER(2));
2019 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
2020 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
2021 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
2022 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
2025 fail_unless(osync_engine_initialize(engine, &error), NULL);
2026 fail_unless(error == NULL, NULL);
2028 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
2029 fail_unless(error == NULL, NULL);
2031 /* Client checks */
2032 fail_unless(num_client_connected == 2, NULL);
2033 fail_unless(num_client_main_connected == 2, NULL);
2034 fail_unless(num_client_read == 2, NULL);
2035 fail_unless(num_client_main_read == 2, NULL);
2036 fail_unless(num_client_written == 2, NULL);
2037 fail_unless(num_client_main_written == 2, NULL);
2038 fail_unless(num_client_disconnected == 2, NULL);
2039 fail_unless(num_client_main_disconnected == 2, NULL);
2040 fail_unless(num_client_errors == 0, NULL);
2041 fail_unless(num_client_sync_done == 2, NULL);
2042 fail_unless(num_client_main_sync_done == 2, NULL);
2044 /* Client checks */
2045 fail_unless(num_engine_connected == 1, NULL);
2046 fail_unless(num_engine_errors == 0, NULL);
2047 fail_unless(num_engine_read == 1, NULL);
2048 fail_unless(num_engine_written == 1, NULL);
2049 fail_unless(num_engine_sync_done == 1, NULL);
2050 fail_unless(num_engine_disconnected == 1, NULL);
2051 fail_unless(num_engine_successful == 1, NULL);
2052 fail_unless(num_engine_end_conflicts == 1, NULL);
2053 fail_unless(num_engine_prev_unclean == 0, NULL);
2055 /* Change checks */
2056 fail_unless(num_change_read == 14, NULL);
2057 fail_unless(num_change_written == 8, NULL);
2058 fail_unless(num_change_error == 0, NULL);
2060 /* Mapping checks */
2061 fail_unless(num_mapping_solved == 10, NULL);
2062 fail_unless(num_mapping_errors == 0, NULL);
2063 fail_unless(num_mapping_conflicts == 2, NULL);
2065 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
2067 char *path = g_strdup_printf("%s/configs/group/archive.db", testbed);
2068 OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 10);
2069 g_free(path);
2070 check_mapping(maptable, 1, -1, 2, "file1");
2071 check_mapping(maptable, 2, -1, 2, "file1");
2072 check_mapping(maptable, 1, -1, 2, "file2");
2073 check_mapping(maptable, 2, -1, 2, "file2");
2074 check_mapping(maptable, 1, -1, 2, "file3");
2075 check_mapping(maptable, 2, -1, 2, "file3");
2076 check_mapping(maptable, 1, -1, 2, "file4");
2077 check_mapping(maptable, 2, -1, 2, "file4");
2078 check_mapping(maptable, 1, -1, 2, "file5");
2079 check_mapping(maptable, 2, -1, 2, "file5");
2080 check_mapping(maptable, 1, -1, 2, "file6");
2081 check_mapping(maptable, 2, -1, 2, "file6");
2082 check_mapping(maptable, 1, -1, 2, "file7");
2083 check_mapping(maptable, 2, -1, 2, "file7");
2084 check_mapping(maptable, 1, -1, 2, "file8");
2085 check_mapping(maptable, 2, -1, 2, "file8");
2086 check_mapping(maptable, 1, -1, 2, "file9");
2087 check_mapping(maptable, 2, -1, 2, "file9");
2088 check_mapping(maptable, 1, -1, 2, "file10");
2089 check_mapping(maptable, 2, -1, 2, "file10");
2090 osync_mapping_table_close(maptable);
2091 osync_mapping_table_unref(maptable);
2093 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
2094 OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 10);
2095 g_free(path);
2096 check_hash(table, "file1");
2097 check_hash(table, "file2");
2098 check_hash(table, "file3");
2099 check_hash(table, "file4");
2100 check_hash(table, "file5");
2101 check_hash(table, "file6");
2102 check_hash(table, "file7");
2103 check_hash(table, "file8");
2104 check_hash(table, "file9");
2105 check_hash(table, "file10");
2106 osync_hashtable_unref(table);
2108 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
2109 table = hashtable_load(path, "mockobjtype1", 10);
2110 g_free(path);
2111 check_hash(table, "file1");
2112 check_hash(table, "file2");
2113 check_hash(table, "file3");
2114 check_hash(table, "file4");
2115 check_hash(table, "file5");
2116 check_hash(table, "file6");
2117 check_hash(table, "file7");
2118 check_hash(table, "file8");
2119 check_hash(table, "file9");
2120 check_hash(table, "file10");
2121 osync_hashtable_unref(table);
2123 reset_counters();
2125 g_usleep(2*G_USEC_PER_SEC);
2126 //Add left
2127 create_random_file("data1/file11");
2128 //Add right
2129 create_random_file("data2/file12");
2130 //Modify left
2131 create_random_file("data1/file1");
2132 //Modify right
2133 create_random_file("data2/file2");
2134 //Delete left
2135 osync_testing_system_abort("rm -f data1/file3");
2136 //Delete right
2137 osync_testing_system_abort("rm -f data2/file4");
2138 //Add left, right, same
2139 create_random_file("data1/file13");
2140 osync_testing_system_abort("cp data1/file13 data2/file13");
2141 //Add left, right, conflict
2142 create_random_file("data1/file14");
2143 create_random_file("data2/file14");
2144 //Modify left, right, same
2145 create_random_file("data1/file5");
2146 osync_testing_system_abort("cp data1/file5 data2/file5");
2147 //Modify left, right, conflict
2148 create_random_file("data1/file6");
2149 create_random_file("data2/file6");
2150 //Delete left, right
2151 osync_testing_system_abort("rm -f data1/file7");
2152 osync_testing_system_abort("rm -f data2/file7");
2153 //delete left, modify right
2154 osync_testing_system_abort("rm -f data1/file8");
2155 create_random_file("data2/file8");
2156 //modify left, delete right
2157 create_random_file("data1/file9");
2158 osync_testing_system_abort("rm -f data2/file9");
2161 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
2162 fail_unless(error == NULL, NULL);
2164 /* Client checks */
2165 fail_unless(num_client_connected == 2, NULL);
2166 fail_unless(num_client_main_connected == 2, NULL);
2167 fail_unless(num_client_read == 2, NULL);
2168 fail_unless(num_client_main_read == 2, NULL);
2169 fail_unless(num_client_written == 2, NULL);
2170 fail_unless(num_client_main_written == 2, NULL);
2171 fail_unless(num_client_disconnected == 2, NULL);
2172 fail_unless(num_client_main_disconnected == 2, NULL);
2173 fail_unless(num_client_errors == 0, NULL);
2174 fail_unless(num_client_sync_done == 2, NULL);
2175 fail_unless(num_client_main_sync_done == 2, NULL);
2177 /* Client checks */
2178 fail_unless(num_engine_connected == 1, NULL);
2179 fail_unless(num_engine_errors == 0, NULL);
2180 fail_unless(num_engine_read == 1, NULL);
2181 fail_unless(num_engine_written == 1, NULL);
2182 fail_unless(num_engine_sync_done == 1, NULL);
2183 fail_unless(num_engine_disconnected == 1, NULL);
2184 fail_unless(num_engine_successful == 1, NULL);
2185 fail_unless(num_engine_end_conflicts == 1, NULL);
2186 fail_unless(num_engine_prev_unclean == 0, NULL);
2188 /* Change checks */
2189 fail_unless(num_change_read == 20, NULL);
2190 fail_unless(num_change_written == 10, NULL);
2191 fail_unless(num_change_error == 0, NULL);
2193 /* Mapping checks */
2194 fail_unless(num_mapping_solved == 13, NULL);
2195 fail_unless(num_mapping_errors == 0, NULL);
2196 fail_unless(num_mapping_conflicts == 4, NULL);
2198 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
2200 path = g_strdup_printf("%s/configs/group/archive.db", testbed);
2201 maptable = mappingtable_load(path, "mockobjtype1", 10);
2202 g_free(path);
2203 check_mapping(maptable, 1, -1, 2, "file1");
2204 check_mapping(maptable, 2, -1, 2, "file1");
2205 check_mapping(maptable, 1, -1, 2, "file2");
2206 check_mapping(maptable, 2, -1, 2, "file2");
2207 check_mapping(maptable, 1, -1, 2, "file5");
2208 check_mapping(maptable, 2, -1, 2, "file5");
2209 check_mapping(maptable, 1, -1, 2, "file6");
2210 check_mapping(maptable, 2, -1, 2, "file6");
2211 check_mapping(maptable, 1, -1, 2, "file9");
2212 check_mapping(maptable, 2, -1, 2, "file9");
2213 check_mapping(maptable, 1, -1, 2, "file10");
2214 check_mapping(maptable, 2, -1, 2, "file10");
2215 check_mapping(maptable, 1, -1, 2, "file11");
2216 check_mapping(maptable, 2, -1, 2, "file11");
2217 check_mapping(maptable, 1, -1, 2, "file12");
2218 check_mapping(maptable, 2, -1, 2, "file12");
2219 check_mapping(maptable, 1, -1, 2, "file13");
2220 check_mapping(maptable, 2, -1, 2, "file13");
2221 check_mapping(maptable, 1, -1, 2, "file14");
2222 check_mapping(maptable, 2, -1, 2, "file14");
2223 osync_mapping_table_close(maptable);
2224 osync_mapping_table_unref(maptable);
2226 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
2227 table = hashtable_load(path, "mockobjtype1", 10);
2228 g_free(path);
2229 check_hash(table, "file1");
2230 check_hash(table, "file2");
2231 check_hash(table, "file5");
2232 check_hash(table, "file6");
2233 check_hash(table, "file9");
2234 check_hash(table, "file10");
2235 check_hash(table, "file11");
2236 check_hash(table, "file12");
2237 check_hash(table, "file13");
2238 check_hash(table, "file14");
2239 osync_hashtable_unref(table);
2241 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
2242 table = hashtable_load(path, "mockobjtype1", 10);
2243 g_free(path);
2244 check_hash(table, "file1");
2245 check_hash(table, "file2");
2246 check_hash(table, "file5");
2247 check_hash(table, "file6");
2248 check_hash(table, "file9");
2249 check_hash(table, "file10");
2250 check_hash(table, "file11");
2251 check_hash(table, "file12");
2252 check_hash(table, "file13");
2253 check_hash(table, "file14");
2254 osync_hashtable_unref(table);
2257 reset_counters();
2259 osync_testing_system_abort("rm -f data1/file1");
2260 osync_testing_system_abort("rm -f data1/file2");
2261 osync_testing_system_abort("rm -f data1/file10");
2262 osync_testing_system_abort("rm -f data1/file11");
2263 osync_testing_system_abort("rm -f data1/file12");
2264 osync_testing_system_abort("rm -f data1/file13");
2265 osync_testing_system_abort("rm -f data1/file14");
2268 osync_testing_system_abort("rm -f data2/file5");
2269 osync_testing_system_abort("rm -f data2/file6");
2270 osync_testing_system_abort("rm -f data2/file9");
2271 osync_testing_system_abort("rm -f data2/file10");
2272 osync_testing_system_abort("rm -f data2/file11");
2273 osync_testing_system_abort("rm -f data2/file12");
2274 osync_testing_system_abort("rm -f data2/file13");
2275 osync_testing_system_abort("rm -f data2/file14");
2277 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
2278 fail_unless(error == NULL, NULL);
2280 fail_unless(osync_engine_finalize(engine, &error), NULL);
2281 fail_unless(error == NULL, NULL);
2283 osync_engine_unref(engine);
2285 fail_unless(num_client_connected == 2, NULL);
2286 fail_unless(num_client_main_connected == 2, NULL);
2287 fail_unless(num_client_read == 2, NULL);
2288 fail_unless(num_client_main_read == 2, NULL);
2289 fail_unless(num_client_written == 2, NULL);
2290 fail_unless(num_client_main_written == 2, NULL);
2291 fail_unless(num_client_disconnected == 2, NULL);
2292 fail_unless(num_client_main_disconnected == 2, NULL);
2293 fail_unless(num_client_errors == 0, NULL);
2294 fail_unless(num_client_sync_done == 2, NULL);
2295 fail_unless(num_client_main_sync_done == 2, NULL);
2297 /* Client checks */
2298 fail_unless(num_engine_connected == 1, NULL);
2299 fail_unless(num_engine_errors == 0, NULL);
2300 fail_unless(num_engine_read == 1, NULL);
2301 fail_unless(num_engine_written == 1, NULL);
2302 fail_unless(num_engine_sync_done == 1, NULL);
2303 fail_unless(num_engine_disconnected == 1, NULL);
2304 fail_unless(num_engine_successful == 1, NULL);
2305 fail_unless(num_engine_end_conflicts == 1, NULL);
2306 fail_unless(num_engine_prev_unclean == 0, NULL);
2308 /* Change checks */
2309 fail_unless(num_change_read == 15, NULL);
2310 fail_unless(num_change_written == 5, NULL);
2311 fail_unless(num_change_error == 0, NULL);
2313 /* Mapping checks */
2314 fail_unless(num_mapping_solved == 10, NULL);
2315 fail_unless(num_mapping_errors == 0, NULL);
2316 fail_unless(num_mapping_conflicts == 0, NULL);
2319 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
2321 path = g_strdup_printf("%s/configs/group/archive.db", testbed);
2322 maptable = mappingtable_load(path, "mockobjtype1", 0);
2323 g_free(path);
2324 osync_mapping_table_close(maptable);
2325 osync_mapping_table_unref(maptable);
2327 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
2328 table = hashtable_load(path, "mockobjtype1", 0);
2329 g_free(path);
2330 osync_hashtable_unref(table);
2332 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
2333 table = hashtable_load(path, "mockobjtype1", 0);
2334 g_free(path);
2335 osync_hashtable_unref(table);
2337 fail_unless(!system("test \"x$(ls data1)\" = \"x\""), NULL);
2338 fail_unless(!system("test \"x$(ls data2)\" = \"x\""), NULL);
2340 g_free(formatdir);
2341 g_free(plugindir);
2343 destroy_testbed(testbed);
2345 END_TEST
2347 /* We want to detect a single objtype "mockobjtype1"
2349 * - First we send the config to the plugin
2350 * - Then the plugin will report the objtypes
2352 START_TEST (sync_detect_obj)
2354 char *testbed = setup_testbed("sync_multi");
2355 char *formatdir = g_strdup_printf("%s/formats", testbed);
2356 char *plugindir = g_strdup_printf("%s/plugins", testbed);
2358 osync_testing_system_abort("mkdir file-1");
2359 osync_testing_system_abort("mkdir file2-1");
2360 osync_testing_system_abort("mkdir file3-1");
2362 osync_testing_system_abort("mkdir file-2");
2363 osync_testing_system_abort("mkdir file2-2");
2364 osync_testing_system_abort("mkdir file3-2");
2366 create_random_file("file-1/file1");
2368 OSyncError *error = NULL;
2369 OSyncGroup *group = osync_group_new(&error);
2370 fail_unless(group != NULL, NULL);
2371 fail_unless(error == NULL, NULL);
2373 osync_group_set_schemadir(group, testbed);
2374 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
2375 fail_unless(error == NULL, NULL);
2377 OSyncMember *member1 = osync_group_nth_member(group, 0);
2378 OSyncPluginConfig *config1 = simple_plugin_config(NULL, "file-1", "mockobjtype1", "mockformat1", NULL);
2379 simple_plugin_config(config1, "file2-1", "mockobjtype2", "mockformat2", NULL);
2380 simple_plugin_config(config1, "file3-1", "mockobjtype3", "mockformat3", NULL);
2381 osync_member_set_config(member1, config1);
2382 osync_plugin_config_unref(config1);
2384 OSyncMember *member2 = osync_group_nth_member(group, 1);
2385 OSyncPluginConfig *config2 = simple_plugin_config(NULL, "file-2", "mockobjtype1", "mockformat1", NULL);
2386 simple_plugin_config(config2, "file2-2", "mockobjtype2", "mockformat2", NULL);
2387 simple_plugin_config(config2, "file3-2", "mockobjtype3", "mockformat3", NULL);
2388 osync_member_set_config(member2, config2);
2389 osync_plugin_config_unref(config2);
2391 /* Check that we dont have any discovered objtypes */
2392 fail_unless(osync_member_num_objtypes(member1) == 0, NULL);
2393 fail_unless(osync_member_num_objtypes(member2) == 0, NULL);
2395 OSyncEngine *engine = osync_engine_new(group, &error);
2396 fail_unless(engine != NULL, NULL);
2397 fail_unless(error == NULL, NULL);
2398 osync_group_unref(group);
2400 osync_engine_set_schemadir(engine, testbed);
2401 osync_engine_set_plugindir(engine, plugindir);
2402 osync_engine_set_formatdir(engine, formatdir);
2404 osync_engine_set_conflict_callback(engine, conflict_handler_choose_first, GINT_TO_POINTER(2));
2405 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
2406 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
2407 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
2408 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
2410 /* Discover the objtypes for the members */
2411 fail_unless(osync_engine_discover_and_block(engine, member1, &error), NULL);
2412 fail_unless(osync_member_num_objtypes(member1) == 3, NULL);
2414 /* Client checks */
2415 fail_unless(num_client_connected == 0, NULL);
2416 fail_unless(num_client_main_connected == 0, NULL);
2417 fail_unless(num_client_read == 0, NULL);
2418 fail_unless(num_client_main_read == 0, NULL);
2419 fail_unless(num_client_written == 0, NULL);
2420 fail_unless(num_client_main_written == 0, NULL);
2421 fail_unless(num_client_disconnected == 0, NULL);
2422 fail_unless(num_client_main_disconnected == 0, NULL);
2423 fail_unless(num_client_errors == 0, NULL);
2424 fail_unless(num_client_sync_done == 0, NULL);
2425 fail_unless(num_client_main_sync_done == 0, NULL);
2426 fail_unless(num_client_discovered == 1, NULL);
2428 /* Client checks */
2429 fail_unless(num_engine_connected == 0, NULL);
2430 fail_unless(num_engine_errors == 0, NULL);
2431 fail_unless(num_engine_read == 0, NULL);
2432 fail_unless(num_engine_written == 0, NULL);
2433 fail_unless(num_engine_sync_done == 0, NULL);
2434 fail_unless(num_engine_disconnected == 0, NULL);
2435 fail_unless(num_engine_successful == 0, NULL);
2436 fail_unless(num_engine_end_conflicts == 0, NULL);
2437 fail_unless(num_engine_prev_unclean == 0, NULL);
2439 /* Change checks */
2440 fail_unless(num_change_read == 0, NULL);
2441 fail_unless(num_change_written == 0, NULL);
2442 fail_unless(num_change_error == 0, NULL);
2444 /* Mapping checks */
2445 fail_unless(num_mapping_solved == 0, NULL);
2446 fail_unless(num_mapping_errors == 0, NULL);
2447 fail_unless(num_mapping_conflicts == 0, NULL);
2449 reset_counters();
2450 fail_unless(osync_engine_discover_and_block(engine, member2, &error), NULL);
2451 fail_unless(osync_member_num_objtypes(member2) == 3, NULL);
2453 /* Client checks */
2454 fail_unless(num_client_connected == 0, NULL);
2455 fail_unless(num_client_main_connected == 0, NULL);
2456 fail_unless(num_client_read == 0, NULL);
2457 fail_unless(num_client_main_read == 0, NULL);
2458 fail_unless(num_client_written == 0, NULL);
2459 fail_unless(num_client_main_written == 0, NULL);
2460 fail_unless(num_client_disconnected == 0, NULL);
2461 fail_unless(num_client_main_disconnected == 0, NULL);
2462 fail_unless(num_client_errors == 0, NULL);
2463 fail_unless(num_client_sync_done == 0, NULL);
2464 fail_unless(num_client_main_sync_done == 0, NULL);
2465 fail_unless(num_client_discovered == 1, NULL);
2467 /* Client checks */
2468 fail_unless(num_engine_connected == 0, NULL);
2469 fail_unless(num_engine_errors == 0, NULL);
2470 fail_unless(num_engine_read == 0, NULL);
2471 fail_unless(num_engine_written == 0, NULL);
2472 fail_unless(num_engine_sync_done == 0, NULL);
2473 fail_unless(num_engine_disconnected == 0, NULL);
2474 fail_unless(num_engine_successful == 0, NULL);
2475 fail_unless(num_engine_end_conflicts == 0, NULL);
2476 fail_unless(num_engine_prev_unclean == 0, NULL);
2478 /* Change checks */
2479 fail_unless(num_change_read == 0, NULL);
2480 fail_unless(num_change_written == 0, NULL);
2481 fail_unless(num_change_error == 0, NULL);
2483 /* Mapping checks */
2484 fail_unless(num_mapping_solved == 0, NULL);
2485 fail_unless(num_mapping_errors == 0, NULL);
2486 fail_unless(num_mapping_conflicts == 0, NULL);
2488 fail_unless(osync_group_num_objtypes(group) == 3, NULL);
2490 reset_counters();
2491 fail_unless(osync_engine_initialize(engine, &error), NULL);
2492 fail_unless(error == NULL, NULL);
2494 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
2495 fail_unless(error == NULL, NULL);
2497 fail_unless(osync_engine_finalize(engine, &error), NULL);
2498 fail_unless(error == NULL, NULL);
2500 osync_engine_unref(engine);
2502 /* Client checks */
2503 fail_unless(num_client_connected == 6, NULL);
2504 fail_unless(num_client_main_connected == 2, NULL);
2505 fail_unless(num_client_read == 6, NULL);
2506 fail_unless(num_client_main_read == 2, NULL);
2507 fail_unless(num_client_written == 6, NULL);
2508 fail_unless(num_client_main_written == 2, NULL);
2509 fail_unless(num_client_disconnected == 6, NULL);
2510 fail_unless(num_client_main_disconnected == 2, NULL);
2511 fail_unless(num_client_errors == 0, NULL);
2512 fail_unless(num_client_sync_done == 6, NULL);
2513 fail_unless(num_client_main_sync_done == 2, NULL);
2514 fail_unless(num_client_discovered == 0, NULL);
2516 /* Client checks */
2517 fail_unless(num_engine_connected == 1, NULL);
2518 fail_unless(num_engine_errors == 0, NULL);
2519 fail_unless(num_engine_read == 1, NULL);
2520 fail_unless(num_engine_written == 1, NULL);
2521 fail_unless(num_engine_sync_done == 1, NULL);
2522 fail_unless(num_engine_disconnected == 1, NULL);
2523 fail_unless(num_engine_successful == 1, NULL);
2524 fail_unless(num_engine_end_conflicts == 1, NULL);
2525 fail_unless(num_engine_prev_unclean == 0, NULL);
2527 /* Change checks */
2528 fail_unless(num_change_read == 1, NULL);
2529 fail_unless(num_change_written == 1, NULL);
2530 fail_unless(num_change_error == 0, NULL);
2532 /* Mapping checks */
2533 fail_unless(num_mapping_solved == 1, NULL);
2534 fail_unless(num_mapping_errors == 0, NULL);
2535 fail_unless(num_mapping_conflicts == 0, NULL);
2537 fail_unless(!system("test \"x$(diff -x \".*\" file-1 file-2)\" = \"x\""), NULL);
2539 char *path = g_strdup_printf("%s/configs/group/archive.db", testbed);
2540 OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 1);
2541 g_free(path);
2542 check_mapping(maptable, 1, -1, 2, "file1");
2543 check_mapping(maptable, 2, -1, 2, "file1");
2544 osync_mapping_table_close(maptable);
2545 osync_mapping_table_unref(maptable);
2547 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
2548 OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 1);
2549 g_free(path);
2550 check_hash(table, "file1");
2551 osync_hashtable_unref(table);
2553 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
2554 table = hashtable_load(path, "mockobjtype1", 1);
2555 g_free(path);
2556 check_hash(table, "file1");
2557 osync_hashtable_unref(table);
2559 g_free(formatdir);
2560 g_free(plugindir);
2562 destroy_testbed(testbed);
2564 END_TEST
2566 START_TEST (sync_detect_obj2)
2568 char *testbed = setup_testbed("sync_multi");
2569 char *formatdir = g_strdup_printf("%s/formats", testbed);
2570 char *plugindir = g_strdup_printf("%s/plugins", testbed);
2572 osync_testing_system_abort("mkdir file-1");
2573 osync_testing_system_abort("mkdir file2-1");
2574 osync_testing_system_abort("mkdir file3-1");
2576 osync_testing_system_abort("mkdir file-2");
2577 osync_testing_system_abort("mkdir file2-2");
2578 osync_testing_system_abort("mkdir file3-2");
2580 create_random_file("file-1/file1");
2582 OSyncError *error = NULL;
2583 OSyncGroup *group = osync_group_new(&error);
2584 fail_unless(group != NULL, NULL);
2585 fail_unless(error == NULL, NULL);
2587 osync_group_set_schemadir(group, testbed);
2588 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
2589 fail_unless(error == NULL, NULL);
2591 OSyncMember *member1 = osync_group_nth_member(group, 0);
2592 OSyncPluginConfig *config1 = simple_plugin_config(NULL, "file-1", "mockobjtype1", "mockformat1", NULL);
2593 simple_plugin_config(config1, "file2-1", "mockobjtype2", "mockformat2", NULL);
2594 simple_plugin_config(config1, "file3-1", "mockobjtype3", "mockformat3", NULL);
2595 osync_member_set_config(member1, config1);
2596 osync_plugin_config_unref(config1);
2598 OSyncMember *member2 = osync_group_nth_member(group, 1);
2599 OSyncPluginConfig *config2 = simple_plugin_config(NULL, "file-2", "mockobjtype1", "mockformat1", NULL);
2600 osync_member_set_config(member2, config2);
2601 osync_plugin_config_unref(config2);
2603 /* Check that we dont have any discovered objtypes */
2604 fail_unless(osync_member_num_objtypes(member1) == 0, NULL);
2605 fail_unless(osync_member_num_objtypes(member2) == 0, NULL);
2607 OSyncEngine *engine = osync_engine_new(group, &error);
2608 fail_unless(engine != NULL, NULL);
2609 fail_unless(error == NULL, NULL);
2610 osync_group_unref(group);
2612 osync_engine_set_schemadir(engine, testbed);
2613 osync_engine_set_plugindir(engine, plugindir);
2614 osync_engine_set_formatdir(engine, formatdir);
2616 osync_engine_set_conflict_callback(engine, conflict_handler_choose_first, GINT_TO_POINTER(2));
2617 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
2618 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
2619 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
2620 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
2622 /* Discover the objtypes for the members */
2623 fail_unless(osync_engine_discover_and_block(engine, member1, &error), NULL);
2624 fail_unless(osync_member_num_objtypes(member1) == 3, NULL);
2626 /* Client checks */
2627 fail_unless(num_client_connected == 0, NULL);
2628 fail_unless(num_client_main_connected == 0, NULL);
2629 fail_unless(num_client_read == 0, NULL);
2630 fail_unless(num_client_main_read == 0, NULL);
2631 fail_unless(num_client_written == 0, NULL);
2632 fail_unless(num_client_main_written == 0, NULL);
2633 fail_unless(num_client_disconnected == 0, NULL);
2634 fail_unless(num_client_main_disconnected == 0, NULL);
2635 fail_unless(num_client_errors == 0, NULL);
2636 fail_unless(num_client_sync_done == 0, NULL);
2637 fail_unless(num_client_main_sync_done == 0, NULL);
2638 fail_unless(num_client_discovered == 1, NULL);
2640 /* Client checks */
2641 fail_unless(num_engine_connected == 0, NULL);
2642 fail_unless(num_engine_errors == 0, NULL);
2643 fail_unless(num_engine_read == 0, NULL);
2644 fail_unless(num_engine_written == 0, NULL);
2645 fail_unless(num_engine_sync_done == 0, NULL);
2646 fail_unless(num_engine_disconnected == 0, NULL);
2647 fail_unless(num_engine_successful == 0, NULL);
2648 fail_unless(num_engine_end_conflicts == 0, NULL);
2649 fail_unless(num_engine_prev_unclean == 0, NULL);
2651 /* Change checks */
2652 fail_unless(num_change_read == 0, NULL);
2653 fail_unless(num_change_written == 0, NULL);
2654 fail_unless(num_change_error == 0, NULL);
2656 /* Mapping checks */
2657 fail_unless(num_mapping_solved == 0, NULL);
2658 fail_unless(num_mapping_errors == 0, NULL);
2659 fail_unless(num_mapping_conflicts == 0, NULL);
2661 reset_counters();
2662 fail_unless(osync_engine_discover_and_block(engine, member2, &error), NULL);
2663 fail_unless(osync_member_num_objtypes(member2) == 1, NULL);
2665 /* Client checks */
2666 fail_unless(num_client_connected == 0, NULL);
2667 fail_unless(num_client_main_connected == 0, NULL);
2668 fail_unless(num_client_read == 0, NULL);
2669 fail_unless(num_client_main_read == 0, NULL);
2670 fail_unless(num_client_written == 0, NULL);
2671 fail_unless(num_client_main_written == 0, NULL);
2672 fail_unless(num_client_disconnected == 0, NULL);
2673 fail_unless(num_client_main_disconnected == 0, NULL);
2674 fail_unless(num_client_errors == 0, NULL);
2675 fail_unless(num_client_sync_done == 0, NULL);
2676 fail_unless(num_client_main_sync_done == 0, NULL);
2677 fail_unless(num_client_discovered == 1, NULL);
2679 /* Client checks */
2680 fail_unless(num_engine_connected == 0, NULL);
2681 fail_unless(num_engine_errors == 0, NULL);
2682 fail_unless(num_engine_read == 0, NULL);
2683 fail_unless(num_engine_written == 0, NULL);
2684 fail_unless(num_engine_sync_done == 0, NULL);
2685 fail_unless(num_engine_disconnected == 0, NULL);
2686 fail_unless(num_engine_successful == 0, NULL);
2687 fail_unless(num_engine_end_conflicts == 0, NULL);
2688 fail_unless(num_engine_prev_unclean == 0, NULL);
2690 /* Change checks */
2691 fail_unless(num_change_read == 0, NULL);
2692 fail_unless(num_change_written == 0, NULL);
2693 fail_unless(num_change_error == 0, NULL);
2695 /* Mapping checks */
2696 fail_unless(num_mapping_solved == 0, NULL);
2697 fail_unless(num_mapping_errors == 0, NULL);
2698 fail_unless(num_mapping_conflicts == 0, NULL);
2700 fail_unless(osync_group_num_objtypes(group) == 1, NULL);
2702 reset_counters();
2703 fail_unless(osync_engine_initialize(engine, &error), NULL);
2704 fail_unless(error == NULL, NULL);
2706 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
2707 fail_unless(error == NULL, NULL);
2709 fail_unless(osync_engine_finalize(engine, &error), NULL);
2710 fail_unless(error == NULL, NULL);
2712 osync_engine_unref(engine);
2714 /* Client checks */
2715 fail_unless(num_client_connected == 2, NULL);
2716 fail_unless(num_client_main_connected == 2, NULL);
2717 fail_unless(num_client_read == 2, NULL);
2718 fail_unless(num_client_main_read == 2, NULL);
2719 fail_unless(num_client_written == 2, NULL);
2720 fail_unless(num_client_main_written == 2, NULL);
2721 fail_unless(num_client_disconnected == 2, NULL);
2722 fail_unless(num_client_main_disconnected == 2, NULL);
2723 fail_unless(num_client_errors == 0, NULL);
2724 fail_unless(num_client_sync_done == 2, NULL);
2725 fail_unless(num_client_main_sync_done == 2, NULL);
2726 fail_unless(num_client_discovered == 0, NULL);
2728 /* Client checks */
2729 fail_unless(num_engine_connected == 1, NULL);
2730 fail_unless(num_engine_errors == 0, NULL);
2731 fail_unless(num_engine_read == 1, NULL);
2732 fail_unless(num_engine_written == 1, NULL);
2733 fail_unless(num_engine_sync_done == 1, NULL);
2734 fail_unless(num_engine_disconnected == 1, NULL);
2735 fail_unless(num_engine_successful == 1, NULL);
2736 fail_unless(num_engine_end_conflicts == 1, NULL);
2737 fail_unless(num_engine_prev_unclean == 0, NULL);
2739 /* Change checks */
2740 fail_unless(num_change_read == 1, NULL);
2741 fail_unless(num_change_written == 1, NULL);
2742 fail_unless(num_change_error == 0, NULL);
2744 /* Mapping checks */
2745 fail_unless(num_mapping_solved == 1, NULL);
2746 fail_unless(num_mapping_errors == 0, NULL);
2747 fail_unless(num_mapping_conflicts == 0, NULL);
2749 fail_unless(!system("test \"x$(diff -x \".*\" file-1 file-2)\" = \"x\""), NULL);
2751 char *path = g_strdup_printf("%s/configs/group/archive.db", testbed);
2752 OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 1);
2753 g_free(path);
2754 check_mapping(maptable, 1, -1, 2, "file1");
2755 check_mapping(maptable, 2, -1, 2, "file1");
2756 osync_mapping_table_close(maptable);
2757 osync_mapping_table_unref(maptable);
2759 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
2760 OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 1);
2761 g_free(path);
2762 check_hash(table, "file1");
2763 osync_hashtable_unref(table);
2765 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
2766 table = hashtable_load(path, "mockobjtype1", 1);
2767 g_free(path);
2768 check_hash(table, "file1");
2769 osync_hashtable_unref(table);
2771 g_free(formatdir);
2772 g_free(plugindir);
2774 destroy_testbed(testbed);
2776 END_TEST
2778 /* sync_slowsync_connect is intendet to check if a slow-sync got triggered
2779 for all members/sinks when the slow-sync got requested during the connect()
2780 function of one of the members (e.g. anchor mismatch). Bug Ticket: #538 */
2781 START_TEST (sync_slowsync_connect)
2783 char *testbed = setup_testbed("sync");
2784 char *formatdir = g_strdup_printf("%s/formats", testbed);
2785 char *plugindir = g_strdup_printf("%s/plugins", testbed);
2787 osync_testing_system_abort("cp testdata data1/testdata");
2789 OSyncError *error = NULL;
2790 OSyncGroup *group = osync_group_new(&error);
2791 fail_unless(group != NULL, NULL);
2792 fail_unless(error == NULL, NULL);
2794 osync_group_set_schemadir(group, testbed);
2795 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
2796 fail_unless(error == NULL, NULL);
2798 OSyncEngine *engine = osync_engine_new(group, &error);
2799 fail_unless(engine != NULL, NULL);
2800 fail_unless(error == NULL, NULL);
2801 osync_group_unref(group);
2803 osync_engine_set_schemadir(engine, testbed);
2804 osync_engine_set_plugindir(engine, plugindir);
2805 osync_engine_set_formatdir(engine, formatdir);
2807 osync_engine_set_conflict_callback(engine, conflict_handler_choose_first, GINT_TO_POINTER(1));
2808 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
2809 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
2810 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
2811 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
2814 fail_unless(osync_engine_initialize(engine, &error), NULL);
2815 fail_unless(error == NULL, NULL);
2817 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
2818 fail_unless(error == NULL, NULL);
2820 fail_unless(osync_engine_finalize(engine, &error), NULL);
2821 fail_unless(error == NULL, NULL);
2823 osync_engine_unref(engine);
2825 /* Client checks */
2826 fail_unless(num_client_connected == 2, NULL);
2827 fail_unless(num_client_main_connected == 2, NULL);
2828 fail_unless(num_client_read == 2, NULL);
2829 fail_unless(num_client_main_read == 2, NULL);
2830 fail_unless(num_client_written == 2, NULL);
2831 fail_unless(num_client_main_written == 2, NULL);
2832 fail_unless(num_client_disconnected == 2, NULL);
2833 fail_unless(num_client_main_disconnected == 2, NULL);
2834 fail_unless(num_client_errors == 0, NULL);
2835 fail_unless(num_client_sync_done == 2, NULL);
2836 fail_unless(num_client_main_sync_done == 2, NULL);
2838 /* Client checks */
2839 fail_unless(num_engine_connected == 1, NULL);
2840 fail_unless(num_engine_errors == 0, NULL);
2841 fail_unless(num_engine_read == 1, NULL);
2842 fail_unless(num_engine_written == 1, NULL);
2843 fail_unless(num_engine_sync_done == 1, NULL);
2844 fail_unless(num_engine_disconnected == 1, NULL);
2845 fail_unless(num_engine_successful == 1, NULL);
2846 fail_unless(num_engine_end_conflicts == 1, NULL);
2847 fail_unless(num_engine_prev_unclean == 0, NULL);
2849 /* Change checks */
2850 fail_unless(num_change_read == 1, NULL);
2851 fail_unless(num_change_written == 1, NULL);
2852 fail_unless(num_change_error == 0, NULL);
2854 /* Mapping checks */
2855 fail_unless(num_mapping_solved == 1, NULL);
2856 //fail_unless(num_mapping_written == 1, NULL);
2857 fail_unless(num_mapping_errors == 0, NULL);
2858 fail_unless(num_mapping_conflicts == 0, NULL);
2860 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
2862 char *path = g_strdup_printf("%s/configs/group/archive.db", testbed);
2863 OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 1);
2864 g_free(path);
2865 check_mapping(maptable, 1, 1, 2, "testdata");
2866 check_mapping(maptable, 2, 1, 2, "testdata");
2867 osync_mapping_table_close(maptable);
2868 osync_mapping_table_unref(maptable);
2870 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
2871 OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 1);
2872 g_free(path);
2873 check_hash(table, "testdata");
2874 osync_hashtable_unref(table);
2876 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
2877 table = hashtable_load(path, "mockobjtype1", 1);
2878 g_free(path);
2879 check_hash(table, "testdata");
2880 osync_hashtable_unref(table);
2882 /* 2nd Sync with new path config for #1 member - this is needed
2883 * to trigger a slow-sync within the connect() plugin call. */
2884 reset_counters();
2885 osync_testing_system_abort("mkdir data3");
2886 osync_testing_system_abort("cp configs/new_path.conf configs/group/1/mock-sync.conf");
2888 group = osync_group_new(&error);
2889 fail_unless(group != NULL, NULL);
2890 fail_unless(error == NULL, NULL);
2892 osync_group_set_schemadir(group, testbed);
2893 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
2894 fail_unless(error == NULL, NULL);
2896 engine = osync_engine_new(group, &error);
2897 fail_unless(engine != NULL, NULL);
2898 fail_unless(error == NULL, NULL);
2899 osync_group_unref(group);
2901 osync_engine_set_schemadir(engine, testbed);
2902 osync_engine_set_plugindir(engine, plugindir);
2903 osync_engine_set_formatdir(engine, formatdir);
2905 osync_engine_set_conflict_callback(engine, conflict_handler_choose_first, GINT_TO_POINTER(1));
2906 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
2907 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
2908 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
2909 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
2912 fail_unless(osync_engine_initialize(engine, &error), NULL);
2913 fail_unless(error == NULL, NULL);
2915 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
2916 fail_unless(error == NULL, NULL);
2918 fail_unless(osync_engine_finalize(engine, &error), NULL);
2919 fail_unless(error == NULL, NULL);
2921 osync_engine_unref(engine);
2923 /* Client checks */
2924 fail_unless(num_client_connected == 2, NULL);
2925 fail_unless(num_client_main_connected == 2, NULL);
2926 fail_unless(num_client_read == 2, NULL);
2927 fail_unless(num_client_main_read == 2, NULL);
2928 fail_unless(num_client_written == 2, NULL);
2929 fail_unless(num_client_main_written == 2, NULL);
2930 fail_unless(num_client_disconnected == 2, NULL);
2931 fail_unless(num_client_main_disconnected == 2, NULL);
2932 fail_unless(num_client_errors == 0, NULL);
2933 fail_unless(num_client_sync_done == 2, NULL);
2934 fail_unless(num_client_main_sync_done == 2, NULL);
2936 /* Client checks */
2937 fail_unless(num_engine_connected == 1, NULL);
2938 fail_unless(num_engine_errors == 0, NULL);
2939 fail_unless(num_engine_read == 1, NULL);
2940 fail_unless(num_engine_written == 1, NULL);
2941 fail_unless(num_engine_sync_done == 1, NULL);
2942 fail_unless(num_engine_disconnected == 1, NULL);
2943 fail_unless(num_engine_successful == 1, NULL);
2944 fail_unless(num_engine_end_conflicts == 1, NULL);
2945 fail_unless(num_engine_prev_unclean == 0, NULL);
2947 /* Change checks */
2948 fail_unless(num_change_read == 1, NULL);
2949 fail_unless(num_change_written == 1, NULL);
2950 fail_unless(num_change_error == 0, NULL);
2952 /* Mapping checks */
2953 fail_unless(num_mapping_solved == 1, NULL);
2954 //fail_unless(num_mapping_written == 1, NULL);
2955 fail_unless(num_mapping_errors == 0, NULL);
2956 fail_unless(num_mapping_conflicts == 0, NULL);
2958 fail_unless(!system("test \"x$(diff -x \".*\" data3 data2)\" = \"x\""), NULL);
2960 path = g_strdup_printf("%s/configs/group/archive.db", testbed);
2961 maptable = mappingtable_load(path, "mockobjtype1", 1);
2962 g_free(path);
2963 check_mapping(maptable, 1, 1, 2, "testdata");
2964 check_mapping(maptable, 2, 1, 2, "testdata");
2965 osync_mapping_table_close(maptable);
2966 osync_mapping_table_unref(maptable);
2968 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
2969 table = hashtable_load(path, "mockobjtype1", 1);
2970 g_free(path);
2971 check_hash(table, "testdata");
2972 osync_hashtable_unref(table);
2974 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
2975 table = hashtable_load(path, "mockobjtype1", 1);
2976 g_free(path);
2977 check_hash(table, "testdata");
2978 osync_hashtable_unref(table);
2980 g_free(formatdir);
2981 g_free(plugindir);
2983 destroy_testbed(testbed);
2985 END_TEST
2987 /* sync_slowsync_mainsink_connect is intendet to check if a slow-sync got triggered
2988 for all members/sinks when the slow-sync got requested during the MAINSINK connect()
2989 function of one of the members (e.g. anchor mismatch). The MAINSINK is the interesting
2990 part of this test, compared to sync_slowsync_connect which is using regulars sink functions. */
2991 START_TEST (sync_slowsync_mainsink_connect)
2993 char *testbed = setup_testbed("sync");
2994 char *formatdir = g_strdup_printf("%s/formats", testbed);
2995 char *plugindir = g_strdup_printf("%s/plugins", testbed);
2997 osync_testing_system_abort("cp testdata data1/testdata");
2999 g_setenv("MAINSINK_CONNECT", "1", TRUE);
3001 OSyncError *error = NULL;
3002 OSyncGroup *group = osync_group_new(&error);
3003 fail_unless(group != NULL, NULL);
3004 fail_unless(error == NULL, NULL);
3006 osync_group_set_schemadir(group, testbed);
3007 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
3008 fail_unless(error == NULL, NULL);
3010 OSyncEngine *engine = osync_engine_new(group, &error);
3011 fail_unless(engine != NULL, NULL);
3012 fail_unless(error == NULL, NULL);
3013 osync_group_unref(group);
3015 osync_engine_set_schemadir(engine, testbed);
3016 osync_engine_set_plugindir(engine, plugindir);
3017 osync_engine_set_formatdir(engine, formatdir);
3019 osync_engine_set_conflict_callback(engine, conflict_handler_choose_first, GINT_TO_POINTER(1));
3020 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
3021 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
3022 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
3023 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
3026 fail_unless(osync_engine_initialize(engine, &error), NULL);
3027 fail_unless(error == NULL, NULL);
3029 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
3030 fail_unless(error == NULL, NULL);
3032 fail_unless(osync_engine_finalize(engine, &error), NULL);
3033 fail_unless(error == NULL, NULL);
3035 osync_engine_unref(engine);
3037 /* Client checks */
3038 fail_unless(num_client_connected == 2, NULL);
3039 fail_unless(num_client_main_connected == 2, NULL);
3040 fail_unless(num_client_read == 2, NULL);
3041 fail_unless(num_client_main_read == 2, NULL);
3042 fail_unless(num_client_written == 2, NULL);
3043 fail_unless(num_client_main_written == 2, NULL);
3044 fail_unless(num_client_disconnected == 2, NULL);
3045 fail_unless(num_client_main_disconnected == 2, NULL);
3046 fail_unless(num_client_errors == 0, NULL);
3047 fail_unless(num_client_sync_done == 2, NULL);
3048 fail_unless(num_client_main_sync_done == 2, NULL);
3050 /* Client checks */
3051 fail_unless(num_engine_connected == 1, NULL);
3052 fail_unless(num_engine_errors == 0, NULL);
3053 fail_unless(num_engine_read == 1, NULL);
3054 fail_unless(num_engine_written == 1, NULL);
3055 fail_unless(num_engine_sync_done == 1, NULL);
3056 fail_unless(num_engine_disconnected == 1, NULL);
3057 fail_unless(num_engine_successful == 1, NULL);
3058 fail_unless(num_engine_end_conflicts == 1, NULL);
3059 fail_unless(num_engine_prev_unclean == 0, NULL);
3061 /* Change checks */
3062 fail_unless(num_change_read == 1, NULL);
3063 fail_unless(num_change_written == 1, NULL);
3064 fail_unless(num_change_error == 0, NULL);
3066 /* Mapping checks */
3067 fail_unless(num_mapping_solved == 1, NULL);
3068 //fail_unless(num_mapping_written == 1, NULL);
3069 fail_unless(num_mapping_errors == 0, NULL);
3070 fail_unless(num_mapping_conflicts == 0, NULL);
3072 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
3074 char *path = g_strdup_printf("%s/configs/group/archive.db", testbed);
3075 OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 1);
3076 g_free(path);
3077 check_mapping(maptable, 1, 1, 2, "testdata");
3078 check_mapping(maptable, 2, 1, 2, "testdata");
3079 osync_mapping_table_close(maptable);
3080 osync_mapping_table_unref(maptable);
3082 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
3083 OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 1);
3084 g_free(path);
3085 check_hash(table, "testdata");
3086 osync_hashtable_unref(table);
3088 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
3089 table = hashtable_load(path, "mockobjtype1", 1);
3090 g_free(path);
3091 check_hash(table, "testdata");
3092 osync_hashtable_unref(table);
3094 /* 2nd Sync trigger a SlowSync within the MAINSINK connect function. */
3095 reset_counters();
3096 g_setenv("CONNECT_SLOWSYNC", "1", TRUE);
3097 osync_testing_system_abort("rm data2/testdata");
3099 group = osync_group_new(&error);
3100 fail_unless(group != NULL, NULL);
3101 fail_unless(error == NULL, NULL);
3103 osync_group_set_schemadir(group, testbed);
3104 fail_unless(osync_group_load(group, "configs/group", &error), NULL);
3105 fail_unless(error == NULL, NULL);
3107 engine = osync_engine_new(group, &error);
3108 fail_unless(engine != NULL, NULL);
3109 fail_unless(error == NULL, NULL);
3110 osync_group_unref(group);
3112 osync_engine_set_schemadir(engine, testbed);
3113 osync_engine_set_plugindir(engine, plugindir);
3114 osync_engine_set_formatdir(engine, formatdir);
3116 osync_engine_set_conflict_callback(engine, conflict_handler_choose_first, GINT_TO_POINTER(1));
3117 osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1));
3118 osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1));
3119 osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1));
3120 osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1));
3123 fail_unless(osync_engine_initialize(engine, &error), NULL);
3124 fail_unless(error == NULL, NULL);
3126 fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL);
3127 fail_unless(error == NULL, NULL);
3129 fail_unless(osync_engine_finalize(engine, &error), NULL);
3130 fail_unless(error == NULL, NULL);
3132 osync_engine_unref(engine);
3134 /* Client checks */
3135 fail_unless(num_client_connected == 2, NULL);
3136 fail_unless(num_client_main_connected == 2, NULL);
3137 fail_unless(num_client_read == 2, NULL);
3138 fail_unless(num_client_main_read == 2, NULL);
3139 fail_unless(num_client_written == 2, NULL);
3140 fail_unless(num_client_main_written == 2, NULL);
3141 fail_unless(num_client_disconnected == 2, NULL);
3142 fail_unless(num_client_main_disconnected == 2, NULL);
3143 fail_unless(num_client_errors == 0, NULL);
3144 fail_unless(num_client_sync_done == 2, NULL);
3145 fail_unless(num_client_main_sync_done == 2, NULL);
3147 /* Client checks */
3148 fail_unless(num_engine_connected == 1, NULL);
3149 fail_unless(num_engine_errors == 0, NULL);
3150 fail_unless(num_engine_read == 1, NULL);
3151 fail_unless(num_engine_written == 1, NULL);
3152 fail_unless(num_engine_sync_done == 1, NULL);
3153 fail_unless(num_engine_disconnected == 1, NULL);
3154 fail_unless(num_engine_successful == 1, NULL);
3155 fail_unless(num_engine_end_conflicts == 1, NULL);
3156 fail_unless(num_engine_prev_unclean == 0, NULL);
3158 /* Change checks */
3159 fail_unless(num_change_read == 1, NULL);
3160 fail_unless(num_change_written == 1, NULL);
3161 fail_unless(num_change_error == 0, NULL);
3163 /* Mapping checks */
3164 fail_unless(num_mapping_solved == 1, NULL);
3165 //fail_unless(num_mapping_written == 1, NULL);
3166 fail_unless(num_mapping_errors == 0, NULL);
3167 fail_unless(num_mapping_conflicts == 0, NULL);
3169 fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL);
3171 path = g_strdup_printf("%s/configs/group/archive.db", testbed);
3172 maptable = mappingtable_load(path, "mockobjtype1", 1);
3173 g_free(path);
3174 check_mapping(maptable, 1, 1, 2, "testdata");
3175 check_mapping(maptable, 2, 1, 2, "testdata");
3176 osync_mapping_table_close(maptable);
3177 osync_mapping_table_unref(maptable);
3179 path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed);
3180 table = hashtable_load(path, "mockobjtype1", 1);
3181 g_free(path);
3182 check_hash(table, "testdata");
3183 osync_hashtable_unref(table);
3185 path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed);
3186 table = hashtable_load(path, "mockobjtype1", 1);
3187 g_free(path);
3188 check_hash(table, "testdata");
3189 osync_hashtable_unref(table);
3191 g_free(formatdir);
3192 g_free(plugindir);
3194 destroy_testbed(testbed);
3196 END_TEST
3198 Suite *env_suite(void)
3200 Suite *s = suite_create("Sync");
3201 // Suite *s2 = suite_create("Sync");
3202 // Suite *s3 = suite_create("Sync"); // really broken...
3204 create_case(s, "sync_setup_connect", sync_setup_connect);
3205 create_case(s, "sync_easy_new", sync_easy_new);
3206 create_case(s, "sync_easy_new_del", sync_easy_new_del);
3207 create_case(s, "sync_easy_conflict", sync_easy_conflict);
3208 create_case(s, "sync_easy_new_mapping", sync_easy_new_mapping);
3209 create_case(s, "sync_easy_conflict_duplicate", sync_easy_conflict_duplicate);
3210 create_case(s, "sync_easy_conflict_abort", sync_easy_conflict_abort);
3211 create_case(s, "sync_conflict_duplicate2", sync_conflict_duplicate2);
3212 create_case(s, "sync_conflict_delay", sync_conflict_delay);
3213 create_case(s, "sync_conflict_deldel", sync_conflict_deldel);
3214 create_case(s, "sync_moddel", sync_moddel);
3215 create_case(s, "sync_conflict_moddel", sync_conflict_moddel);
3216 create_case(s, "sync_easy_dualdel", sync_easy_dualdel);
3217 create_case(s, "sync_large", sync_large);
3219 create_case(s, "sync_detect_obj", sync_detect_obj);
3220 create_case(s, "sync_detect_obj2", sync_detect_obj2);
3222 create_case(s, "sync_slowsync_connect", sync_slowsync_connect);
3223 create_case(s, "sync_slowsync_mainsink_connect", sync_slowsync_mainsink_connect);
3225 //stateless sync
3227 return s;
3230 int main(void)
3232 int nf;
3234 check_env();
3236 Suite *s = env_suite();
3238 SRunner *sr;
3239 sr = srunner_create(s);
3240 srunner_run_all(sr, CK_VERBOSE);
3241 nf = srunner_ntests_failed(sr);
3242 srunner_free(sr);
3243 return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE;