mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-08 18:36:17 +01:00
Merge branch '480-gdbus-connection-test' into 'master'
Race fixes for gdbus-connection unit tests Closes #480 See merge request GNOME/glib!1419
This commit is contained in:
commit
bba5576fb2
@ -89,6 +89,7 @@ static const GDBusInterfaceVTable boo_vtable =
|
|||||||
NULL /* _set_property */
|
NULL /* _set_property */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Runs in a worker thread. */
|
||||||
static GDBusMessage *
|
static GDBusMessage *
|
||||||
some_filter_func (GDBusConnection *connection,
|
some_filter_func (GDBusConnection *connection,
|
||||||
GDBusMessage *message,
|
GDBusMessage *message,
|
||||||
@ -129,9 +130,9 @@ test_connection_bus_failure (void)
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
c = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
|
c = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
|
||||||
g_assert (error != NULL);
|
g_assert_nonnull (error);
|
||||||
g_assert (!g_dbus_error_is_remote_error (error));
|
g_assert_false (g_dbus_error_is_remote_error (error));
|
||||||
g_assert (c == NULL);
|
g_assert_null (c);
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,8 +160,8 @@ test_connection_life_cycle (void)
|
|||||||
error = NULL;
|
error = NULL;
|
||||||
c = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
|
c = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (c != NULL);
|
g_assert_nonnull (c);
|
||||||
g_assert (!g_dbus_connection_is_closed (c));
|
g_assert_false (g_dbus_connection_is_closed (c));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check that singleton handling work
|
* Check that singleton handling work
|
||||||
@ -168,8 +169,8 @@ test_connection_life_cycle (void)
|
|||||||
error = NULL;
|
error = NULL;
|
||||||
c2 = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
|
c2 = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (c2 != NULL);
|
g_assert_nonnull (c2);
|
||||||
g_assert (c == c2);
|
g_assert_true (c == c2);
|
||||||
g_object_unref (c2);
|
g_object_unref (c2);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -177,23 +178,23 @@ test_connection_life_cycle (void)
|
|||||||
*/
|
*/
|
||||||
c2 = _g_bus_get_priv (G_BUS_TYPE_SESSION, NULL, &error);
|
c2 = _g_bus_get_priv (G_BUS_TYPE_SESSION, NULL, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (c2 != NULL);
|
g_assert_nonnull (c2);
|
||||||
g_assert (c != c2);
|
g_assert_true (c != c2);
|
||||||
g_object_unref (c2);
|
g_object_unref (c2);
|
||||||
|
|
||||||
c2 = _g_bus_get_priv (G_BUS_TYPE_SESSION, NULL, &error);
|
c2 = _g_bus_get_priv (G_BUS_TYPE_SESSION, NULL, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (c2 != NULL);
|
g_assert_nonnull (c2);
|
||||||
g_assert (!g_dbus_connection_is_closed (c2));
|
g_assert_false (g_dbus_connection_is_closed (c2));
|
||||||
ret = g_dbus_connection_close_sync (c2, NULL, &error);
|
ret = g_dbus_connection_close_sync (c2, NULL, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (ret);
|
g_assert_true (ret);
|
||||||
_g_assert_signal_received (c2, "closed");
|
_g_assert_signal_received (c2, "closed");
|
||||||
g_assert (g_dbus_connection_is_closed (c2));
|
g_assert_true (g_dbus_connection_is_closed (c2));
|
||||||
ret = g_dbus_connection_close_sync (c2, NULL, &error);
|
ret = g_dbus_connection_close_sync (c2, NULL, &error);
|
||||||
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CLOSED);
|
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CLOSED);
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
g_assert (!ret);
|
g_assert_false (ret);
|
||||||
g_object_unref (c2);
|
g_object_unref (c2);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -205,7 +206,7 @@ test_connection_life_cycle (void)
|
|||||||
error = NULL;
|
error = NULL;
|
||||||
c2 = _g_bus_get_priv (G_BUS_TYPE_SESSION, NULL, &error);
|
c2 = _g_bus_get_priv (G_BUS_TYPE_SESSION, NULL, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (c2 != NULL);
|
g_assert_nonnull (c2);
|
||||||
/* signal registration */
|
/* signal registration */
|
||||||
on_signal_registration_freed_called = FALSE;
|
on_signal_registration_freed_called = FALSE;
|
||||||
g_dbus_connection_signal_subscribe (c2,
|
g_dbus_connection_signal_subscribe (c2,
|
||||||
@ -235,7 +236,7 @@ test_connection_life_cycle (void)
|
|||||||
a_gdestroynotify_that_sets_a_gboolean_to_true_and_quits_loop,
|
a_gdestroynotify_that_sets_a_gboolean_to_true_and_quits_loop,
|
||||||
&error);
|
&error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (registration_id > 0);
|
g_assert_cmpuint (registration_id, >, 0);
|
||||||
/* ok, finalize the connection and check that all the GDestroyNotify functions are invoked as expected */
|
/* ok, finalize the connection and check that all the GDestroyNotify functions are invoked as expected */
|
||||||
g_object_unref (c2);
|
g_object_unref (c2);
|
||||||
quit_mainloop_fired = FALSE;
|
quit_mainloop_fired = FALSE;
|
||||||
@ -260,20 +261,20 @@ test_connection_life_cycle (void)
|
|||||||
_log ("exiting loop");
|
_log ("exiting loop");
|
||||||
}
|
}
|
||||||
g_source_remove (quit_mainloop_id);
|
g_source_remove (quit_mainloop_id);
|
||||||
g_assert (on_signal_registration_freed_called);
|
g_assert_true (on_signal_registration_freed_called);
|
||||||
g_assert (on_filter_freed_called);
|
g_assert_true (on_filter_freed_called);
|
||||||
g_assert (on_register_object_freed_called);
|
g_assert_true (on_register_object_freed_called);
|
||||||
g_assert (!quit_mainloop_fired);
|
g_assert_false (quit_mainloop_fired);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check for correct behavior when the bus goes away
|
* Check for correct behavior when the bus goes away
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
g_assert (!g_dbus_connection_is_closed (c));
|
g_assert_false (g_dbus_connection_is_closed (c));
|
||||||
g_dbus_connection_set_exit_on_close (c, FALSE);
|
g_dbus_connection_set_exit_on_close (c, FALSE);
|
||||||
session_bus_stop ();
|
session_bus_stop ();
|
||||||
_g_assert_signal_received (c, "closed");
|
_g_assert_signal_received (c, "closed");
|
||||||
g_assert (g_dbus_connection_is_closed (c));
|
g_assert_true (g_dbus_connection_is_closed (c));
|
||||||
g_object_unref (c);
|
g_object_unref (c);
|
||||||
|
|
||||||
session_bus_down ();
|
session_bus_down ();
|
||||||
@ -299,9 +300,9 @@ msg_cb_expect_error_disconnected (GDBusConnection *connection,
|
|||||||
res,
|
res,
|
||||||
&error);
|
&error);
|
||||||
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CLOSED);
|
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CLOSED);
|
||||||
g_assert (!g_dbus_error_is_remote_error (error));
|
g_assert_false (g_dbus_error_is_remote_error (error));
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
g_assert (result == NULL);
|
g_assert_null (result);
|
||||||
|
|
||||||
g_main_loop_quit (loop);
|
g_main_loop_quit (loop);
|
||||||
}
|
}
|
||||||
@ -322,9 +323,9 @@ msg_cb_expect_error_unknown_method (GDBusConnection *connection,
|
|||||||
res,
|
res,
|
||||||
&error);
|
&error);
|
||||||
g_assert_error (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD);
|
g_assert_error (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD);
|
||||||
g_assert (g_dbus_error_is_remote_error (error));
|
g_assert_true (g_dbus_error_is_remote_error (error));
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
g_assert (result == NULL);
|
g_assert_null (result);
|
||||||
|
|
||||||
g_main_loop_quit (loop);
|
g_main_loop_quit (loop);
|
||||||
}
|
}
|
||||||
@ -345,7 +346,7 @@ msg_cb_expect_success (GDBusConnection *connection,
|
|||||||
res,
|
res,
|
||||||
&error);
|
&error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (result != NULL);
|
g_assert_nonnull (result);
|
||||||
g_variant_unref (result);
|
g_variant_unref (result);
|
||||||
|
|
||||||
g_main_loop_quit (loop);
|
g_main_loop_quit (loop);
|
||||||
@ -367,9 +368,9 @@ msg_cb_expect_error_cancelled (GDBusConnection *connection,
|
|||||||
res,
|
res,
|
||||||
&error);
|
&error);
|
||||||
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED);
|
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED);
|
||||||
g_assert (!g_dbus_error_is_remote_error (error));
|
g_assert_false (g_dbus_error_is_remote_error (error));
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
g_assert (result == NULL);
|
g_assert_null (result);
|
||||||
|
|
||||||
g_main_loop_quit (loop);
|
g_main_loop_quit (loop);
|
||||||
}
|
}
|
||||||
@ -390,9 +391,9 @@ msg_cb_expect_error_cancelled_2 (GDBusConnection *connection,
|
|||||||
res,
|
res,
|
||||||
&error);
|
&error);
|
||||||
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED);
|
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED);
|
||||||
g_assert (!g_dbus_error_is_remote_error (error));
|
g_assert_false (g_dbus_error_is_remote_error (error));
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
g_assert (result == NULL);
|
g_assert_null (result);
|
||||||
|
|
||||||
g_main_loop_quit (loop);
|
g_main_loop_quit (loop);
|
||||||
}
|
}
|
||||||
@ -409,8 +410,8 @@ test_connection_send (void)
|
|||||||
|
|
||||||
/* First, get an unopened connection */
|
/* First, get an unopened connection */
|
||||||
c = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
|
c = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
|
||||||
g_assert (c != NULL);
|
g_assert_nonnull (c);
|
||||||
g_assert (!g_dbus_connection_is_closed (c));
|
g_assert_false (g_dbus_connection_is_closed (c));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check that we never actually send a message if the GCancellable
|
* Check that we never actually send a message if the GCancellable
|
||||||
@ -490,7 +491,7 @@ test_connection_send (void)
|
|||||||
g_dbus_connection_set_exit_on_close (c, FALSE);
|
g_dbus_connection_set_exit_on_close (c, FALSE);
|
||||||
session_bus_stop ();
|
session_bus_stop ();
|
||||||
_g_assert_signal_received (c, "closed");
|
_g_assert_signal_received (c, "closed");
|
||||||
g_assert (g_dbus_connection_is_closed (c));
|
g_assert_true (g_dbus_connection_is_closed (c));
|
||||||
|
|
||||||
g_dbus_connection_call (c,
|
g_dbus_connection_call (c,
|
||||||
"org.freedesktop.DBus", /* bus_name */
|
"org.freedesktop.DBus", /* bus_name */
|
||||||
@ -567,13 +568,13 @@ test_connection_signals (void)
|
|||||||
if (g_getenv ("G_DBUS_MONITOR") == NULL)
|
if (g_getenv ("G_DBUS_MONITOR") == NULL)
|
||||||
{
|
{
|
||||||
c1 = _g_bus_get_priv (G_BUS_TYPE_SESSION, NULL, NULL);
|
c1 = _g_bus_get_priv (G_BUS_TYPE_SESSION, NULL, NULL);
|
||||||
g_assert (c1 != NULL);
|
g_assert_nonnull (c1);
|
||||||
g_assert (!g_dbus_connection_is_closed (c1));
|
g_assert_false (g_dbus_connection_is_closed (c1));
|
||||||
g_object_unref (c1);
|
g_object_unref (c1);
|
||||||
}
|
}
|
||||||
c1 = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
|
c1 = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
|
||||||
g_assert (c1 != NULL);
|
g_assert_nonnull (c1);
|
||||||
g_assert (!g_dbus_connection_is_closed (c1));
|
g_assert_false (g_dbus_connection_is_closed (c1));
|
||||||
g_assert_cmpstr (g_dbus_connection_get_unique_name (c1), ==, ":1.1");
|
g_assert_cmpstr (g_dbus_connection_get_unique_name (c1), ==, ":1.1");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -628,10 +629,10 @@ test_connection_signals (void)
|
|||||||
test_connection_signal_handler,
|
test_connection_signal_handler,
|
||||||
&count_s1b,
|
&count_s1b,
|
||||||
NULL);
|
NULL);
|
||||||
g_assert (s1 != 0);
|
g_assert_cmpuint (s1, !=, 0);
|
||||||
g_assert (s1b != 0);
|
g_assert_cmpuint (s1b, !=, 0);
|
||||||
g_assert (s2 != 0);
|
g_assert_cmpuint (s2, !=, 0);
|
||||||
g_assert (s3 != 0);
|
g_assert_cmpuint (s3, !=, 0);
|
||||||
|
|
||||||
count_s1 = 0;
|
count_s1 = 0;
|
||||||
count_s1b = 0;
|
count_s1b = 0;
|
||||||
@ -661,19 +662,19 @@ test_connection_signals (void)
|
|||||||
NULL,
|
NULL,
|
||||||
&error);
|
&error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (result != NULL);
|
g_assert_nonnull (result);
|
||||||
g_variant_unref (result);
|
g_variant_unref (result);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Bring up two other connections
|
* Bring up two other connections
|
||||||
*/
|
*/
|
||||||
c2 = _g_bus_get_priv (G_BUS_TYPE_SESSION, NULL, NULL);
|
c2 = _g_bus_get_priv (G_BUS_TYPE_SESSION, NULL, NULL);
|
||||||
g_assert (c2 != NULL);
|
g_assert_nonnull (c2);
|
||||||
g_assert (!g_dbus_connection_is_closed (c2));
|
g_assert_false (g_dbus_connection_is_closed (c2));
|
||||||
g_assert_cmpstr (g_dbus_connection_get_unique_name (c2), ==, ":1.2");
|
g_assert_cmpstr (g_dbus_connection_get_unique_name (c2), ==, ":1.2");
|
||||||
c3 = _g_bus_get_priv (G_BUS_TYPE_SESSION, NULL, NULL);
|
c3 = _g_bus_get_priv (G_BUS_TYPE_SESSION, NULL, NULL);
|
||||||
g_assert (c3 != NULL);
|
g_assert_nonnull (c3);
|
||||||
g_assert (!g_dbus_connection_is_closed (c3));
|
g_assert_false (g_dbus_connection_is_closed (c3));
|
||||||
g_assert_cmpstr (g_dbus_connection_get_unique_name (c3), ==, ":1.3");
|
g_assert_cmpstr (g_dbus_connection_get_unique_name (c3), ==, ":1.3");
|
||||||
|
|
||||||
/* now, emit the signal on c2 */
|
/* now, emit the signal on c2 */
|
||||||
@ -685,7 +686,7 @@ test_connection_signals (void)
|
|||||||
NULL,
|
NULL,
|
||||||
&error);
|
&error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (ret);
|
g_assert_true (ret);
|
||||||
while (!(count_s1 >= 1 && count_s2 >= 1))
|
while (!(count_s1 >= 1 && count_s2 >= 1))
|
||||||
g_main_loop_run (loop);
|
g_main_loop_run (loop);
|
||||||
g_assert_cmpint (count_s1, ==, 1);
|
g_assert_cmpint (count_s1, ==, 1);
|
||||||
@ -702,7 +703,7 @@ test_connection_signals (void)
|
|||||||
NULL,
|
NULL,
|
||||||
&error);
|
&error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (ret);
|
g_assert_true (ret);
|
||||||
while (!(count_s1 == 1 && count_s2 == 2))
|
while (!(count_s1 == 1 && count_s2 == 2))
|
||||||
g_main_loop_run (loop);
|
g_main_loop_run (loop);
|
||||||
g_assert_cmpint (count_s1, ==, 1);
|
g_assert_cmpint (count_s1, ==, 1);
|
||||||
@ -812,13 +813,16 @@ test_connection_signal_match_rules (void)
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Accessed both from the test code and the filter function (in a worker thread)
|
||||||
|
* so all accesses must be atomic. */
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
guint num_handled;
|
guint num_handled; /* (atomic) */
|
||||||
guint num_outgoing;
|
guint num_outgoing; /* (atomic) */
|
||||||
guint32 serial;
|
guint32 serial; /* (atomic) */
|
||||||
} FilterData;
|
} FilterData;
|
||||||
|
|
||||||
|
/* Runs in a worker thread. */
|
||||||
static GDBusMessage *
|
static GDBusMessage *
|
||||||
filter_func (GDBusConnection *connection,
|
filter_func (GDBusConnection *connection,
|
||||||
GDBusMessage *message,
|
GDBusMessage *message,
|
||||||
@ -831,12 +835,12 @@ filter_func (GDBusConnection *connection,
|
|||||||
if (incoming)
|
if (incoming)
|
||||||
{
|
{
|
||||||
reply_serial = g_dbus_message_get_reply_serial (message);
|
reply_serial = g_dbus_message_get_reply_serial (message);
|
||||||
if (reply_serial == data->serial)
|
if (reply_serial == g_atomic_int_get (&data->serial))
|
||||||
data->num_handled += 1;
|
g_atomic_int_inc (&data->num_handled);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
data->num_outgoing += 1;
|
g_atomic_int_inc (&data->num_outgoing);
|
||||||
}
|
}
|
||||||
|
|
||||||
return message;
|
return message;
|
||||||
@ -849,13 +853,14 @@ typedef struct
|
|||||||
gboolean alter_outgoing;
|
gboolean alter_outgoing;
|
||||||
} FilterEffects;
|
} FilterEffects;
|
||||||
|
|
||||||
|
/* Runs in a worker thread. */
|
||||||
static GDBusMessage *
|
static GDBusMessage *
|
||||||
other_filter_func (GDBusConnection *connection,
|
other_filter_func (GDBusConnection *connection,
|
||||||
GDBusMessage *message,
|
GDBusMessage *message,
|
||||||
gboolean incoming,
|
gboolean incoming,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
FilterEffects *effects = user_data;
|
const FilterEffects *effects = user_data;
|
||||||
GDBusMessage *ret;
|
GDBusMessage *ret;
|
||||||
gboolean alter;
|
gboolean alter;
|
||||||
|
|
||||||
@ -928,7 +933,7 @@ static void
|
|||||||
test_connection_filter (void)
|
test_connection_filter (void)
|
||||||
{
|
{
|
||||||
GDBusConnection *c;
|
GDBusConnection *c;
|
||||||
FilterData data;
|
FilterData data = { 0, 0, 0 };
|
||||||
GDBusMessage *m;
|
GDBusMessage *m;
|
||||||
GDBusMessage *m2;
|
GDBusMessage *m2;
|
||||||
GDBusMessage *r;
|
GDBusMessage *r;
|
||||||
@ -939,15 +944,14 @@ test_connection_filter (void)
|
|||||||
FilterEffects effects;
|
FilterEffects effects;
|
||||||
GVariant *result;
|
GVariant *result;
|
||||||
const gchar *s;
|
const gchar *s;
|
||||||
|
guint32 serial_temp;
|
||||||
memset (&data, '\0', sizeof (FilterData));
|
|
||||||
|
|
||||||
session_bus_up ();
|
session_bus_up ();
|
||||||
|
|
||||||
error = NULL;
|
error = NULL;
|
||||||
c = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
|
c = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (c != NULL);
|
g_assert_nonnull (c);
|
||||||
|
|
||||||
filter_id = g_dbus_connection_add_filter (c,
|
filter_id = g_dbus_connection_add_filter (c,
|
||||||
filter_func,
|
filter_func,
|
||||||
@ -960,31 +964,34 @@ test_connection_filter (void)
|
|||||||
"GetNameOwner");
|
"GetNameOwner");
|
||||||
g_dbus_message_set_body (m, g_variant_new ("(s)", "org.freedesktop.DBus"));
|
g_dbus_message_set_body (m, g_variant_new ("(s)", "org.freedesktop.DBus"));
|
||||||
error = NULL;
|
error = NULL;
|
||||||
g_dbus_connection_send_message (c, m, G_DBUS_SEND_MESSAGE_FLAGS_NONE, &data.serial, &error);
|
g_dbus_connection_send_message (c, m, G_DBUS_SEND_MESSAGE_FLAGS_NONE, &serial_temp, &error);
|
||||||
|
g_atomic_int_set (&data.serial, serial_temp);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
|
|
||||||
while (data.num_handled == 0)
|
while (g_atomic_int_get (&data.num_handled) == 0)
|
||||||
g_thread_yield ();
|
g_thread_yield ();
|
||||||
|
|
||||||
m2 = g_dbus_message_copy (m, &error);
|
m2 = g_dbus_message_copy (m, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_dbus_connection_send_message (c, m2, G_DBUS_SEND_MESSAGE_FLAGS_NONE, &data.serial, &error);
|
g_dbus_connection_send_message (c, m2, G_DBUS_SEND_MESSAGE_FLAGS_NONE, &serial_temp, &error);
|
||||||
|
g_atomic_int_set (&data.serial, serial_temp);
|
||||||
g_object_unref (m2);
|
g_object_unref (m2);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
|
|
||||||
while (data.num_handled == 1)
|
while (g_atomic_int_get (&data.num_handled) == 1)
|
||||||
g_thread_yield ();
|
g_thread_yield ();
|
||||||
|
|
||||||
m2 = g_dbus_message_copy (m, &error);
|
m2 = g_dbus_message_copy (m, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_dbus_message_set_serial (m2, data.serial);
|
g_dbus_message_set_serial (m2, serial_temp);
|
||||||
/* lock the message to test PRESERVE_SERIAL flag. */
|
/* lock the message to test PRESERVE_SERIAL flag. */
|
||||||
g_dbus_message_lock (m2);
|
g_dbus_message_lock (m2);
|
||||||
g_dbus_connection_send_message (c, m2, G_DBUS_SEND_MESSAGE_FLAGS_PRESERVE_SERIAL, &data.serial, &error);
|
g_dbus_connection_send_message (c, m2, G_DBUS_SEND_MESSAGE_FLAGS_PRESERVE_SERIAL, &serial_temp, &error);
|
||||||
|
g_atomic_int_set (&data.serial, serial_temp);
|
||||||
g_object_unref (m2);
|
g_object_unref (m2);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
|
|
||||||
while (data.num_handled == 2)
|
while (g_atomic_int_get (&data.num_handled) == 2)
|
||||||
g_thread_yield ();
|
g_thread_yield ();
|
||||||
|
|
||||||
m2 = g_dbus_message_copy (m, &error);
|
m2 = g_dbus_message_copy (m, &error);
|
||||||
@ -993,14 +1000,17 @@ test_connection_filter (void)
|
|||||||
m2,
|
m2,
|
||||||
G_DBUS_SEND_MESSAGE_FLAGS_NONE,
|
G_DBUS_SEND_MESSAGE_FLAGS_NONE,
|
||||||
-1,
|
-1,
|
||||||
|
/* can't do this write atomically
|
||||||
|
* as filter_func() needs it before
|
||||||
|
* send_message_with_reply_sync() returns */
|
||||||
&data.serial,
|
&data.serial,
|
||||||
NULL, /* GCancellable */
|
NULL, /* GCancellable */
|
||||||
&error);
|
&error);
|
||||||
g_object_unref (m2);
|
g_object_unref (m2);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (r != NULL);
|
g_assert_nonnull (r);
|
||||||
g_object_unref (r);
|
g_object_unref (r);
|
||||||
g_assert_cmpint (data.num_handled, ==, 4);
|
g_assert_cmpint (g_atomic_int_get (&data.num_handled), ==, 4);
|
||||||
|
|
||||||
g_dbus_connection_remove_filter (c, filter_id);
|
g_dbus_connection_remove_filter (c, filter_id);
|
||||||
|
|
||||||
@ -1010,15 +1020,16 @@ test_connection_filter (void)
|
|||||||
m2,
|
m2,
|
||||||
G_DBUS_SEND_MESSAGE_FLAGS_NONE,
|
G_DBUS_SEND_MESSAGE_FLAGS_NONE,
|
||||||
-1,
|
-1,
|
||||||
&data.serial,
|
&serial_temp,
|
||||||
NULL, /* GCancellable */
|
NULL, /* GCancellable */
|
||||||
&error);
|
&error);
|
||||||
|
g_atomic_int_set (&data.serial, serial_temp);
|
||||||
g_object_unref (m2);
|
g_object_unref (m2);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (r != NULL);
|
g_assert_nonnull (r);
|
||||||
g_object_unref (r);
|
g_object_unref (r);
|
||||||
g_assert_cmpint (data.num_handled, ==, 4);
|
g_assert_cmpint (g_atomic_int_get (&data.num_handled), ==, 4);
|
||||||
g_assert_cmpint (data.num_outgoing, ==, 4);
|
g_assert_cmpint (g_atomic_int_get (&data.num_outgoing), ==, 4);
|
||||||
|
|
||||||
/* wait for service to be available */
|
/* wait for service to be available */
|
||||||
signal_handler_id = g_dbus_connection_signal_subscribe (c,
|
signal_handler_id = g_dbus_connection_signal_subscribe (c,
|
||||||
@ -1034,7 +1045,7 @@ test_connection_filter (void)
|
|||||||
g_assert_cmpint (signal_handler_id, !=, 0);
|
g_assert_cmpint (signal_handler_id, !=, 0);
|
||||||
|
|
||||||
/* this is safe; testserver will exit once the bus goes away */
|
/* this is safe; testserver will exit once the bus goes away */
|
||||||
g_assert (g_spawn_command_line_async (g_test_get_filename (G_TEST_BUILT, "gdbus-testserver", NULL), NULL));
|
g_assert_true (g_spawn_command_line_async (g_test_get_filename (G_TEST_BUILT, "gdbus-testserver", NULL), NULL));
|
||||||
|
|
||||||
timeout_mainloop_id = g_timeout_add (30000, test_connection_filter_on_timeout, NULL);
|
timeout_mainloop_id = g_timeout_add (30000, test_connection_filter_on_timeout, NULL);
|
||||||
g_main_loop_run (loop);
|
g_main_loop_run (loop);
|
||||||
@ -1159,7 +1170,7 @@ test_connection_serials (void)
|
|||||||
error = NULL;
|
error = NULL;
|
||||||
c = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
|
c = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (c != NULL);
|
g_assert_nonnull (c);
|
||||||
|
|
||||||
/* Status after initialization */
|
/* Status after initialization */
|
||||||
g_assert_cmpint (g_dbus_connection_get_last_serial (c), ==, 1);
|
g_assert_cmpint (g_dbus_connection_get_last_serial (c), ==, 1);
|
||||||
@ -1210,11 +1221,11 @@ test_connection_basic (void)
|
|||||||
error = NULL;
|
error = NULL;
|
||||||
connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
|
connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (connection != NULL);
|
g_assert_nonnull (connection);
|
||||||
|
|
||||||
flags = g_dbus_connection_get_capabilities (connection);
|
flags = g_dbus_connection_get_capabilities (connection);
|
||||||
g_assert (flags == G_DBUS_CAPABILITY_FLAGS_NONE ||
|
g_assert_true (flags == G_DBUS_CAPABILITY_FLAGS_NONE ||
|
||||||
flags == G_DBUS_CAPABILITY_FLAGS_UNIX_FD_PASSING);
|
flags == G_DBUS_CAPABILITY_FLAGS_UNIX_FD_PASSING);
|
||||||
|
|
||||||
connection_flags = g_dbus_connection_get_flags (connection);
|
connection_flags = g_dbus_connection_get_flags (connection);
|
||||||
g_assert_cmpint (connection_flags, ==,
|
g_assert_cmpint (connection_flags, ==,
|
||||||
@ -1222,7 +1233,7 @@ test_connection_basic (void)
|
|||||||
G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION);
|
G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION);
|
||||||
|
|
||||||
credentials = g_dbus_connection_get_peer_credentials (connection);
|
credentials = g_dbus_connection_get_peer_credentials (connection);
|
||||||
g_assert (credentials == NULL);
|
g_assert_null (credentials);
|
||||||
|
|
||||||
g_object_get (connection,
|
g_object_get (connection,
|
||||||
"stream", &stream,
|
"stream", &stream,
|
||||||
@ -1233,13 +1244,13 @@ test_connection_basic (void)
|
|||||||
"capabilities", &flags,
|
"capabilities", &flags,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
g_assert (G_IS_IO_STREAM (stream));
|
g_assert_true (G_IS_IO_STREAM (stream));
|
||||||
g_assert (g_dbus_is_guid (guid));
|
g_assert_true (g_dbus_is_guid (guid));
|
||||||
g_assert (g_dbus_is_unique_name (name));
|
g_assert_true (g_dbus_is_unique_name (name));
|
||||||
g_assert (!closed);
|
g_assert_false (closed);
|
||||||
g_assert (exit_on_close);
|
g_assert_true (exit_on_close);
|
||||||
g_assert (flags == G_DBUS_CAPABILITY_FLAGS_NONE ||
|
g_assert_true (flags == G_DBUS_CAPABILITY_FLAGS_NONE ||
|
||||||
flags == G_DBUS_CAPABILITY_FLAGS_UNIX_FD_PASSING);
|
flags == G_DBUS_CAPABILITY_FLAGS_UNIX_FD_PASSING);
|
||||||
g_object_unref (stream);
|
g_object_unref (stream);
|
||||||
g_free (name);
|
g_free (name);
|
||||||
g_free (guid);
|
g_free (guid);
|
||||||
|
Loading…
Reference in New Issue
Block a user