]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
Fix test cases running client and server dispatch design issue.
authorRalf Habacker <ralf.habacker@freenet.de>
Fri, 6 Nov 2015 13:03:23 +0000 (14:03 +0100)
committerRalf Habacker <ralf.habacker@freenet.de>
Fri, 6 Nov 2015 16:54:15 +0000 (17:54 +0100)
DBus test cases running the server *and* client loop in the same
process assumed that all messages send from the server has to be
received in one client dispatch, which is not the case in all
environments.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=92721
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
bus/dispatch.c

index ae7ac38592be5a8d988c433437f88099cc945a19..4d9ffa3f934e2b3cb18919dc1c360aa0fcdab851 100644 (file)
@@ -653,6 +653,7 @@ typedef struct
   const char *expected_service_name;
   dbus_bool_t failed;
   DBusConnection *skip_connection;
+  BusContext *context;
 } CheckServiceOwnerChangedData;
 
 static dbus_bool_t
@@ -674,9 +675,14 @@ check_service_owner_changed_foreach (DBusConnection *connection,
   message = pop_message_waiting_for_memory (connection);
   if (message == NULL)
     {
-      _dbus_warn ("Did not receive a message on %p, expecting %s\n",
-                  connection, "NameOwnerChanged");
-      goto out;
+      block_connection_until_message_from_bus (d->context, connection, "NameOwnerChanged");
+      message = pop_message_waiting_for_memory (connection);
+      if (message == NULL)
+        {
+          _dbus_warn ("Did not receive a message on %p, expecting %s\n",
+                      connection, "NameOwnerChanged");
+          goto out;
+        }
     }
   else if (!dbus_message_is_signal (message,
                                     DBUS_INTERFACE_DBUS,
@@ -789,6 +795,7 @@ kill_client_connection (BusContext     *context,
   socd.expected_service_name = base_service;
   socd.failed = FALSE;
   socd.skip_connection = NULL;
+  socd.context = context;
 
   bus_test_clients_foreach (check_service_owner_changed_foreach,
                             &socd);
@@ -1017,6 +1024,8 @@ check_hello_message (BusContext     *context,
       socd.expected_service_name = name;
       socd.failed = FALSE;
       socd.skip_connection = connection; /* we haven't done AddMatch so won't get it ourselves */
+      socd.context = context;
+
       bus_test_clients_foreach (check_service_owner_changed_foreach,
                                 &socd);
 
@@ -1029,9 +1038,14 @@ check_hello_message (BusContext     *context,
       message = pop_message_waiting_for_memory (connection);
       if (message == NULL)
         {
-          _dbus_warn ("Expecting %s, got nothing\n",
+          block_connection_until_message_from_bus (context, connection, "signal NameAcquired");
+          message = pop_message_waiting_for_memory (connection);
+          if (message == NULL)
+            {
+              _dbus_warn ("Expecting %s, got nothing\n",
                       "NameAcquired");
-          goto out;
+              goto out;
+            }
         }
       if (! dbus_message_is_signal (message, DBUS_INTERFACE_DBUS,
                                     "NameAcquired"))
@@ -2086,6 +2100,8 @@ check_base_service_activated (BusContext     *context,
       socd.expected_service_name = base_service;
       socd.failed = FALSE;
       socd.skip_connection = connection;
+      socd.context = context;
+
       bus_test_clients_foreach (check_service_owner_changed_foreach,
                                 &socd);
 
@@ -2190,6 +2206,8 @@ check_service_activated (BusContext     *context,
       socd.skip_connection = connection;
       socd.failed = FALSE;
       socd.expected_service_name = service_name;
+      socd.context = context;
+
       bus_test_clients_foreach (check_service_owner_changed_foreach,
                                 &socd);
 
@@ -2327,6 +2345,8 @@ check_service_auto_activated (BusContext     *context,
       socd.expected_service_name = service_name;
       socd.failed = FALSE;
       socd.skip_connection = connection;
+      socd.context = context;
+
       bus_test_clients_foreach (check_service_owner_changed_foreach,
                                 &socd);
 
@@ -2376,6 +2396,8 @@ check_service_deactivated (BusContext     *context,
   socd.expected_service_name = activated_name;
   socd.failed = FALSE;
   socd.skip_connection = NULL;
+  socd.context = context;
+
   bus_test_clients_foreach (check_service_owner_changed_foreach,
                             &socd);
 
@@ -2386,6 +2408,8 @@ check_service_deactivated (BusContext     *context,
   socd.expected_service_name = base_service;
   socd.failed = FALSE;
   socd.skip_connection = NULL;
+  socd.context = context;
+
   bus_test_clients_foreach (check_service_owner_changed_foreach,
                             &socd);
 
@@ -2833,6 +2857,7 @@ check_existent_service_no_auto_start (BusContext     *context,
             socd.expected_service_name = base_service;
             socd.failed = FALSE;
             socd.skip_connection = NULL;
+            socd.context = context;
 
             bus_test_clients_foreach (check_service_owner_changed_foreach,
                                       &socd);
@@ -3453,6 +3478,8 @@ check_existent_service_auto_start (BusContext     *context,
             socd.expected_service_name = base_service;
             socd.failed = FALSE;
             socd.skip_connection = NULL;
+            socd.context = context;
+
             bus_test_clients_foreach (check_service_owner_changed_foreach,
                                       &socd);
 
@@ -4141,6 +4168,8 @@ check_shell_service_success_auto_start (BusContext     *context,
             socd.expected_service_name = base_service;
             socd.failed = FALSE;
             socd.skip_connection = NULL;
+            socd.context = context;
+
             bus_test_clients_foreach (check_service_owner_changed_foreach,
                                       &socd);