[libsoup] Allow calling soup_test_server_new() multiple times in test programs



commit 02752ac1958daa7ecf257762bc345cdf45569896
Author: Dan Winship <danw gnome org>
Date:   Fri Jun 11 15:26:53 2010 -0400

    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;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]