tests: consolidate rmmod scsi_debug

- auto cleanup on test exit
 - Add smart timeout: Newer openSUSE systems on OBS failed to rmmod
   almost always. udevadm settle does not seem to have any affect.
 - now tests will fail if rmmod fails

Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
This commit is contained in:
Ruediger Meier 2016-10-21 13:01:55 +02:00
parent e1164591f7
commit 5c711ba945
24 changed files with 45 additions and 54 deletions

View File

@ -463,6 +463,8 @@ function ts_cleanup_on_exit {
ts_device_deinit "$dev"
done
unset TS_LOOP_DEVS
ts_scsi_debug_rmmod
}
function ts_image_md5sum {
@ -644,13 +646,10 @@ function ts_scsi_debug_init {
|| ts_skip "missing scsi_debug module (dry-run)"
# skip if still in use or removal of modules not supported at all
# We don't want a slow timeout here so we don't use ts_scsi_debug_rmmod!
modprobe -r scsi_debug &>/dev/null \
|| ts_skip "cannot remove scsi_debug module (rmmod)"
# TODO validate that all devices are gone, add function ts_scsi_debug_rmmod
# to be used by the tests too. Tests which produce non-removable scsi
# devices should fail!
modprobe -b scsi_debug "$@" &>/dev/null \
|| ts_skip "cannot load scsi_debug module (modprobe)"
@ -671,7 +670,46 @@ function ts_scsi_debug_init {
TS_DEVICE="/dev/${devname}"
# TODO validate that device is really up, for now just a warning on stderr
test -b $TS_DEVICE || echo "warning: scsi_debug device is still down"
test -b $TS_DEVICE || echo "warning: scsi_debug device is still down" >&2
}
# automatically called once in ts_cleanup_on_exit()
function ts_scsi_debug_rmmod {
local err=1
local t
local lastmsg
# Return early most importantly in case we are not root or the module does
# not exist at all.
[ $UID -eq 0 ] || return 0
[ -n "$TS_DEVICE" ] || return 0
lsmod | grep -q "^scsi_debug " || return 0
udevadm settle
# wait for successful rmmod if udevadm settle does not work
for t in 0 0.02 0.05 0.1 1; do
sleep $t
lastmsg="$(modprobe -r scsi_debug 2>&1)" && err=0 && break
done
if [ "$err" = "1" ]; then
ts_log "rmmod failed: '$lastmsg'"
ts_log "timeout removing scsi_debug module (rmmod)"
return 1
fi
if lsmod | grep -q "^scsi_debug "; then
ts_log "BUG! scsi_debug still loaded"
return 1
fi
# TODO Do we need to validate that all devices are gone?
udevadm settle
test -b "$TS_DEVICE" && echo "warning: scsi_debug device is still up" >&2
# TODO unset TS_DEVICE, check that nobody uses it later, e.g. ts_fdisk_clean
return 0
}
function ts_resolve_host {

View File

@ -39,5 +39,4 @@ udevadm settle
$TS_CMD_BLKID -p -o udev ${TS_DEVICE} >> $TS_OUTPUT
ts_finalize_subtest
rmmod scsi_debug
ts_finalize

View File

@ -79,8 +79,6 @@ $TS_CMD_BLKID -p -o udev ${TS_DEVICE}2 2>&1 | sort >> $TS_OUTPUT
mdadm -q -S ${MD_DEVICE} >> $TS_OUTPUT 2>&1
udevadm settle
rmmod scsi_debug
ts_fdisk_clean $TS_DEVICE
# substitue UUIDs and major/minor number before comparison

View File

@ -55,8 +55,7 @@ EOF
}
function deinit_device {
udevadm settle
rmmod scsi_debug
ts_scsi_debug_rmmod
}

View File

@ -73,8 +73,6 @@ udevadm settle
ts_log "Alignment offsets:"
cat /sys/block/${DEVNAME}/${DEVNAME}{1,2,3,4,5,6,7}/alignment_offset >> $TS_OUTPUT 2>&1
rmmod scsi_debug
ts_fdisk_clean $TS_DEVICE
ts_finalize

View File

@ -73,7 +73,6 @@ udevadm settle
ts_log "Alignment offsets:"
cat /sys/block/${DEVNAME}/${DEVNAME}{1,2,3,4,5,6,7}/alignment_offset >> $TS_OUTPUT 2>&1
rmmod scsi_debug
ts_fdisk_clean $TS_DEVICE

View File

@ -87,9 +87,6 @@ cat /sys/block/${MD_DEVNAME}/${MD_DEVNAME}p{1,2}/alignment_offset >> $TS_OUTPUT
mdadm -q -S ${MD_DEVICE} >> $TS_OUTPUT 2>&1
udevadm settle
rmmod scsi_debug
ts_fdisk_clean $TS_DEVICE
ts_fdisk_clean $MD_DEVICE

View File

@ -73,8 +73,6 @@ udevadm settle
ts_log "Alignment offsets:"
cat /sys/block/${DEVNAME}/${DEVNAME}{1,2,3,4,5,6,7}/alignment_offset >> $TS_OUTPUT 2>&1
rmmod scsi_debug
ts_fdisk_clean $TS_DEVICE
ts_finalize

View File

@ -58,7 +58,6 @@ udevadm settle
grep -q $DEVNAME /proc/partitions
if [ $? -ne 0 ]; then
rmmod scsi_debug
ts_skip "no partition!"
fi
@ -157,5 +156,4 @@ $TS_CMD_UMOUNT $TS_NOEXIST
rmdir $TS_NOEXIST
ts_log "...done."
rmmod scsi_debug
ts_finalize

View File

@ -60,7 +60,6 @@ udevadm settle
grep -q $DEVNAME /proc/partitions
if [ $? -ne 0 ]; then
rmmod scsi_debug
ts_skip "no partition!"
fi
@ -159,5 +158,4 @@ $TS_CMD_UMOUNT $TS_NOEXIST
rmdir $TS_NOEXIST
ts_log "...done."
rmmod scsi_debug
ts_finalize

View File

@ -46,7 +46,6 @@ udevadm settle
grep -q $DEVNAME /proc/partitions
if [ $? -ne 0 ]; then
rmmod scsi_debug
ts_skip "no partition!"
fi
@ -130,5 +129,4 @@ if type "mkfs.btrfs" &>/dev/null && mkfs.btrfs --version &>/dev/null; then
fi
ts_log "...done."
rmmod scsi_debug
ts_finalize

View File

@ -47,7 +47,6 @@ udevadm settle
grep -q $DEVNAME /proc/partitions
if [ $? -ne 0 ]; then
rmmod scsi_debug
ts_skip "no partition!"
fi
@ -131,5 +130,4 @@ if type "mkfs.btrfs" &>/dev/null && mkfs.btrfs --version &>/dev/null; then
fi
ts_log "...done."
rmmod scsi_debug
ts_finalize

View File

@ -83,6 +83,4 @@ sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
sed -i -e 's/source: .*//g' $TS_OUTPUT # devname is generated, remove it
ts_finalize_subtest
udevadm settle
rmmod scsi_debug
ts_finalize

View File

@ -87,6 +87,4 @@ sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
sed -i -e 's/source: .*//g' $TS_OUTPUT # devname is generated, remove it
ts_finalize_subtest
udevadm settle
rmmod scsi_debug
ts_finalize

View File

@ -78,8 +78,4 @@ udevadm settle
$TS_CMD_LOSETUP -d $LODEV
ts_finalize_subtest
udevadm settle
rmmod scsi_debug
ts_finalize

View File

@ -51,7 +51,5 @@ mkfs_and_mount_minix 'v2c14' '-2 -n 14'
mkfs_and_mount_minix 'v2c30' '-2 -n 30'
mkfs_and_mount_minix 'v3c60' '-3 -n 60'
udevadm settle
rmmod scsi_debug &>/dev/null
ts_finalize

View File

@ -118,9 +118,5 @@ $TS_CMD_UMOUNT --recursive --all-targets ${TS_DEVICE}1 >> $TS_OUTPUT 2>&1
[ $? == 0 ] || ts_log "umount failed"
ts_finalize_subtest
udevadm settle
rmmod scsi_debug >> $TS_OUTPUT 2>&1
[ $? == 0 ] || ts_die "device busy (umount failed?)"
ts_log "Success"
ts_finalize

View File

@ -90,10 +90,6 @@ $TS_CMD_MOUNT --bind $TS_MOUNTPOINT/mntB/mntC $TS_MOUNTPOINT/bindC
$TS_CMD_UMOUNT --recursive $TS_MOUNTPOINT >> $TS_OUTPUT 2>&1
[ $? == 0 ] || ts_die "umount failed"
udevadm settle
rmmod scsi_debug >> $TS_OUTPUT 2>&1
[ $? == 0 ] || ts_die "device busy (umount failed?)"
ts_log "Success"
ts_finalize

View File

@ -59,8 +59,7 @@ $TS_CMD_DELPART ${TS_DEVICE} 1
[ "$?" == 0 ] && echo OK >> $TS_OUTPUT 2>&1 || ts_die "Unable to remove partition" >> $TS_OUTPUT 2>&1
ts_finalize_subtest
udevadm settle
rmmod scsi_debug &> /dev/null
ts_scsi_debug_rmmod
# set global variable TS_DEVICE
ts_scsi_debug_init dev_size_mb=50 num_parts=$PARTS
@ -135,6 +134,4 @@ $TS_CMD_PARTX -a --nr 0 $TS_DEVICE
[ $(ls -d /sys/block/${DEVNAME}/${DEVNAME}* 2>/dev/null | wc -l) -eq $PARTS ] && echo "partitions added" >> $TS_OUTPUT 2>&1 || echo "Failed to add $TS_DEVICE partitions" >> $TS_OUTPUT 2>&1
ts_finalize_subtest
udevadm settle
rmmod scsi_debug
ts_finalize

View File

@ -151,6 +151,4 @@ ts_fdisk_clean $TS_DEVICE
udevadm settle
ts_finalize_subtest
rmmod scsi_debug
ts_finalize

View File

@ -165,5 +165,4 @@ udevadm settle
ts_finalize_subtest
rmmod scsi_debug
ts_finalize

View File

@ -72,5 +72,4 @@ checksum ${TS_DEVICE}1
ts_finalize_subtest
rmmod scsi_debug
ts_finalize

View File

@ -122,5 +122,4 @@ test_label_resize dos
# GPT
test_label_resize gpt
rmmod scsi_debug
ts_finalize

View File

@ -30,5 +30,4 @@ $TS_CMD_WIPEFS -a ${TS_DEVICE} > $TS_OUTDIR/out 2>/dev/null
# check for output
[ -s $TS_OUTDIR/out ] && echo "OK" &> $TS_OUTPUT || exit 1
rmmod scsi_debug &>/dev/null
ts_finalize