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" "$*")
$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)"
# TODO unset TS_DEVICE, check that nobody uses it later, e.g. ts_fdisk_clean
+ ts_unlock "scsi_debug"
return 0
}
--fake |\
--memcheck-valgrind |\
--memcheck-asan |\
+ --nolocks |\
--show-diff |\
--verbose |\
--skip-loopdevs |\
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"