Re: [Evolution-hackers] "make check" failing in the e-d-s gnome-2-32
- From: Murray Cumming <murrayc murrayc com>
- To: Matthew Barnes <mbarnes redhat com>
- Cc: Tristan Van Berkom <tristanvb openismus com>, evolution-hackers gnome org
- Subject: Re: [Evolution-hackers] "make check" failing in the e-d-s gnome-2-32
- Date: Thu, 16 Jun 2011 14:56:51 +0200
On Wed, 2011-06-15 at 11:47 -0400, Matthew Barnes wrote:
> On Wed, 2011-06-15 at 16:04 +0100, Raul Gutierrez Segales wrote:
> > Right - its D-Bus activated on the newly launched session bus. I am
> > guessing what we'd need is a .service file to point to the
> > e-addressbook-factory binary inside of e-d-s' source directory.
> >
> > We could point the newly launched dbus-daemon to a special directory
> > of .service files via a <servicedir> stanza in a custom d-bus config
> > file.
>
> Couldn't the test script just launch it explicitly before running any
> test programs? Then you don't have to deal with service files at all.
>
> $(top_builddir)/addressbook/libedata-book/e-addressbook-factory -r
>
> The -r (or --keep-running) is something I added fairly recently for my
> own testing. It prevents the daemon from automatically shutting down
> when the last client connection is closed. Then it's just a matter of
> sending the daemon a SIGTERM when tests are complete.
Thanks.
OK, this one starts and stops e-addressbook-factory for each test. How
do you like it? Note that bash scripting is really not my thing.
I guess this will need some cleverness to make it work with srcdir!
=builddir, and we might want to adapt this to start other services when
eventually used for testing other parts of EDS.
One test still fails, near the end, when calling e_book_remove(),
apparently because EBookBackendFile::priv::filename is NULL at that
point, though I can't see an obvious reason for that.
http://git.gnome.org/browse/evolution-data-server/tree/addressbook/tests/ebook/test-ebook-stress-factory--single-book.c?h=gnome-2-32#n30
** (process:20697): WARNING **: failed to remove book; Cannot remove
book: Failed to remove file '(null)': Bad address
FAIL: test-ebook-stress-factory--single-book
======================================================================================
1 of 15 tests failed
Please report to
http://bugzilla.gnome.org/enter_bug.cgi?product=Evolution-Data-Server
======================================================================================
--
murrayc murrayc com
www.murrayc.com
www.openismus.com
>From 8127525268c617367b8a443c203f468280399cd2 Mon Sep 17 00:00:00 2001
From: Murray Cumming <murrayc murrayc com>
Date: Wed, 15 Jun 2011 13:15:07 +0200
Subject: [PATCH] addressbook tests: Run with private D-Bus session and environment.
* addressbook/tests/: Add a tools/ directory with .sh files from
libfolks/tests/tools/, to let us start and stop a private D-Bus
session, and set XDG_* environment variables for local use of EDS,
when running tests.
* addressbook/tests/ebook/Makefile.am: Set TESTS_ENVIRONMENT to
run the tests with the private D-Bus session.
---
addressbook/tests/Makefile.am | 2 +-
addressbook/tests/ebook/Makefile.am | 7 ++
addressbook/tests/tools/Makefile.am | 5 +
addressbook/tests/tools/dbus-session.sh | 114 +++++++++++++++++++++++
addressbook/tests/tools/eds.sh | 36 +++++++
addressbook/tests/tools/with-session-bus-eds.sh | 45 +++++++++
configure.ac | 1 +
7 files changed, 209 insertions(+), 1 deletions(-)
create mode 100644 addressbook/tests/tools/Makefile.am
create mode 100644 addressbook/tests/tools/dbus-session.sh
create mode 100644 addressbook/tests/tools/eds.sh
create mode 100755 addressbook/tests/tools/with-session-bus-eds.sh
diff --git a/addressbook/tests/Makefile.am b/addressbook/tests/Makefile.am
index 591bdff..36ae876 100644
--- a/addressbook/tests/Makefile.am
+++ b/addressbook/tests/Makefile.am
@@ -1,3 +1,3 @@
-SUBDIRS = vcard ebook
+SUBDIRS = tools vcard ebook
-include $(top_srcdir)/git.mk
diff --git a/addressbook/tests/ebook/Makefile.am b/addressbook/tests/ebook/Makefile.am
index 32c8e40..3671344 100644
--- a/addressbook/tests/ebook/Makefile.am
+++ b/addressbook/tests/ebook/Makefile.am
@@ -22,6 +22,13 @@ TEST_LIBS = \
libebook-test-utils.la \
$(NULL)
+RUN_WITH_PRIVATE_BUS = $(top_srcdir)/addressbook/tests/tools/with-session-bus-eds.sh
+
+TESTS_ENVIRONMENT = \
+ $(RUN_WITH_PRIVATE_BUS) \
+ --session \
+ --
+
# Should be kept ordered approximately from least to most difficult/complex
TESTS = \
test-ebook-remove \
diff --git a/addressbook/tests/tools/Makefile.am b/addressbook/tests/tools/Makefile.am
new file mode 100644
index 0000000..6abf3bc
--- /dev/null
+++ b/addressbook/tests/tools/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = \
+ with-session-bus.sh \
+ dbus-session.sh
+
+-include $(top_srcdir)/git.mk
diff --git a/addressbook/tests/tools/dbus-session.sh b/addressbook/tests/tools/dbus-session.sh
new file mode 100644
index 0000000..1f805bf
--- /dev/null
+++ b/addressbook/tests/tools/dbus-session.sh
@@ -0,0 +1,114 @@
+#
+# Helper functions to start your own D-Bus session.
+#
+# Refactored from with-session-bush.sh (from telepathy-glib).
+#
+# The canonical location of this program is the telepathy-glib tools/
+# directory, please synchronize any changes with that copy.
+#
+# Copyright (C) 2007-2008,2011 Collabora Ltd. <http://www.collabora.co.uk/>
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+
+
+dbus_daemon_args="--print-address=5 --print-pid=6 --fork"
+dbus_verbose=0
+dbus_me=with-session-bus
+dbus_sleep=0
+dbus_with_session=""
+dbus_config_file=""
+
+# Params:
+# verbose: 0 for off and 1 for on
+#
+dbus_init () {
+ exec 5> $dbus_me-$$.address
+ exec 6> $dbus_me-$$.pid
+ dbus_verbose=$1
+}
+
+dbus_usage ()
+{
+ echo "usage: $me [options] -- program [program_options]" >&2
+ echo "Requires write access to the current directory." >&2
+ echo "" >&2
+ echo "If \$WITH_SESSION_BUS_FORK_DBUS_MONITOR is set, fork dbus-monitor" >&2
+ echo "with the arguments in \$WITH_SESSION_BUS_FORK_DBUS_MONITOR_OPT." >&2
+ echo "The output of dbus-monitor is saved in $me-<pid>.dbus-monitor-logs" >&2
+ exit 2
+}
+
+dbus_parse_args () {
+ while test "z$1" != "z--"; do
+ case "$1" in
+ --sleep=*)
+ sleep="$1"
+ dbus_sleep="${sleep#--sleep=}"
+ shift
+ ;;
+ --session)
+ dbus_with_session="--session"
+ shift
+ ;;
+ --config-file=*)
+ # FIXME: assumes config file doesn't contain any special characters
+ dbus_config_file="$1"
+ shift
+ ;;
+ *)
+ dbus_usage
+ ;;
+ esac
+ done
+}
+
+dbus_start () {
+ local args="$dbus_daemon_args $dbus_with_session $dbus_config_file "
+
+ if [ $dbus_verbose -gt 0 ] ; then
+ echo -n "dbus args $args "
+ fi
+
+ dbus-daemon $args
+
+ {
+ if [ $dbus_verbose -gt 0 ] ; then
+ echo -n "Temporary bus daemon is "; cat $dbus_me-$$.address;
+ fi
+ } >&2
+
+ {
+ if [ $dbus_verbose -gt 0 ] ; then
+ echo -n "Temporary bus daemon PID is "; head -n1 $dbus_me-$$.pid;
+ fi
+ } >&2
+
+ DBUS_SESSION_BUS_ADDRESS="`cat $dbus_me-$$.address`"
+ export DBUS_SESSION_BUS_ADDRESS
+
+ if [ -n "$WITH_SESSION_BUS_FORK_DBUS_MONITOR" ] ; then
+ if [ $dbus_verbose -gt 0 ] ; then
+ echo -n "Forking dbus-monitor " \
+ "$WITH_SESSION_BUS_FORK_DBUS_MONITOR_OPT" >&2
+ fi
+ dbus-monitor $WITH_SESSION_BUS_FORK_DBUS_MONITOR_OPT \
+ > $dbus_me-$$.dbus-monitor-logs 2>&1 &
+ fi
+}
+
+#
+# This should be called for INT, HUP and TERM signals
+#
+dbus_stop () {
+ pid=`head -n1 $dbus_me-$$.pid`
+ if test -n "$pid" ; then
+ if [ $dbus_verbose -gt 0 ] ; then
+ echo "Killing temporary bus daemon: $pid" >&2
+ fi
+ kill -INT "$pid"
+ fi
+ rm -f $dbus_me-$$.address
+ rm -f $dbus_me-$$.pid
+}
diff --git a/addressbook/tests/tools/eds.sh b/addressbook/tests/tools/eds.sh
new file mode 100644
index 0000000..b7e759c
--- /dev/null
+++ b/addressbook/tests/tools/eds.sh
@@ -0,0 +1,36 @@
+#
+# Helper functions to start your own e-d-s instance. This depends
+# on you having your own D-Bus session bus started (first).
+#
+#
+# Copyright (C) 2011 Collabora Ltd. <http://www.collabora.co.uk/>
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+
+eds_tmpdir=$(mktemp -d)
+
+eds_init_settings () {
+ export XDG_DATA_HOME=$eds_tmpdir/.local
+ export XDG_CACHE_HOME=$eds_tmpdir/.cache
+ export XDG_CONFIG_HOME=$eds_tmpdir/.config
+}
+
+# This makes sure that our locally-built service starts,
+# in our already-started private D-Bus session,
+# so we don't need to use a .service file to make sure that it will be
+# activated instead.
+eds_start() {
+ #$(top_builddir)/addressbook/libedata-book/e-addressbook-factory -r
+ $cur_dir"/../../libedata-book/e-addressbook-factory" -r&
+ eds_pid=$!
+}
+
+# This should be called on INT TERM and EXIT
+eds_stop () {
+ kill $eds_pid
+ rm -rf $eds_tmpdir
+ rm -rf $eds_tmpdir
+}
+
diff --git a/addressbook/tests/tools/with-session-bus-eds.sh b/addressbook/tests/tools/with-session-bus-eds.sh
new file mode 100755
index 0000000..416b8bb
--- /dev/null
+++ b/addressbook/tests/tools/with-session-bus-eds.sh
@@ -0,0 +1,45 @@
+#!/bin/sh
+# with-session-bus-eds.sh - run a program with a temporary D-Bus session daemon
+#
+# interesting bits have been move into dbus to permit reusability
+#
+# Copyright (C) 2007-2008 Collabora Ltd. <http://www.collabora.co.uk/>
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+
+
+cur_dir=`dirname $0`
+
+. $cur_dir"/dbus-session.sh"
+. $cur_dir"/eds.sh"
+
+dbus_parse_args $@
+while test "z$1" != "z--"; do
+ shift
+done
+shift
+if test "z$1" = "z"; then dbus_usage; fi
+
+cleanup ()
+{
+ eds_stop
+ dbus_stop
+}
+
+trap cleanup INT HUP TERM
+
+eds_init_settings
+eds_start
+dbus_init 0
+
+dbus_start
+
+e=0
+"$@" || e=$?
+
+trap - INT HUP TERM
+cleanup
+
+exit $e
diff --git a/configure.ac b/configure.ac
index 4e0c9c8..0879fcf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1456,6 +1456,7 @@ addressbook/backends/webdav/Makefile
addressbook/tests/Makefile
addressbook/tests/ebook/Makefile
addressbook/tests/vcard/Makefile
+addressbook/tests/tools/Makefile
art/Makefile
calendar/Makefile
calendar/libecal/Makefile
--
1.7.4.1
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]