| #!/bin/bash | |
| # | |
| # Copyright (C) 2016 Stanislav Brabec <sbrabec@suse.cz> | |
| # | |
| # This file is part of util-linux. | |
| # | |
| # This file is free software; you can redistribute it and/or modify | |
| # it under the terms of the GNU General Public License as published by | |
| # the Free Software Foundation; either version 2 of the License, or | |
| # (at your option) any later version. | |
| # | |
| # This file is distributed in the hope that it will be useful, | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| # GNU General Public License for more details. | |
| # | |
| TS_TOPDIR="${0%/*}/../.." | |
| TS_DESC="losetup-loop" | |
| . $TS_TOPDIR/functions.sh | |
| ts_init "$*" | |
| ts_check_test_command "$TS_CMD_MOUNT" | |
| ts_check_test_command "$TS_CMD_FINDMNT" | |
| ts_check_test_command "$TS_CMD_LOSETUP" | |
| ts_skip_nonroot | |
| ts_check_losetup | |
| ts_check_prog "mkfs.ext3" | |
| function verify_mount_dev { | |
| local dev=$1 | |
| local mp=$2 | |
| local dev_mounted=$($TS_CMD_FINDMNT -no SOURCE --mountpoint "$mp") | |
| if test "$dev" != "$dev_mounted" ; then | |
| echo "Mounted incorrect device: have '$dev_mounted', want '$dev'" >&2 | |
| return 1 | |
| fi | |
| } | |
| # | |
| # file-* tests: Backing file is a regular file | |
| # | |
| BACKFILE=$(ts_image_init 10) | |
| mkfs.ext3 -F $BACKFILE &> /dev/null || ts_die "Cannot make ext3 on $BACKFILE" | |
| # All tests are separated by "udevadm settle" because loop device exists some time after | |
| # "losetup -d". This device confuses some tests. And find-race-condition, tests, | |
| # whether re-use of this device works. | |
| udevadm settle | |
| ts_init_subtest "file" | |
| [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT | |
| $TS_CMD_MOUNT "$BACKFILE" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1 | |
| $TS_CMD_UMOUNT "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1 | |
| udevadm settle | |
| ts_log "Success" | |
| ts_finalize_subtest | |
| ts_init_subtest "file-o-loop" | |
| [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT | |
| $TS_CMD_MOUNT -oloop "$BACKFILE" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1 | |
| $TS_CMD_UMOUNT "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1 | |
| udevadm settle | |
| ts_log "Success" | |
| ts_finalize_subtest | |
| ts_init_subtest "dev-loop" | |
| [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT | |
| LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show $BACKFILE 2>> $TS_OUTPUT ) | |
| $TS_CMD_MOUNT $LODEV "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1 | |
| verify_mount_dev "$LODEV" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1 | |
| $TS_CMD_UMOUNT "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1 | |
| $TS_CMD_LOSETUP --detach $LODEV >> $TS_OUTPUT 2>&1 | |
| udevadm settle | |
| ts_log "Success" | |
| ts_finalize_subtest | |
| ts_init_subtest "o-loop-val" | |
| if [ "$TS_PARALLEL" = "yes" ]; then | |
| # There is a race in $LODEV is usage | |
| ts_skip_subtest "no-reentrant" | |
| else | |
| [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT | |
| LODEV=$( $TS_CMD_LOSETUP --find 2>> $TS_OUTPUT ) | |
| $TS_CMD_MOUNT -oloop=$LODEV "$BACKFILE" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1 | |
| verify_mount_dev "$LODEV" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1 | |
| $TS_CMD_UMOUNT "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1 | |
| udevadm settle | |
| ts_log "Success" | |
| ts_finalize_subtest | |
| fi | |
| ts_init_subtest "reuse" | |
| [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT | |
| LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show "$BACKFILE" 2>> $TS_OUTPUT ) | |
| $TS_CMD_MOUNT "$BACKFILE" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1 | |
| verify_mount_dev "$LODEV" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1 | |
| $TS_CMD_UMOUNT "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1 | |
| $TS_CMD_LOSETUP --detach $LODEV >> $TS_OUTPUT 2>&1 | |
| udevadm settle | |
| ts_log "Success" | |
| ts_finalize_subtest | |
| ts_init_subtest "conflict" | |
| [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT | |
| LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show --offset=1000 "$BACKFILE" 2>> $TS_OUTPUT ) | |
| $TS_CMD_MOUNT "$BACKFILE" "$TS_MOUNTPOINT" 2>&1 \ | |
| | sed 's/:.*:/: <target>/; s/for .*/for <source>/' > $TS_OUTPUT | |
| $TS_CMD_LOSETUP --detach $LODEV >> $TS_OUTPUT 2>&1 | |
| udevadm settle | |
| ts_log "Success" | |
| ts_finalize_subtest | |
| ts_init_subtest "o-loop-val-initialized" | |
| [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT | |
| LODEV=$( $TS_CMD_LOSETUP --show -f "$BACKFILE" 2>>$TS_OUTPUT) | |
| $TS_CMD_MOUNT -oloop=$LODEV "$BACKFILE" "$TS_MOUNTPOINT" 2>&1 \ | |
| | sed 's/:.*:/: <target>/; s/for .*/for <source>/' > $TS_OUTPUT | |
| $TS_CMD_LOSETUP --detach $LODEV >> $TS_OUTPUT 2>&1 | |
| udevadm settle | |
| ts_log "Success" | |
| ts_finalize_subtest | |
| ts_init_subtest "o-loop-val-conflict" | |
| [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT | |
| cp "$BACKFILE" "$BACKFILE"-2 | |
| LODEV=$( $TS_CMD_LOSETUP --show -f "$BACKFILE"-2 2>> $TS_OUTPUT) | |
| $TS_CMD_MOUNT -oloop=$LODEV "$BACKFILE" "$TS_MOUNTPOINT" 2>&1 \ | |
| | sed 's/:.*:/: <target>/; s/for .*/for <source>/' > $TS_OUTPUT | |
| $TS_CMD_LOSETUP --detach $LODEV >> $TS_OUTPUT 2>&1 | |
| rm "$BACKFILE"-2 | |
| udevadm settle | |
| ts_log "Success" | |
| ts_finalize_subtest | |
| ts_log "Success" | |
| ts_finalize |