1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
#!/bin/sh
set -eu
PYTEST_EXPR='not test_name and not test_loopback_ and not test_default_'
runtime_dir="$(mktemp -d)"
export XDG_RUNTIME_DIR="$runtime_dir"
audio_mode=""
pipewire_pid=""
pipewire_pulse_pid=""
cleanup() {
if [ "$audio_mode" = "pulseaudio" ]; then
pulseaudio --kill >/dev/null 2>&1 || true
else
[ -n "$pipewire_pulse_pid" ] && kill "$pipewire_pulse_pid" >/dev/null 2>&1 || true
[ -n "$pipewire_pid" ] && kill "$pipewire_pid" >/dev/null 2>&1 || true
fi
rm -rf "$runtime_dir"
}
trap cleanup EXIT INT TERM
if command -v pulseaudio >/dev/null 2>&1; then
audio_mode="pulseaudio"
pulseaudio --daemonize=yes --exit-idle-time=-1 --log-target=stderr
elif command -v pipewire >/dev/null 2>&1 && command -v pipewire-pulse >/dev/null 2>&1; then
audio_mode="pipewire-pulse"
pipewire >"$runtime_dir/pipewire.log" 2>&1 &
pipewire_pid="$!"
pipewire-pulse >"$runtime_dir/pipewire-pulse.log" 2>&1 &
pipewire_pulse_pid="$!"
else
echo "No supported PulseAudio server available (need pulseaudio or pipewire-pulse)" >&2
exit 1
fi
for _i in 1 2 3 4 5 6 7 8 9 10; do
if [ -S "$XDG_RUNTIME_DIR/pulse/native" ]; then
break
fi
sleep 0.2
done
if [ ! -S "$XDG_RUNTIME_DIR/pulse/native" ]; then
echo "PulseAudio socket did not appear at $XDG_RUNTIME_DIR/pulse/native" >&2
[ -f "$runtime_dir/pipewire.log" ] && tail -n 50 "$runtime_dir/pipewire.log" || true
[ -f "$runtime_dir/pipewire-pulse.log" ] && tail -n 50 "$runtime_dir/pipewire-pulse.log" || true
exit 1
fi
for py in $(py3versions --supported); do
case "$py" in
python3.*) pybin="$py" ;;
*) pybin="python$py" ;;
esac
"$pybin" -m pytest -k "$PYTEST_EXPR" test_soundcard.py
done
|