On Thu, 2011-06-09 at 14:03 +0100, Raul Gutierrez Segales wrote: [snip] > Matthew Barnes wrote: > > You could probably get away with just using a date stamp instead of > > random characters for XXXXXX. The key is really for each address book > > to have its own unique ESource ID.
The attached patch uses mktemp to create a randomly-named tmp directory. [snip] > > To really automate the whole thing, the test environment is gonna have > > to set up some kind of private D-Bus session and launch the address book > > service prior to running the client-side tests, and then clean up after > > itself. I think that's possible but it's a bit beyond my expertise at > > the moment. > > > > You can kinda see why I've been dragging my feet about fixing the tests. > > Haven't had enough spare cycles to really do it properly. > > For the e-d-s backend in libfolks (not merged into master yet) we do the > following for our tests: > > - set XDG_DATA_HOME, XDG_CACHE_HOME and XDG_CONFIG_HOME to a temp dir > - start new session bus > - run tests > - clean up temp dir > > Relevant files: > > http://cgit.collabora.com/git/user/rgs/folks/tree/tests/eds/Makefile.am?h=eds-0.5 > http://cgit.collabora.com/git/user/rgs/folks/tree/tests/tools/with-session-bus-eds.sh?h=eds-0.5 > http://cgit.collabora.com/git/user/rgs/folks/tree/tests/tools/eds.sh?h=eds-0.5 Many thanks for that. I've taken the relevant bits for e-d-s - see the attached patch against the gnome-2-32 branch. If this is OK, I can try to do this for the master branch. It seems to work, though make doesn't tell me more about what's happening with each test than "PASSED" so I am not really sure that anything much is happening. This sets the XDG_* variables, but doesn't seem to start the address book service, right? Or maybe that happens automatically via activation, though I worry that that would require "make install" before "make check". One test still fails for me, either with this: ** (process:5762): WARNING **: failed to remove book; Cannot remove book: Failed to remove file '(null)': Bad address FAIL: test-ebook-stress-factory--single-book or this: (process:6466): libebook-WARNING **: e-book.c:3095: cannot get book from factory: GDBus.Error:org.freedesktop.DBus.Error.NoReply: Message did not receive a reply (timeout by message bus) ** ERROR **: failed to create addressbook: `local:/tmp/ebook-test-LBFVWV/': GDBus.Error:org.freedesktop.DBus.Error.NoReply: Message did not receive a reply (timeout by message bus) Trace/breakpoint trap FAIL: test-ebook-stress-factory--single-book -- [email protected] www.murrayc.com www.openismus.com
>From 3fb4984fa7f353ac7fe2726b557dd3536419026a Mon Sep 17 00:00:00 2001 From: Murray Cumming <[email protected]> Date: Wed, 15 Jun 2011 13:15:07 +0200 Subject: [PATCH] * 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 | 25 +++++ addressbook/tests/tools/with-session-bus-eds.sh | 44 +++++++++ configure.ac | 1 + 7 files changed, 197 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..852ba2b --- /dev/null +++ b/addressbook/tests/tools/eds.sh @@ -0,0 +1,25 @@ +# +# 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 should be called on INT TERM and EXIT +eds_stop () { + 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..b5cab54 --- /dev/null +++ b/addressbook/tests/tools/with-session-bus-eds.sh @@ -0,0 +1,44 @@ +#!/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 +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
_______________________________________________ evolution-hackers mailing list [email protected] To change your list options or unsubscribe, visit ... http://mail.gnome.org/mailman/listinfo/evolution-hackers
