Use test binaries in build dir to do test
authorChengwei Yang <chengwei.yang@intel.com>
Fri, 13 Sep 2013 08:56:26 +0000 (16:56 +0800)
committerSimon McVittie <simon.mcvittie@collabora.co.uk>
Fri, 13 Sep 2013 13:29:45 +0000 (14:29 +0100)
When do autolaunch testing, libdbus will try to start dbus-launch in
installed direcotry, if fail then fall back to dbus-launch in $PATH.
dbus-launch does a relative better thing to start dbus-daemon in build
directory, however, in most of case, the build $prefix is different from
the real prefix where dbus-daemon installed. So dbus-daemon will fail to
start due to can't find its config file. And then dbus-launch will fall
back to finally the installed dbus-daemon.

This patch fix this behavior and will start dbus-launch and dbus-daemon
in build directory in test environment.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=37849

configure.ac
dbus/dbus-sysdeps-unix.c
test/name-test/Makefile.am
tools/dbus-launch.c

index ab7b1e1..b6ff769 100644 (file)
@@ -1647,6 +1647,9 @@ AC_DEFINE_UNQUOTED(TEST_BUS_BINARY, ["$DBUS_PWD/bus/dbus-daemon$EXEEXT"],
                    [Full path to the daemon in the builddir])
 AC_SUBST(TEST_BUS_BINARY)
 
+AC_DEFINE_UNQUOTED(TEST_BUS_LAUNCH_BINARY, ["$DBUS_PWD/tools/dbus-launch$EXEEXT"],
+                   [Full path to the dbus-launch in the builddir])
+
 ## Export the non-setuid external helper
 TEST_LAUNCH_HELPER_BINARY="$DBUS_PWD/bus/dbus-daemon-launch-helper-test$EXEEXT"
 AC_SUBST(TEST_LAUNCH_HELPER_BINARY)
index 7269734..54c0272 100644 (file)
@@ -3518,7 +3518,12 @@ _dbus_get_autolaunch_address (const char *scope,
     }
 
   i = 0;
-  argv[i] = "dbus-launch";
+#ifdef DBUS_ENABLE_EMBEDDED_TESTS
+  if (_dbus_getenv ("DBUS_USE_TEST_BINARY") != NULL)
+    argv[i] = TEST_BUS_LAUNCH_BINARY;
+  else
+#endif
+    argv[i] = DBUS_BINDIR "/dbus-launch";
   ++i;
   argv[i] = "--autolaunch";
   ++i;
@@ -3533,7 +3538,7 @@ _dbus_get_autolaunch_address (const char *scope,
 
   _dbus_assert (i == _DBUS_N_ELEMENTS (argv));
 
-  retval = _read_subprocess_line_argv (DBUS_BINDIR "/dbus-launch",
+  retval = _read_subprocess_line_argv (argv[0],
                                        TRUE,
                                        argv, address, error);
 
index 54b02af..931cb2c 100644 (file)
@@ -13,7 +13,12 @@ AM_LDFLAGS = @R_DYNAMIC_LDFLAG@
 ## so if adding tests not to be run in make check, don't add them to 
 ## TESTS
 if DBUS_ENABLE_EMBEDDED_TESTS
-TESTS_ENVIRONMENT=DBUS_TOP_BUILDDIR=@abs_top_builddir@ DBUS_TOP_SRCDIR=@abs_top_srcdir@ PYTHON=@PYTHON@
+TESTS_ENVIRONMENT = \
+        DBUS_TOP_BUILDDIR=@abs_top_builddir@ \
+        DBUS_TOP_SRCDIR=@abs_top_srcdir@ \
+        PYTHON=@PYTHON@ \
+        DBUS_TEST_DATA=@abs_top_builddir@/test/data \
+        $(NULL)
 TESTS=run-test.sh run-test-systemserver.sh
 else
 TESTS=
index 1524975..14fa226 100644 (file)
@@ -1110,8 +1110,16 @@ main (int argc, char **argv)
  
 #ifdef DBUS_ENABLE_EMBEDDED_TESTS
       /* exec from testdir */
-      if (getenv("DBUS_USE_TEST_BINARY") != NULL)
+      if (getenv ("DBUS_USE_TEST_BINARY") != NULL)
         {
+          if (config_file == NULL && getenv ("DBUS_TEST_DATA") != NULL)
+            {
+              ret = asprintf (&config_file, "%s/valid-config-files/session.conf",
+                        getenv ("DBUS_TEST_DATA"));
+            }
+            if (ret == -1 && config_file != NULL)
+              free (config_file);
+
           execl (TEST_BUS_BINARY,
                  TEST_BUS_BINARY,
                  "--fork",