diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/Makefile.am.inc | 8 | ||||
-rwxr-xr-x | test/run-with-dbus | 146 | ||||
-rw-r--r-- | test/test-bus.conf | 43 |
3 files changed, 196 insertions, 1 deletions
diff --git a/test/Makefile.am.inc b/test/Makefile.am.inc index 411d006..d8ed95c 100644 --- a/test/Makefile.am.inc +++ b/test/Makefile.am.inc @@ -58,7 +58,7 @@ TESTS = \ test/endless/run-tests \ $(javascript_tests) \ $(NULL) -JS_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) $(top_srcdir)/tap-driver.sh +JS_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(top_srcdir)/test/run-with-dbus --session $(SHELL) $(top_srcdir)/tap-driver.sh JS_LOG_DRIVER_FLAGS = --comments TEST_EXTENSIONS = .js JS_LOG_COMPILER = jasmine @@ -71,6 +71,10 @@ AM_JS_LOG_FLAGS = \ $(NULL) LOG_COMPILER = gtester AM_LOG_FLAGS = -k --verbose +EXTRA_DIST += \ + test/run-with-dbus \ + test/test-bus.conf \ + $(NULL) # Use locally built versions of Endless-0.gir and libraries; this may need to be # changed to AM_TESTS_ENVIRONMENT in a future version of Automake @@ -81,4 +85,6 @@ TESTS_ENVIRONMENT = \ export LD_LIBRARY_PATH="$(top_builddir)/.libs$${LD_LIBRARY_PATH:+:$$LD_LIBRARY_PATH}"; \ export XDG_CONFIG_HOME=`mktemp -d $${TMPDIR:-/tmp}/sdktestconfig.XXXXXXXX`; \ export WEBHELPER_UNINSTALLED_EXTENSION_DIR="$(top_builddir)/.libs"; \ + export TOP_SRCDIR="$(abs_top_srcdir)"; \ + export BUILDDIR="."; $(NULL) diff --git a/test/run-with-dbus b/test/run-with-dbus new file mode 100755 index 0000000..37b818a --- /dev/null +++ b/test/run-with-dbus @@ -0,0 +1,146 @@ +#! /bin/sh +# Copyright 2008-2009 litl, LLC. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +SCRIPTNAME=$0 +START_SYSTEM_BUS= +START_SESSION_BUS= + +done=0 + +while [ "$done" != 1 ]; do + case $1 in + --system ) + START_SYSTEM_BUS=1 + ;; + --session) + START_SESSION_BUS=1 + ;; + * ) + WRAPPED_SCRIPT=$1 + done=1 + ;; + esac + shift +done + +die() +{ + if ! test -z "$DBUS_SESSION_BUS_PID" ; then + echo "killing message bus "$DBUS_SESSION_BUS_PID >&2 + kill -9 $DBUS_SESSION_BUS_PID + fi + + if ! test -z "$DBUS_SYSTEM_BUS_PID" ; then + echo "killing message bus "$DBUS_SYSTEM_BUS_PID >&2 + kill -9 $DBUS_SYSTEM_BUS_PID + fi + + echo $SCRIPTNAME: $* >&2 + exit 1 +} + +## convenient to be able to ctrl+C without leaking the message bus process +trap 'die "Received terminal signal"' INT TERM HUP + +if test -z "$TOP_SRCDIR" ; then + die "Must set TOP_SRCDIR" +fi + +if test -z "$BUILDDIR" ; then + die "Must set BUILDDIR" +fi + +RANDOM=`dbus-uuidgen` + +## this has to be set BEFORE we start session bus, +## or stuff the session bus starts won't get it +if ! test -z "$START_SYSTEM_BUS" ; then + DBUS_SYSTEM_BUS_ADDRESS="unix:abstract=/tmp/dbus-$USER-$$-$RANDOM-system" + export DBUS_SYSTEM_BUS_ADDRESS +fi + +STDERR_LOGFILE="$BUILDDIR"/stderr.log +if test x"$XDG_DATA_HOME" != x ; then + mkdir -p "$XDG_DATA_HOME"/logs || exit 1 + STDERR_LOGFILE="$XDG_DATA_HOME"/logs/stderr.log +fi +/bin/rm -f "$STDERR_LOGFILE" +SYSTEM_MONITOR_LOGFILE=`echo "$STDERR_LOGFILE" | sed -e s/stderr.log/dbus-system.log/g` + +if ! test -z "$START_SESSION_BUS" ; then + CONFIG_FILE="$TOP_SRCDIR"/test/test-bus.conf + + unset DBUS_SESSION_BUS_ADDRESS + unset DBUS_SESSION_BUS_PID + + echo "Running dbus-launch --config-file=$CONFIG_FILE" >&2 + + eval `dbus-launch --sh-syntax --config-file=$CONFIG_FILE 2>"$STDERR_LOGFILE"` + + if test -z "$DBUS_SESSION_BUS_PID" ; then + die "Failed to launch message bus for test script to run" + fi + + echo "Started bus pid $DBUS_SESSION_BUS_PID at $DBUS_SESSION_BUS_ADDRESS" >&2 +fi + +if ! test -z "$START_SYSTEM_BUS" ; then + SYSTEM_CONFIG_FILE="$TOP_SRCDIR"/test/test-bus.conf + + echo "Running dbus-daemon --fork --print-pid --config-file=$SYSTEM_CONFIG_FILE" >&2 + + unset DBUS_SYSTEM_BUS_PID + DBUS_SYSTEM_BUS_PID=`dbus-daemon --fork --print-pid --config-file=$SYSTEM_CONFIG_FILE 2>>"$STDERR_LOGFILE"` + + if test -z "$DBUS_SYSTEM_BUS_PID" ; then + die "Failed to launch system bus for test script to run" + fi + + echo "Started bus pid $DBUS_SYSTEM_BUS_PID at $DBUS_SYSTEM_BUS_ADDRESS" >&2 + + dbus-monitor --system "type='method_call'" "type='signal'" "type='method_return'" "type='error'" > "$SYSTEM_MONITOR_LOGFILE" 2>&1 & + +fi + +# Execute wrapped script +echo "Running with dbus: $WRAPPED_SCRIPT $@ with stderr to $STDERR_LOGFILE" >&2 +$WRAPPED_SCRIPT "$@" 2>>"$STDERR_LOGFILE" || die "script \"$WRAPPED_SCRIPT\" failed" + +if ! test -z "$DBUS_SESSION_BUS_PID" ; then + kill -TERM $DBUS_SESSION_BUS_PID || die "Message bus vanished! should not have happened" && echo "Killed daemon $DBUS_SESSION_BUS_PID" >&2 +fi + +if ! test -z "$DBUS_SYSTEM_BUS_PID" ; then + kill -TERM $DBUS_SYSTEM_BUS_PID || die "Message bus vanished! should not have happened" && echo "Killed daemon $DBUS_SYSTEM_BUS_PID" >&2 +fi + +sleep 2 + +## be sure it really died +if ! test -z "$DBUS_SESSION_BUS_PID" ; then + kill -9 $DBUS_SESSION_BUS_PID > /dev/null 2>&1 || true +fi + +if ! test -z "$DBUS_SYSTEM_BUS_PID" ; then + kill -9 $DBUS_SYSTEM_BUS_PID > /dev/null 2>&1 || true +fi + +exit 0 diff --git a/test/test-bus.conf b/test/test-bus.conf new file mode 100644 index 0000000..96546b1 --- /dev/null +++ b/test/test-bus.conf @@ -0,0 +1,43 @@ +<!-- Configuration file for a dbus daemon we run for test purposes --> + +<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN" + "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> +<busconfig> + <!-- Our well-known bus type, don't change this --> + <type>session</type> + + <listen>unix:tmpdir=/tmp</listen> + + <policy context="default"> + <!-- Allow everything to be sent --> + <allow send_destination="*" eavesdrop="true"/> + <!-- Allow everything to be received --> + <allow eavesdrop="true"/> + <!-- Allow anyone to own anything --> + <allow own="*"/> + </policy> + + <!-- For the session bus, override the default relatively-low limits + with essentially infinite limits, since the bus is just running + as the user anyway, using up bus resources is not something we need + to worry about. In some cases, we do set the limits lower than + "all available memory" if exceeding the limit is almost certainly a bug, + having the bus enforce a limit is nicer than a huge memory leak. But the + intent is that these limits should never be hit. --> + + <!-- the memory limits are 1G instead of say 4G because they can't exceed 32-bit signed int max --> + <limit name="max_incoming_bytes">1000000000</limit> + <limit name="max_outgoing_bytes">1000000000</limit> + <limit name="max_message_size">1000000000</limit> + <limit name="service_start_timeout">120000</limit> + <limit name="auth_timeout">240000</limit> + <limit name="max_completed_connections">100000</limit> + <limit name="max_incomplete_connections">10000</limit> + <limit name="max_connections_per_user">100000</limit> + <limit name="max_pending_service_starts">10000</limit> + <limit name="max_names_per_connection">50000</limit> + <limit name="max_match_rules_per_connection">50000</limit> + <limit name="max_replies_per_connection">50000</limit> + <limit name="reply_timeout">300000</limit> + +</busconfig> |