summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/functions.sh27
-rwxr-xr-xtests/run.sh2
2 files changed, 29 insertions, 0 deletions
diff --git a/tests/functions.sh b/tests/functions.sh
index 5b9b61c05..0409b6283 100644
--- a/tests/functions.sh
+++ b/tests/functions.sh
@@ -271,6 +271,9 @@ function ts_init_env {
TS_OUTDIR="$top_builddir/tests/output/$TS_COMPONENT"
TS_DIFFDIR="$top_builddir/tests/diff/$TS_COMPONENT"
+ TS_NOLOCKS=$(ts_has_option "nolocks" "$*")
+ TS_LOCKDIR="$top_builddir/tests/output"
+
ts_init_core_env
TS_VERBOSE=$(ts_has_option "verbose" "$*")
@@ -673,11 +676,34 @@ function ts_fdisk_clean {
$TS_OUTPUT
}
+
+function ts_lock {
+ local resource="$1"
+ local lockfile="${TS_LOCKDIR}/${resource}.lock"
+
+ if [ "$TS_NOLOCKS" == "yes" ]; then
+ return 0
+ fi
+
+ # Don't lock if flock(1) is missing
+ type "flock" >/dev/null 2>&1 || return 1
+
+ eval "exec 200>$lockfile"
+ flock --exclusive --timeout 30 200 || ts_skip "failed to lock $resource"
+}
+
+# Note that flock(2) lock is released on FD close.
+function ts_unlock {
+ 200<&-
+}
+
function ts_scsi_debug_init {
local devname
local t
TS_DEVICE="none"
+ ts_lock "scsi_debug"
+
# dry run is not really reliable, real modprobe may still fail
modprobe --dry-run --quiet scsi_debug &>/dev/null \
|| ts_skip "missing scsi_debug module (dry-run)"
@@ -746,6 +772,7 @@ function ts_scsi_debug_rmmod {
# TODO unset TS_DEVICE, check that nobody uses it later, e.g. ts_fdisk_clean
+ ts_unlock "scsi_debug"
return 0
}
diff --git a/tests/run.sh b/tests/run.sh
index 15e6c6baa..b32463e61 100755
--- a/tests/run.sh
+++ b/tests/run.sh
@@ -47,6 +47,7 @@ while [ -n "$1" ]; do
--fake |\
--memcheck-valgrind |\
--memcheck-asan |\
+ --nolocks |\
--show-diff |\
--verbose |\
--skip-loopdevs |\
@@ -84,6 +85,7 @@ while [ -n "$1" ]; do
echo " --fake do not run, setup tests only"
echo " --memcheck-valgrind run with valgrind"
echo " --memcheck-asan enable ASAN (requires ./configure --enable-asan)"
+ echo " --nolocks don't use flock to lock resources"
echo " --verbose verbose mode"
echo " --show-diff show diff from failed tests"
echo " --nonroot ignore test suite if user is root"