From 08e937eb062130f99abbe1f8205f5445ee614312 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Mon, 17 Jun 2019 12:03:38 +0200 Subject: [PATCH] Run tests inside isolated D-Bus session(s) [WIP] Introduce a shell wrapper for tests that creates appropriate XDG_DATA_HOME with D-Bus service file and runs tests using isolated D-Bus session bus. This ensures that tests run against freshly built version of xfconfd, and work correctly even if xfconfd is not installed yet. TODO: there are some race conditions causing tests to fail randomly --- tests/Makefile.inc | 7 ++++++- tests/dbus-test-wrapper.sh | 20 ++++++++++++++++++++ xfconfd/Makefile.am | 6 +++++- xfconfd/org.xfce.Xfconf.service.in | 2 +- 4 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 tests/dbus-test-wrapper.sh diff --git a/tests/Makefile.inc b/tests/Makefile.inc index 36b8cde..22ccd87 100644 --- a/tests/Makefile.inc +++ b/tests/Makefile.inc @@ -14,7 +14,12 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA TESTS = $(check_PROGRAMS) -TESTS_ENVIRONMENT = XDG_CONFIG_HOME="$(top_builddir)/tests/test-xdg_config_home" XFCONFD="$(top_builddir)/xfconfd/xfconfd" +TESTS_ENVIRONMENT = \ + DBUS_SERVICE_FILE="$(top_builddir)/xfconfd/org.xfce.Xfconf.test.service" \ + XDG_CONFIG_HOME="$(abs_top_builddir)/tests/test-xdg_config_home" \ + XDG_DATA_HOME="$(abs_top_builddir)/tests/test-xdg_data_home" \ + XFCONFD="$(top_builddir)/xfconfd/xfconfd" \ + sh "$(top_srcdir)/tests/dbus-test-wrapper.sh" AM_CFLAGS = \ -I$(top_srcdir) \ diff --git a/tests/dbus-test-wrapper.sh b/tests/dbus-test-wrapper.sh new file mode 100644 index 0000000..16fa75b --- /dev/null +++ b/tests/dbus-test-wrapper.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# Wrapper that runs test in isolated D-Bus session. + +set -e + +if ! test -f "${XDG_DATA_HOME}/dbus-1/services/org.xfce.Xfconf.service"; then + mkdir -p "${XDG_DATA_HOME}/dbus-1/services" + cp "${DBUS_SERVICE_FILE}" "${XDG_DATA_HOME}/dbus-1/services/org.xfce.Xfconf.service.$$" + # avoid atomicity issues when running in parallel + mv "${XDG_DATA_HOME}/dbus-1/services/org.xfce.Xfconf.service.$$" \ + "${XDG_DATA_HOME}/dbus-1/services/org.xfce.Xfconf.service" +fi + +DBUS_PARAMS=$(dbus-launch --sh-syntax) +eval "${DBUS_PARAMS}" +"$@" +RET=$? + +kill "${DBUS_SESSION_BUS_PID}" +exit "${RET}" diff --git a/xfconfd/Makefile.am b/xfconfd/Makefile.am index d7fdfcb..393775c 100644 --- a/xfconfd/Makefile.am +++ b/xfconfd/Makefile.am @@ -57,9 +57,13 @@ xfconfd_LDADD = \ servicedir = $(datadir)/dbus-1/services service_in_files = org.xfce.Xfconf.service.in service_DATA = $(service_in_files:.service.in=.service) +noinst_DATA = $(service_in_files:.service.in=.test.service) %.service: %.service.in - $(AM_V_GEN) sed -e "s,\@HELPERDIR\@,$(HELPER_PATH_PREFIX),g" < $< > $@ + $(AM_V_GEN) sed -e "s,\@HELPERDIR\@,$(HELPER_PATH_PREFIX)/xfce4/xfconf,g" < $< > $@ + +%.test.service: %.service.in + $(AM_V_GEN) sed -e "s,\@HELPERDIR\@,$(abs_builddir),g" < $< > $@ CLEANFILES = \ $(service_DATA) diff --git a/xfconfd/org.xfce.Xfconf.service.in b/xfconfd/org.xfce.Xfconf.service.in index 58f6680..45baf67 100644 --- a/xfconfd/org.xfce.Xfconf.service.in +++ b/xfconfd/org.xfce.Xfconf.service.in @@ -1,3 +1,3 @@ [D-BUS Service] Name=org.xfce.Xfconf -Exec=@HELPERDIR@/xfce4/xfconf/xfconfd +Exec=@HELPERDIR@/xfconfd -- 2.22.0