static void sync_done(void *userdata, OSyncPluginInfo *info, OSyncContext *ctx) { /* * This function will only be called if the sync was successful */ OSyncError *error = NULL; OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); sink_environment *sinkenv = osync_objtype_sink_get_userdata(sink); //If we use anchors we have to update it now. //Now you get/calculate the current anchor of the device char *lanchor = NULL; char *anchorpath = osync_strdup_printf("%s/anchor.db", osync_plugin_info_get_configdir(info)); osync_anchor_update(anchorpath, "lanchor", lanchor); osync_free(anchorpath); //Save hashtable to database if (!osync_hashtable_save(sinkenv->hashtable, &error)) goto error; //Answer the call osync_context_report_success(ctx); return; error: osync_context_report_osyncerror(ctx, error); osync_error_unref(&error); return; }
END_TEST START_TEST (hashtable_reload) { OSyncError *error = NULL; char *testbed = setup_testbed(NULL); osync_bool new_hashtable = FALSE; reset_hashtable_counters(); char *hashpath = g_strdup_printf("%s%chashtable.db", testbed, G_DIR_SEPARATOR); OSyncHashTable *table = osync_hashtable_new(hashpath, "contact", &new_hashtable, &error); fail_unless(!error, NULL); fail_unless(table != NULL, NULL); fail_unless(new_hashtable != FALSE, NULL); /* Expecting a new/fresh hastable */ /***** load */ fail_unless(osync_hashtable_load(table, &error), NULL); OSyncChange *fakechange = osync_change_new(&error); osync_change_set_uid(fakechange, "test1"); char *rndhash = osync_rand_str(g_random_int_range(100, 200), &error); osync_assert(error == NULL); osync_change_set_hash(fakechange, rndhash); osync_change_set_changetype(fakechange, OSYNC_CHANGE_TYPE_ADDED); osync_hashtable_update_change(table, fakechange); osync_change_unref(fakechange); /*** store - commit hashtable */ fail_unless(osync_hashtable_save(table, &error), NULL); fail_unless(!error, NULL); osync_hashtable_unref(table); table = NULL; /** reload the hashtable */ OSyncHashTable *newtable = osync_hashtable_new(hashpath, "contact", &new_hashtable, &error); fail_unless(!error, NULL); fail_unless(newtable != NULL, NULL); fail_unless(new_hashtable != TRUE, NULL); /* We expect here no new hashtable */ /* 0 entries - since not loaded! */ fail_unless(osync_hashtable_num_entries(newtable) == 0, NULL); /* load and count and compare hashs */ fail_unless(osync_hashtable_load(newtable, &error), NULL); fail_unless(osync_hashtable_num_entries(newtable) == 1, NULL); const char *newhash = osync_hashtable_get_hash(newtable, "test1"); fail_unless(newhash != NULL, NULL); fail_unless(!strcmp(newhash, rndhash), NULL); g_free(rndhash); g_free(hashpath); destroy_testbed(testbed); }