Ticket #1207: testcase_for_sharedchange_multibuggyconversion.diff

File testcase_for_sharedchange_multibuggyconversion.diff, 13.3 KB (added by prahal, 2 years ago)

testcase

  • mock-plugin/mock_format.c

     
    102102        osync_assert(file); 
    103103 
    104104        file->path = osync_rand_str(g_random_int_range(1, 100), error); 
    105         osync_assert(error == NULL); 
     105        osync_assert(*error == NULL); 
    106106         
    107107        file->data = input; 
    108108        file->size = inpsize - 1; 
     
    112112        return TRUE; 
    113113} 
    114114 
     115static 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 
     138static 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 
    115165static osync_bool destroy_file(char *input, unsigned int inpsize, void *user_data, OSyncError **error) 
    116166{ 
    117167        OSyncFileFormat *file = (OSyncFileFormat *)input; 
     
    211261        osync_trace(TRACE_ENTRY, "%s(%p, %i, %p, %p)", __func__, input, inpsize, marshal, error); 
    212262         
    213263        OSyncFileFormat *file = (OSyncFileFormat *)input; 
    214          
     264 
    215265        if (!osync_marshal_write_string(marshal, file->path, error)) 
    216266                goto error; 
    217267        if (!osync_marshal_write_buffer(marshal, file->data, file->size, error)) 
     
    296346        osync_assert(osync_format_env_register_objformat(env, format, error)); 
    297347        osync_objformat_unref(format); 
    298348 
     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 
    299358        return TRUE; 
    300359} 
    301360 
     
    310369        OSyncObjFormat *mockformat2 = osync_format_env_find_objformat(env, "mockformat2"); 
    311370        osync_assert(mockformat2); 
    312371         
     372        OSyncObjFormat *mockformat1a = osync_format_env_find_objformat(env, "mockformat1a"); 
     373        osync_assert(mockformat1a); 
     374         
    313375        conv = osync_converter_new(OSYNC_CONVERTER_ENCAP, mockformat1, mockformat2, conv_mockformat1_to_mockformat2, error); 
    314376        osync_assert(conv); 
    315377         
     
    322384        osync_format_env_register_converter(env, conv, error); 
    323385        osync_converter_unref(conv); 
    324386 
     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); 
    325398 
    326399        return TRUE; 
    327400} 
  • 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
    
     
    471471        osync_engine_unref(engine); 
    472472} 
    473473 
     474/* Synchronize slow sync with two same data . 
     475It ends up with two entry_engines pointing to the same change. 
     476Which could lead to double conversion of the change pointed to. 
     477This also lead to wrong conversion path cached if this shared change 
     478appears first. This is the latter that I use to detect the bug. 
     479*/ 
     480START_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} 
     513END_TEST 
     514 
    474515/* Sync the single item testdata from data 1 to data2 and data3 
    475516 * then change testdata in data3 */ 
    476517START_TEST (multisync_easy_mod) 
     
    19682009OSYNC_TESTCASE_ADD(multisync_dual_new) 
    19692010OSYNC_TESTCASE_ADD(multisync_triple_new) 
    19702011 
     2012OSYNC_TESTCASE_ADD(multisync_easy_same) 
     2013 
    19712014OSYNC_TESTCASE_ADD(multisync_easy_mod) 
    19722015OSYNC_TESTCASE_ADD(multisync_dual_mod) 
    19732016OSYNC_TESTCASE_ADD(multisync_triple_mod) 
  • CMakeLists.txt

     
    296296OSYNC_TESTCASE( multisync multisync_easy_new) 
    297297OSYNC_TESTCASE( multisync multisync_dual_new) 
    298298OSYNC_TESTCASE( multisync multisync_triple_new) 
     299OSYNC_TESTCASE( multisync multisync_easy_same) 
    299300OSYNC_TESTCASE( multisync multisync_easy_mod) 
    300301OSYNC_TESTCASE( multisync multisync_dual_mod) 
    301302OSYNC_TESTCASE( multisync multisync_triple_mod)