From: <svn...@op...> - 2009-03-25 21:37:28
|
Author: dgollub Date: Wed Mar 25 22:37:09 2009 New Revision: 5316 URL: http://www.opensync.org/changeset/5316 Log: Add testcase for error handling in discover phase. Fix error reporting of discover engine command. Modified: trunk/opensync/engine/opensync_engine.c trunk/tests/CMakeLists.txt trunk/tests/engine-tests/check_engine_error.c trunk/tests/mock-plugin/mock_sync.c trunk/tests/support.c Modified: trunk/opensync/engine/opensync_engine.c ============================================================================== --- trunk/opensync/engine/opensync_engine.c Wed Mar 25 19:52:52 2009 (r5315) +++ trunk/opensync/engine/opensync_engine.c Wed Mar 25 22:37:09 2009 (r5316) @@ -2244,15 +2244,16 @@ g_cond_wait(engine->syncing, engine->syncing_mutex); g_mutex_unlock(engine->syncing_mutex); - if (!osync_engine_finalize(engine, error)) - goto error; - + if (engine->error) { osync_error_set_from_error(error, &(engine->error)); osync_error_unref(&(engine->error)); engine->error = NULL; - goto error; + goto error_finalize; } + + if (!osync_engine_finalize(engine, error)) + goto error; osync_trace(TRACE_EXIT, "%s", __func__); return TRUE; Modified: trunk/tests/CMakeLists.txt ============================================================================== --- trunk/tests/CMakeLists.txt Wed Mar 25 19:52:52 2009 (r5315) +++ trunk/tests/CMakeLists.txt Wed Mar 25 22:37:09 2009 (r5316) @@ -196,6 +196,7 @@ OSYNC_TESTCASE( engine-error engine_error_disconnect_timeout_and_error) OSYNC_TESTCASE( engine-error engine_error_get_changes_disconnect_error) OSYNC_TESTCASE( engine-error engine_error_missing_format_plugin) +OSYNC_TESTCASE( engine-error engine_error_discover_error) BUILD_CHECK_TEST( formatenv format-tests/check_format_env.c ${TEST_TARGET_LIBRARIES} ) OSYNC_TESTCASE(formatenv format_env_create) Modified: trunk/tests/engine-tests/check_engine_error.c ============================================================================== --- trunk/tests/engine-tests/check_engine_error.c Wed Mar 25 19:52:52 2009 (r5315) +++ trunk/tests/engine-tests/check_engine_error.c Wed Mar 25 22:37:09 2009 (r5316) @@ -3001,6 +3001,47 @@ } END_TEST +START_TEST (engine_error_discover_error) +{ + char *testbed = setup_testbed("sync"); + char *formatdir = g_strdup_printf("%s/formats", testbed); + char *plugindir = g_strdup_printf("%s/plugins", testbed); + + OSyncError *error = NULL; + OSyncGroup *group = osync_group_new(&error); + osync_group_set_schemadir(group, testbed); + osync_group_load(group, "configs/group", &error); + fail_unless(error == NULL, NULL); + + OSyncMember *member = osync_group_nth_member(group, 1); + + OSyncEngine *engine = osync_engine_new(group, &error); + fail_unless(engine != NULL, NULL); + fail_unless(error == NULL, NULL); + + osync_engine_set_schemadir(engine, testbed); + osync_engine_set_plugindir(engine, plugindir); + osync_engine_set_formatdir(engine, formatdir); + + /* This will trigger an error in the mock-sync plugin of member 1 */ + /* in the discover function */ + g_setenv("MOCK_DISCOVER_ERROR", "1", TRUE); + + fail_unless(!osync_engine_discover_and_block(engine, member, &error), NULL); + fail_unless(error != NULL, NULL); + fail_unless(strcmp("MOCK_DISCOVER_ERROR on purpose!", osync_error_print(&error)) == 0, NULL); + osync_error_unref(&error); + + osync_engine_unref(engine); + osync_group_unref(group); + g_free(formatdir); + g_free(plugindir); + + destroy_testbed(testbed); +} +END_TEST + + OSYNC_TESTCASE_START("engine_error") OSYNC_TESTCASE_ADD(engine_error_single_init_error) OSYNC_TESTCASE_ADD(engine_error_double_init_error) @@ -3065,5 +3106,7 @@ OSYNC_TESTCASE_ADD(engine_error_missing_format_plugin) +OSYNC_TESTCASE_ADD(engine_error_discover_error) + OSYNC_TESTCASE_END Modified: trunk/tests/mock-plugin/mock_sync.c ============================================================================== --- trunk/tests/mock-plugin/mock_sync.c Wed Mar 25 19:52:52 2009 (r5315) +++ trunk/tests/mock-plugin/mock_sync.c Wed Mar 25 22:37:09 2009 (r5316) @@ -796,6 +796,13 @@ /* we can set here the capabilities, but for the file-sync * plugin they are static and shipped with opensync */ + + if (mock_get_error(info->memberid, "MOCK_DISCOVER_ERROR")) { + osync_error_set(error, OSYNC_ERROR_EXPECTED, "MOCK_DISCOVER_ERROR on purpose!"); + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + return FALSE; + } + osync_trace(TRACE_EXIT, "%s", __func__); return TRUE; } Modified: trunk/tests/support.c ============================================================================== --- trunk/tests/support.c Wed Mar 25 19:52:52 2009 (r5315) +++ trunk/tests/support.c Wed Mar 25 22:37:09 2009 (r5316) @@ -78,6 +78,8 @@ g_unsetenv("MOCK_SYNC_ALWAYS_CHANGETYPE_MODIFIED"); g_unsetenv("MOCK_FORMAT_PATH_COMPARE_NO"); + + g_unsetenv("MOCK_DISCOVER_ERROR"); } |