Re: [PATCH] xfs: project quota ineritance flag test

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

 



On Wed, Jun 19, 2019 at 06:10:47PM +0800, Zorro Lang wrote:
> This case is used to cover xfsprogs bug "b136f48b xfs_quota: fix
> false error reporting of project inheritance flag is not set" at
> first. Then test more behavior when project ineritance flag is
> set or removed.
> 
> Signed-off-by: Zorro Lang <zlang@xxxxxxxxxx>

Test looks fine to me. Just some minor issues inline, and I've fixed
them up on commit.

> ---
>  tests/xfs/507     | 117 ++++++++++++++++++++++++++++++++++++++++++++++
>  tests/xfs/507.out |  23 +++++++++
>  tests/xfs/group   |   1 +
>  3 files changed, 141 insertions(+)
>  create mode 100755 tests/xfs/507
>  create mode 100644 tests/xfs/507.out
> 
> diff --git a/tests/xfs/507 b/tests/xfs/507
> new file mode 100755
> index 00000000..509da03e
> --- /dev/null
> +++ b/tests/xfs/507
> @@ -0,0 +1,117 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2019 Red Hat, Inc.  All Rights Reserved.
> +#
> +# FS QA Test 507
> +#
> +# Test project quota inheritance flag, uncover xfsprogs:
> +#    b136f48b xfs_quota: fix false error reporting of project inheritance flag is not set

Test project..., uncover xfsprogs bug fixed by commit b136f48b19a5
("xfs_quota: fix false error reporting of project inheritance flag is
not set").

> +#
> +seq=`basename $0`
> +seqres=$RESULT_DIR/$seq
> +echo "QA output created by $seq"
> +
> +here=`pwd`
> +tmp=/tmp/$$
> +status=1	# failure is the default!
> +trap "_cleanup; exit \$status" 0 1 2 3 15
> +
> +_cleanup()
> +{
> +	cd /
> +	rm -f $tmp.*
> +}
> +
> +# get standard environment, filters and checks
> +. ./common/rc
> +. ./common/filter
> +. ./common/quota
> +
> +# remove previous $seqres.full before test
> +rm -f $seqres.full
> +
> +# real QA test starts here
> +_supported_fs xfs
> +_supported_os Linux
> +_require_scratch
> +_require_xfs_quota
> +
> +cat >$tmp.projects <<EOF
> +10:$SCRATCH_MNT/dir
> +EOF
> +
> +cat >$tmp.projid <<EOF
> +root:0
> +test:10
> +EOF
> +
> +QUOTA_CMD="$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid"
> +
> +filter_xfs_pquota()
> +{
> +        perl -ne "
> +s,$tmp.projects,[PROJECTS_FILE],;
> +s,$SCRATCH_MNT,[SCR_MNT],;
> +s,$SCRATCH_DEV,[SCR_DEV],;
> +        print;"
> +}
> +
> +do_quota_nospc()
> +{
> +	local file=$1
> +	local exp=$2
> +
> +	echo "Write $file, expect $exp:" | _filter_scratch
> +
> +	# replace the "pwrite64" which old xfs_io prints
> +	$XFS_IO_PROG -t -f -c "pwrite 0 5m" $file 2>&1 >/dev/null | \
> +		sed -e 's/pwrite64/pwrite/g'

_filter_xfs_io_error does this job.

> +	rm -f $file
> +}
> +
> +_scratch_mkfs_xfs >>$seqres.full 2>&1
> +_qmount_option "prjquota"
> +_qmount
> +_require_prjquota $SCRATCH_DEV
> +
> +mkdir $SCRATCH_MNT/dir
> +$QUOTA_CMD -x -c 'project -s test' $SCRATCH_MNT >>$seqres.full 2>&1
> +$QUOTA_CMD -x -c 'limit -p bsoft=1m bhard=2m test' $SCRATCH_MNT
> +
> +# test the Project inheritance bit is a directory only flag, and it's set on
> +# directory by default

I added comments here to state that we don't expect "project inheritance
flag is not set" from xfs_quota.

Thanks,
Eryu

> +echo "== The parent directory has Project inheritance bit by default =="
> +touch $SCRATCH_MNT/dir/foo
> +mkdir $SCRATCH_MNT/dir/dir_inherit
> +touch $SCRATCH_MNT/dir/dir_inherit/foo
> +$QUOTA_CMD -x -c 'project -c test' $SCRATCH_MNT | filter_xfs_pquota
> +echo ""
> +
> +# test the quota and the project inheritance quota work well
> +do_quota_nospc $SCRATCH_MNT/dir/foo ENOSPC
> +do_quota_nospc $SCRATCH_MNT/dir/dir_inherit/foo ENOSPC
> +echo ""
> +
> +# test the project quota won't be inherited, if removing the Project
> +# inheritance bit
> +echo "== After removing parent directory has Project inheritance bit =="
> +$XFS_IO_PROG -x -c "chattr -P" $SCRATCH_MNT/dir
> +touch $SCRATCH_MNT/dir/foo
> +mkdir $SCRATCH_MNT/dir/dir_uninherit
> +touch $SCRATCH_MNT/dir/dir_uninherit/foo
> +$QUOTA_CMD -x -c 'project -c test' $SCRATCH_MNT | filter_xfs_pquota
> +echo ""
> +
> +# after remove the Project inheritance bit of the original parent directory,
> +# then verify:
> +# 1) there's not any limit on the original parent directory and files under it
> +# 2) the quota limit of sub-directory which has inherited still works
> +# 3) there's not limit on the new sub-dirctory (not inherit from parent)
> +do_quota_nospc $SCRATCH_MNT/dir/foo Success
> +do_quota_nospc $SCRATCH_MNT/dir/dir_inherit/foo ENOSPC
> +do_quota_nospc $SCRATCH_MNT/dir/dir_uninherit/foo Success
> +
> +_scratch_unmount
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/xfs/507.out b/tests/xfs/507.out
> new file mode 100644
> index 00000000..c8c09d3f
> --- /dev/null
> +++ b/tests/xfs/507.out
> @@ -0,0 +1,23 @@
> +QA output created by 507
> +== The parent directory has Project inheritance bit by default ==
> +Checking project test (path [SCR_MNT]/dir)...
> +Processed 1 ([PROJECTS_FILE] and cmdline) paths for project test with recursion depth infinite (-1).
> +
> +Write SCRATCH_MNT/dir/foo, expect ENOSPC:
> +pwrite: No space left on device
> +Write SCRATCH_MNT/dir/dir_inherit/foo, expect ENOSPC:
> +pwrite: No space left on device
> +
> +== After removing parent directory has Project inheritance bit ==
> +Checking project test (path [SCR_MNT]/dir)...
> +[SCR_MNT]/dir - project inheritance flag is not set
> +[SCR_MNT]/dir/foo - project identifier is not set (inode=0, tree=10)
> +[SCR_MNT]/dir/dir_uninherit - project identifier is not set (inode=0, tree=10)
> +[SCR_MNT]/dir/dir_uninherit - project inheritance flag is not set
> +[SCR_MNT]/dir/dir_uninherit/foo - project identifier is not set (inode=0, tree=10)
> +Processed 1 ([PROJECTS_FILE] and cmdline) paths for project test with recursion depth infinite (-1).
> +
> +Write SCRATCH_MNT/dir/foo, expect Success:
> +Write SCRATCH_MNT/dir/dir_inherit/foo, expect ENOSPC:
> +pwrite: No space left on device
> +Write SCRATCH_MNT/dir/dir_uninherit/foo, expect Success:
> diff --git a/tests/xfs/group b/tests/xfs/group
> index ffe4ae12..46200752 100644
> --- a/tests/xfs/group
> +++ b/tests/xfs/group
> @@ -504,3 +504,4 @@
>  504 auto quick mkfs label
>  505 auto quick spaceman
>  506 auto quick health
> +507 auto quick quota
> -- 
> 2.17.2
> 



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux