summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/Makefile.am.inc8
-rwxr-xr-xtest/run-with-dbus146
-rw-r--r--test/test-bus.conf43
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>