[glib] Move a unit test to the right file
- From: Paolo Borelli <pborelli src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] Move a unit test to the right file
- Date: Sun, 19 Jul 2015 22:09:04 +0000 (UTC)
commit 45e99833e39af76ec9db13bb9d9edcaf3a719870
Author: Paolo Borelli <pborelli gnome org>
Date: Sun Jul 19 23:47:57 2015 +0200
Move a unit test to the right file
Move a test for threaded socket service to socket-service.c.
gio/tests/socket-listener.c | 134 ------------------------------------------
gio/tests/socket-service.c | 136 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 136 insertions(+), 134 deletions(-)
---
diff --git a/gio/tests/socket-listener.c b/gio/tests/socket-listener.c
index 5a58206..519d9a9 100644
--- a/gio/tests/socket-listener.c
+++ b/gio/tests/socket-listener.c
@@ -83,139 +83,6 @@ test_event_signal (void)
g_object_unref (listener);
}
-GMutex mutex_712570;
-GCond cond_712570;
-volatile gboolean finalized;
-
-GType test_threaded_socket_service_get_type (void);
-typedef GThreadedSocketService TestThreadedSocketService;
-typedef GThreadedSocketServiceClass TestThreadedSocketServiceClass;
-
-G_DEFINE_TYPE (TestThreadedSocketService, test_threaded_socket_service, G_TYPE_THREADED_SOCKET_SERVICE);
-
-static void
-test_threaded_socket_service_init (TestThreadedSocketService *service)
-{
-}
-
-static void
-test_threaded_socket_service_finalize (GObject *object)
-{
- G_OBJECT_CLASS (test_threaded_socket_service_parent_class)->finalize (object);
-
- /* Signal the main thread that finalization completed successfully
- * rather than hanging.
- */
- finalized = TRUE;
- g_cond_signal (&cond_712570);
- g_mutex_unlock (&mutex_712570);
-}
-
-static void
-test_threaded_socket_service_class_init (TestThreadedSocketServiceClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = test_threaded_socket_service_finalize;
-}
-
-static gboolean
-connection_cb (GThreadedSocketService *service,
- GSocketConnection *connection,
- GObject *source_object,
- gpointer user_data)
-{
- /* Block until the main thread has dropped its ref to @service, so that we
- * will drop the final ref from this thread.
- */
- g_mutex_lock (&mutex_712570);
-
- /* The service should now have 1 ref owned by the current "run"
- * signal emission, and another added by GThreadedSocketService for
- * this thread. Both will be dropped after we return.
- */
- g_assert_cmpint (G_OBJECT (service)->ref_count, ==, 2);
-
- return FALSE;
-}
-
-static void
-client_connected_cb (GObject *client,
- GAsyncResult *result,
- gpointer user_data)
-{
- GMainLoop *loop = user_data;
- GSocketConnection *conn;
- GError *error = NULL;
-
- conn = g_socket_client_connect_finish (G_SOCKET_CLIENT (client), result, &error);
- g_assert_no_error (error);
-
- g_object_unref (conn);
- g_main_loop_quit (loop);
-}
-
-static void
-test_threaded_712570 (void)
-{
- GSocketService *service;
- GSocketAddress *addr, *listening_addr;
- GMainLoop *loop;
- GSocketClient *client;
- GError *error = NULL;
-
- g_test_bug ("712570");
-
- g_mutex_lock (&mutex_712570);
-
- service = g_object_new (test_threaded_socket_service_get_type (), NULL);
-
- addr = g_inet_socket_address_new_from_string ("127.0.0.1", 0);
- g_socket_listener_add_address (G_SOCKET_LISTENER (service),
- addr,
- G_SOCKET_TYPE_STREAM,
- G_SOCKET_PROTOCOL_TCP,
- NULL,
- &listening_addr,
- &error);
- g_assert_no_error (error);
- g_object_unref (addr);
-
- g_signal_connect (service, "run", G_CALLBACK (connection_cb), NULL);
-
- loop = g_main_loop_new (NULL, FALSE);
-
- client = g_socket_client_new ();
- g_socket_client_connect_async (client,
- G_SOCKET_CONNECTABLE (listening_addr),
- NULL,
- client_connected_cb, loop);
- g_object_unref (client);
- g_object_unref (listening_addr);
-
- g_main_loop_run (loop);
- g_main_loop_unref (loop);
-
- /* Stop the service and then wait for it to asynchronously cancel
- * its outstanding accept() call (and drop the associated ref).
- * At least one main context iteration is required in some circumstances
- * to ensure that the cancellation actually happens.
- */
- g_socket_service_stop (G_SOCKET_SERVICE (service));
- do
- g_main_context_iteration (NULL, TRUE);
- while (G_OBJECT (service)->ref_count > 3);
-
- /* Drop our ref, then unlock the mutex and wait for the service to be
- * finalized. (Without the fix for 712570 it would hang forever here.)
- */
- g_object_unref (service);
-
- while (!finalized)
- g_cond_wait (&cond_712570, &mutex_712570);
- g_mutex_unlock (&mutex_712570);
-}
-
int
main (int argc,
char *argv[])
@@ -225,7 +92,6 @@ main (int argc,
g_test_bug_base ("http://bugzilla.gnome.org/");
g_test_add_func ("/socket-listener/event-signal", test_event_signal);
- g_test_add_func ("/socket-listener/threaded/712570", test_threaded_712570);
return g_test_run();
}
diff --git a/gio/tests/socket-service.c b/gio/tests/socket-service.c
index cb9f6bd..f14cedf 100644
--- a/gio/tests/socket-service.c
+++ b/gio/tests/socket-service.c
@@ -97,6 +97,141 @@ test_start_stop (void)
g_object_unref (service);
}
+GMutex mutex_712570;
+GCond cond_712570;
+volatile gboolean finalized;
+
+GType test_threaded_socket_service_get_type (void);
+typedef GThreadedSocketService TestThreadedSocketService;
+typedef GThreadedSocketServiceClass TestThreadedSocketServiceClass;
+
+G_DEFINE_TYPE (TestThreadedSocketService, test_threaded_socket_service, G_TYPE_THREADED_SOCKET_SERVICE);
+
+static void
+test_threaded_socket_service_init (TestThreadedSocketService *service)
+{
+}
+
+static void
+test_threaded_socket_service_finalize (GObject *object)
+{
+ G_OBJECT_CLASS (test_threaded_socket_service_parent_class)->finalize (object);
+
+ /* Signal the main thread that finalization completed successfully
+ * rather than hanging.
+ */
+ finalized = TRUE;
+ g_cond_signal (&cond_712570);
+ g_mutex_unlock (&mutex_712570);
+}
+
+static void
+test_threaded_socket_service_class_init (TestThreadedSocketServiceClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = test_threaded_socket_service_finalize;
+}
+
+static gboolean
+connection_cb (GThreadedSocketService *service,
+ GSocketConnection *connection,
+ GObject *source_object,
+ gpointer user_data)
+{
+ /* Block until the main thread has dropped its ref to @service, so that we
+ * will drop the final ref from this thread.
+ */
+ g_mutex_lock (&mutex_712570);
+
+ /* The service should now have 1 ref owned by the current "run"
+ * signal emission, and another added by GThreadedSocketService for
+ * this thread. Both will be dropped after we return.
+ */
+ g_assert_cmpint (G_OBJECT (service)->ref_count, ==, 2);
+
+ return FALSE;
+}
+
+static void
+client_connected_cb (GObject *client,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GMainLoop *loop = user_data;
+ GSocketConnection *conn;
+ GError *error = NULL;
+
+ conn = g_socket_client_connect_finish (G_SOCKET_CLIENT (client), result, &error);
+ g_assert_no_error (error);
+
+ g_object_unref (conn);
+ g_main_loop_quit (loop);
+}
+
+static void
+test_threaded_712570 (void)
+{
+ GSocketService *service;
+ GSocketAddress *addr, *listening_addr;
+ GMainLoop *loop;
+ GSocketClient *client;
+ GError *error = NULL;
+
+ g_test_bug ("712570");
+
+ g_mutex_lock (&mutex_712570);
+
+ service = g_object_new (test_threaded_socket_service_get_type (), NULL);
+
+ addr = g_inet_socket_address_new_from_string ("127.0.0.1", 0);
+ g_socket_listener_add_address (G_SOCKET_LISTENER (service),
+ addr,
+ G_SOCKET_TYPE_STREAM,
+ G_SOCKET_PROTOCOL_TCP,
+ NULL,
+ &listening_addr,
+ &error);
+ g_assert_no_error (error);
+ g_object_unref (addr);
+
+ g_signal_connect (service, "run", G_CALLBACK (connection_cb), NULL);
+
+ loop = g_main_loop_new (NULL, FALSE);
+
+ client = g_socket_client_new ();
+ g_socket_client_connect_async (client,
+ G_SOCKET_CONNECTABLE (listening_addr),
+ NULL,
+ client_connected_cb, loop);
+ g_object_unref (client);
+ g_object_unref (listening_addr);
+
+ g_main_loop_run (loop);
+ g_main_loop_unref (loop);
+
+ /* Stop the service and then wait for it to asynchronously cancel
+ * its outstanding accept() call (and drop the associated ref).
+ * At least one main context iteration is required in some circumstances
+ * to ensure that the cancellation actually happens.
+ */
+ g_socket_service_stop (G_SOCKET_SERVICE (service));
+ g_assert_false (g_socket_service_is_active (G_SOCKET_SERVICE (service)));
+
+ do
+ g_main_context_iteration (NULL, TRUE);
+ while (G_OBJECT (service)->ref_count > 3);
+
+ /* Drop our ref, then unlock the mutex and wait for the service to be
+ * finalized. (Without the fix for 712570 it would hang forever here.)
+ */
+ g_object_unref (service);
+
+ while (!finalized)
+ g_cond_wait (&cond_712570, &mutex_712570);
+ g_mutex_unlock (&mutex_712570);
+}
+
int
main (int argc,
char *argv[])
@@ -106,6 +241,7 @@ main (int argc,
g_test_bug_base ("http://bugzilla.gnome.org/");
g_test_add_func ("/socket-service/start-stop", test_start_stop);
+ g_test_add_func ("/socket-service/threaded/712570", test_threaded_712570);
return g_test_run();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]