From: <svn...@op...> - 2009-03-23 12:10:13
|
Author: bellmich Date: Mon Mar 23 13:10:01 2009 New Revision: 1005 URL: http://libsyncml.opensync.org/changeset/1005 Log: modularized the code Modified: trunk/tests/check_libsoup.c Modified: trunk/tests/check_libsoup.c ============================================================================== --- trunk/tests/check_libsoup.c Mon Mar 23 11:21:24 2009 (r1004) +++ trunk/tests/check_libsoup.c Mon Mar 23 13:10:01 2009 (r1005) @@ -35,6 +35,11 @@ static int server_messages; static int server_errors; +static int client_messages; +static int client_connects; +static int client_disconnects; +static int client_errors; + static void init_testbed() { setup_testbed(NULL); @@ -43,6 +48,11 @@ server_messages = 0; server_errors = 0; + + client_messages = 0; + client_connects = 0; + client_disconnects = 0; + client_errors = 0; } /* dummy callback for the transport queue */ @@ -53,7 +63,10 @@ } #ifdef HAVE_LIBSOUP22 -static void server_callback(SoupServerContext *context, SoupMessage *msg, gpointer data) +static void server_callback( + SoupServerContext *context, + SoupMessage *msg, + gpointer data) #else static void server_callback( SoupServer *server, @@ -89,46 +102,97 @@ #ifdef HAVE_LIBSOUP22 static void client_callback(SoupMessage *msg, gpointer userdata) #else -static void client_callback(SoupSession *session, SoupMessage *msg, gpointer userdata) +static void client_callback( + SoupSession *session, + SoupMessage *msg, + gpointer userdata) #endif { smlTrace(TRACE_ENTRY, "%s(%p)", __func__, msg); + g_atomic_int_inc(&client_messages); smlTrace(TRACE_EXIT, "%s", __func__); } -START_TEST (libsoup_async) +GMainContext *server_ctx; +SmlThread *server_thread; +SmlQueue *queue; +SoupServer *server; +static void init_server(unsigned int port) { - init_testbed(); SmlError *error = NULL; /* prepare asynchronous runtime environment */ - GMainContext *ctx = g_main_context_new(); - sml_fail_unless(ctx != NULL, NULL); - SmlThread *thread = smlThreadNew(ctx, &error); - sml_fail_unless(thread != NULL, "%s", smlErrorPrint(&error)); + server_ctx = g_main_context_new(); + sml_fail_unless(server_ctx != NULL, NULL); + server_thread = smlThreadNew(server_ctx, &error); + sml_fail_unless(server_thread != NULL, "%s", smlErrorPrint(&error)); /* simulate the transport layer behaviour */ - SmlQueue *queue = smlQueueNew(&error); + queue = smlQueueNew(&error); sml_fail_unless(queue != NULL, "%s", smlErrorPrint(&error)); smlQueueSetHandler(queue, (SmlQueueHandler)transport_dummy_callback, NULL); - smlQueueAttach(queue, ctx); + smlQueueAttach(queue, server_ctx); /* create async server */ - SoupServer *server = soup_server_new (SOUP_SERVER_PORT, 13001, SOUP_SERVER_ASYNC_CONTEXT, ctx, NULL); + server = soup_server_new ( + SOUP_SERVER_PORT, port, + SOUP_SERVER_ASYNC_CONTEXT, server_ctx, + NULL); sml_fail_unless(server != NULL, NULL); #ifdef HAVE_LIBSOUP22 - soup_server_add_handler (server, NULL, NULL, server_callback, NULL, NULL); -#else - soup_server_add_handler (server, NULL, server_callback, NULL, NULL); + soup_server_add_handler( + server, NULL, NULL, + server_callback, NULL, NULL); +#else + soup_server_add_handler ( + server, NULL, + server_callback, NULL, NULL); #endif - soup_server_run_async (server); + soup_server_run_async (server); /* start thread */ - smlThreadStart(thread); + smlThreadStart(server_thread); +} + +static void cleanup_server() +{ + /* wait until message was received by server */ + + int64_t sleep_max = 5000000000LL; + int64_t sleep_interval = 50000000; + int64_t sleep_total = 0; + while (server_messages < 1 && server_errors < 1 && sleep_total < sleep_max) + { + sml_sleep(sleep_interval); + sleep_total += sleep_interval; + } + + /* check counter */ + + sml_fail_unless(sleep_total < sleep_max, "timeout detected"); + sml_fail_unless(server_messages == 1, NULL); + sml_fail_unless(server_errors == 0, NULL); + + /* cleanup */ + smlThreadStop(server_thread); + smlThreadFree(server_thread); + g_main_context_unref(server_ctx); + soup_server_quit(server); + g_object_unref(server); + smlQueueFree(queue); + +} + +START_TEST (libsoup_async) +{ + init_testbed(); + SmlError *error = NULL; + + init_server(13001); /* prepare message */ @@ -164,24 +228,8 @@ soup_session_queue_message(session, msg, client_callback, NULL); #endif - /* wait until message was received by server */ - - int64_t sleep_max = 5000000000LL; - int64_t sleep_interval = 50000000; - int64_t sleep_total = 0; - while (server_messages < 1 && server_errors < 1 && sleep_total < sleep_max) - { - sml_sleep(sleep_interval); - sleep_total += sleep_interval; - } - - /* check counter */ - - sml_fail_unless(sleep_total < sleep_max, "timeout detected"); - sml_fail_unless(server_messages == 1, NULL); - sml_fail_unless(server_errors == 0, NULL); - /* cleanup */ + cleanup_server(); soup_session_abort(session); g_object_unref(session); #ifndef HAVE_LIBSOUP22_SOLARIS @@ -189,13 +237,6 @@ smlThreadFree(client_thread); g_main_context_unref(client_ctx); #endif - - smlThreadStop(thread); - smlThreadFree(thread); - g_main_context_unref(ctx); - soup_server_quit(server); - g_object_unref(server); - smlQueueFree(queue); } END_TEST |