Files
apfstests/tests/xfs/191-input-validation
T
Darrick J. Wong 7e98d41a6e fstests: move test group info to test files
Refactor every test in the entire test suite to use the new boilerplate
functions.  This also migrates all the test group information into the
test files.  This patch has been autogenerated via the command:

./tools/convert-group btrfs ceph cifs ext4 f2fs generic nfs ocfs2 overlay perf shared udf xfs

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Allison Henderson <allison.henderson@oracle.com>
Reviewed-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
2021-06-27 22:50:02 +08:00

325 lines
10 KiB
Bash
Executable File

#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2016 Red Hat, Inc. All Rights Reserved.
#
# FS QA Test No. xfs/191
#
# mkfs.xfs input validation test. Designed to break mkfs.xfs if it doesn't
# filter garbage input or invalid option combinations correctly.
#
. ./common/preamble
_begin_fstest auto quick mkfs realtime
# Override the default cleanup function.
_cleanup()
{
cd /
rm -f $tmp.*
[ -n "$loopdev" ] && _destroy_loop_device $loopdev
}
# Import common functions.
. ./common/filter
# real QA test starts here
# Modify as appropriate.
_supported_fs xfs
_require_test
_require_loop
_require_xfs_mkfs_validation
echo silence is golden
# clear out any options to mkfs first. We want to test realtime and external log
# devices if we can, but we also want to control them ourselves.
logdev=$SCRATCH_LOGDEV
rtdev=$SCRATCH_RTDEV
MKFS_OPTIONS=
SCRATCH_LOGDEV=
SCRATCH_RTDEV=
# limit the image size of the filesystem being created to something small
fssize=$((4 * 1024 * 1024 * 1024))
logsize=$((4 * 1024 * 1024 * 100))
fsimg=$TEST_DIR/$seq.img
#create a loop device to test
loopimg=$TEST_DIR/$seq.loopimg
$XFS_IO_PROG -f -c "truncate $fssize" $loopimg
loopdev=$(_create_loop_device $loopimg)
SCRATCH_DEV=$loopdev
do_mkfs_pass()
{
echo >> $seqres.full
echo "pass expected $*" >> $seqres.full
$MKFS_XFS_PROG -f -N $* >> $seqres.full 2>&1
[ $? -ne 0 ] && echo "fail $*"
}
do_mkfs_fail()
{
echo >> $seqres.full
echo "fail expected $*" >> $seqres.full
$MKFS_XFS_PROG -f -N $* >> $seqres.full 2>&1
[ $? -eq 0 ] && echo "pass $*"
}
reset_fsimg()
{
rm -f $fsimg
$XFS_IO_PROG -f -c "truncate $fssize" $fsimg
}
reset_fsimg
do_mkfs_pass $SCRATCH_DEV
# basic "should fail" options
# specifying sector sizes in sectors or blocks or garbage
do_mkfs_fail -s size=2s $SCRATCH_DEV
do_mkfs_fail -d sectsize=2s $SCRATCH_DEV
do_mkfs_fail -l sectsize=2s $SCRATCH_DEV
do_mkfs_fail -s size=2b $SCRATCH_DEV
do_mkfs_fail -d sectsize=2b $SCRATCH_DEV
do_mkfs_fail -l sectsize=2b $SCRATCH_DEV
do_mkfs_fail -s size=grot $SCRATCH_DEV
do_mkfs_fail -s size=2yerk $SCRATCH_DEV
do_mkfs_fail -d sectsize=blah $SCRATCH_DEV
do_mkfs_fail -d sectsize=2foo $SCRATCH_DEV
do_mkfs_fail -l sectsize=nggh $SCRATCH_DEV
do_mkfs_fail -l sectsize=2nggh $SCRATCH_DEV
# conflicting sector/block sizes
do_mkfs_fail -s size=512 -d sectsize=1024 $SCRATCH_DEV
do_mkfs_fail -s size=512 -l sectsize=1024 $SCRATCH_DEV
do_mkfs_fail -d sectsize=2048 -l sectsize=1024 $SCRATCH_DEV
do_mkfs_fail -b size=512 -s size=1024 $SCRATCH_DEV
do_mkfs_fail -b size=512 -d sectsize=1024 $SCRATCH_DEV
do_mkfs_fail -b size=512 -l sectsize=1024 $SCRATCH_DEV
# specifying block sizes in sectors without specifying sector size
# or in blocks or garbage
do_mkfs_fail -b size=2s $SCRATCH_DEV
do_mkfs_fail -b size=2b $SCRATCH_DEV
do_mkfs_fail -b size=nfi $SCRATCH_DEV
do_mkfs_fail -b size=4096nfi $SCRATCH_DEV
do_mkfs_fail -n size=nfi $SCRATCH_DEV
do_mkfs_fail -n size=4096nfi $SCRATCH_DEV
do_mkfs_pass -n size=2b $SCRATCH_DEV
do_mkfs_pass -n size=2b $SCRATCH_DEV
# bad label length
do_mkfs_fail -L thisiswaytoolong $SCRATCH_DEV
# basic "should pass" data section tests
do_mkfs_pass $SCRATCH_DEV
do_mkfs_pass -d name=$SCRATCH_DEV
do_mkfs_pass -d size=$fssize $SCRATCH_DEV
do_mkfs_pass -d agcount=32 $SCRATCH_DEV
do_mkfs_pass -d agsize=32m $SCRATCH_DEV
do_mkfs_pass -d agsize=32M $SCRATCH_DEV
do_mkfs_pass -d agsize=1g $SCRATCH_DEV
do_mkfs_pass -d agsize=$((32 * 1024 * 1024)) $SCRATCH_DEV
do_mkfs_pass -b size=4096 -d agsize=8192b $SCRATCH_DEV
do_mkfs_pass -d agsize=8192b $SCRATCH_DEV
do_mkfs_pass -d agsize=65536s $SCRATCH_DEV
do_mkfs_pass -d sectsize=512,agsize=65536s $SCRATCH_DEV
do_mkfs_pass -s size=512 -d agsize=65536s $SCRATCH_DEV
do_mkfs_pass -d noalign $SCRATCH_DEV
do_mkfs_pass -d sunit=0,swidth=0 $SCRATCH_DEV
do_mkfs_pass -d sunit=8,swidth=8 $SCRATCH_DEV
do_mkfs_pass -d sunit=8,swidth=64 $SCRATCH_DEV
do_mkfs_pass -d su=0,sw=0 $SCRATCH_DEV
do_mkfs_pass -d su=0,sw=64 $SCRATCH_DEV
do_mkfs_pass -d su=4096,sw=1 $SCRATCH_DEV
do_mkfs_pass -d su=4096s,sw=64 $SCRATCH_DEV
do_mkfs_pass -d su=4096b,sw=64 $SCRATCH_DEV
do_mkfs_pass -d su=4k,sw=1 $SCRATCH_DEV
do_mkfs_pass -d su=4K,sw=8 $SCRATCH_DEV
do_mkfs_pass -b size=4096 -d su=1b,sw=8 $SCRATCH_DEV
do_mkfs_pass -d sectsize=512,su=8s,sw=8 $SCRATCH_DEV
do_mkfs_pass -s size=512 -d su=8s,sw=8 $SCRATCH_DEV
# invalid data section tests
do_mkfs_fail -d size=${fssize}b $SCRATCH_DEV
do_mkfs_fail -d size=${fssize}s $SCRATCH_DEV
do_mkfs_fail -d size=${fssize}yerk $SCRATCH_DEV
do_mkfs_fail -d agsize=32Mbsdfsdo $SCRATCH_DEV
do_mkfs_fail -d agsize=1GB $SCRATCH_DEV
do_mkfs_fail -d agcount=1k $SCRATCH_DEV
do_mkfs_fail -d agcount=6b $SCRATCH_DEV
do_mkfs_fail -d agcount=32,agsize=32m $SCRATCH_DEV
do_mkfs_fail -d sunit=0,swidth=64 $SCRATCH_DEV
do_mkfs_fail -d sunit=64,swidth=0 $SCRATCH_DEV
do_mkfs_fail -d sunit=64,swidth=64,noalign $SCRATCH_DEV
do_mkfs_fail -d sunit=64k,swidth=64 $SCRATCH_DEV
do_mkfs_fail -d sunit=64,swidth=64m $SCRATCH_DEV
do_mkfs_fail -d su=4096,sw=0 $SCRATCH_DEV
do_mkfs_fail -d su=4097,sw=1 $SCRATCH_DEV
do_mkfs_fail -d su=4096,sw=64,noalign $SCRATCH_DEV
do_mkfs_fail -d su=4096,sw=64s $SCRATCH_DEV
do_mkfs_fail -d su=4096garabge,sw=64 $SCRATCH_DEV
do_mkfs_fail -d su=4096,sw=64,sunit=64,swidth=64 $SCRATCH_DEV
do_mkfs_fail -d sectsize=10,agsize=65536s $SCRATCH_DEV
do_mkfs_fail -d sectsize=512s,agsize=65536s $SCRATCH_DEV
reset_fsimg
# file section, should pass
do_mkfs_pass $fsimg
do_mkfs_pass -d file=0 $SCRATCH_DEV
do_mkfs_pass -d size=$fssize,file=1,name=$fsimg
do_mkfs_pass -d size=$fssize,file $fsimg
do_mkfs_pass -d size=$fssize $fsimg
do_mkfs_pass -d size=$fssize,name=$fsimg
do_mkfs_pass -d size=$((fssize/2)) $fsimg
# again this one, to check that we didn't truncated the file
do_mkfs_pass -d size=$fssize $fsimg
rm -f $fsimg
do_mkfs_pass -d file,size=$fssize $fsimg
reset_fsimg
# file section, should fail
do_mkfs_fail -d file=1 $SCRATCH_DEV
do_mkfs_fail -d file $fsimg # no size given
rm -f $fsimg
do_mkfs_fail $fsimg
do_mkfs_fail -d size=$fssize $fsimg
reset_fsimg
# log section, should pass
do_mkfs_pass -l size=$logsize -d size=$fssize $SCRATCH_DEV
do_mkfs_pass -l agnum=2 $SCRATCH_DEV
do_mkfs_pass -l size=4096b $SCRATCH_DEV
do_mkfs_pass -l sectsize=512 $SCRATCH_DEV
do_mkfs_pass -l sunit=64 $SCRATCH_DEV
do_mkfs_pass -l sunit=64 -d sunit=8,swidth=8 $SCRATCH_DEV
do_mkfs_pass -l sunit=8 $SCRATCH_DEV
do_mkfs_pass -l su=$((4096*10)) $SCRATCH_DEV
do_mkfs_pass -l su=10b $SCRATCH_DEV
do_mkfs_pass -b size=4096 -l su=10b $SCRATCH_DEV
do_mkfs_pass -l sectsize=512,su=$((4096*10)) $SCRATCH_DEV
do_mkfs_pass -l internal $SCRATCH_DEV
$XFS_IO_PROG -f -c "truncate $logsize" $fsimg
do_mkfs_pass -l logdev=$fsimg $SCRATCH_DEV
do_mkfs_pass -l name=$fsimg $SCRATCH_DEV
do_mkfs_pass -l lazy-count=0 -m crc=0 $SCRATCH_DEV
do_mkfs_pass -l lazy-count=1 -m crc=0 $SCRATCH_DEV
do_mkfs_pass -l version=1 -m crc=0 $SCRATCH_DEV
do_mkfs_pass -l version=2 -m crc=0 $SCRATCH_DEV
do_mkfs_pass -l version=2 $SCRATCH_DEV
# log section, should fail
do_mkfs_fail -l size=${fssize}b $SCRATCH_DEV
do_mkfs_fail -l size=${fssize}s $SCRATCH_DEV
do_mkfs_fail -l size=${fssize}yerk $SCRATCH_DEV
do_mkfs_fail -l agnum=1k $SCRATCH_DEV
do_mkfs_fail -l agnum=6b $SCRATCH_DEV
do_mkfs_fail -l agnum=32 $SCRATCH_DEV
do_mkfs_fail -l sunit=0 $SCRATCH_DEV
do_mkfs_fail -l sunit=63 $SCRATCH_DEV
do_mkfs_fail -l su=1 $SCRATCH_DEV
do_mkfs_fail -l su=10s $SCRATCH_DEV
do_mkfs_fail -l su=$((4096*10+1)) $SCRATCH_DEV
do_mkfs_fail -l sectsize=10,agsize=65536s $SCRATCH_DEV
do_mkfs_fail -l sectsize=512s,agsize=65536s $SCRATCH_DEV
do_mkfs_fail -l internal=0 $SCRATCH_DEV
reset_fsimg
do_mkfs_fail -l internal=1,logdev=$fsimg $SCRATCH_DEV
do_mkfs_fail -l lazy-count=1garbage $SCRATCH_DEV
do_mkfs_fail -l lazy-count=2 $SCRATCH_DEV
do_mkfs_fail -l lazy-count=0 -m crc=1 $SCRATCH_DEV
do_mkfs_fail -l version=1 -m crc=1 $SCRATCH_DEV
do_mkfs_fail -l version=0 $SCRATCH_DEV
# naming section, should pass
do_mkfs_pass -n size=65536 $SCRATCH_DEV
do_mkfs_pass -n version=2 $SCRATCH_DEV
do_mkfs_pass -n version=ci $SCRATCH_DEV
do_mkfs_pass -n ftype=0 -m crc=0 $SCRATCH_DEV
do_mkfs_pass -n ftype=1 $SCRATCH_DEV
# naming section, should fail
do_mkfs_fail -n version=1 $SCRATCH_DEV
do_mkfs_fail -n version=cid $SCRATCH_DEV
do_mkfs_fail -n ftype=4 $SCRATCH_DEV
do_mkfs_fail -n ftype=0 $SCRATCH_DEV
do_mkfs_fail -n log=15 $SCRATCH_DE
reset_fsimg
# metadata section, should pass
do_mkfs_pass -m crc=1,finobt=1 $SCRATCH_DEV
do_mkfs_pass -m crc=1,finobt=0 $SCRATCH_DEV
do_mkfs_pass -m crc=0,finobt=0 $SCRATCH_DEV
do_mkfs_pass -m crc=1 -n ftype=1 $SCRATCH_DEV
do_mkfs_pass -m crc=0 -n ftype=1 $SCRATCH_DEV
do_mkfs_pass -m crc=0 -n ftype=0 $SCRATCH_DEV
# metadata section, should fail
do_mkfs_fail -m crc=0,finobt=1 $SCRATCH_DEV
do_mkfs_fail -m crc=1 -n ftype=0 $SCRATCH_DEV
# realtime section, results depend on reflink
_scratch_mkfs_xfs_supported -m reflink=0 >/dev/null 2>&1
if [ $? -eq 0 ]; then
do_mkfs_pass -m reflink=0 -r rtdev=$fsimg $SCRATCH_DEV
do_mkfs_pass -m reflink=0 -r size=65536,rtdev=$fsimg $SCRATCH_DEV
do_mkfs_fail -m reflink=1 -r rtdev=$fsimg $SCRATCH_DEV
do_mkfs_fail -m reflink=1 -r size=65536,rtdev=$fsimg $SCRATCH_DEV
else
do_mkfs_pass -r rtdev=$fsimg $SCRATCH_DEV
do_mkfs_pass -r size=65536,rtdev=$fsimg $SCRATCH_DEV
fi
# realtime section, should pass
do_mkfs_pass -r extsize=4k $SCRATCH_DEV
do_mkfs_pass -r extsize=1G $SCRATCH_DEV
do_mkfs_pass -r noalign $SCRATCH_DEV
# realtime section, should fail
do_mkfs_fail -r rtdev=$SCRATCH_DEV
do_mkfs_fail -r extsize=256 $SCRATCH_DEV
do_mkfs_fail -r extsize=2G $SCRATCH_DEV
do_mkfs_fail -r size=65536 $SCRATCH_DEV
# inode section, should pass
do_mkfs_pass -i size=256 -m crc=0 $SCRATCH_DEV
do_mkfs_pass -i size=512 $SCRATCH_DEV
do_mkfs_pass -i size=2048 $SCRATCH_DEV
do_mkfs_pass -i perblock=2 $SCRATCH_DEV
do_mkfs_pass -i maxpct=10 $SCRATCH_DEV
do_mkfs_pass -i maxpct=100 $SCRATCH_DEV
do_mkfs_pass -i maxpct=0 $SCRATCH_DEV
do_mkfs_pass -i align=0 -m crc=0 $SCRATCH_DEV
do_mkfs_pass -i align=1 -m crc=1 $SCRATCH_DEV
do_mkfs_pass -i attr=1 -m crc=0 $SCRATCH_DEV
do_mkfs_pass -i attr=2 $SCRATCH_DEV
do_mkfs_pass -i projid32bit $SCRATCH_DEV
do_mkfs_pass -i sparse=0 $SCRATCH_DEV
do_mkfs_pass -i sparse -m crc $SCRATCH_DEV
# inode section, should fail
do_mkfs_fail -i size=256 -m crc $SCRATCH_DEV
do_mkfs_fail -i size=128 $SCRATCH_DEV
do_mkfs_fail -i size=513 $SCRATCH_DEV
do_mkfs_fail -i size=4096 $SCRATCH_DEV
do_mkfs_fail -i maxpct=110 $SCRATCH_DEV
do_mkfs_fail -i align=2 $SCRATCH_DEV
do_mkfs_fail -i sparse -m crc=0 $SCRATCH_DEV
do_mkfs_fail -i align=0 -m crc=1 $SCRATCH_DEV
do_mkfs_fail -i attr=1 -m crc=1 $SCRATCH_DEV
do_mkfs_fail -i log=10 $SCRATCH_DEV
status=0
exit