[next] telepathy-glib: tests: relax assertion that user_data is freed immediately

Simon McVittie smcv at kemper.freedesktop.org
Fri Mar 14 12:02:34 PDT 2014


Module: telepathy-glib
Branch: next
Commit: d30d68dbb9e013cd002923608d34b8af3e1fe522
URL:    http://cgit.freedesktop.org/telepathy/telepathy-glib/commit/?id=d30d68dbb9e013cd002923608d34b8af3e1fe522

Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Tue Mar 11 18:32:22 2014 +0000

tests: relax assertion that user_data is freed immediately

In GDBus, every call back to user code comes through an idle, to
improve thread-safety.

---

 tests/dbus/disconnection.c         |   38 +++++++++++++++++++++++++++---------
 tests/dbus/unsupported-interface.c |    5 ++++-
 2 files changed, 33 insertions(+), 10 deletions(-)

diff --git a/tests/dbus/disconnection.c b/tests/dbus/disconnection.c
index 5f3ff52..edf2dfe 100644
--- a/tests/dbus/disconnection.c
+++ b/tests/dbus/disconnection.c
@@ -364,15 +364,29 @@ main (int argc,
   g_error_free (error_out);
   error_out = NULL;
 
-  /* Now that the main loop has run, cancelled signal connections have been
-   * freed */
-  MYASSERT (tp_intset_is_member (freed_user_data, TEST_B), "");
-  MYASSERT (tp_intset_is_member (freed_user_data, TEST_C), "");
-  MYASSERT (tp_intset_is_member (freed_user_data, TEST_D), "");
-  MYASSERT (tp_intset_is_member (freed_user_data, TEST_E), "");
-  MYASSERT (tp_intset_is_member (freed_user_data, TEST_F), "");
-  MYASSERT (tp_intset_is_member (freed_user_data, TEST_G), "");
-  MYASSERT (tp_intset_is_member (freed_user_data, TEST_H), "");
+  /* It might take a little longer to free all the user-data, because it
+   * happens in an idle */
+
+  while (!tp_intset_is_member (freed_user_data, TEST_B))
+    g_main_context_iteration (NULL, TRUE);
+
+  while (!tp_intset_is_member (freed_user_data, TEST_C))
+    g_main_context_iteration (NULL, TRUE);
+
+  while (!tp_intset_is_member (freed_user_data, TEST_D))
+    g_main_context_iteration (NULL, TRUE);
+
+  while (!tp_intset_is_member (freed_user_data, TEST_E))
+    g_main_context_iteration (NULL, TRUE);
+
+  while (!tp_intset_is_member (freed_user_data, TEST_F))
+    g_main_context_iteration (NULL, TRUE);
+
+  while (!tp_intset_is_member (freed_user_data, TEST_G))
+    g_main_context_iteration (NULL, TRUE);
+
+  while (!tp_intset_is_member (freed_user_data, TEST_H))
+    g_main_context_iteration (NULL, TRUE);
 
   /* both A and Z are still listening for signals, so their user data is
    * still held */
@@ -390,6 +404,12 @@ main (int argc,
   tp_tests_assert_last_unref (&f->proxies[TEST_H]);
   tp_tests_assert_last_unref (&f->proxies[TEST_Z]);
 
+  while (!tp_intset_is_member (freed_user_data, TEST_A))
+    g_main_context_iteration (NULL, TRUE);
+
+  while (!tp_intset_is_member (freed_user_data, TEST_Z))
+    g_main_context_iteration (NULL, TRUE);
+
   /* we should already have checked each of these at least once, but just to
    * make sure we have a systematic test that all user data is freed... */
   MYASSERT (tp_intset_is_member (freed_user_data, TEST_A), "");
diff --git a/tests/dbus/unsupported-interface.c b/tests/dbus/unsupported-interface.c
index 818e40f..7ff94d7 100644
--- a/tests/dbus/unsupported-interface.c
+++ b/tests/dbus/unsupported-interface.c
@@ -196,7 +196,10 @@ test_supported_signal (Fixture *f,
   g_assert (!f->freed);
 
   tp_proxy_signal_connection_disconnect (sc);
-  g_assert (f->freed);
+
+  /* GDBus invokes destructors in an idle */
+  while (!f->freed)
+    g_main_context_iteration (NULL, TRUE);
 }
 
 static void



More information about the telepathy-commits mailing list