Ticket #1207: testcase_for_sharedchange_multibuggyconversion.diff
| File testcase_for_sharedchange_multibuggyconversion.diff, 13.3 KB (added by prahal, 2 years ago) |
|---|
-
mock-plugin/mock_format.c
102 102 osync_assert(file); 103 103 104 104 file->path = osync_rand_str(g_random_int_range(1, 100), error); 105 osync_assert( error == NULL);105 osync_assert(*error == NULL); 106 106 107 107 file->data = input; 108 108 file->size = inpsize - 1; … … 112 112 return TRUE; 113 113 } 114 114 115 static osync_bool conv_mockformat1a_to_mockformat1(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error) 116 { 117 osync_trace(TRACE_INTERNAL, "Converting fileA to file"); 118 119 *free_input = FALSE; 120 OSyncFileFormat *fileA = (OSyncFileFormat *)input; 121 OSyncFileFormat *file = osync_try_malloc0(sizeof(OSyncFileFormat), error); 122 osync_assert(file); 123 124 char *filedata = osync_try_malloc0(fileA->size - 2, error); 125 memcpy(filedata, fileA->data, fileA->size - 2); 126 127 file->path = fileA->path; 128 osync_assert(*error == NULL); 129 130 file->data = filedata; 131 file->size = fileA->size - 2; 132 133 *output = (char *)file; 134 *outpsize = sizeof(OSyncFileFormat); 135 return TRUE; 136 } 137 138 static osync_bool conv_mockformat1_to_mockformat1a(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error) 139 { 140 osync_trace(TRACE_INTERNAL, "Converting file to fileA"); 141 142 *free_input = FALSE; 143 char *identifier = " "; 144 145 OSyncFileFormat *file = (OSyncFileFormat *)input; 146 OSyncFileFormat *fileA = osync_try_malloc0(sizeof(OSyncFileFormat), error); 147 osync_assert(fileA); 148 149 char *filedata = osync_try_malloc0(file->size + 2, error); 150 memcpy(filedata, file->data, file->size); 151 memcpy(filedata + file->size, identifier , 2); 152 153 fileA->path = file->path; 154 osync_assert(*error == NULL); 155 156 fileA->data = filedata; 157 fileA->size = file->size + 2; 158 159 *output = (char *)fileA; 160 *outpsize = sizeof(OSyncFileFormat); 161 162 return TRUE; 163 } 164 115 165 static osync_bool destroy_file(char *input, unsigned int inpsize, void *user_data, OSyncError **error) 116 166 { 117 167 OSyncFileFormat *file = (OSyncFileFormat *)input; … … 211 261 osync_trace(TRACE_ENTRY, "%s(%p, %i, %p, %p)", __func__, input, inpsize, marshal, error); 212 262 213 263 OSyncFileFormat *file = (OSyncFileFormat *)input; 214 264 215 265 if (!osync_marshal_write_string(marshal, file->path, error)) 216 266 goto error; 217 267 if (!osync_marshal_write_buffer(marshal, file->data, file->size, error)) … … 296 346 osync_assert(osync_format_env_register_objformat(env, format, error)); 297 347 osync_objformat_unref(format); 298 348 349 /* mockformat1a */ 350 format = osync_objformat_new("mockformat1a", "mockobjtype1", error); 351 osync_assert(format); 352 353 _format_set_functions(format); 354 355 osync_assert(osync_format_env_register_objformat(env, format, error)); 356 osync_objformat_unref(format); 357 299 358 return TRUE; 300 359 } 301 360 … … 310 369 OSyncObjFormat *mockformat2 = osync_format_env_find_objformat(env, "mockformat2"); 311 370 osync_assert(mockformat2); 312 371 372 OSyncObjFormat *mockformat1a = osync_format_env_find_objformat(env, "mockformat1a"); 373 osync_assert(mockformat1a); 374 313 375 conv = osync_converter_new(OSYNC_CONVERTER_ENCAP, mockformat1, mockformat2, conv_mockformat1_to_mockformat2, error); 314 376 osync_assert(conv); 315 377 … … 322 384 osync_format_env_register_converter(env, conv, error); 323 385 osync_converter_unref(conv); 324 386 387 conv = osync_converter_new(OSYNC_CONVERTER_ENCAP, mockformat1, mockformat1a, conv_mockformat1_to_mockformat1a, error); 388 osync_assert(conv); 389 390 osync_format_env_register_converter(env, conv, error); 391 osync_converter_unref(conv); 392 393 conv = osync_converter_new(OSYNC_CONVERTER_DECAP, mockformat1a, mockformat1, conv_mockformat1a_to_mockformat1, error); 394 osync_assert(conv); 395 396 osync_format_env_register_converter(env, conv, error); 397 osync_converter_unref(conv); 325 398 326 399 return TRUE; 327 400 } -
data/multisync_multiformats/configs/group/1/mock-sync.conf
1 <?xml version="1.0"?> 2 <config version="1.0"> 3 <Resources> 4 <Resource> 5 <Enabled>1</Enabled> 6 <Formats> 7 <Format> 8 <Name>mockformat1</Name> 9 </Format> 10 </Formats> 11 <ObjType>mockobjtype1</ObjType> 12 <Path>data1</Path> 13 </Resource> 14 </Resources> 15 </config> -
data/multisync_multiformats/configs/group/1/syncmember.conf
1 <?xml version="1.0"?> 2 <syncmember version="1.0"> 3 <pluginname>mock-sync</pluginname> 4 <objtype> 5 <name>mockobjtype1</name> 6 <enabled>1</enabled> 7 <read>1</read> 8 <getchanges>1</getchanges> 9 <write>1</write> 10 <objformat> 11 <name>mockformat1</name> 12 <config/> 13 </objformat> 14 </objtype> 15 </syncmember> -
data/multisync_multiformats/configs/group/2/mock-sync.conf
1 <?xml version="1.0"?> 2 <config version="1.0"> 3 <Resources> 4 <Resource> 5 <Enabled>1</Enabled> 6 <Formats> 7 <Format> 8 <Name>mockformat1a</Name> 9 </Format> 10 </Formats> 11 <ObjType>mockobjtype1</ObjType> 12 <Path>data2</Path> 13 </Resource> 14 </Resources> 15 </config> -
data/multisync_multiformats/configs/group/2/syncmember.conf
1 <?xml version="1.0"?> 2 <syncmember version="1.0"> 3 <pluginname>mock-sync</pluginname> 4 <objtype> 5 <name>mockobjtype1</name> 6 <enabled>1</enabled> 7 <read>1</read> 8 <getchanges>1</getchanges> 9 <write>1</write> 10 <objformat> 11 <name>mockformat1a</name> 12 <config/> 13 </objformat> 14 </objtype> 15 </syncmember> -
data/multisync_multiformats/configs/group/3/mock-sync.conf
1 <?xml version="1.0"?> 2 <config version="1.0"> 3 <Resources> 4 <Resource> 5 <Enabled>1</Enabled> 6 <Formats> 7 <Format> 8 <Name>mockformat1a</Name> 9 </Format> 10 </Formats> 11 <ObjType>mockobjtype1</ObjType> 12 <Path>data3</Path> 13 </Resource> 14 </Resources> 15 </config> -
data/multisync_multiformats/configs/group/3/syncmember.conf
1 <?xml version="1.0"?> 2 <syncmember version="1.0"> 3 <pluginname>mock-sync</pluginname> 4 <objtype> 5 <name>mockobjtype1</name> 6 <enabled>1</enabled> 7 <read>1</read> 8 <getchanges>1</getchanges> 9 <write>1</write> 10 <objformat> 11 <name>mockformat1a</name> 12 <config /> 13 </objformat> 14 </objtype> 15 </syncmember> -
data/multisync_multiformats/configs/group/4/mock-sync.conf
1 <?xml version="1.0"?> 2 <config version="1.0"> 3 <Resources> 4 <Resource> 5 <Enabled>1</Enabled> 6 <Formats> 7 <Format> 8 <Name>mockformat1</Name> 9 </Format> 10 </Formats> 11 <ObjType>mockobjtype1</ObjType> 12 <Path>data4</Path> 13 </Resource> 14 </Resources> 15 </config> -
data/multisync_multiformats/configs/group/4/syncmember.conf
1 <?xml version="1.0"?> 2 <syncmember version="1.0"> 3 <pluginname>mock-sync</pluginname> 4 <objtype> 5 <name>mockobjtype1</name> 6 <enabled>1</enabled> 7 <read>1</read> 8 <getchanges>1</getchanges> 9 <write>1</write> 10 <objformat> 11 <name>mockformat1</name> 12 <config/> 13 </objformat> 14 </objtype> 15 </syncmember> -
data/multisync_multiformats/configs/group/syncgroup.conf
1 <?xml version="1.0"?> 2 <syncgroup><groupname>test</groupname></syncgroup> -
sync-tests/check_multisync.c
Impossible d'afficher : fichier considéré comme binaire. svn:mime-type = application/octet-stream Modification de propriétés sur data/multisync_multiformats/data1/testdata_to_sync ___________________________________________________________________ Ajouté : svn:mime-type + application/octet-stream Impossible d'afficher : fichier considéré comme binaire. svn:mime-type = application/octet-stream Modification de propriétés sur data/multisync_multiformats/data1/testdata ___________________________________________________________________ Ajouté : svn:mime-type + application/octet-stream Impossible d'afficher : fichier considéré comme binaire. svn:mime-type = application/octet-stream Modification de propriétés sur data/multisync_multiformats/data2/testdata ___________________________________________________________________ Ajouté : svn:mime-type + application/octet-stream Impossible d'afficher : fichier considéré comme binaire. svn:mime-type = application/octet-stream Modification de propriétés sur data/multisync_multiformats/data3/testdata ___________________________________________________________________ Ajouté : svn:mime-type + application/octet-stream
471 471 osync_engine_unref(engine); 472 472 } 473 473 474 /* Synchronize slow sync with two same data . 475 It ends up with two entry_engines pointing to the same change. 476 Which could lead to double conversion of the change pointed to. 477 This also lead to wrong conversion path cached if this shared change 478 appears first. This is the latter that I use to detect the bug. 479 */ 480 START_TEST (multisync_easy_same) 481 { 482 char *testbed = setup_testbed("multisync_multiformats"); 483 OSyncError *error = NULL; 484 OSyncEngine *engine = setup_engine(testbed); 485 fail_unless(osync_engine_initialize(engine, &error), NULL); 486 fail_unless(error == NULL, NULL); 487 488 osync_testing_system_abort("cp data1/testdata data4/"); 489 490 mark_point(); 491 492 synchronize_once(engine, NULL); 493 494 fail_unless(num_change_read == 5, NULL); 495 fail_unless(num_change_written == 3, NULL); 496 fail_unless(num_change_error == 0, NULL); 497 498 fail_unless(num_mapping_conflicts == 0, NULL); 499 500 fail_unless(num_engine_connected == 1, NULL); 501 fail_unless(num_engine_read == 1, NULL); 502 fail_unless(num_engine_written == 1, NULL); 503 fail_unless(num_engine_disconnected == 1, NULL); 504 fail_unless(num_engine_end_conflicts = 1, NULL); 505 506 fail_unless(osync_testing_diff("data1", "data4")); 507 fail_unless(osync_testing_diff("data2", "data3")); 508 509 destroy_engine(engine); 510 511 destroy_testbed(testbed); 512 } 513 END_TEST 514 474 515 /* Sync the single item testdata from data 1 to data2 and data3 475 516 * then change testdata in data3 */ 476 517 START_TEST (multisync_easy_mod) … … 1968 2009 OSYNC_TESTCASE_ADD(multisync_dual_new) 1969 2010 OSYNC_TESTCASE_ADD(multisync_triple_new) 1970 2011 2012 OSYNC_TESTCASE_ADD(multisync_easy_same) 2013 1971 2014 OSYNC_TESTCASE_ADD(multisync_easy_mod) 1972 2015 OSYNC_TESTCASE_ADD(multisync_dual_mod) 1973 2016 OSYNC_TESTCASE_ADD(multisync_triple_mod) -
CMakeLists.txt
296 296 OSYNC_TESTCASE( multisync multisync_easy_new) 297 297 OSYNC_TESTCASE( multisync multisync_dual_new) 298 298 OSYNC_TESTCASE( multisync multisync_triple_new) 299 OSYNC_TESTCASE( multisync multisync_easy_same) 299 300 OSYNC_TESTCASE( multisync multisync_easy_mod) 300 301 OSYNC_TESTCASE( multisync multisync_dual_mod) 301 302 OSYNC_TESTCASE( multisync multisync_triple_mod)
