From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Date: Tue, 6 Aug 2019 15:01:53 +0000 (+0200)
Subject: tools: tests: run the bats script indirectly from a shell script
X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=f52e12eafd17eba51fadd12b33e00fea31d31d83;p=qemu-gpiodev%2Flibgpiod.git

tools: tests: run the bats script indirectly from a shell script

Bats makes it very difficult to run some initial code once, perform
checks for requirements and optionally exit if they are not satisfied.

Instead of working around it in the .bats script, just create
a separate shell script that does all the initial checks and then
execs the actual bats test-suite.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
---

diff --git a/tools/Makefile.am b/tools/Makefile.am
index d9615f9..da25283 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -28,10 +28,10 @@ gpiomon_SOURCES = gpiomon.c
 
 gpiofind_SOURCES = gpiofind.c
 
-EXTRA_DIST = gpio-tools-test.bats
+EXTRA_DIST = gpio-tools-test.bats gpio-tools-test.sh
 
 if WITH_TESTS
 
-bin_SCRIPTS = gpio-tools-test.bats
+bin_SCRIPTS = gpio-tools-test.sh gpio-tools-test.bats
 
 endif
diff --git a/tools/gpio-tools-test.bats b/tools/gpio-tools-test.bats
old mode 100755
new mode 100644
index df0533c..f36d4d4
--- a/tools/gpio-tools-test.bats
+++ b/tools/gpio-tools-test.bats
@@ -1,4 +1,3 @@
-#!/usr/bin/env bats
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 #
diff --git a/tools/gpio-tools-test.sh b/tools/gpio-tools-test.sh
new file mode 100755
index 0000000..be4f492
--- /dev/null
+++ b/tools/gpio-tools-test.sh
@@ -0,0 +1,58 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+#
+# This file is part of libgpiod.
+#
+# Copyright (C) 2019 Bartosz Golaszewski <bgolaszewski@baylibre.com>
+#
+
+MIN_KERNEL_VERSION="5.1.0"
+BATS_SCRIPT="gpio-tools-test.bats"
+SOURCE_DIR="$(dirname ${BASH_SOURCE[0]})"
+
+die() {
+	echo "$@" 1>&2
+	exit 1
+}
+
+check_kernel() {
+	local REQUIRED=$1
+	local CURRENT=$(uname -r)
+
+	SORTED=$(printf "$REQUIRED\n$CURRENT" | sort -V | head -n 1)
+
+	if [ "$SORTED" != "$REQUIRED" ]
+	then
+		die "linux kernel version must be at least: v$REQUIRED - got: v$CURRENT"
+	fi
+}
+
+check_prog() {
+	local PROG=$1
+
+	which "$PROG" > /dev/null
+	if [ "$?" -ne "0" ]
+	then
+		die "$PROG not found - needed to run the tests"
+	fi
+}
+
+# Check all required non-coreutils tools
+check_prog bats
+check_prog modprobe
+check_prog rmmod
+check_prog udevadm
+
+# Check if we're running a kernel at the required version or later
+check_kernel $MIN_KERNEL_VERSION
+
+# The bats script must be in the same directory.
+if [ ! -e "$SOURCE_DIR/$BATS_SCRIPT" ]
+then
+	die "testing script not found"
+fi
+
+BATS_PATH=$(which bats)
+
+exec $BATS_PATH $SOURCE_DIR/$BATS_SCRIPT