Merge "Optional autogen.sh flag --enable-kdbus-transport added allowing to compile...
[platform/upstream/dbus.git] / test / test-service.c
index ee0086c..7181fa3 100644 (file)
@@ -1,6 +1,9 @@
+#include <config.h>
 
 #include "test-utils.h"
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
+#endif
 
 static DBusLoop *loop;
 static dbus_bool_t already_quit = FALSE;
@@ -234,7 +237,7 @@ handle_delay_echo (DBusConnection     *connection,
 
   _dbus_verbose ("sleeping for a short time\n");
 
-  usleep (50000);
+  _dbus_sleep_milliseconds (50);
 
   _dbus_verbose ("sending reply to DelayEcho method\n");
   
@@ -396,7 +399,39 @@ main (int    argc,
   DBusError error;
   int result;
   DBusConnection *connection;
-  
+  const char *name;
+  dbus_bool_t do_fork;
+
+  if (argc != 3)
+    {
+      name = "org.freedesktop.DBus.TestSuiteEchoService";
+      do_fork = FALSE;
+    }
+  else
+    {
+      name = argv[1];
+#ifndef DBUS_WIN
+      do_fork = strcmp (argv[2], "fork") == 0;
+#else
+      do_fork = FALSE;
+#endif
+    }
+
+  /* The bare minimum for simulating a program "daemonizing"; the intent
+   * is to test services which move from being legacy init scripts to
+   * activated services.
+   * https://bugzilla.redhat.com/show_bug.cgi?id=545267
+   */
+#ifndef DBUS_WIN
+   if (do_fork)
+    {
+      pid_t pid = fork ();
+      if (pid != 0)
+        exit (0);
+      sleep (1);
+    }
+#endif
+
   dbus_error_init (&error);
   connection = dbus_bus_get (DBUS_BUS_STARTER, &error);
   if (connection == NULL)
@@ -431,8 +466,8 @@ main (int    argc,
     if (d != (void*) 0xdeadbeef)
       die ("dbus_connection_get_object_path_data() doesn't seem to work right\n");
   }
-  
-  result = dbus_bus_request_name (connection, "org.freedesktop.DBus.TestSuiteEchoService",
+
+  result = dbus_bus_request_name (connection, name,
                                   0, &error);
   if (dbus_error_is_set (&error))
     {
@@ -442,7 +477,14 @@ main (int    argc,
       dbus_error_free (&error);
       exit (1);
     }
-  
+
+  if (result != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
+    {
+      fprintf (stderr, "Unable to acquire service: code %d\n", result);
+      _dbus_verbose ("*** Failed to acquire service: %d\n", result);
+      exit (1);
+    }
+
   _dbus_verbose ("*** Test service entering main loop\n");
   _dbus_loop_run (loop);