summaryrefslogtreecommitdiffstats
path: root/sound/upmpdcli/test.sh
blob: 34dbfe4060e08ee9526b6e4ab9aa92109fc35d83 (plain)
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
#!/bin/sh

case "$1" in
upmpdcli)
	# Version check: upmpdcli prints version to stderr on bad args, or to
	# stdout with --version; try both.
	ver_out=$(upmpdcli --version 2>&1 || upmpdcli -v 2>&1 || true)
	echo "$ver_out" | grep -qF "$2" || {
		# Some builds print only the short semver, not the full string;
		# check for the major.minor part at minimum.
		major_minor=$(echo "$2" | cut -d. -f1-2)
		echo "$ver_out" | grep -qF "$major_minor" || {
			echo "FAIL: version '$2' not found in: $ver_out"
			exit 1
		}
	}
	echo "Version check passed"

	# Binary must be executable
	[ -x /usr/bin/upmpdcli ] || { echo "FAIL: /usr/bin/upmpdcli not executable"; exit 1; }

	# Shared data files: OHCredentials and radio list MUST be present
	[ -d /usr/share/upmpdcli ] || { echo "FAIL: /usr/share/upmpdcli missing"; exit 1; }

	# Config template must have been installed
	[ -f /etc/upmpdcli.conf ] || { echo "FAIL: /etc/upmpdcli.conf missing"; exit 1; }

	# The config file must mention key directives that users typically
	# customise; catch packaging regressions that ship a truncated config.
	grep -q "friendlyname" /etc/upmpdcli.conf || \
		{ echo "FAIL: 'friendlyname' missing from config"; exit 1; }
	grep -q "mpdhost" /etc/upmpdcli.conf || \
		{ echo "FAIL: 'mpdhost' missing from config"; exit 1; }

	# Attempt a dry-run: upmpdcli will fail to connect to MPD (none
	# running) but must exit with a recognisable error, not a crash/signal.
	# We rely on the fact that it prints something before exiting.
	tmplog=$(mktemp /tmp/upmpdcli-test.XXXXXX)
	timeout 3 upmpdcli -c /etc/upmpdcli.conf >"$tmplog" 2>&1 || true
	# Must have produced some output (startup log or error)
	[ -s "$tmplog" ] || { echo "FAIL: upmpdcli produced no output"; rm -f "$tmplog"; exit 1; }
	echo "Startup output (first 5 lines):"
	head -5 "$tmplog"
	rm -f "$tmplog"
	;;
esac