new file mode 100755
@@ -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 554
+#
+# 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
new file mode 100644
@@ -0,0 +1,232 @@
+QA output created by 554
+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 [--------]
+
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> --- Ping. Rebased and updated test ID for the newest for-next --- This is regression test in relation to the patch [1]. Changes from v1: - Moved to separate test (initially added to 152) Changes from v2 [2]: - 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/ [2]: https://lore.kernel.org/fstests/20220802130554.117320-1-aalbersh@redhat.com/ --- tests/xfs/554 | 169 +++++++++++++++++++++++++++++++++ tests/xfs/554.out | 232 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 401 insertions(+) create mode 100755 tests/xfs/554 create mode 100644 tests/xfs/554.out