Use separate bus configuration files for executing test cases with a temporary session bus

Instead of the previous adaptation of the existing template
for the session bus, a separate template is now used, which
can be more easily adapted to the requirements of the test
applications.

Bug: https://gitlab.freedesktop.org/dbus/dbus/issues/57
This commit is contained in:
Ralf Habacker 2011-10-31 15:53:25 +01:00
parent 93b7bb392b
commit 6d4639a333
6 changed files with 90 additions and 42 deletions

View file

@ -458,6 +458,8 @@ in_data = \
data/valid-config-files/multi-user.conf.in \
data/valid-config-files/pending-fd-timeout.conf.in \
data/valid-config-files/systemd-activation.conf.in \
data/valid-config-files/tmp-session.conf.in \
data/valid-config-files-system/tmp-session-like-system.conf.in \
data/invalid-service-files-system/org.freedesktop.DBus.TestSuiteNoExec.service.in \
data/invalid-service-files-system/org.freedesktop.DBus.TestSuiteNoService.service.in \
data/invalid-service-files-system/org.freedesktop.DBus.TestSuiteNoUser.service.in \
@ -476,7 +478,6 @@ in_data = \
EXTRA_DIST += $(in_data)
static_data = \
name-test/tmp-session-like-system.conf \
data/auth/anonymous-client-successful.auth-script \
data/auth/anonymous-server-successful.auth-script \
data/auth/cancel.auth-script \
@ -579,6 +580,8 @@ uninstalled-config-local:
for F in $(in_data); do \
$(MKDIR_P) "$${F%/*}"; \
sed \
-e 's,[@]DBUS_SESSION_CONF_MAYBE_AUTH_EXTERNAL[@],$(DBUS_SESSION_CONF_MAYBE_AUTH_EXTERNAL),' \
-e 's,[@]DBUS_SESSION_BUS_LISTEN_ADDRESS[@],$(DBUS_SESSION_BUS_LISTEN_ADDRESS),' \
-e 's,[@]DBUS_TEST_DATA[@],@abs_builddir@/data,' \
-e 's,[@]DBUS_TEST_EXEC[@],@abs_builddir@,' \
-e 's,[@]DBUS_USER[@],$(DBUS_USER),' \
@ -594,6 +597,8 @@ if DBUS_ENABLE_INSTALLED_TESTS
for F in $(in_data); do \
$(MKDIR_P) "installable/$${F%/*}"; \
sed \
-e 's,[@]DBUS_SESSION_CONF_MAYBE_AUTH_EXTERNAL[@],$(DBUS_SESSION_CONF_MAYBE_AUTH_EXTERNAL),' \
-e 's,[@]DBUS_SESSION_BUS_LISTEN_ADDRESS[@],$(DBUS_SESSION_BUS_LISTEN_ADDRESS),' \
-e 's,[@]DBUS_TEST_DATA[@],$(testexecdir)/data,' \
-e 's,[@]DBUS_TEST_EXEC[@],$(testexecdir),' \
-e 's,[@]DBUS_USER[@],$(DBUS_USER),' \

View file

@ -1,5 +1,5 @@
<!-- This configuration file controls the per-user-login-session message bus.
Add a session-local.conf and edit that rather than changing this
Add a session-local.conf and edit that rather than changing this
file directly. -->
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
@ -14,7 +14,7 @@
<listen>unix:tmpdir=/tmp</listen>
<standard_session_servicedirs />
<servicedir>@DBUS_TEST_DATA@/valid-service-files</servicedir>
<!-- intended to match system bus -->
<policy context="default">
@ -63,21 +63,21 @@
send_member="EmitFoo"/>
</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
<!-- 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="service_start_timeout">120000</limit>
<limit name="auth_timeout">240000</limit>
<limit name="max_completed_connections">100000</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>

View file

@ -0,0 +1,67 @@
<!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>
<!-- If we fork, keep the user's original umask to avoid affecting
the behavior of child processes. -->
<keep_umask/>
<listen>@DBUS_SESSION_BUS_LISTEN_ADDRESS@</listen>
<!-- On Unix systems, the most secure authentication mechanism is
EXTERNAL, which uses credential-passing over Unix sockets.
This authentication mechanism is not available on Windows,
is not suitable for use with the tcp: or nonce-tcp: transports,
and will not work on obscure flavours of Unix that do not have
a supported credentials-passing mechanism. On those platforms/transports,
comment out the <auth> element to allow fallback to DBUS_COOKIE_SHA1. -->
@DBUS_SESSION_CONF_MAYBE_AUTH_EXTERNAL@
<servicedir>@DBUS_TEST_DATA@/valid-service-files</servicedir>
<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_incoming_unix_fds">250000000</limit>
<limit name="max_outgoing_bytes">1000000000</limit>
<limit name="max_outgoing_unix_fds">250000000</limit>
<limit name="max_message_size">1000000000</limit>
<!-- We do not override max_message_unix_fds here since the in-kernel
limit is also relatively low -->
<limit name="service_start_timeout">120000</limit>
<limit name="auth_timeout">240000</limit>
<limit name="pending_fd_timeout">150000</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="max_containers">10000</limit>
<limit name="max_containers_per_user">10000</limit>
<limit name="max_container_metadata_bytes">1000000000</limit>
<!-- This is relatively low so that app-containers (which we do not fully
trust) do not cause DoS. -->
<limit name="max_connections_per_container">16</limit>
</busconfig>

View file

@ -19,7 +19,7 @@ SH_LOG_DRIVER = $(LOG_DRIVER)
LOG_COMPILER = \
@abs_top_builddir@/tools/dbus-run-session$(EXEEXT) \
--config-file=@abs_builddir@/uninstalled-session.conf \
--config-file=@abs_top_builddir@/test/data/valid-config-files/tmp-session.conf \
--dbus-daemon=@abs_top_builddir@/bus/dbus-daemon$(EXEEXT) \
-- \
$(NULL)
@ -46,15 +46,6 @@ AM_TESTS_ENVIRONMENT = \
unset DBUS_SESSION_BUS_PID; \
$(NULL)
uninstalled-session.conf: $(top_builddir)/bus/session.conf Makefile
$(SED) -e 's|<standard_session_servicedirs.*$$|<servicedir>@abs_top_builddir@/test/data/valid-service-files</servicedir>|g' \
-e 's|<include.*$$||g' \
< $< > $@
check_DATA = \
uninstalled-session.conf \
$(NULL)
TESTS += \
run-test.sh \
run-test-systemserver.sh \

View file

@ -7,8 +7,8 @@ MODE=$1
DBUS_TEST_NAME_RUN_TEST_SCRIPT=1
export DBUS_TEST_NAME_RUN_TEST_SCRIPT
SOURCE_CONFIG_FILE=$DBUS_TOP_SRCDIR/test/name-test/tmp-session-like-system.conf
export SOURCE_CONFIG_FILE
DBUS_TEST_CONFIG_FILE=$DBUS_TOP_BUILDDIR/test/data/valid-config-files-system/tmp-session-like-system.conf
export DBUS_TEST_CONFIG_FILE
# Rerun ourselves with tmp session bus if we're not already
if test -z "$DBUS_TEST_NAME_IN_SYS_RUN_TEST"; then
DBUS_TEST_NAME_IN_SYS_RUN_TEST=1

View file

@ -4,12 +4,13 @@ SCRIPTNAME="$0"
WRAPPED_SCRIPT="$1"
shift
CONFIG_FILE=./tmp-session-bus.$$.conf
if test -z "$DBUS_TEST_CONFIG_FILE"; then
DBUS_TEST_CONFIG_FILE="$DBUS_TOP_BUILDDIR/test/data/valid-config-files/tmp-session.conf"
fi
die ()
{
echo "$SCRIPTNAME: $*" >&2
rm -f "$CONFIG_FILE"
exit 1
}
@ -17,21 +18,6 @@ if test -z "$DBUS_TOP_BUILDDIR" ; then
die "Must set DBUS_TOP_BUILDDIR"
fi
SERVICE_DIR="$DBUS_TOP_BUILDDIR/test/data/valid-service-files"
ESCAPED_SERVICE_DIR=`echo $SERVICE_DIR | sed -e 's/\//\\\\\\//g'`
echo "escaped service dir is: $ESCAPED_SERVICE_DIR" >&2
if test -z "$SOURCE_CONFIG_FILE"; then
SOURCE_CONFIG_FILE="$DBUS_TOP_BUILDDIR/bus/session.conf";
fi
## create a configuration file based on the standard session.conf
cat $SOURCE_CONFIG_FILE | \
sed -e 's/<standard_session_servicedirs.*$/<servicedir>'$ESCAPED_SERVICE_DIR'<\/servicedir>/g' | \
sed -e 's/<include.*$//g' \
> $CONFIG_FILE
echo "Created configuration file $CONFIG_FILE" >&2
if ! test -e "$DBUS_TOP_BUILDDIR"/bus/dbus-daemon ; then
die "$DBUS_TOP_BUILDDIR/bus/dbus-daemon does not exist"
fi
@ -46,12 +32,11 @@ unset DBUS_SESSION_BUS_ADDRESS
unset DBUS_SESSION_BUS_PID
$DBUS_TOP_BUILDDIR/tools/dbus-run-session \
--config-file="$CONFIG_FILE" \
--config-file="$DBUS_TEST_CONFIG_FILE" \
--dbus-daemon="$DBUS_TOP_BUILDDIR/bus/dbus-daemon" \
-- \
"$WRAPPED_SCRIPT" "$@"
error=$?
# clean up
rm -f "$CONFIG_FILE"
exit $error