From ea0e8705750e8b4448e5e51c86d07132cf1ac1c8 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Wed, 20 Jan 2016 12:38:48 +0000 Subject: Replace hard-coded sleep with a wait for the D-Bus name to appear --- test/run-test.sh | 19 +++++++++++------ test/wait-for-name.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 6 deletions(-) create mode 100755 test/wait-for-name.py (limited to 'test') diff --git a/test/run-test.sh b/test/run-test.sh index 1a3d7ac..9eacd1a 100755 --- a/test/run-test.sh +++ b/test/run-test.sh @@ -28,6 +28,11 @@ set -e failed= skipped= +echo "DBUS_TOP_SRCDIR=$DBUS_TOP_SRCDIR" +echo "DBUS_TOP_BUILDDIR=$DBUS_TOP_BUILDDIR" +echo "PYTHONPATH=$PYTHONPATH" +echo "PYTHON=${PYTHON:=python}" + if ! [ -d "$DBUS_TEST_TMPDIR" ]; then DBUS_TEST_TMPDIR="$(mktemp -d)" if ! [ -d "$DBUS_TEST_TMPDIR" ]; then @@ -36,12 +41,12 @@ if ! [ -d "$DBUS_TEST_TMPDIR" ]; then fi fi -dbus-monitor > "$DBUS_TEST_TMPDIR"/monitor.log & +if ! "$PYTHON" -c 'from gi.repository import GLib'; then + echo "could not import python-gi" + exit 77 +fi -echo "DBUS_TOP_SRCDIR=$DBUS_TOP_SRCDIR" -echo "DBUS_TOP_BUILDDIR=$DBUS_TOP_BUILDDIR" -echo "PYTHONPATH=$PYTHONPATH" -echo "PYTHON=${PYTHON:=python}" +dbus-monitor > "$DBUS_TEST_TMPDIR"/monitor.log & #echo "running the examples" @@ -60,7 +65,9 @@ echo "running cross-test (for better diagnostics use mjj29's dbus-test)" $PYTHON "$DBUS_TOP_SRCDIR"/test/cross-test-server.py > "$DBUS_TEST_TMPDIR"/cross-server.log & cross_test_server_pid="$!" -sleep 1 + +$PYTHON "$DBUS_TOP_SRCDIR"/test/wait-for-name.py org.freedesktop.DBus.Binding.TestServer + $PYTHON "$DBUS_TOP_SRCDIR"/test/cross-test-client.py > "$DBUS_TEST_TMPDIR"/cross-client.log || e=$? echo "test-client exit status: $e" diff --git a/test/wait-for-name.py b/test/wait-for-name.py new file mode 100755 index 0000000..344f641 --- /dev/null +++ b/test/wait-for-name.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python +# encoding: utf-8 + +# Copyright © 2016 Simon McVittie +# +# 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. + +import sys + +from gi.repository import GLib + +import dbus +import dbus.mainloop.glib + +if __name__ == '__main__': + dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) + + timed_out = False + name = sys.argv[1] + bus = dbus.SessionBus() + loop = GLib.MainLoop() + + def time_out(*args): + global timed_out + timed_out = True + loop.quit() + + GLib.timeout_add_seconds(30, time_out) + + def name_cb(owner): + if owner: + loop.quit() + + bus.watch_name_owner(name, name_cb) + + loop.run() + + if timed_out: + raise SystemExit('timed out') -- cgit v1.2.3