automated: linux: Add ALSA basic audio test (#557)

This is an incredibly basic test, shipped as part of alsa-utils, which
plays and records a tone then uses a FFT to verify that the tone appears
sufficiently cleanly in the output.  It requires that the system under
test have previously been set up with a loopback audio path, either
within the card or via cables.

Signed-off-by: Mark Brown <broonie@kernel.org>
diff --git a/automated/linux/alsa-bat/bat.sh b/automated/linux/alsa-bat/bat.sh
new file mode 100755
index 0000000..39b5426
--- /dev/null
+++ b/automated/linux/alsa-bat/bat.sh
@@ -0,0 +1,72 @@
+#!/bin/sh -e
+# shellcheck disable=SC1091
+
+OUTPUT="$(pwd)/output"
+RESULT_FILE="${OUTPUT}/result.txt"
+
+. ../../lib/sh-test-lib
+
+create_out_dir "${OUTPUT}"
+
+PARAMS=
+
+if [ "${TST_CARD}" != "" ]; then
+	PARAMS="${PARAMS} -D${TST_CARD}"
+fi
+
+if [ "${TST_CHANNELS}" != "" ]; then
+	PARAMS="${PARAMS} -c${TST_CHANNELS}"
+fi
+
+if [ "${TST_PLAYBACK}" != "" ]; then
+	PARAMS="${PARAMS} -P${TST_PLAYBACK}"
+fi
+
+if [ "${TST_CAPTURE}" != "" ]; then
+	PARAMS="${PARAMS} -C${TST_CAPTURE}"
+fi
+
+if [ "${TST_FORMAT}" != "" ]; then
+	PARAMS="${PARAMS} -f${TST_FORMAT}"
+fi
+
+if [ "${TST_RATE}" != "" ]; then
+	PARAMS="${PARAMS} -r${TST_RATE}"
+fi
+
+if [ "${TST_LENGTH}" != "" ]; then
+	PARAMS="${PARAMS} -n${TST_LENGTH}"
+fi
+
+if [ "${TST_SIGMA_K}" != "" ]; then
+	PARAMS="${PARAMS} -k${TST_SIGMA_K}"
+fi
+
+if [ "${TST_FREQ}" != "" ]; then
+	PARAMS="${PARAMS} -F${TST_FREQ}"
+fi
+
+# Debian installs as alsabat due to name collisions
+if [ "$(command -v alsabat)" != "" ]; then
+	BAT=alsabat
+elif [ "$(command -v bat)" != "" ]; then
+	BAT=bat
+fi
+
+if [ "${BAT}" = "" ]; then
+	echo Unable to find BAT
+	exit 1
+fi
+
+TEST_NAME="$(echo "bat${PARAMS}" | sed 's/ /_/g' | sed 's/-//g')"
+
+# Return code 0 for pass, other codes for various fails
+if ${BAT} ${PARAMS} --log=${OUTPUT}/${TEST_NAME}.log ; then
+	R=pass
+else
+	R=fail
+fi
+
+echo ${TEST_NAME} ${R} >> ${RESULT_FILE}
+
+../../utils/send-to-lava.sh ${RESULT_FILE}
diff --git a/automated/linux/alsa-bat/bat.yaml b/automated/linux/alsa-bat/bat.yaml
new file mode 100644
index 0000000..33b9d54
--- /dev/null
+++ b/automated/linux/alsa-bat/bat.yaml
@@ -0,0 +1,47 @@
+metadata:
+    name: alsabat
+    format: "Lava-Test Test Definition 1.0"
+    description: "Run the ALSA Basic Audio Test"
+    maintainer:
+        - broonie@kernel.org
+    os:
+        - debian
+        - ubuntu
+        - fedora
+        - centos
+        - oe
+    scope:
+        - functional
+    devices:
+        - all
+
+params:
+    # Number of audio channel to use
+    TST_CHANNELS: ""
+
+    # Playback device
+    TST_PLAYBACK: ""
+
+    # Capture device
+    TST_CAPTURE: ""
+
+    # Sample format
+    TST_FORMAT: ""
+
+    # Sample rate
+    TST_RATE: ""
+
+    # Duration of generated signal
+    TST_LENGTH: ""
+
+    # Sigma k for analysis
+    TST_SIGMA_K: ""
+ 
+    # Target frequency
+    TST_FREQ: ""
+
+run:
+    steps:
+        - cd ./automated/linux/alsa-bat
+        - ./bat.sh
+        - ../../utils/send-to-lava.sh ./output/result.txt