From: Petr Vorel <pvorel@suse.cz>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH] quota_remount_test01: update to new API
Date: Fri, 29 Jan 2021 16:22:33 +0100 [thread overview]
Message-ID: <YBQoOX2FLtig8rYQ@pevik> (raw)
In-Reply-To: <20210128171052.6025-1-kory.maincent@bootlin.com>
Hi Kory,
> Update to new API
> Add test on quota_v2 driver to avoid the above error:
> quotaon: Quota format not supported in kernel.
+1
...
> +TST_NEEDS_CMDS="quotacheck quotaon mkfs.ext3"
TST_NEEDS_CMDS="dd mkfs.ext3 mount quota quotacheck quotaon sed tail"
sed and tail are a bit paranoic but it helps to run everywhere.
> +TST_NEEDS_DRIVERS="quota_v2"
> +TST_NEEDS_TMPDIR=1
> +TST_SETUP=do_setup
> +TST_CLEANUP=do_clean
> +TST_TESTFUNC=do_test
TST_NEEDS_ROOT=1
mount requires root.
...
> +do_setup()
> +{
> + if tst_kvcmp -lt "2.6.25"; then
> + tst_res TCONF "Remounting with quotas enabled is not supported!"
> + tst_brk TCONF "You should have kernel 2.6.26 and above running....."
Please when using TCONF, use it only once (tst_brk TCONF "test require 2.6.26")
But new API has TST_MIN_KVER="2.6.26" which is better for this test, tst_kvcmp
is needed for some special cases (skipping only single test etc).
> + fi
> +
> + if [ ! -d /proc/sys/fs/quota ]; then
> + tst_brk TCONF "Quota not supported in kernel!"
> + exit 0
> + fi
> + MNTDIR=$TMPDIR/mnt
> + IMAGE=ltp-$$-fs-image
> + dd if=/dev/zero of=$IMAGE bs=4096 count=8000 2>/dev/null
> + mkfs.ext3 -q -F -b 4096 $IMAGE
> + mkdir $MNTDIR
> +}
> +do_clean()
> {
> umount 2>/dev/null $MNTDIR
> rm 2>/dev/null $IMAGE
Cleanup should use tst_umount, removing file is not necessary.
And there should be guarded with flag to try umount only when mounted:
do_clean()
{
[ "$mounted" ] || return
tst_umount $MNTDIR
}
And in do_test():
ROD mount -t ext3 -o loop,usrquota,grpquota $IMAGE $MNTDIR
mounted=1
> +do_test()
> +{
> + EXPECT_PASS mount -t ext3 -o loop,usrquota,grpquota $IMAGE $MNTDIR
> + tst_res TINFO "Successfully mounted the File System"
Here I'd use just ROD instead of EXPECT_PASS. ROD is used on preparation
commands, on failure ($? -ne 0) prints the command and quit testing,
which is required here (there is no point to continue if mount fails.
If this were subject of testing EXPECT_PASS_BRK could be used
(EXPECT_PASS just TFAIL, but continue testing).
But I'd use ROD for most of the commands, IMHO only $BLOCKS -eq $NEWBLOCKS check
is the test case. Or am I wrong?
tst_res TINFO messages are definitely useless (regardless whether ROD or
EXPECT_PASS* is used) + we don't use that camel case.
NOTE mount is here and not in setup to allow running test more than once
with -iN (N is a positive number).
ROD mount -t ext3 -o loop,usrquota,grpquota $IMAGE $MNTDIR
mounted=1
> +
> + # some distros (CentOS 6.x, for example) doesn't permit creating
> + # of quota files in a directory with SELinux file_t type
> + if [ -x /usr/sbin/selinuxenabled ] && /usr/sbin/selinuxenabled; then
> + chcon -t tmp_t $MNTDIR || tst_brk TFAIL "Could not change SELinux file type"
Not sure if "Could not change SELinux file type" is bug or configuration issue.
I'd personally consider it as config issue and use TCONF here. But maybe I'm
wrong.
> + tst_res TINFO "Successfully changed SELinux file type"
> + fi
> +
> + EXPECT_PASS quotacheck -cug $MNTDIR
> + tst_res TINFO "Successfully Created Quota Files"
> +
> + EXPECT_PASS quotaon -ug $MNTDIR
> + tst_res TINFO "Successfully Turned on Quota"
> +
> + EXPECT_PASS echo "blah" />$MNTDIR/file
> + tst_res TINFO "Successfully wrote to the filesystem"
> +
> + # Get current quota usage
> + BLOCKS=`quota -f $MNTDIR -v -w | tail -n 1 | sed -e 's/ *[^ ]* *\([0-9]*\) .*/\1/'`
> + EXPECT_PASS mount -o remount,ro $MNTDIR
> + tst_res TINFO "Successfully Remounted Read-Only FS"
> +
> + EXPECT_PASS mount -o remount,rw $MNTDIR
> + tst_res TINFO "Successfully Remounted Read-Write FS"
> +
> + rm $MNTDIR/file
> + # Get quota usage after removing the file
> + NEWBLOCKS=`quota -f $MNTDIR -v -w | tail -n 1 | sed -e 's/ *[^ ]* *\([0-9]*\) .*/\1/'`
> + # Has quota usage changed properly?
> + if [ $BLOCKS -eq $NEWBLOCKS ]; then
> + tst_brk TWARN "Usage did not change after remount"
I consider this as an error.
On one of my VM I see
Error relocating /usr/bin/quota: reallocarray: symbol not found
quota_remount_test01 1 TWARN: usage did not change after remount
=> obviously quota needs some fix here :).
> + fi
> + tst_res TINFO "Usage successfully Changed after Remount"
> + tst_res TPASS "Quota on Remount Successfull"
> +}
...
I suggest to merge this (adapting test for more runs, using ROD, adding
get_blocks(), ...).
Just waiting Jan and Li for info about SELinux.
Kind regards,
Petr
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (c) Jan Kara <jack@suse.cz>, 2008
# Copyright (c) International Business Machines Corp., 2009
# Copyright (c) K?ry Maincent <kory.maincent@bootlin.com> 2021
# Copyright (c) 2021 Petr Vorel <pvorel@suse.cz>
TST_NEEDS_CMDS="dd mkfs.ext3 mount quota quotacheck quotaon sed tail"
TST_NEEDS_DRIVERS="quota_v2"
TST_NEEDS_ROOT=1
TST_NEEDS_TMPDIR=1
TST_SETUP=do_setup
TST_CLEANUP=do_clean
TST_TESTFUNC=do_test
TST_MIN_KVER="2.6.26"
. tst_test.sh
do_setup()
{
if [ ! -d /proc/sys/fs/quota ]; then
tst_brk TCONF "quota not supported in kernel"
fi
MNTDIR="mnt.$$"
IMAGE="ltp-$$-fs-image"
ROD dd if=/dev/zero of=$IMAGE bs=4096 count=8000 2>/dev/null
ROD mkfs.ext3 -q -F -b 4096 $IMAGE
mkdir $MNTDIR
}
do_clean()
{
[ "$mounted" ] || return
tst_umount $MNTDIR
mounted=
}
get_blocks()
{
quota -f $MNTDIR -v -w | tail -n 1 | sed -e 's/ *[^ ]* *\([0-9]*\) .*/\1/'
}
do_test()
{
tst_res TINFO "testing quota on remount"
local blocks newblocks
ROD mount -t ext3 -o loop,usrquota,grpquota $IMAGE $MNTDIR
mounted=1
# some distros (CentOS 6.x, for example) doesn't permit creating
# of quota files in a directory with SELinux file_t type
if tst_selinux_enabled &&
tst_cmd_available chcon && ! chcon -t tmp_t $MNTDIR; then
tst_brk TCONF "could not change SELinux file type"
fi
ROD quotacheck -cug $MNTDIR
ROD quotaon -ug $MNTDIR
ROD echo "blah" />$MNTDIR/file
blocks=$(get_blocks)
ROD mount -o remount,ro $MNTDIR
ROD mount -o remount,rw $MNTDIR
ROD rm $MNTDIR/file
newblocks=$(get_blocks)
if [ $blocks -eq $newblocks ]; then
tst_brk TFAIL "usage did not change after remount"
fi
tst_res TPASS "quota on remount passed"
do_clean
}
tst_run
next prev parent reply other threads:[~2021-01-29 15:22 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-28 17:10 [LTP] [PATCH] quota_remount_test01: update to new API Kory Maincent
2021-01-29 14:37 ` Petr Vorel
2021-02-05 11:00 ` Petr Vorel
2021-01-29 15:22 ` Petr Vorel [this message]
2021-01-29 15:51 ` =?unknown-8bit?q?K=C3=B6ry?= Maincent
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YBQoOX2FLtig8rYQ@pevik \
--to=pvorel@suse.cz \
--cc=ltp@lists.linux.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox