summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2015-03-02 21:28:18 -0500
committerDan Winship <danw@gnome.org>2015-03-02 21:28:42 -0500
commit3401c861f83c0822ab97fe9d169e8dcebd52da23 (patch)
tree0c44bcb561b11803530ac0f129922d27532aa2f6
parent1c3983f6d0b4097492963f57dd1453f32616c3a3 (diff)
downloadlibsoup-3401c861f83c0822ab97fe9d169e8dcebd52da23.tar.gz
tests: plug leaks, update libsoup.supp
-rw-r--r--tests/cache-test.c3
-rw-r--r--tests/date.c2
-rw-r--r--tests/libsoup.supp88
-rw-r--r--tests/misc-test.c33
-rw-r--r--tests/proxy-test.c2
-rw-r--r--tests/redirect-test.c1
-rw-r--r--tests/requester-test.c2
-rw-r--r--tests/server-test.c9
-rw-r--r--tests/session-test.c2
-rw-r--r--tests/socket-test.c4
-rw-r--r--tests/test-utils.c46
-rw-r--r--tests/timeout-test.c2
-rw-r--r--tests/websocket-test.c18
13 files changed, 176 insertions, 36 deletions
diff --git a/tests/cache-test.c b/tests/cache-test.c
index ec99a2dd..7d5897c0 100644
--- a/tests/cache-test.c
+++ b/tests/cache-test.c
@@ -240,7 +240,8 @@ do_request_with_cancel (SoupSession *session,
g_object_unref (stream);
g_object_unref (req);
return;
- }
+ } else
+ g_clear_error (&error);
g_clear_object (&cancellable);
g_clear_object (&stream);
diff --git a/tests/date.c b/tests/date.c
index e51fa57f..55fc8ebc 100644
--- a/tests/date.c
+++ b/tests/date.c
@@ -177,6 +177,8 @@ check_ok_time_t (void)
g_assert_cmpint (date->hour, ==, 8);
g_assert_cmpint (date->minute, ==, 9);
g_assert_cmpint (date->second, ==, 7);
+
+ soup_date_free (date);
}
typedef struct {
diff --git a/tests/libsoup.supp b/tests/libsoup.supp
index ae8bda38..2c7ba9b5 100644
--- a/tests/libsoup.supp
+++ b/tests/libsoup.supp
@@ -208,13 +208,20 @@
glib/tlsdb
Memcheck:Leak
...
- fun:g_tls_backend_get_default_database
+ fun:g_tls_backend_gnutls_get_default_database
+}
+{
+ glib/tlsdb_dummy
+ Memcheck:Leak
+ ...
+ fun:g_dummy_tls_backend_get_default_database
}
{
glib/tlscache
Memcheck:Leak
...
- fun:g_tls_backend_gnutls_cache_session_data
+ fun:g_bytes_new_with_free_func
+ fun:g_tls_client_connection_gnutls_constructed
}
{
glib/tlspriority
@@ -230,6 +237,12 @@
fun:lookup_attribute
}
{
+ glib/gfileinfo2
+ Memcheck:Leak
+ ...
+ fun:_lookup_namespace
+}
+{
glib/unixsignalthread
Memcheck:Leak
...
@@ -312,7 +325,7 @@
glib/unused_thread_queue
Memcheck:Leak
...
- fun:g_async_queue_new
+ fun:g_async_queue_new_full
fun:g_thread_pool_new
}
{
@@ -336,6 +349,18 @@
fun:g_get_charset
}
{
+ glib/tmpdir
+ Memcheck:Leak
+ ...
+ fun:g_get_tmp_dir
+}
+{
+ glib/g_get_user_name
+ Memcheck:Leak
+ ...
+ fun:g_get_user_name
+}
+{
glib/gtlssessioncache
Memcheck:Leak
...
@@ -414,6 +439,30 @@
fun:g_thread_pool_new
fun:g_task_thread_pool_init
}
+{
+ glib/resources
+ Memcheck:Leak
+ ...
+ fun:g_resource_load
+}
+{
+ glib/resources2
+ Memcheck:Leak
+ ...
+ fun:g_resources_register
+}
+{
+ glib/worker
+ Memcheck:Leak
+ ...
+ fun:g_get_worker_context
+}
+{
+ glib/worker2
+ Memcheck:Leak
+ ...
+ fun:glib_worker_main
+}
# probably inlines the aggressive memcpy/memcmp
{
@@ -444,10 +493,16 @@
}
{
- libxml2/xmlInitParser
+ libxml2/xmlInitGlobals
+ Memcheck:Leak
+ ...
+ fun:xmlInitGlobals
+}
+{
+ libxml2/xmlInitMemory
Memcheck:Leak
...
- fun:xmlInitParser
+ fun:xmlInitMemory
}
{
libxml2/xmlInitParserCtxt
@@ -459,7 +514,7 @@
libxml2/xmlInitializeDict
Memcheck:Leak
...
- fun:xmlInitializeDict
+ fun:__xmlInitializeDict
}
{
libxml2/xmlInitCharEncodingHandlers
@@ -504,6 +559,20 @@
fun:g_mutex_get_impl
}
{
+ glib/grecmuteximpl
+ Memcheck:Leak
+ ...
+ fun:g_rec_mutex_impl_new
+ fun:g_rec_mutex_get_impl
+}
+{
+ glib/grwlockimpl
+ Memcheck:Leak
+ ...
+ fun:g_rw_lock_impl_new
+ fun:g_rw_lock_get_impl
+}
+{
glib/gcondimpl
Memcheck:Leak
...
@@ -517,3 +586,10 @@
fun:g_private_impl_new
fun:g_private_get_impl
}
+{
+ glib/test_uri_base
+ Memcheck:Leak
+ ...
+ fun:g_strdup
+ fun:test_case_run
+} \ No newline at end of file
diff --git a/tests/misc-test.c b/tests/misc-test.c
index 4dab6fe8..6d43bd7f 100644
--- a/tests/misc-test.c
+++ b/tests/misc-test.c
@@ -976,11 +976,10 @@ do_pause_cancel_test (void)
g_source_remove (timeout_id);
}
-static void
-steal_after_upgrade (SoupMessage *msg, gpointer user_data)
+static gboolean
+run_echo_server (gpointer user_data)
{
- SoupClientContext *context = user_data;
- GIOStream *stream;
+ GIOStream *stream = user_data;
GInputStream *istream;
GDataInputStream *distream;
GOutputStream *ostream;
@@ -988,11 +987,6 @@ steal_after_upgrade (SoupMessage *msg, gpointer user_data)
gssize n;
GError *error = NULL;
- /* This should not ever be seen. */
- soup_message_set_status (msg, SOUP_STATUS_INTERNAL_SERVER_ERROR);
-
- stream = soup_client_context_steal_connection (context);
-
istream = g_io_stream_get_input_stream (stream);
distream = G_DATA_INPUT_STREAM (g_data_input_stream_new (istream));
ostream = g_io_stream_get_output_stream (stream);
@@ -1020,6 +1014,26 @@ steal_after_upgrade (SoupMessage *msg, gpointer user_data)
g_io_stream_close (stream, NULL, &error);
g_assert_no_error (error);
g_object_unref (stream);
+
+ return FALSE;
+}
+
+static void
+steal_after_upgrade (SoupMessage *msg, gpointer user_data)
+{
+ SoupClientContext *context = user_data;
+ GIOStream *stream;
+ GSource *source;
+
+ /* This should not ever be seen. */
+ soup_message_set_status (msg, SOUP_STATUS_INTERNAL_SERVER_ERROR);
+
+ stream = soup_client_context_steal_connection (context);
+
+ source = g_idle_source_new ();
+ g_source_set_callback (source, run_echo_server, stream, NULL);
+ g_source_attach (source, g_main_context_get_thread_default ());
+ g_source_unref (source);
}
static void
@@ -1196,5 +1210,6 @@ main (int argc, char **argv)
soup_test_server_quit_unref (ssl_server);
}
+ test_cleanup ();
return ret;
}
diff --git a/tests/proxy-test.c b/tests/proxy-test.c
index e898a0bf..26325517 100644
--- a/tests/proxy-test.c
+++ b/tests/proxy-test.c
@@ -360,6 +360,8 @@ main (int argc, char **argv)
soup_uri_free (base_uri);
soup_test_server_quit_unref (server);
+ for (i = 0; i < 3; i++)
+ g_object_unref (proxy_resolvers[i]);
test_cleanup ();
return ret;
diff --git a/tests/redirect-test.c b/tests/redirect-test.c
index 6b165e82..ccdd4c29 100644
--- a/tests/redirect-test.c
+++ b/tests/redirect-test.c
@@ -458,5 +458,6 @@ main (int argc, char **argv)
soup_test_session_abort_unref (async_session);
soup_test_session_abort_unref (sync_session);
+ test_cleanup ();
return ret;
}
diff --git a/tests/requester-test.c b/tests/requester-test.c
index 506bb7f5..04c1d02f 100644
--- a/tests/requester-test.c
+++ b/tests/requester-test.c
@@ -747,6 +747,7 @@ do_close_test_for_session (SoupSession *session,
if (error)
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED);
g_clear_error (&error);
+ g_object_unref (cancellable);
g_assert_true (finished);
@@ -831,7 +832,6 @@ main (int argc, char **argv)
ret = g_test_run ();
soup_uri_free (uri);
- soup_buffer_free (response);
soup_buffer_free (auth_response);
soup_test_server_quit_unref (server);
diff --git a/tests/server-test.c b/tests/server-test.c
index 80ad03ef..9e46bb59 100644
--- a/tests/server-test.c
+++ b/tests/server-test.c
@@ -831,6 +831,7 @@ do_fail_404_test (ServerData *sd, gconstpointer test_data)
msg = soup_message_new_from_uri ("GET", sd->base_uri);
soup_session_send_message (session, msg);
soup_test_assert_message_status (msg, SOUP_STATUS_NOT_FOUND);
+ g_object_unref (msg);
g_assert_false (usd.handler_called);
g_assert_false (usd.paused);
@@ -855,6 +856,7 @@ do_fail_500_test (ServerData *sd, gconstpointer pause)
soup_message_headers_append (msg->request_headers, "X-Test-Server-Pause", "true");
soup_session_send_message (session, msg);
soup_test_assert_message_status (msg, SOUP_STATUS_INTERNAL_SERVER_ERROR);
+ g_object_unref (msg);
g_assert_true (usd.handler_called);
if (pause)
@@ -1097,8 +1099,8 @@ tunnel_close (Tunnel *tunnel)
g_free (tunnel->client.buffer);
g_free (tunnel->server.buffer);
- g_object_unref (tunnel->self);
- g_object_unref (tunnel->msg);
+ g_clear_object (&tunnel->self);
+ g_clear_object (&tunnel->msg);
g_free (tunnel);
}
@@ -1196,6 +1198,8 @@ start_tunnel (SoupMessage *msg, gpointer user_data)
tunnel->client.iostream = soup_client_context_steal_connection (tunnel->context);
tunnel->client.istream = g_io_stream_get_input_stream (tunnel->client.iostream);
tunnel->client.ostream = g_io_stream_get_output_stream (tunnel->client.iostream);
+ g_clear_object (&tunnel->self);
+ g_clear_object (&tunnel->msg);
tunnel->client.buffer = g_malloc (BUFSIZE);
tunnel->server.buffer = g_malloc (BUFSIZE);
@@ -1296,6 +1300,7 @@ do_steal_connect_test (ServerData *sd, gconstpointer test_data)
g_object_unref (msg);
soup_test_session_abort_unref (session);
+
soup_test_server_quit_unref (proxy);
soup_uri_free (proxy_uri);
}
diff --git a/tests/session-test.c b/tests/session-test.c
index 84fe35b4..8957a258 100644
--- a/tests/session-test.c
+++ b/tests/session-test.c
@@ -101,6 +101,7 @@ do_test_for_session (SoupSession *session, SoupURI *uri,
server_processed_message = local_timeout = FALSE;
timeout_id = g_idle_add_full (G_PRIORITY_HIGH, timeout_cb, &local_timeout, NULL);
soup_session_send_message (session, msg);
+ g_object_unref (msg);
g_assert_true (server_processed_message);
@@ -139,6 +140,7 @@ do_test_for_session (SoupSession *session, SoupURI *uri,
while (!finished)
g_main_context_iteration (NULL, TRUE);
}
+ g_main_loop_unref (loop);
soup_test_assert_message_status (msg, SOUP_STATUS_CANCELLED);
g_object_unref (msg);
diff --git a/tests/socket-test.c b/tests/socket-test.c
index 52a8fbbf..9e32ca6f 100644
--- a/tests/socket-test.c
+++ b/tests/socket-test.c
@@ -167,7 +167,8 @@ do_socket_from_fd_client_test (void)
g_object_unref (sock);
g_object_unref (gsock);
- g_object_unref (server);
+ soup_test_server_quit_unref (server);
+ soup_uri_free (uri);
}
static void
@@ -214,6 +215,7 @@ do_socket_from_fd_server_test (void)
g_assert_cmpstr (soup_address_get_physical (local), ==, "127.0.0.1");
g_assert_cmpint (soup_address_get_port (local), ==, g_inet_socket_address_get_port (G_INET_SOCKET_ADDRESS (gaddr)));
g_object_unref (local);
+ g_object_unref (gaddr);
g_object_unref (sock);
diff --git a/tests/test-utils.c b/tests/test-utils.c
index 02455ccf..ad0410c1 100644
--- a/tests/test-utils.c
+++ b/tests/test-utils.c
@@ -66,6 +66,7 @@ test_init (int argc, char **argv, GOptionEntry *entries)
setlocale (LC_ALL, "");
g_setenv ("GSETTINGS_BACKEND", "memory", TRUE);
g_setenv ("GIO_USE_PROXY_RESOLVER", "dummy", TRUE);
+ g_setenv ("GIO_USE_VFS", "local", TRUE);
name = strrchr (argv[0], '/');
if (!name++)
@@ -444,10 +445,6 @@ soup_test_server_get_uri (SoupServer *server,
return uri;
/* Need to add a new listener */
- uri = soup_uri_new (NULL);
- soup_uri_set_scheme (uri, scheme);
- soup_uri_set_host (uri, host);
-
loop = g_object_get_data (G_OBJECT (server), "GMainLoop");
if (loop) {
GMainContext *context = g_main_loop_get_context (loop);
@@ -477,8 +474,39 @@ soup_test_server_get_uri (SoupServer *server,
}
static gboolean
-idle_quit_server (gpointer loop)
+done_waiting (gpointer user_data)
{
+ gboolean *done = user_data;
+
+ *done = TRUE;
+ return FALSE;
+}
+
+static void
+disconnect_and_wait (SoupServer *server,
+ GMainContext *context)
+{
+ GSource *source;
+ gboolean done = FALSE;
+
+ source = g_idle_source_new ();
+ g_source_set_priority (source, G_PRIORITY_LOW);
+ g_source_set_callback (source, done_waiting, &done, NULL);
+ g_source_attach (source, context);
+ g_source_unref (source);
+
+ soup_server_disconnect (server);
+ while (!done)
+ g_main_context_iteration (context, TRUE);
+}
+
+static gboolean
+idle_quit_server (gpointer user_data)
+{
+ SoupServer *server = user_data;
+ GMainLoop *loop = g_object_get_data (G_OBJECT (server), "GMainLoop");
+
+ disconnect_and_wait (server, g_main_loop_get_context (loop));
g_main_loop_quit (loop);
return FALSE;
}
@@ -495,10 +523,12 @@ soup_test_server_quit_unref (SoupServer *server)
loop = g_object_get_data (G_OBJECT (server), "GMainLoop");
context = g_main_loop_get_context (loop);
- soup_add_completion (context, idle_quit_server, loop);
+ g_main_context_ref (context);
+ soup_add_completion (context, idle_quit_server, server);
+ g_main_context_unref (context);
g_thread_join (thread);
} else
- soup_server_disconnect (server);
+ disconnect_and_wait (server, NULL);
g_assert_cmpint (G_OBJECT (server)->ref_count, ==, 1);
g_object_unref (server);
@@ -610,7 +640,7 @@ soup_test_request_send (SoupRequest *req,
g_timeout_add_full (G_PRIORITY_HIGH, interval, cancel_request_timeout, cancel_data, NULL);
}
if (cancel_data && (flags & SOUP_TEST_REQUEST_CANCEL_PREEMPTIVE))
- g_cancellable_cancel (cancellable);
+ cancel_message_or_cancellable (cancel_data);
soup_request_send_async (req, cancellable, async_as_sync_callback, &data);
g_main_loop_run (data.loop);
diff --git a/tests/timeout-test.c b/tests/timeout-test.c
index afb2c591..c783d9ab 100644
--- a/tests/timeout-test.c
+++ b/tests/timeout-test.c
@@ -265,6 +265,8 @@ do_sync_timeout_tests (gconstpointer data)
do_req_tests_for_session (timeout_session, NULL, plain_session, fast_uri, slow_uri);
soup_test_session_abort_unref (timeout_session);
soup_test_session_abort_unref (plain_session);
+
+ soup_uri_free (slow_uri);
}
static gboolean
diff --git a/tests/websocket-test.c b/tests/websocket-test.c
index aee8bfc6..78dced57 100644
--- a/tests/websocket-test.c
+++ b/tests/websocket-test.c
@@ -112,6 +112,7 @@ direct_connection_complete (GObject *object,
SOUP_WEBSOCKET_CONNECTION_CLIENT,
NULL, NULL);
soup_uri_free (uri);
+ g_object_unref (conn);
}
static gboolean
@@ -140,6 +141,7 @@ got_connection (GSocket *listener,
SOUP_WEBSOCKET_CONNECTION_SERVER,
NULL, NULL);
soup_uri_free (uri);
+ g_object_unref (conn);
}
return FALSE;
@@ -162,7 +164,7 @@ setup_direct_connection (Test *test,
g_source_set_callback (listen_source, (GSourceFunc) got_connection, test, NULL);
g_source_attach (listen_source, NULL);
- while (test->client == NULL || (test->server == NULL && !test->no_server))
+ while (test->client == NULL || (test->server == NULL && test->raw_server == NULL))
g_main_context_iteration (NULL, TRUE);
g_source_destroy (listen_source);
@@ -267,14 +269,12 @@ static void
teardown_soup_connection (Test *test,
gconstpointer data)
{
- g_clear_object (&test->client);
- g_clear_error (&test->client_error);
-
- if (test->session)
- soup_test_session_abort_unref (test->session);
+ teardown_direct_connection (test, data);
- if (test->soup_server)
- soup_test_server_quit_unref (test->soup_server);
+ g_clear_object (&test->msg);
+ g_clear_error (&test->client_error);
+ g_clear_pointer (&test->session, soup_test_session_abort_unref);
+ g_clear_pointer (&test->soup_server, soup_test_server_quit_unref);
}
@@ -779,6 +779,8 @@ test_receive_fragmented (Test *test,
g_bytes_unref (received);
g_thread_join (thread);
+
+ WAIT_UNTIL (soup_websocket_connection_get_state (test->client) == SOUP_WEBSOCKET_STATE_CLOSED);
}
int