Re: [PATCH] fstests: test normal qgroup operations in a compress friendly way

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



On Tue, Nov 23, 2021 at 09:44:53AM -0500, Josef Bacik wrote:
> We fail btrfs/022 with -o compress because we test qgroup limits for one
> of the variations.  However this test also tests rescan and a few other
> things that pass fine with compression enabled.  Handle this by using
> the _require_no_compress helper for btrfs/022, and then creating a new
> test that is a copy of 022 without the limit exceed test.  This will

Then should we just remove the duplicated part from btrfs/022?

> allow us to still be able to test the basic functionality with
> compression enabled, and keep us from failing the limit check.
> 
> Signed-off-by: Josef Bacik <josef@xxxxxxxxxxxxxx>

Thanks,
Eryu

> ---
>  tests/btrfs/022     |   3 ++
>  tests/btrfs/251     | 108 ++++++++++++++++++++++++++++++++++++++++++++
>  tests/btrfs/251.out |   2 +
>  3 files changed, 113 insertions(+)
>  create mode 100755 tests/btrfs/251
>  create mode 100644 tests/btrfs/251.out
> 
> diff --git a/tests/btrfs/022 b/tests/btrfs/022
> index bfd6ac7f..e126e82a 100755
> --- a/tests/btrfs/022
> +++ b/tests/btrfs/022
> @@ -16,6 +16,9 @@ _supported_fs btrfs
>  _require_scratch
>  _require_btrfs_qgroup_report
>  
> +# This test requires specific data usage, skip if we have compression enabled
> +_require_no_compress
> +
>  # Test to make sure we can actually turn it on and it makes sense
>  _basic_test()
>  {
> diff --git a/tests/btrfs/251 b/tests/btrfs/251
> new file mode 100755
> index 00000000..ba23cdce
> --- /dev/null
> +++ b/tests/btrfs/251
> @@ -0,0 +1,108 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2021 Facebook.  All Rights Reserved.
> +#
> +# FS QA Test No. 251
> +#
> +# Test the basic functionality of qgroups except for the limit enforcement,
> +# this is just btrfs/022 without the limit check so we can test it with
> +# compression enabled.
> +#
> +. ./common/preamble
> +_begin_fstest auto qgroup limit
> +
> +# Import common functions.
> +. ./common/filter
> +
> +_supported_fs btrfs
> +_require_scratch
> +_require_btrfs_qgroup_report
> +
> +# Test to make sure we can actually turn it on and it makes sense
> +_basic_test()
> +{
> +	echo "=== basic test ===" >> $seqres.full
> +	_run_btrfs_util_prog subvolume create $SCRATCH_MNT/a
> +	_run_btrfs_util_prog quota enable $SCRATCH_MNT/a
> +	_run_btrfs_util_prog quota rescan -w $SCRATCH_MNT
> +	subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT a)
> +	$BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep $subvolid >> \
> +		$seqres.full 2>&1
> +	[ $? -eq 0 ] || _fail "couldn't find our subvols quota group"
> +	run_check $FSSTRESS_PROG -d $SCRATCH_MNT/a -w -p 1 -n 2000 \
> +		$FSSTRESS_AVOID
> +	_run_btrfs_util_prog subvolume snapshot $SCRATCH_MNT/a \
> +		$SCRATCH_MNT/b
> +
> +	# the shared values of both the original subvol and snapshot should
> +	# match
> +	a_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
> +	a_shared=$(echo $a_shared | awk '{ print $2 }')
> +	echo "subvol a id=$subvolid" >> $seqres.full
> +	subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT b)
> +	echo "subvol b id=$subvolid" >> $seqres.full
> +	b_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
> +	b_shared=$(echo $b_shared | awk '{ print $2 }')
> +	$BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT >> $seqres.full
> +	[ $b_shared -eq $a_shared ] || _fail "shared values don't match"
> +}
> +
> +#enable quotas, do some work, check our values and then rescan and make sure we
> +#come up with the same answer
> +_rescan_test()
> +{
> +	echo "=== rescan test ===" >> $seqres.full
> +	# first with a blank subvol
> +	_run_btrfs_util_prog subvolume create $SCRATCH_MNT/a
> +	_run_btrfs_util_prog quota enable $SCRATCH_MNT/a
> +	subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT a)
> +	run_check $FSSTRESS_PROG -d $SCRATCH_MNT/a -w -p 1 -n 2000 \
> +		$FSSTRESS_AVOID
> +	sync
> +	output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
> +	echo "qgroup values before rescan: $output" >> $seqres.full
> +	refer=$(echo $output | awk '{ print $2 }')
> +	excl=$(echo $output | awk '{ print $3 }')
> +	_run_btrfs_util_prog quota rescan -w $SCRATCH_MNT
> +	output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
> +	echo "qgroup values after rescan: $output" >> $seqres.full
> +	[ $refer -eq $(echo $output | awk '{ print $2 }') ] || \
> +		_fail "reference values don't match after rescan"
> +	[ $excl -eq $(echo $output | awk '{ print $3 }') ] || \
> +		_fail "exclusive values don't match after rescan"
> +}
> +
> +#basic noexceed limit testing
> +_limit_test_noexceed()
> +{
> +	echo "=== limit not exceed test ===" >> $seqres.full
> +	_run_btrfs_util_prog subvolume create $SCRATCH_MNT/a
> +	_run_btrfs_util_prog quota enable $SCRATCH_MNT
> +	subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT a)
> +	_run_btrfs_util_prog qgroup limit 5M 0/$subvolid $SCRATCH_MNT
> +	_ddt of=$SCRATCH_MNT/a/file bs=4M count=1 >> $seqres.full 2>&1
> +	[ $? -eq 0 ] || _fail "should have been allowed to write"
> +}
> +
> +units=`_btrfs_qgroup_units`
> +
> +_scratch_mkfs > /dev/null 2>&1
> +_scratch_mount
> +_basic_test
> +_scratch_unmount
> +_check_scratch_fs
> +
> +_scratch_mkfs > /dev/null 2>&1
> +_scratch_mount
> +_rescan_test
> +_scratch_unmount
> +_check_scratch_fs
> +
> +_scratch_mkfs > /dev/null 2>&1
> +_scratch_mount
> +_limit_test_noexceed
> +
> +# success, all done
> +echo "Silence is golden"
> +status=0
> +exit
> diff --git a/tests/btrfs/251.out b/tests/btrfs/251.out
> new file mode 100644
> index 00000000..e5cd36a9
> --- /dev/null
> +++ b/tests/btrfs/251.out
> @@ -0,0 +1,2 @@
> +QA output created by 251
> +Silence is golden
> -- 
> 2.26.3



[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux