[Pkg-telepathy-commits] [telepathy-glib-1] 136/212: test-cm: Stop using tp_svc_dbus_properties_*()

Simon McVittie smcv at debian.org
Wed May 14 12:09:06 UTC 2014


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to branch debian
in repository telepathy-glib-1.

commit 37af5ebfeb0514f6fafcd2aec16aa28ae028d455
Author: Xavier Claessens <xavier.claessens at collabora.com>
Date:   Sat Apr 5 09:57:44 2014 -0400

    test-cm: Stop using tp_svc_dbus_properties_*()
    
    We are about to stop exporting TpSvcDBusProperties iface so they
    would be no-op.
    
    Bug: https://bugs.freedesktop.org/show_bug.cgi?id=77144
    Reviewed-by: Simon McVittie
---
 tests/dbus/cm.c | 119 +++++++++++++++++++++++---------------------------------
 1 file changed, 48 insertions(+), 71 deletions(-)

diff --git a/tests/dbus/cm.c b/tests/dbus/cm.c
index 64669fe..f1c23fa 100644
--- a/tests/dbus/cm.c
+++ b/tests/dbus/cm.c
@@ -23,101 +23,74 @@ typedef enum {
 } TestFlags;
 
 typedef struct {
-    ExampleEcho2ConnectionManager parent;
-    guint drop_name_on_get;
-} MyConnectionManager;
-typedef ExampleEcho2ConnectionManagerClass MyConnectionManagerClass;
-
-typedef struct {
     GMainLoop *mainloop;
     GDBusConnection *dbus;
     TpClientFactory *factory;
-    MyConnectionManager *service_cm;
+    TpBaseConnectionManager *service_cm;
 
     TpConnectionManager *cm;
     TpConnectionManager *echo;
     TpConnectionManager *spurious;
     GError *error /* initialized where needed */;
+
+    guint drop_name_on_get;
+    guint filter_id;
 } Test;
 
-static void my_properties_iface_init (gpointer iface);
-static GType my_connection_manager_get_type (void);
+static gboolean
+drop_name_idle_cb (gpointer user_data)
+{
+  Test *test = user_data;
+  GString *string = g_string_new (TP_CM_BUS_NAME_BASE);
+  GError *error = NULL;
 
-G_DEFINE_TYPE_WITH_CODE (MyConnectionManager,
-    my_connection_manager,
-    EXAMPLE_TYPE_ECHO_2_CONNECTION_MANAGER,
-    G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES,
-      my_properties_iface_init))
+  g_string_append (string, "example_echo_2");
 
-static void
-my_connection_manager_class_init (MyConnectionManagerClass *cls)
-{
-}
+  tp_dbus_connection_release_name (test->dbus, string->str, &error);
+  g_assert_no_error (error);
+  tp_dbus_connection_request_name (test->dbus, string->str, FALSE, &error);
+  g_assert_no_error (error);
 
-static void
-my_connection_manager_init (MyConnectionManager *self)
-{
-}
+  test->drop_name_on_get--;
 
-static void
-my_get (TpSvcDBusProperties *iface G_GNUC_UNUSED,
-    const gchar *i G_GNUC_UNUSED,
-    const gchar *p G_GNUC_UNUSED,
-    GDBusMethodInvocation *context)
-{
-  /* The telepathy-glib client side should never call this:
-   * GetAll() is better. */
-  g_assert_not_reached ();
+  return G_SOURCE_REMOVE;
 }
 
-static void
-my_get_all (TpSvcDBusProperties *iface,
-    const gchar *i,
-    GDBusMethodInvocation *context)
+static GDBusMessage *
+get_all_filter (GDBusConnection *dbus,
+    GDBusMessage *message,
+    gboolean incoming,
+    gpointer user_data)
 {
-  MyConnectionManager *cm = (MyConnectionManager *) iface;
-  GHashTable *ht;
+  Test *test = user_data;
+  gchar *object_path;
+
+  object_path = g_strconcat (TP_CM_OBJECT_PATH_BASE, "example_echo_2",
+      NULL);
 
   /* If necessary, emulate the CM exiting and coming back. */
-  if (cm->drop_name_on_get)
+  if (test->drop_name_on_get > 0 && !incoming &&
+      !tp_strdiff (g_dbus_message_get_member (message), "GetAll") &&
+      !tp_strdiff (g_dbus_message_get_path (message), object_path))
     {
-      GDBusConnection *dbus = tp_base_connection_manager_get_dbus_connection (
-          TP_BASE_CONNECTION_MANAGER (cm));
-      GString *string = g_string_new (TP_CM_BUS_NAME_BASE);
-      GError *error = NULL;
-
-      g_string_append (string, "example_echo_2");
+      /* Must be in idle cb otherwise _sync dbus call deadlocks from a message
+       * filter func. */
+      g_idle_add (drop_name_idle_cb, test);
 
-      cm->drop_name_on_get--;
-
-      tp_dbus_connection_release_name (dbus, string->str, &error);
-      g_assert_no_error (error);
-      tp_dbus_connection_request_name (dbus, string->str, FALSE, &error);
-      g_assert_no_error (error);
+      /* Drop the message to be sure we won't get the reply before
+       * NameOwnerChanged */
+      g_clear_object (&message);
     }
 
-  ht = tp_dbus_properties_mixin_dup_all ((GObject *) cm, i);
-  tp_svc_dbus_properties_return_from_get_all (context, ht);
-  g_hash_table_unref (ht);
-}
+  g_free (object_path);
 
-static void
-my_properties_iface_init (gpointer iface)
-{
-  TpSvcDBusPropertiesClass *cls = iface;
-
-#define IMPLEMENT(x) \
-    tp_svc_dbus_properties_implement_##x (cls, my_##x)
-  IMPLEMENT (get);
-  IMPLEMENT (get_all);
-#undef IMPLEMENT
+  return message;
 }
 
 static void
 setup (Test *test,
        gconstpointer data)
 {
-  TpBaseConnectionManager *service_cm_as_base;
   gboolean ok;
 
   tp_debug_set_flags ("all");
@@ -127,15 +100,16 @@ setup (Test *test,
   test->factory = tp_client_factory_new (test->dbus);
 
   test->service_cm = tp_tests_object_new_static_class (
-      my_connection_manager_get_type (),
+      EXAMPLE_TYPE_ECHO_2_CONNECTION_MANAGER,
       NULL);
   g_assert (test->service_cm != NULL);
-  service_cm_as_base = TP_BASE_CONNECTION_MANAGER (test->service_cm);
-  g_assert (service_cm_as_base != NULL);
 
-  ok = tp_base_connection_manager_register (service_cm_as_base);
+  ok = tp_base_connection_manager_register (test->service_cm);
   g_assert (ok);
 
+  test->filter_id = g_dbus_connection_add_filter (test->dbus, get_all_filter,
+      test, NULL);
+
   test->cm = NULL;
 }
 
@@ -143,6 +117,8 @@ static void
 teardown (Test *test,
           gconstpointer data)
 {
+  g_dbus_connection_remove_filter (test->dbus, test->filter_id);
+
   g_clear_object (&test->service_cm);
   g_clear_object (&test->dbus);
   g_clear_object (&test->factory);
@@ -950,11 +926,11 @@ test_dbus_ready (Test *test,
 
   if (flags & DROP_NAME_ON_GET_TWICE)
     {
-      test->service_cm->drop_name_on_get = 2;
+      test->drop_name_on_get = 2;
     }
   else if (flags & DROP_NAME_ON_GET)
     {
-      test->service_cm->drop_name_on_get = 1;
+      test->drop_name_on_get = 1;
     }
 
   if (flags & ACTIVATE_CM)
@@ -977,6 +953,7 @@ test_dbus_ready (Test *test,
   tp_tests_proxy_run_until_prepared_or_failed (test->cm, NULL,
       &test->error);
 
+  g_assert_cmpuint (test->drop_name_on_get, ==, 0);
   g_assert_cmpstr (tp_connection_manager_get_name (test->cm), ==,
       "example_echo_2");
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-telepathy/telepathy-glib-1.git



More information about the Pkg-telepathy-commits mailing list