From: Marcos Paulo de Souza <mpdesouza@xxxxxxxx> Signed-off-by: Marcos Paulo de Souza <mpdesouza@xxxxxxxx> --- Changes from v2: * Added 'Created subvolume...' into 203.out to match the subvolume creating command * Changed awk to $AWK_PROG, suggested by Eryu * Changed _run_btrfs_util_prog to $BTRFS_UTIL_PROG, suggested by Eryu * Use _scratch_unmount instead of executing umount by hand, sugested by Eryu * Created a local function to delete and list subvolumes, suggested by Eryu Changes from v1: * Added some prints printing what is being tested * The test now uses the _btrfs_get_subvolid to get subvolumeids instead of using plain integers tests/btrfs/203 | 68 +++++++++++++++++++++++++++++++++++++++++++++ tests/btrfs/203.out | 17 ++++++++++++ tests/btrfs/group | 1 + 3 files changed, 86 insertions(+) create mode 100755 tests/btrfs/203 create mode 100644 tests/btrfs/203.out diff --git a/tests/btrfs/203 b/tests/btrfs/203 new file mode 100755 index 00000000..0f662db1 --- /dev/null +++ b/tests/btrfs/203 @@ -0,0 +1,68 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2020 SUSE Linux Products GmbH. All Rights Reserved. +# +# FSQA Test No. 203 +# +# Test subvolume deletion using the subvolume id, even when the subvolume in +# question is in a different mount space. +# +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" +tmp=/tmp/$$ +status=1 # failure is the default! + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter +. ./common/filter.btrfs + +# real QA test starts here +_supported_fs btrfs +_supported_os Linux +_require_scratch +_require_btrfs_command subvolume delete --subvolid + +_scratch_mkfs > /dev/null 2>&1 +_scratch_mount + +_delete_and_list() +{ + local subvol_name="$1" + local msg="$2" + + SUBVOLID=$(_btrfs_get_subvolid $SCRATCH_MNT "$subvol_name") + $BTRFS_UTIL_PROG subvolume delete --subvolid $SUBVOLID $SCRATCH_MNT | _filter_scratch + + echo "$msg" + $BTRFS_UTIL_PROG subvolume list $SCRATCH_MNT | $AWK_PROG '{ print $NF }' +} + +# Test creating a normal subvolumes +$BTRFS_UTIL_PROG subvolume create $SCRATCH_MNT/subvol1 | _filter_scratch +$BTRFS_UTIL_PROG subvolume create $SCRATCH_MNT/subvol2 | _filter_scratch +$BTRFS_UTIL_PROG subvolume create $SCRATCH_MNT/subvol3 | _filter_scratch + +echo "Current subvolume ids:" +$BTRFS_UTIL_PROG subvolume list $SCRATCH_MNT | $AWK_PROG '{ print $NF }' + +# Delete the subvolume subvol1, and list the remaining two subvolumes +_delete_and_list subvol1 "After deleting one subvolume:" +_scratch_unmount + +# Now we mount the subvol2, which makes subvol3 not accessible for this mount +# point, but we should be able to delete it using it's subvolume id +$MOUNT_PROG -o subvol=subvol2 $SCRATCH_DEV $SCRATCH_MNT +_delete_and_list subvol3 "Last remaining subvolume:" +_scratch_unmount + +# now mount the rootfs +_scratch_mount +# Delete the subvol2 +_delete_and_list subvol2 "All subvolumes removed." +_scratch_unmount + +# success, all done +status=0 +exit diff --git a/tests/btrfs/203.out b/tests/btrfs/203.out new file mode 100644 index 00000000..3301852b --- /dev/null +++ b/tests/btrfs/203.out @@ -0,0 +1,17 @@ +QA output created by 203 +Create subvolume 'SCRATCH_MNT/subvol1' +Create subvolume 'SCRATCH_MNT/subvol2' +Create subvolume 'SCRATCH_MNT/subvol3' +Current subvolume ids: +subvol1 +subvol2 +subvol3 +Delete subvolume (no-commit): 'SCRATCH_MNT/subvol1' +After deleting one subvolume: +subvol2 +subvol3 +Delete subvolume (no-commit): 'SCRATCH_MNT/subvol3' +Last remaining subvolume: +subvol2 +Delete subvolume (no-commit): 'SCRATCH_MNT/subvol2' +All subvolumes removed. diff --git a/tests/btrfs/group b/tests/btrfs/group index 79f85e97..e7744217 100644 --- a/tests/btrfs/group +++ b/tests/btrfs/group @@ -204,3 +204,4 @@ 200 auto quick send clone 201 auto quick punch log 202 auto quick subvol snapshot +203 auto quick subvol -- 2.25.0