From 02752ac1958daa7ecf257762bc345cdf45569896 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Fri, 11 Jun 2010 15:26:53 -0400 Subject: [PATCH] Allow calling soup_test_server_new() multiple times in test programs --- tests/auth-test.c | 1 + tests/chunk-test.c | 1 + tests/coding-test.c | 1 + tests/context-test.c | 1 + tests/continue-test.c | 1 + tests/cookies-test.c | 1 + tests/forms-test.c | 1 + tests/libsoup.supp | 12 +++++++++ tests/misc-test.c | 1 + tests/ntlm-test.c | 1 + tests/proxy-test.c | 1 + tests/range-test.c | 1 + tests/redirect-test.c | 1 + tests/server-auth-test.c | 1 + tests/sniffing-test.c | 1 + tests/streaming-test.c | 1 + tests/test-utils.c | 63 ++++++++++++++++++++++------------------------ tests/test-utils.h | 5 ++-- tests/timeout-test.c | 2 ++ tests/xmlrpc-server-test.c | 1 + 20 files changed, 63 insertions(+), 35 deletions(-) diff --git a/tests/auth-test.c b/tests/auth-test.c index 15dcd59..cd72d49 100644 --- a/tests/auth-test.c +++ b/tests/auth-test.c @@ -822,6 +822,7 @@ do_select_auth_test (void) g_object_unref (basic_auth_domain); g_object_unref (digest_auth_domain); soup_uri_free (uri); + soup_test_server_quit_unref (server); } int diff --git a/tests/chunk-test.c b/tests/chunk-test.c index 8ce286b..a679cce 100644 --- a/tests/chunk-test.c +++ b/tests/chunk-test.c @@ -381,6 +381,7 @@ main (int argc, char **argv) soup_uri_free (base_uri); g_main_loop_unref (loop); + soup_test_server_quit_unref (server); test_cleanup (); return errors != 0; diff --git a/tests/coding-test.c b/tests/coding-test.c index 288052e..b587a2c 100644 --- a/tests/coding-test.c +++ b/tests/coding-test.c @@ -192,6 +192,7 @@ main (int argc, char **argv) do_coding_test (); soup_uri_free (base_uri); + soup_test_server_quit_unref (server); test_cleanup (); return errors != 0; diff --git a/tests/context-test.c b/tests/context-test.c index fc203b3..fe9af31 100644 --- a/tests/context-test.c +++ b/tests/context-test.c @@ -270,6 +270,7 @@ main (int argc, char **argv) do_test2 (); g_free (base_uri); + soup_test_server_quit_unref (server); test_cleanup (); return errors != 0; diff --git a/tests/continue-test.c b/tests/continue-test.c index d9a94a2..dafe182 100644 --- a/tests/continue-test.c +++ b/tests/continue-test.c @@ -451,6 +451,7 @@ main (int argc, char **argv) run_tests (); + soup_test_server_quit_unref (server); test_cleanup (); return errors != 0; } diff --git a/tests/cookies-test.c b/tests/cookies-test.c index fa9f5b0..2b8ebb1 100644 --- a/tests/cookies-test.c +++ b/tests/cookies-test.c @@ -114,6 +114,7 @@ main (int argc, char **argv) soup_uri_free (first_party_uri); soup_uri_free (third_party_uri); + soup_test_server_quit_unref (server); test_cleanup (); diff --git a/tests/forms-test.c b/tests/forms-test.c index 8a7443c..d18ee59 100644 --- a/tests/forms-test.c +++ b/tests/forms-test.c @@ -432,6 +432,7 @@ main (int argc, char **argv) g_main_loop_unref (loop); + soup_test_server_quit_unref (server); if (run_tests) test_cleanup (); return errors != 0; diff --git a/tests/libsoup.supp b/tests/libsoup.supp index 35af861..65eb3c3 100644 --- a/tests/libsoup.supp +++ b/tests/libsoup.supp @@ -7,12 +7,24 @@ fun:g_type_init } { + glib/g_type_init_with_debug_flags + Memcheck:Leak + ... + fun:g_type_init_with_debug_flags +} +{ glib/g_thread_init Memcheck:Leak ... fun:g_thread_init } { + glib/g_thread_init_glib + Memcheck:Leak + ... + fun:g_thread_init_glib +} +{ glib/g_type_register_static Memcheck:Leak ... diff --git a/tests/misc-test.c b/tests/misc-test.c index ae97b99..dabbb06 100644 --- a/tests/misc-test.c +++ b/tests/misc-test.c @@ -500,6 +500,7 @@ main (int argc, char **argv) do_early_abort_test (); soup_uri_free (base_uri); + soup_test_server_quit_unref (server); test_cleanup (); return errors != 0; diff --git a/tests/ntlm-test.c b/tests/ntlm-test.c index bbec037..3c555ee 100644 --- a/tests/ntlm-test.c +++ b/tests/ntlm-test.c @@ -427,6 +427,7 @@ main (int argc, char **argv) g_main_loop_unref (loop); + soup_test_server_quit_unref (server); test_cleanup (); g_hash_table_destroy (connections); diff --git a/tests/proxy-test.c b/tests/proxy-test.c index d23e7d1..68c1de8 100644 --- a/tests/proxy-test.c +++ b/tests/proxy-test.c @@ -228,6 +228,7 @@ main (int argc, char **argv) do_proxy_fragment_test (base_uri); soup_uri_free (base_uri); + soup_test_server_quit_unref (server); test_cleanup (); return errors != 0; } diff --git a/tests/range-test.c b/tests/range-test.c index b4f27f9..d7ba922 100644 --- a/tests/range-test.c +++ b/tests/range-test.c @@ -365,6 +365,7 @@ main (int argc, char **argv) soup_server_get_port (server)); do_range_test (session, base_uri, TRUE); g_free (base_uri); + soup_test_server_quit_unref (server); soup_test_session_abort_unref (session); diff --git a/tests/redirect-test.c b/tests/redirect-test.c index 24aefc4..aa7b05b 100644 --- a/tests/redirect-test.c +++ b/tests/redirect-test.c @@ -348,6 +348,7 @@ main (int argc, char **argv) } g_main_loop_unref (loop); + soup_test_server_quit_unref (server); if (run_tests) test_cleanup (); diff --git a/tests/server-auth-test.c b/tests/server-auth-test.c index e4c84bd..4122b16 100644 --- a/tests/server-auth-test.c +++ b/tests/server-auth-test.c @@ -375,6 +375,7 @@ main (int argc, char **argv) } g_main_loop_unref (loop); + soup_test_server_quit_unref (server); if (run_tests) test_cleanup (); diff --git a/tests/sniffing-test.c b/tests/sniffing-test.c index 1bab24c..60ca389 100644 --- a/tests/sniffing-test.c +++ b/tests/sniffing-test.c @@ -569,6 +569,7 @@ main (int argc, char **argv) soup_uri_free (base_uri); soup_test_session_abort_unref (session); + soup_test_server_quit_unref (server); test_cleanup (); return errors != 0; } diff --git a/tests/streaming-test.c b/tests/streaming-test.c index 1389a62..869a7b6 100644 --- a/tests/streaming-test.c +++ b/tests/streaming-test.c @@ -184,6 +184,7 @@ main (int argc, char **argv) g_free (full_response); g_free (full_response_md5); + soup_test_server_quit_unref (server); test_cleanup (); return errors != 0; } diff --git a/tests/test-utils.c b/tests/test-utils.c index ee3e1c0..750da72 100644 --- a/tests/test-utils.c +++ b/tests/test-utils.c @@ -14,9 +14,6 @@ #ifdef HAVE_APACHE static gboolean apache_running; #endif -static SoupServer *test_server; -static GThread *server_thread; -static void test_server_shutdown (void); static SoupLogger *logger; @@ -57,8 +54,6 @@ quit (int sig) if (apache_running) apache_cleanup (); #endif - if (test_server) - test_server_shutdown (); exit (1); } @@ -122,8 +117,6 @@ test_cleanup (void) if (apache_running) apache_cleanup (); #endif - if (test_server) - test_server_shutdown (); if (logger) g_object_unref (logger); @@ -268,13 +261,11 @@ static gpointer run_server_thread (gpointer user_data); static SoupServer * test_server_new (gboolean in_own_thread, gboolean ssl) { + SoupServer *server; GMainContext *async_context; const char *ssl_cert_file, *ssl_key_file; SoupAddress *addr; - if (test_server) - test_server_shutdown (); - async_context = in_own_thread ? g_main_context_new () : NULL; if (ssl) { @@ -286,27 +277,30 @@ test_server_new (gboolean in_own_thread, gboolean ssl) addr = soup_address_new ("127.0.0.1", SOUP_ADDRESS_ANY_PORT); soup_address_resolve_sync (addr, NULL); - test_server = soup_server_new (SOUP_SERVER_INTERFACE, addr, - SOUP_SERVER_ASYNC_CONTEXT, async_context, - SOUP_SERVER_SSL_CERT_FILE, ssl_cert_file, - SOUP_SERVER_SSL_KEY_FILE, ssl_key_file, - NULL); + server = soup_server_new (SOUP_SERVER_INTERFACE, addr, + SOUP_SERVER_ASYNC_CONTEXT, async_context, + SOUP_SERVER_SSL_CERT_FILE, ssl_cert_file, + SOUP_SERVER_SSL_KEY_FILE, ssl_key_file, + NULL); g_object_unref (addr); if (async_context) g_main_context_unref (async_context); - if (!test_server) { + if (!server) { fprintf (stderr, "Unable to create server\n"); exit (1); } if (in_own_thread) { - server_thread = g_thread_create (run_server_thread, test_server, - TRUE, NULL); + GThread *thread; + + thread = g_thread_create (run_server_thread, server, + TRUE, NULL); + g_object_set_data (G_OBJECT (server), "thread", thread); } else - soup_server_run_async (test_server); + soup_server_run_async (server); - return test_server; + return server; } SoupServer * @@ -337,24 +331,27 @@ idle_quit_server (gpointer server) return FALSE; } -static void -test_server_shutdown (void) +void +soup_test_server_quit_unref (SoupServer *server) { - g_object_add_weak_pointer (G_OBJECT (test_server), - (gpointer *)&test_server); + GThread *thread; + + g_object_add_weak_pointer (G_OBJECT (server), + (gpointer *)&server); - if (server_thread) { - soup_add_completion (soup_server_get_async_context (test_server), - idle_quit_server, test_server); - g_thread_join (server_thread); + thread = g_object_get_data (G_OBJECT (server), "thread"); + if (thread) { + soup_add_completion (soup_server_get_async_context (server), + idle_quit_server, server); + g_thread_join (thread); } else - soup_server_quit (test_server); - g_object_unref (test_server); + soup_server_quit (server); + g_object_unref (server); - if (test_server) { + if (server) { errors++; debug_printf (1, "leaked SoupServer!\n"); - g_object_remove_weak_pointer (G_OBJECT (test_server), - (gpointer *)&test_server); + g_object_remove_weak_pointer (G_OBJECT (server), + (gpointer *)&server); } } diff --git a/tests/test-utils.h b/tests/test-utils.h index add5366..f609eaf 100644 --- a/tests/test-utils.h +++ b/tests/test-utils.h @@ -19,5 +19,6 @@ void apache_cleanup (void); SoupSession *soup_test_session_new (GType type, ...); void soup_test_session_abort_unref (SoupSession *session); -SoupServer *soup_test_server_new (gboolean in_own_thread); -SoupServer *soup_test_server_new_ssl (gboolean in_own_thread); +SoupServer *soup_test_server_new (gboolean in_own_thread); +SoupServer *soup_test_server_new_ssl (gboolean in_own_thread); +void soup_test_server_quit_unref (SoupServer *server); diff --git a/tests/timeout-test.c b/tests/timeout-test.c index 663df8e..3bca7ba 100644 --- a/tests/timeout-test.c +++ b/tests/timeout-test.c @@ -98,6 +98,7 @@ main (int argc, char **argv) do_timeout_tests (fast_uri, slow_uri); g_free (fast_uri); g_free (slow_uri); + soup_test_server_quit_unref (server); #ifdef HAVE_SSL debug_printf (1, "https\n"); @@ -110,6 +111,7 @@ main (int argc, char **argv) do_timeout_tests (fast_uri, slow_uri); g_free (fast_uri); g_free (slow_uri); + soup_test_server_quit_unref (server); #endif test_cleanup (); diff --git a/tests/xmlrpc-server-test.c b/tests/xmlrpc-server-test.c index 8f20f99..02751f1 100644 --- a/tests/xmlrpc-server-test.c +++ b/tests/xmlrpc-server-test.c @@ -332,6 +332,7 @@ main (int argc, char **argv) g_main_loop_run (loop); g_main_loop_unref (loop); + soup_test_server_quit_unref (server); if (run_tests) test_cleanup (); return errors != 0; -- 2.7.4