summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorSimon McVittie <smcv@debian.org>2016-01-20 12:38:48 +0000
committerSimon McVittie <smcv@debian.org>2016-01-20 12:38:48 +0000
commitea0e8705750e8b4448e5e51c86d07132cf1ac1c8 (patch)
treede606af953bf4325d701e91eef0de967a227fcbf /test
parentc145c7c6b6c62ef097ed33e1abeaa2987b01007d (diff)
Replace hard-coded sleep with a wait for the D-Bus name to appear
Diffstat (limited to 'test')
-rwxr-xr-xtest/run-test.sh19
-rwxr-xr-xtest/wait-for-name.py57
2 files changed, 70 insertions, 6 deletions
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')