diff options
Diffstat (limited to 'tests/ts/losetup/losetup-loop')
-rwxr-xr-x | tests/ts/losetup/losetup-loop | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/tests/ts/losetup/losetup-loop b/tests/ts/losetup/losetup-loop new file mode 100755 index 0000000..d6ba902 --- /dev/null +++ b/tests/ts/losetup/losetup-loop @@ -0,0 +1,247 @@ +#!/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_LOSETUP" +ts_check_test_command "$TS_CMD_LSBLK" + +ts_skip_nonroot +ts_check_losetup + +. "$TS_SELF/losetup_functions.sh" + +# +# Backing file is a block device +# +ts_scsi_debug_init dev_size_mb=11 +BACKFILE="$TS_DEVICE" + +# 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. + +ts_init_subtest "find-race-condition" +LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show $BACKFILE ) +$TS_CMD_LOSETUP -d "$LODEV" +# The loop device may or may not exist here because no "udevadm settle". +LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show $BACKFILE ) +udevadm settle +dd if=/dev/zero of="$LODEV" count=1 bs=1 >/dev/null 2>&1 +$TS_CMD_LOSETUP --list | grep -q "$LODEV\b" +ts_log $? +udevadm settle +$TS_CMD_LOSETUP -d "$LODEV" >/dev/null 2>&1 +ts_log "Success" +ts_finalize_subtest + +udevadm settle + +ts_init_subtest "find-re-use" +LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show $BACKFILE ) +if [ -z "$LODEV" ]; then + ts_log "Failed to create loop device" +fi +LODEVR=$( $TS_CMD_LOSETUP --find --nooverlap --show $BACKFILE ) +if [ -z "$LODEVR" ]; then + ts_log "Failed to create loop device" +fi +udevadm settle +if test "$LODEV" = "$LODEVR" ; then + echo "equal" >>$TS_OUTPUT +else + echo "different" >>$TS_OUTPUT + if test -n "$LODEVR" ; then + $TS_CMD_LOSETUP -d "$LODEVR" + fi +fi +$TS_CMD_LOSETUP -d "$LODEV" +ts_log "Success" +ts_finalize_subtest + +udevadm settle + +ts_init_subtest "find-no-re-use" +LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show --offset=0 --sizelimit=1MiB $BACKFILE ) +if [ -z "$LODEV" ]; then + ts_log "Failed to create loop device" +fi +LODEVR=$( $TS_CMD_LOSETUP --find --nooverlap --show --offset=1MiB --sizelimit=1MiB $BACKFILE ) +if [ -z "$LODEVR" ]; then + ts_log "Failed to create loop device" +fi +udevadm settle +if test "$LODEV" = "$LODEVR" ; then + echo "equal" >>$TS_OUTPUT +else + echo "different" >>$TS_OUTPUT + if test -n "$LODEVR" ; then + $TS_CMD_LOSETUP -d "$LODEVR" + fi +fi +$TS_CMD_LOSETUP -d "$LODEV" +ts_log "Success" +ts_finalize_subtest + +udevadm settle + +ts_init_subtest "find-conflict" +LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show --offset=1MiB --sizelimit=2MiB $BACKFILE ) +if [ -z "$LODEV" ]; then + ts_log "Failed to create loop device" +fi +LODEVR=$( $TS_CMD_LOSETUP --find --nooverlap --show --offset=2MiB --sizelimit=2MiB $BACKFILE >/dev/null 2>&1 ) +if [ -z "$LODEVR" ]; then + ts_log "Failed to create loop device" +fi +udevadm settle +if test "$LODEV" = "$LODEVR" ; then + echo "equal" >>$TS_OUTPUT +else + echo "different" >>$TS_OUTPUT + if test -n "$LODEVR" ; then + $TS_CMD_LOSETUP -d "$LODEVR" + fi +fi +$TS_CMD_LOSETUP -d "$LODEV" +ts_log "Success" +ts_finalize_subtest + +udevadm settle + +ts_init_subtest "find-conflict-no-sizelimit" +LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show --offset=1MiB $BACKFILE ) +if [ -z "$LODEV" ]; then + ts_log "Failed to create loop device" +fi +LODEVR=$( $TS_CMD_LOSETUP --find --nooverlap --show --offset=2MiB --sizelimit=2MiB $BACKFILE >/dev/null 2>&1 ) +if [ -z "$LODEVR" ]; then + ts_log "Failed to create loop device" +fi +udevadm settle +if test "$LODEV" = "$LODEVR" ; then + echo "equal" >>$TS_OUTPUT +else + echo "different" >>$TS_OUTPUT + if test -n "$LODEVR" ; then + $TS_CMD_LOSETUP -d "$LODEVR" + fi +fi +$TS_CMD_LOSETUP -d "$LODEV" +ts_log "Success" +ts_finalize_subtest + +udevadm settle + +ts_init_subtest "find-conflict-readonly" +LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show --read-only $BACKFILE ) +if [ -z "$LODEV" ]; then + ts_log "Failed to create loop device" +fi +LODEVR=$( $TS_CMD_LOSETUP --find --nooverlap --show --offset=2MiB --sizelimit=2MiB $BACKFILE >/dev/null 2>&1 ) +if [ -z "$LODEVR" ]; then + ts_log "Failed to create loop device" +fi +udevadm settle +if test "$LODEV" = "$LODEVR" ; then + echo "equal" >>$TS_OUTPUT +else + echo "different" >>$TS_OUTPUT + if test -n "$LODEVR" ; then + $TS_CMD_LOSETUP -d "$LODEVR" + fi +fi +$TS_CMD_LOSETUP -d "$LODEV" +$TS_CMD_LOSETUP -d "$LODEVR" >/dev/null 2>&1 +ts_log "Success" +ts_finalize_subtest + +udevadm settle + +ts_init_subtest "find-ok-no-sizelimit" +LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show --offset=1MiB --sizelimit=1MiB $BACKFILE ) +if [ -z "$LODEV" ]; then + ts_log "Failed to create loop device" +fi +LODEVR=$( $TS_CMD_LOSETUP --find --nooverlap --show --offset=2MiB $BACKFILE ) +if [ -z "$LODEVR" ]; then + ts_log "Failed to create loop device" +fi +udevadm settle +if test "$LODEV" = "$LODEVR" ; then + echo "equal" >>$TS_OUTPUT +else + echo "different" >>$TS_OUTPUT + if test -n "$LODEVR" ; then + $TS_CMD_LOSETUP -d "$LODEVR" + fi +fi +$TS_CMD_LOSETUP -d "$LODEV" +ts_log "Success" +ts_finalize_subtest + +udevadm settle + +ts_init_subtest "plain-conflict" +if [ "$TS_PARALLEL" = "yes" ]; then + # There is a race in $LODEV is usage + ts_skip_subtest "no-reentrant" +else + LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show $BACKFILE ) + if [ -z "$LODEV" ]; then + ts_log "Failed to create loop device" + fi + LODEVR=$( $TS_CMD_LOSETUP --find ) + $TS_CMD_LOSETUP --nooverlap "$LODEVR" $BACKFILE >/dev/null 2>&1 + ts_log $? + udevadm settle + $TS_CMD_LOSETUP -d "$LODEV" + $TS_CMD_LOSETUP -d "$LODEVR" >/dev/null 2>&1 + ts_log "Success" + ts_finalize_subtest +fi + +udevadm settle + +ts_init_subtest "plain-readonly" +if [ "$TS_PARALLEL" = "yes" ]; then + # There is a race in $LODEV is usage + ts_skip_subtest "no-reentrant" +else + LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show --read-only $BACKFILE ) + if [ -z "$LODEV" ]; then + ts_log "Failed to create loop device" + fi + LODEVR=$( $TS_CMD_LOSETUP --find ) + $TS_CMD_LOSETUP --nooverlap "$LODEVR" $BACKFILE >/dev/null 2>&1 + ts_log $? + udevadm settle + $TS_CMD_LOSETUP -d "$LODEV" + $TS_CMD_LOSETUP -d "$LODEVR" >/dev/null 2>&1 + ts_log "Success" + ts_finalize_subtest +fi + +udevadm settle + +ts_log "Success" +ts_finalize |