diff options
Diffstat (limited to 'tests/dbus/contacts-bug-19101.c')
-rw-r--r-- | tests/dbus/contacts-bug-19101.c | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/tests/dbus/contacts-bug-19101.c b/tests/dbus/contacts-bug-19101.c index 1e43bc457..9bd58a9e3 100644 --- a/tests/dbus/contacts-bug-19101.c +++ b/tests/dbus/contacts-bug-19101.c @@ -7,7 +7,7 @@ #include <telepathy-glib/dbus.h> #include <telepathy-glib/debug.h> -#include "tests/lib/bug-19101-conn.h" +#include "tests/lib/contacts-conn.h" #include "tests/lib/debug.h" #include "tests/lib/myassert.h" #include "tests/lib/util.h" @@ -15,8 +15,56 @@ typedef struct { GMainLoop *loop; GError *error /* initialized to 0 */; + guint serial; } Result; +static GDBusMessage * +filter_cb (GDBusConnection *connection, + GDBusMessage *message, + gboolean incoming, + gpointer user_data) +{ + Result *r = user_data; + + /* We are only interested in outgoing messages */ + if (incoming) + return message; + + if (!tp_strdiff (g_dbus_message_get_member (message), "GetContactByID")) + { + /* Remember the serial of the message so we can catch the reply */ + g_assert (r->serial == 0); + r->serial = g_dbus_message_get_serial (message); + } + else if (r->serial != 0 && + g_dbus_message_get_message_type (message) == + G_DBUS_MESSAGE_TYPE_METHOD_RETURN && + g_dbus_message_get_reply_serial (message) == r->serial) + { + GDBusMessage *tmp; + GVariant *body; + TpHandle handle; + GError *error = NULL; + + /* Replace message by a copy to be able to modify it */ + tmp = g_dbus_message_copy (message, &error); + g_assert_no_error (error); + g_object_unref (message); + message = tmp; + + /* Replace body's asv to an empty one */ + body = g_dbus_message_get_body (message); + g_variant_get (body, "(ua{sv})", &handle, NULL); + g_dbus_message_set_body (message, + g_variant_new ("(u@a{sv})", handle, + g_variant_new_array (G_VARIANT_TYPE ("{sv}"), NULL, 0))); + + r->serial = 0; + } + + return message; +} + static void by_id_cb (GObject *source, GAsyncResult *result, @@ -37,6 +85,11 @@ static void test_by_id (TpConnection *client_conn) { Result result = { g_main_loop_new (NULL, FALSE) }; + GDBusConnection *dbus_connection = tp_proxy_get_dbus_connection (client_conn); + guint filter_id; + + filter_id = g_dbus_connection_add_filter (dbus_connection, + filter_cb, &result, NULL); tp_connection_dup_contact_by_id_async (client_conn, "Alice", NULL, by_id_cb, &result); @@ -49,6 +102,7 @@ test_by_id (TpConnection *client_conn) /* clean up */ g_main_loop_unref (result.loop); g_error_free (result.error); + g_dbus_connection_remove_filter (dbus_connection, filter_id); } int @@ -69,7 +123,7 @@ main (int argc, test_dbus = g_test_dbus_new (G_TEST_DBUS_NONE); g_test_dbus_up (test_dbus); - tp_tests_create_conn (TP_TESTS_TYPE_BUG19101_CONNECTION, "me@example.com", + tp_tests_create_conn (TP_TESTS_TYPE_CONTACTS_CONNECTION, "me@example.com", TRUE, &service_conn_as_base, &client_conn); service_conn = TP_TESTS_CONTACTS_CONNECTION (service_conn_as_base); |