[pulseaudio-discuss] [PATCH v2] tests: enable to test standalone pulseaudio daemon

Deng Zhengrong dzrongg at gmail.com
Sun Jul 22 22:12:46 PDT 2012


With this fix, `check-daemon` doesn't need a system-wide running pulseaudio
anymore.

The method to use is to invoke `make check-daemon` under `src/` and it just
works! :)
---
 src/Makefile.am          |    4 +-
 src/tests/test-daemon.sh |   60 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 62 insertions(+), 2 deletions(-)
 create mode 100755 src/tests/test-daemon.sh

diff --git a/src/Makefile.am b/src/Makefile.am
index 4f6bd4f..2cf9c37 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -302,11 +302,11 @@ TESTS = $(TESTS_default)
 if BUILD_TESTS_DEFAULT
 noinst_PROGRAMS = $(TESTS_default) $(TESTS_norun) $(TESTS_daemon)
 else
-check_PROGRAMS = $(TESTS_default) $(TESTS_norun) $(TESTS_daemon)
+check_PROGRAMS = $(TESTS_default) $(TESTS_norun)
 endif
 
 check-daemon:
-	$(MAKE) check TESTS="$(TESTS_daemon)"
+	$(top_builddir)/src/tests/test-daemon.sh $(TESTS_daemon)
 
 mainloop_test_SOURCES = tests/mainloop-test.c
 mainloop_test_CFLAGS = $(AM_CFLAGS)
diff --git a/src/tests/test-daemon.sh b/src/tests/test-daemon.sh
new file mode 100755
index 0000000..ff3d9a3
--- /dev/null
+++ b/src/tests/test-daemon.sh
@@ -0,0 +1,60 @@
+#!/bin/sh
+#
+# This script is modified from dbus's run-with-temp-session-bus.sh.
+#
+
+SCRIPTNAME=$0
+
+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
+    echo $SCRIPTNAME: $* >&2
+    exit 1
+}
+
+## convenient to be able to ctrl+C without leaking the message bus process
+trap 'die "Received SIGINT"' INT
+
+unset DBUS_SESSION_BUS_ADDRESS
+unset DBUS_SESSION_BUS_PID
+
+echo "Running dbus-launch --sh-syntax" >&2
+
+eval `dbus-launch --sh-syntax`
+
+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
+
+TEMP_PULSE_DIR=`mktemp -d`
+# this script would be called inside src/ directory, so we need to use the correct path.
+# notice that for tests, we don't load ALSA related modules.
+PULSE_RUNTIME_PATH=${TEMP_PULSE_DIR} ./pulseaudio -n \
+--load="module-null-sink" --load="module-null-source" --load="module-suspend-on-idle" \
+--load="module-native-protocol-unix" --load="module-cli-protocol-unix" &
+
+# wait a few seconds to let the daemon start!
+sleep 5
+
+for ONE_TEST in $@; do
+    PULSE_RUNTIME_PATH=${TEMP_PULSE_DIR} ./${ONE_TEST}
+done
+
+# terminate the designated pulseaudio daemon
+PULSE_RUNTIME_PATH=${TEMP_PULSE_DIR} ./pacmd exit
+
+wait
+
+kill -TERM $DBUS_SESSION_BUS_PID || die "Message bus vanished! should not have happened" && echo "Killed daemon $DBUS_SESSION_BUS_PID" >&2
+
+sleep 2
+
+## be sure it really died
+kill -9 $DBUS_SESSION_BUS_PID > /dev/null 2>&1 || true
+
+exit 0
-- 
1.7.7.6



More information about the pulseaudio-discuss mailing list