diff mbox series

[v3] xfs: test xfs_quota's 'dump' and 'report' -L/-R range parameters

Message ID 20220805172531.520862-1-aalbersh@redhat.com (mailing list archive)
State New, archived
Headers show
Series [v3] xfs: test xfs_quota's 'dump' and 'report' -L/-R range parameters | expand

Commit Message

Andrey Albershteyn Aug. 5, 2022, 5:25 p.m. UTC
These parameters define ID range of users/groups/projects to show.
This test adds more checks for wider coverage (e.g. empty range,
full range, open range).

Signed-off-by: Andrey Albershteyn <aalbersh@redhat.com>
---

This is regression test in relation to the patch [1].

Changes from v1:
 - Moved to separate test (initially added to 152)
Changes from v2:
 - sed expression simplification
 - remove _filter_trailing_spaces() from common/filter
 - easier to read test cases

[1]: https://lore.kernel.org/all/20220328222503.146496-1-aalbersh@redhat.com/

---
 tests/xfs/550     | 169 +++++++++++++++++++++++++++++++++
 tests/xfs/550.out | 232 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 401 insertions(+)
 create mode 100755 tests/xfs/550
 create mode 100644 tests/xfs/550.out

Comments

Zorro Lang Sept. 9, 2022, 3:49 a.m. UTC | #1
On Fri, Aug 05, 2022 at 07:25:31PM +0200, Andrey Albershteyn wrote:
> These parameters define ID range of users/groups/projects to show.
> This test adds more checks for wider coverage (e.g. empty range,
> full range, open range).
> 
> Signed-off-by: Andrey Albershteyn <aalbersh@redhat.com>
> ---
> 
> This is regression test in relation to the patch [1].

If this's a regression test case for a specific patchset, will it fail
on the kernel without this patchset?

> 
> Changes from v1:
>  - Moved to separate test (initially added to 152)
> Changes from v2:
>  - sed expression simplification
>  - remove _filter_trailing_spaces() from common/filter
>  - easier to read test cases
> 
> [1]: https://lore.kernel.org/all/20220328222503.146496-1-aalbersh@redhat.com/
> 
> ---
>  tests/xfs/550     | 169 +++++++++++++++++++++++++++++++++
>  tests/xfs/550.out | 232 ++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 401 insertions(+)
>  create mode 100755 tests/xfs/550
>  create mode 100644 tests/xfs/550.out
> 
> diff --git a/tests/xfs/550 b/tests/xfs/550
> new file mode 100755
> index 00000000..1fc1d37c
> --- /dev/null
> +++ b/tests/xfs/550
> @@ -0,0 +1,169 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2022 Andrey Albershteyn <aalbersh@redhat.com>.
> +# All Rights Reserved.
> +#
> +# FS QA Test 550
> +#
> +# Test xfs_quota -L/-U range parameters for report and dump commands. These
> +# parameters define ID range of users/groups/projects with non-zero quota to
> +# show.
> +#
> +. ./common/preamble
> +_begin_fstest quick quota

Can it be in "auto" group?

> +
> +# Override the default cleanup function.
> +_cleanup()
> +{
> +	_scratch_unmount >/dev/null 2>&1

Why a _scratch_unmount is needed at here? I think this case doesn't need
a specific _cleanup.

> +	cd /
> +	rm -f $tmp.*
> +}
> +
> +# Import common functions.
> +. ./common/filter
> +. ./common/quota
> +
> +# real QA test starts here
> +_supported_fs xfs
> +_require_test

I didn't see this case need TEST_DIR, so this requirement might be useless

> +_require_scratch
> +_require_xfs_quota
> +_require_user fsgqa
> +_require_user fsgqa2
> +_require_group fsgqa
> +_require_group fsgqa2
> +
> +_scratch_mkfs_xfs >>$seqres.full || _fail "mkfs failed"
> +
> +uqid=`id -u fsgqa`
> +gqid=`id -g fsgqa`
> +
> +uqid2=`id -u fsgqa2`
> +gqid2=`id -g fsgqa2`
> +
> +[ $uqid -ge $uqid2 ] && _notrun \
> +	"ID of fsgqa user ($uqid) expected to be lower than fsgqa2 ($uqid2)"
> +[ $gqid -ge $gqid2 ] && _notrun \
> +	"ID of fsgqa group ($gqid) expected to be lower than fsgqa2 ($gqid2)"
> +
> +pqid=10
> +pqid2=42
> +cat >$tmp.projects <<EOF
> +$pqid:$SCRATCH_MNT
> +$pqid2:$SCRATCH_MNT
> +EOF
> +
> +cat >$tmp.projid <<EOF
> +root:0
> +fsgqa:$pqid
> +fsgqa2:$pqid2
> +EOF
> +
> +filter_dump()
> +{
> +	_filter_scratch | sed -e 's/^[0-9]\+/#ID/' -e 's/\s*$//'
> +}
> +
> +filter_report()
> +{
> +	_filter_quota | sed -e '/^root/d' \
> +				-e '/^#0/d' \
> +				-e 's/^#[0-9]\+/#ID/' \
> +				-e 's/\s*$//'
> +}
> +
> +set_quota_limit()
> +{
> +	local bs=$1
> +	local bh=$2
> +	local is=$3
> +	local ih=$4
> +	local user=$5
> +
> +	$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \
> +			-c "limit -$type bsoft=$bs bhard=$bh $user" \
> +			-c "limit -$type isoft=$is ihard=$ih $user" \
> +			$SCRATCH_MNT
> +}
> +
> +test_dump()
> +{
> +	local description=$1 ; shift
> +	local opt="$*"
> +
> +	echo "Options: $description"
> +
> +	rm -f $tmp.backup 2>>/dev/null
> +	$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \
> +			-c "dump -$type $opt -f $tmp.backup" \
> +			$SCRATCH_MNT | _filter_scratch
> +	cat $tmp.backup | filter_dump
> +}
> +
> +test_report()
> +{
> +	local description=$1 ; shift
> +	local opt="$*"
> +
> +	echo "Options: $description"
> +
> +	$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \
> +			-c "report -$type $opt -bi" \
> +			$SCRATCH_MNT | filter_report
> +}
> +
> +test_xfs_quota()
> +{
> +	set_quota_limit 512k 2048k 10 20 $id
> +	set_quota_limit 1024k 4096k 10 20 $id2
> +
> +	echo "dump options test (type=$type)"
> +	test_dump "no options (full range)"
> +	test_dump "-L option" -L $id
> +	test_dump "-U option" -U $id
> +	test_dump "-L/-U options (one element range)" -L $id -U $id
> +	test_dump "-L/-U options (multiple elements range)" -L $id -U $id2
> +	test_dump "-L/-U options (empty range)" -L $id2 -U $id
> +	test_dump "-L/-U options (full range)" -L 0 -U 0
> +
> +	echo "report options test (type=$type)"
> +	test_report "no options (full range)"
> +	test_report "-L options" -L $id
> +	test_report "-U options" -U $id
> +	test_report "-L/-U options (one element range)" -L $id -U $id
> +	test_report "-L/-U options (multiple elements range)" -L $id -U $id2
> +	test_report "-L/-U options (empty range)" -L $id2 -U $id
> +	test_report "-L/-U options (full range)" -L 0 -U 0
> +}
> +
> +echo "Checking User quota"
> +_scratch_unmount >/dev/null 2>&1
> +_qmount_option "uquota"
> +_try_scratch_mount || _fail "qmount failed"

Why not use "_qmount" directly? (same below)

Thanks,
Zorro

> +type=u
> +id=$uqid
> +id2=$uqid2
> +test_xfs_quota
> +
> +echo "Checking Group quota"
> +_scratch_unmount >/dev/null 2>&1
> +_qmount_option "gquota"
> +_try_scratch_mount || _fail "qmount failed"
> +type=g
> +id=$gqid
> +id2=$gqid2
> +test_xfs_quota
> +
> +echo "Checking Project quota"
> +_scratch_unmount >/dev/null 2>&1
> +_qmount_option "pquota"
> +_try_scratch_mount || _fail "qmount failed"
> +type=p
> +id=$pqid
> +id2=$pqid2
> +test_xfs_quota
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/xfs/550.out b/tests/xfs/550.out
> new file mode 100644
> index 00000000..d98166c4
> --- /dev/null
> +++ b/tests/xfs/550.out
> @@ -0,0 +1,232 @@
> +QA output created by 550
> +Checking User quota
> +dump options test (type=u)
> +Options: no options (full range)
> +fs = SCRATCH_DEV
> +#ID          1024    4096      10      20
> +fs = SCRATCH_DEV
> +#ID          2048    8192      10      20
> +Options: -L option
> +fs = SCRATCH_DEV
> +#ID          1024    4096      10      20
> +fs = SCRATCH_DEV
> +#ID          2048    8192      10      20
> +Options: -U option
> +fs = SCRATCH_DEV
> +#ID          1024    4096      10      20
> +Options: -L/-U options (one element range)
> +fs = SCRATCH_DEV
> +#ID          1024    4096      10      20
> +Options: -L/-U options (multiple elements range)
> +fs = SCRATCH_DEV
> +#ID          1024    4096      10      20
> +fs = SCRATCH_DEV
> +#ID          2048    8192      10      20
> +Options: -L/-U options (empty range)
> +Options: -L/-U options (full range)
> +fs = SCRATCH_DEV
> +#ID          1024    4096      10      20
> +fs = SCRATCH_DEV
> +#ID          2048    8192      10      20
> +report options test (type=u)
> +Options: no options (full range)
> +User quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +fsgqa 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +fsgqa2 0 1024 4096 00 [--------] 0 10 20 00 [--------]
> +
> +Options: -L options
> +User quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
> +
> +Options: -U options
> +User quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +
> +Options: -L/-U options (one element range)
> +User quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +
> +Options: -L/-U options (multiple elements range)
> +User quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
> +
> +Options: -L/-U options (empty range)
> +Options: -L/-U options (full range)
> +User quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
> +
> +Checking Group quota
> +dump options test (type=g)
> +Options: no options (full range)
> +fs = SCRATCH_DEV
> +#ID          1024    4096      10      20
> +fs = SCRATCH_DEV
> +#ID          2048    8192      10      20
> +Options: -L option
> +fs = SCRATCH_DEV
> +#ID          1024    4096      10      20
> +fs = SCRATCH_DEV
> +#ID          2048    8192      10      20
> +Options: -U option
> +fs = SCRATCH_DEV
> +#ID          1024    4096      10      20
> +Options: -L/-U options (one element range)
> +fs = SCRATCH_DEV
> +#ID          1024    4096      10      20
> +Options: -L/-U options (multiple elements range)
> +fs = SCRATCH_DEV
> +#ID          1024    4096      10      20
> +fs = SCRATCH_DEV
> +#ID          2048    8192      10      20
> +Options: -L/-U options (empty range)
> +Options: -L/-U options (full range)
> +fs = SCRATCH_DEV
> +#ID          1024    4096      10      20
> +fs = SCRATCH_DEV
> +#ID          2048    8192      10      20
> +report options test (type=g)
> +Options: no options (full range)
> +Group quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +fsgqa 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +fsgqa2 0 1024 4096 00 [--------] 0 10 20 00 [--------]
> +
> +Options: -L options
> +Group quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
> +
> +Options: -U options
> +Group quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +
> +Options: -L/-U options (one element range)
> +Group quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +
> +Options: -L/-U options (multiple elements range)
> +Group quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
> +
> +Options: -L/-U options (empty range)
> +Options: -L/-U options (full range)
> +Group quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
> +
> +Checking Project quota
> +dump options test (type=p)
> +Options: no options (full range)
> +fs = SCRATCH_DEV
> +#ID            1024    4096      10      20
> +fs = SCRATCH_DEV
> +#ID            2048    8192      10      20
> +Options: -L option
> +fs = SCRATCH_DEV
> +#ID            1024    4096      10      20
> +fs = SCRATCH_DEV
> +#ID            2048    8192      10      20
> +Options: -U option
> +fs = SCRATCH_DEV
> +#ID            1024    4096      10      20
> +Options: -L/-U options (one element range)
> +fs = SCRATCH_DEV
> +#ID            1024    4096      10      20
> +Options: -L/-U options (multiple elements range)
> +fs = SCRATCH_DEV
> +#ID            1024    4096      10      20
> +fs = SCRATCH_DEV
> +#ID            2048    8192      10      20
> +Options: -L/-U options (empty range)
> +Options: -L/-U options (full range)
> +fs = SCRATCH_DEV
> +#ID            1024    4096      10      20
> +fs = SCRATCH_DEV
> +#ID            2048    8192      10      20
> +report options test (type=p)
> +Options: no options (full range)
> +Project quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +fsgqa 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +fsgqa2 0 1024 4096 00 [--------] 0 10 20 00 [--------]
> +
> +Options: -L options
> +Project quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
> +
> +Options: -U options
> +Project quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +
> +Options: -L/-U options (one element range)
> +Project quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +
> +Options: -L/-U options (multiple elements range)
> +Project quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
> +
> +Options: -L/-U options (empty range)
> +Options: -L/-U options (full range)
> +Project quota on SCRATCH_MNT (SCRATCH_DEV)
> + Blocks Inodes
> +Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
> +---------- -------------------------------------------------- --------------------------------------------------
> +#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
> +#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
> +
> -- 
> 2.31.1
>
Andrey Albershteyn Sept. 12, 2022, 3:09 p.m. UTC | #2
On Fri, Sep 09, 2022 at 11:49:50AM +0800, Zorro Lang wrote:
> On Fri, Aug 05, 2022 at 07:25:31PM +0200, Andrey Albershteyn wrote:
> > These parameters define ID range of users/groups/projects to show.
> > This test adds more checks for wider coverage (e.g. empty range,
> > full range, open range).
> > 
> > Signed-off-by: Andrey Albershteyn <aalbersh@redhat.com>
> > ---
> > 
> > This is regression test in relation to the patch [1].
> 
> If this's a regression test case for a specific patchset, will it fail
> on the kernel without this patchset?
> 

This is on xfs_quota from xfsprogs. This won't fail with older or updated
xfs_quota. I implemented it as those arguments weren't covered by any test.

Ops, sorry, I was going to check in which version this patchset was merged, and
looks like it got lost somewhere between releases. The new version should go
into 6.0 release [1].

[1]: https://lore.kernel.org/linux-xfs/20220912142823.30865-1-aalbersh@redhat.com/T/#t

> > 
> > Changes from v1:
> >  - Moved to separate test (initially added to 152)
> > Changes from v2:
> >  - sed expression simplification
> >  - remove _filter_trailing_spaces() from common/filter
> >  - easier to read test cases
> > 
> > [1]: https://lore.kernel.org/all/20220328222503.146496-1-aalbersh@redhat.com/
> > 
> > ---
> >  tests/xfs/550     | 169 +++++++++++++++++++++++++++++++++
> >  tests/xfs/550.out | 232 ++++++++++++++++++++++++++++++++++++++++++++++
> >  2 files changed, 401 insertions(+)
> >  create mode 100755 tests/xfs/550
> >  create mode 100644 tests/xfs/550.out
> > 
> > diff --git a/tests/xfs/550 b/tests/xfs/550
> > new file mode 100755
> > index 00000000..1fc1d37c
> > --- /dev/null
> > +++ b/tests/xfs/550
> > @@ -0,0 +1,169 @@
> > +#! /bin/bash
> > +# SPDX-License-Identifier: GPL-2.0
> > +# Copyright (c) 2022 Andrey Albershteyn <aalbersh@redhat.com>.
> > +# All Rights Reserved.
> > +#
> > +# FS QA Test 550
> > +#
> > +# Test xfs_quota -L/-U range parameters for report and dump commands. These
> > +# parameters define ID range of users/groups/projects with non-zero quota to
> > +# show.
> > +#
> > +. ./common/preamble
> > +_begin_fstest quick quota
> 
> Can it be in "auto" group?
> 

sure.

> > +
> > +# Override the default cleanup function.
> > +_cleanup()
> > +{
> > +	_scratch_unmount >/dev/null 2>&1
> 
> Why a _scratch_unmount is needed at here? I think this case doesn't need
> a specific _cleanup.
> 

Yup, thanks! Will remove that.

> > +	cd /
> > +	rm -f $tmp.*
> > +}
> > +
> > +# Import common functions.
> > +. ./common/filter
> > +. ./common/quota
> > +
> > +# real QA test starts here
> > +_supported_fs xfs
> > +_require_test
> 
> I didn't see this case need TEST_DIR, so this requirement might be useless
> 

It is. Will remove that

> > +_require_scratch
> > +_require_xfs_quota
> > +_require_user fsgqa
> > +_require_user fsgqa2
> > +_require_group fsgqa
> > +_require_group fsgqa2
> > +
> > +_scratch_mkfs_xfs >>$seqres.full || _fail "mkfs failed"
> > +
> > +uqid=`id -u fsgqa`
> > +gqid=`id -g fsgqa`
> > +
> > +uqid2=`id -u fsgqa2`
> > +gqid2=`id -g fsgqa2`
> > +
> > +[ $uqid -ge $uqid2 ] && _notrun \
> > +	"ID of fsgqa user ($uqid) expected to be lower than fsgqa2 ($uqid2)"
> > +[ $gqid -ge $gqid2 ] && _notrun \
> > +	"ID of fsgqa group ($gqid) expected to be lower than fsgqa2 ($gqid2)"
> > +
> > +pqid=10
> > +pqid2=42
> > +cat >$tmp.projects <<EOF
> > +$pqid:$SCRATCH_MNT
> > +$pqid2:$SCRATCH_MNT
> > +EOF
> > +
> > +cat >$tmp.projid <<EOF
> > +root:0
> > +fsgqa:$pqid
> > +fsgqa2:$pqid2
> > +EOF
> > +
> > +filter_dump()
> > +{
> > +	_filter_scratch | sed -e 's/^[0-9]\+/#ID/' -e 's/\s*$//'
> > +}
> > +
> > +filter_report()
> > +{
> > +	_filter_quota | sed -e '/^root/d' \
> > +				-e '/^#0/d' \
> > +				-e 's/^#[0-9]\+/#ID/' \
> > +				-e 's/\s*$//'
> > +}
> > +
> > +set_quota_limit()
> > +{
> > +	local bs=$1
> > +	local bh=$2
> > +	local is=$3
> > +	local ih=$4
> > +	local user=$5
> > +
> > +	$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \
> > +			-c "limit -$type bsoft=$bs bhard=$bh $user" \
> > +			-c "limit -$type isoft=$is ihard=$ih $user" \
> > +			$SCRATCH_MNT
> > +}
> > +
> > +test_dump()
> > +{
> > +	local description=$1 ; shift
> > +	local opt="$*"
> > +
> > +	echo "Options: $description"
> > +
> > +	rm -f $tmp.backup 2>>/dev/null
> > +	$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \
> > +			-c "dump -$type $opt -f $tmp.backup" \
> > +			$SCRATCH_MNT | _filter_scratch
> > +	cat $tmp.backup | filter_dump
> > +}
> > +
> > +test_report()
> > +{
> > +	local description=$1 ; shift
> > +	local opt="$*"
> > +
> > +	echo "Options: $description"
> > +
> > +	$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \
> > +			-c "report -$type $opt -bi" \
> > +			$SCRATCH_MNT | filter_report
> > +}
> > +
> > +test_xfs_quota()
> > +{
> > +	set_quota_limit 512k 2048k 10 20 $id
> > +	set_quota_limit 1024k 4096k 10 20 $id2
> > +
> > +	echo "dump options test (type=$type)"
> > +	test_dump "no options (full range)"
> > +	test_dump "-L option" -L $id
> > +	test_dump "-U option" -U $id
> > +	test_dump "-L/-U options (one element range)" -L $id -U $id
> > +	test_dump "-L/-U options (multiple elements range)" -L $id -U $id2
> > +	test_dump "-L/-U options (empty range)" -L $id2 -U $id
> > +	test_dump "-L/-U options (full range)" -L 0 -U 0
> > +
> > +	echo "report options test (type=$type)"
> > +	test_report "no options (full range)"
> > +	test_report "-L options" -L $id
> > +	test_report "-U options" -U $id
> > +	test_report "-L/-U options (one element range)" -L $id -U $id
> > +	test_report "-L/-U options (multiple elements range)" -L $id -U $id2
> > +	test_report "-L/-U options (empty range)" -L $id2 -U $id
> > +	test_report "-L/-U options (full range)" -L 0 -U 0
> > +}
> > +
> > +echo "Checking User quota"
> > +_scratch_unmount >/dev/null 2>&1
> > +_qmount_option "uquota"
> > +_try_scratch_mount || _fail "qmount failed"
> 
> Why not use "_qmount" directly? (same below)
> 

Sure, will change to "_qmount", missed that this exists.

> Thanks,
> Zorro
>
diff mbox series

Patch

diff --git a/tests/xfs/550 b/tests/xfs/550
new file mode 100755
index 00000000..1fc1d37c
--- /dev/null
+++ b/tests/xfs/550
@@ -0,0 +1,169 @@ 
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2022 Andrey Albershteyn <aalbersh@redhat.com>.
+# All Rights Reserved.
+#
+# FS QA Test 550
+#
+# Test xfs_quota -L/-U range parameters for report and dump commands. These
+# parameters define ID range of users/groups/projects with non-zero quota to
+# show.
+#
+. ./common/preamble
+_begin_fstest quick quota
+
+# Override the default cleanup function.
+_cleanup()
+{
+	_scratch_unmount >/dev/null 2>&1
+	cd /
+	rm -f $tmp.*
+}
+
+# Import common functions.
+. ./common/filter
+. ./common/quota
+
+# real QA test starts here
+_supported_fs xfs
+_require_test
+_require_scratch
+_require_xfs_quota
+_require_user fsgqa
+_require_user fsgqa2
+_require_group fsgqa
+_require_group fsgqa2
+
+_scratch_mkfs_xfs >>$seqres.full || _fail "mkfs failed"
+
+uqid=`id -u fsgqa`
+gqid=`id -g fsgqa`
+
+uqid2=`id -u fsgqa2`
+gqid2=`id -g fsgqa2`
+
+[ $uqid -ge $uqid2 ] && _notrun \
+	"ID of fsgqa user ($uqid) expected to be lower than fsgqa2 ($uqid2)"
+[ $gqid -ge $gqid2 ] && _notrun \
+	"ID of fsgqa group ($gqid) expected to be lower than fsgqa2 ($gqid2)"
+
+pqid=10
+pqid2=42
+cat >$tmp.projects <<EOF
+$pqid:$SCRATCH_MNT
+$pqid2:$SCRATCH_MNT
+EOF
+
+cat >$tmp.projid <<EOF
+root:0
+fsgqa:$pqid
+fsgqa2:$pqid2
+EOF
+
+filter_dump()
+{
+	_filter_scratch | sed -e 's/^[0-9]\+/#ID/' -e 's/\s*$//'
+}
+
+filter_report()
+{
+	_filter_quota | sed -e '/^root/d' \
+				-e '/^#0/d' \
+				-e 's/^#[0-9]\+/#ID/' \
+				-e 's/\s*$//'
+}
+
+set_quota_limit()
+{
+	local bs=$1
+	local bh=$2
+	local is=$3
+	local ih=$4
+	local user=$5
+
+	$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \
+			-c "limit -$type bsoft=$bs bhard=$bh $user" \
+			-c "limit -$type isoft=$is ihard=$ih $user" \
+			$SCRATCH_MNT
+}
+
+test_dump()
+{
+	local description=$1 ; shift
+	local opt="$*"
+
+	echo "Options: $description"
+
+	rm -f $tmp.backup 2>>/dev/null
+	$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \
+			-c "dump -$type $opt -f $tmp.backup" \
+			$SCRATCH_MNT | _filter_scratch
+	cat $tmp.backup | filter_dump
+}
+
+test_report()
+{
+	local description=$1 ; shift
+	local opt="$*"
+
+	echo "Options: $description"
+
+	$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \
+			-c "report -$type $opt -bi" \
+			$SCRATCH_MNT | filter_report
+}
+
+test_xfs_quota()
+{
+	set_quota_limit 512k 2048k 10 20 $id
+	set_quota_limit 1024k 4096k 10 20 $id2
+
+	echo "dump options test (type=$type)"
+	test_dump "no options (full range)"
+	test_dump "-L option" -L $id
+	test_dump "-U option" -U $id
+	test_dump "-L/-U options (one element range)" -L $id -U $id
+	test_dump "-L/-U options (multiple elements range)" -L $id -U $id2
+	test_dump "-L/-U options (empty range)" -L $id2 -U $id
+	test_dump "-L/-U options (full range)" -L 0 -U 0
+
+	echo "report options test (type=$type)"
+	test_report "no options (full range)"
+	test_report "-L options" -L $id
+	test_report "-U options" -U $id
+	test_report "-L/-U options (one element range)" -L $id -U $id
+	test_report "-L/-U options (multiple elements range)" -L $id -U $id2
+	test_report "-L/-U options (empty range)" -L $id2 -U $id
+	test_report "-L/-U options (full range)" -L 0 -U 0
+}
+
+echo "Checking User quota"
+_scratch_unmount >/dev/null 2>&1
+_qmount_option "uquota"
+_try_scratch_mount || _fail "qmount failed"
+type=u
+id=$uqid
+id2=$uqid2
+test_xfs_quota
+
+echo "Checking Group quota"
+_scratch_unmount >/dev/null 2>&1
+_qmount_option "gquota"
+_try_scratch_mount || _fail "qmount failed"
+type=g
+id=$gqid
+id2=$gqid2
+test_xfs_quota
+
+echo "Checking Project quota"
+_scratch_unmount >/dev/null 2>&1
+_qmount_option "pquota"
+_try_scratch_mount || _fail "qmount failed"
+type=p
+id=$pqid
+id2=$pqid2
+test_xfs_quota
+
+# success, all done
+status=0
+exit
diff --git a/tests/xfs/550.out b/tests/xfs/550.out
new file mode 100644
index 00000000..d98166c4
--- /dev/null
+++ b/tests/xfs/550.out
@@ -0,0 +1,232 @@ 
+QA output created by 550
+Checking User quota
+dump options test (type=u)
+Options: no options (full range)
+fs = SCRATCH_DEV
+#ID          1024    4096      10      20
+fs = SCRATCH_DEV
+#ID          2048    8192      10      20
+Options: -L option
+fs = SCRATCH_DEV
+#ID          1024    4096      10      20
+fs = SCRATCH_DEV
+#ID          2048    8192      10      20
+Options: -U option
+fs = SCRATCH_DEV
+#ID          1024    4096      10      20
+Options: -L/-U options (one element range)
+fs = SCRATCH_DEV
+#ID          1024    4096      10      20
+Options: -L/-U options (multiple elements range)
+fs = SCRATCH_DEV
+#ID          1024    4096      10      20
+fs = SCRATCH_DEV
+#ID          2048    8192      10      20
+Options: -L/-U options (empty range)
+Options: -L/-U options (full range)
+fs = SCRATCH_DEV
+#ID          1024    4096      10      20
+fs = SCRATCH_DEV
+#ID          2048    8192      10      20
+report options test (type=u)
+Options: no options (full range)
+User quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+fsgqa 0 512 2048 00 [--------] 0 10 20 00 [--------]
+fsgqa2 0 1024 4096 00 [--------] 0 10 20 00 [--------]
+
+Options: -L options
+User quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
+#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
+
+Options: -U options
+User quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
+
+Options: -L/-U options (one element range)
+User quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
+
+Options: -L/-U options (multiple elements range)
+User quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
+#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
+
+Options: -L/-U options (empty range)
+Options: -L/-U options (full range)
+User quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
+#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
+
+Checking Group quota
+dump options test (type=g)
+Options: no options (full range)
+fs = SCRATCH_DEV
+#ID          1024    4096      10      20
+fs = SCRATCH_DEV
+#ID          2048    8192      10      20
+Options: -L option
+fs = SCRATCH_DEV
+#ID          1024    4096      10      20
+fs = SCRATCH_DEV
+#ID          2048    8192      10      20
+Options: -U option
+fs = SCRATCH_DEV
+#ID          1024    4096      10      20
+Options: -L/-U options (one element range)
+fs = SCRATCH_DEV
+#ID          1024    4096      10      20
+Options: -L/-U options (multiple elements range)
+fs = SCRATCH_DEV
+#ID          1024    4096      10      20
+fs = SCRATCH_DEV
+#ID          2048    8192      10      20
+Options: -L/-U options (empty range)
+Options: -L/-U options (full range)
+fs = SCRATCH_DEV
+#ID          1024    4096      10      20
+fs = SCRATCH_DEV
+#ID          2048    8192      10      20
+report options test (type=g)
+Options: no options (full range)
+Group quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+fsgqa 0 512 2048 00 [--------] 0 10 20 00 [--------]
+fsgqa2 0 1024 4096 00 [--------] 0 10 20 00 [--------]
+
+Options: -L options
+Group quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
+#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
+
+Options: -U options
+Group quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
+
+Options: -L/-U options (one element range)
+Group quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
+
+Options: -L/-U options (multiple elements range)
+Group quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
+#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
+
+Options: -L/-U options (empty range)
+Options: -L/-U options (full range)
+Group quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
+#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
+
+Checking Project quota
+dump options test (type=p)
+Options: no options (full range)
+fs = SCRATCH_DEV
+#ID            1024    4096      10      20
+fs = SCRATCH_DEV
+#ID            2048    8192      10      20
+Options: -L option
+fs = SCRATCH_DEV
+#ID            1024    4096      10      20
+fs = SCRATCH_DEV
+#ID            2048    8192      10      20
+Options: -U option
+fs = SCRATCH_DEV
+#ID            1024    4096      10      20
+Options: -L/-U options (one element range)
+fs = SCRATCH_DEV
+#ID            1024    4096      10      20
+Options: -L/-U options (multiple elements range)
+fs = SCRATCH_DEV
+#ID            1024    4096      10      20
+fs = SCRATCH_DEV
+#ID            2048    8192      10      20
+Options: -L/-U options (empty range)
+Options: -L/-U options (full range)
+fs = SCRATCH_DEV
+#ID            1024    4096      10      20
+fs = SCRATCH_DEV
+#ID            2048    8192      10      20
+report options test (type=p)
+Options: no options (full range)
+Project quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+fsgqa 0 512 2048 00 [--------] 0 10 20 00 [--------]
+fsgqa2 0 1024 4096 00 [--------] 0 10 20 00 [--------]
+
+Options: -L options
+Project quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
+#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
+
+Options: -U options
+Project quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
+
+Options: -L/-U options (one element range)
+Project quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
+
+Options: -L/-U options (multiple elements range)
+Project quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
+#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
+
+Options: -L/-U options (empty range)
+Options: -L/-U options (full range)
+Project quota on SCRATCH_MNT (SCRATCH_DEV)
+ Blocks Inodes
+Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
+---------- -------------------------------------------------- --------------------------------------------------
+#ID 0 512 2048 00 [--------] 0 10 20 00 [--------]
+#ID 0 1024 4096 00 [--------] 0 10 20 00 [--------]
+