diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 14:30:35 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 14:30:35 +0000 |
commit | 378c18e5f024ac5a8aef4cb40d7c9aa9633d144c (patch) | |
tree | 44dfb6ca500d32cabd450649b322a42e70a30683 /tests/ts/losetup | |
parent | Initial commit. (diff) | |
download | util-linux-upstream.tar.xz util-linux-upstream.zip |
Adding upstream version 2.38.1.upstream/2.38.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ts/losetup')
-rwxr-xr-x | tests/ts/losetup/losetup | 86 | ||||
-rwxr-xr-x | tests/ts/losetup/losetup-blkdev | 81 | ||||
-rwxr-xr-x | tests/ts/losetup/losetup-loop | 247 | ||||
-rw-r--r-- | tests/ts/losetup/losetup_functions.sh | 7 |
4 files changed, 421 insertions, 0 deletions
diff --git a/tests/ts/losetup/losetup b/tests/ts/losetup/losetup new file mode 100755 index 0000000..1fec0dd --- /dev/null +++ b/tests/ts/losetup/losetup @@ -0,0 +1,86 @@ +#!/bin/bash + +# +# Copyright (C) 2013 Karel Zak <kzak@redhat.com> +# +# 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" + +. $TS_TOPDIR/functions.sh +ts_init "$*" + +ts_check_test_command "$TS_CMD_LOSETUP" +ts_check_test_command "$TS_CMD_LSBLK" + +# Before checking for loop support we would need to test if losetup -f works at +# all. At least we do a simple executable test for now. +$TS_CMD_LOSETUP --version >/dev/null 2>$TS_OUTPUT || ts_failed +$TS_CMD_LOSETUP --unknownopt >>$TS_OUTPUT 2>/dev/null && ts_failed +test -s $TS_OUTPUT && ts_failed + +ts_skip_nonroot +ts_check_losetup + +. "$TS_SELF/losetup_functions.sh" + +# +# file-* tests: Backing file is a regular file +# +BACKFILE=$(ts_image_init 10) + +ts_init_subtest "file-show" +LODEV=$( $TS_CMD_LOSETUP --find --show $BACKFILE ) +if [ -z "$LODEV" ]; then + ts_log "Failed to create loop device" +fi +lo_print $LODEV >> $TS_OUTPUT +$TS_CMD_LOSETUP -d $LODEV +ts_finalize_subtest + +ts_init_subtest "file-offset" +LODEV=$( $TS_CMD_LOSETUP --offset 1MiB --find --show $BACKFILE ) +if [ -z "$LODEV" ]; then + ts_log "Failed to create loop device" +fi +lo_print $LODEV >> $TS_OUTPUT +$TS_CMD_LOSETUP -d $LODEV +ts_finalize_subtest + + +ts_init_subtest "file-sizelimit" +LODEV=$( $TS_CMD_LOSETUP --sizelimit 3MiB --find --show $BACKFILE ) +if [ -z "$LODEV" ]; then + ts_log "Failed to create loop device" +fi +lo_print $LODEV >> $TS_OUTPUT +$TS_CMD_LOSETUP -d $LODEV +ts_finalize_subtest + + +ts_init_subtest "file-section" +LODEV=$( $TS_CMD_LOSETUP --offset 1MiB --sizelimit 3MiB --find --show $BACKFILE ) +if [ -z "$LODEV" ]; then + ts_log "Failed to create loop device" +fi +lo_print $LODEV >> $TS_OUTPUT +$TS_CMD_LOSETUP -d $LODEV +ts_finalize_subtest + +rm -rf $BACKFILE + +udevadm settle + +ts_finalize diff --git a/tests/ts/losetup/losetup-blkdev b/tests/ts/losetup/losetup-blkdev new file mode 100755 index 0000000..54693be --- /dev/null +++ b/tests/ts/losetup/losetup-blkdev @@ -0,0 +1,81 @@ +#!/bin/bash + +# +# Copyright (C) 2013 Karel Zak <kzak@redhat.com> +# +# 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-blkdev" + +. $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" + +ts_init_subtest "show" +LODEV=$( $TS_CMD_LOSETUP --find --show $BACKFILE ) +if [ -z "$LODEV" ]; then + ts_log "Failed to create loop device" +fi +lo_print $LODEV >> $TS_OUTPUT +udevadm settle +$TS_CMD_LOSETUP -d $LODEV +ts_finalize_subtest + +ts_init_subtest "offset" +LODEV=$( $TS_CMD_LOSETUP --offset 1MiB --find --show $BACKFILE ) +if [ -z "$LODEV" ]; then + ts_log "Failed to create loop device" +fi +lo_print $LODEV >> $TS_OUTPUT +udevadm settle +$TS_CMD_LOSETUP -d $LODEV +ts_finalize_subtest + + +ts_init_subtest "sizelimit" +LODEV=$( $TS_CMD_LOSETUP --sizelimit 3MiB --find --show $BACKFILE ) +if [ -z "$LODEV" ]; then + ts_log "Failed to create loop device" +fi +lo_print $LODEV >> $TS_OUTPUT +udevadm settle +$TS_CMD_LOSETUP -d $LODEV +ts_finalize_subtest + + +ts_init_subtest "section" +LODEV=$( $TS_CMD_LOSETUP --offset 1MiB --sizelimit 3MiB --find --show $BACKFILE ) +if [ -z "$LODEV" ]; then + ts_log "Failed to create loop device" +fi +lo_print $LODEV >> $TS_OUTPUT +udevadm settle +$TS_CMD_LOSETUP -d $LODEV +ts_finalize_subtest + +ts_finalize diff --git a/tests/ts/losetup/losetup-loop b/tests/ts/losetup/losetup-loop new file mode 100755 index 0000000..037e5c7 --- /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 diff --git a/tests/ts/losetup/losetup_functions.sh b/tests/ts/losetup/losetup_functions.sh new file mode 100644 index 0000000..d17c82a --- /dev/null +++ b/tests/ts/losetup/losetup_functions.sh @@ -0,0 +1,7 @@ + +function lo_print { + local lo=$1 + echo "offset: $( $TS_CMD_LOSETUP --list --raw -n -O OFFSET $lo )" + echo "sizelimit: $( $TS_CMD_LOSETUP --list --raw -n -O SIZELIMIT $lo )" + echo "size: $( $TS_CMD_LSBLK -o SIZE -b -n -r $lo )" +} |