mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
check: Allow to recreate TEST_DEV
Add config option RECREATE_TEST_DEV to allow to recreate file system on the TEST_DEV device. Permitted values are true and false. If RECREATE_TEST_DEV is set to true the TEST_DEV device will be unmounted and FSTYP file system will be created on it. Afterwards it will be mounted to TEST_DIR again with the default, or specified mount options. Also recreate the file system if FSTYP differs from the previous section. Signed-off-by: Lukas Czerner <lczerner@redhat.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
committed by
Dave Chinner
parent
667308dd97
commit
f8e4f532f1
+36
-7
@@ -5,16 +5,20 @@ Configuration file with sections is useful for running xfstests on multiple
|
||||
file systems, or multiple file system setups in a single run without any
|
||||
help of external scripts.
|
||||
|
||||
|
||||
Syntax
|
||||
------
|
||||
|
||||
Syntax for defining a section is the following:
|
||||
|
||||
[section_name]
|
||||
[section_name]
|
||||
|
||||
Section name should consist of alphanumeric characters and '_'. Anything
|
||||
else is forbidden and the section will not be recognised.
|
||||
|
||||
Each section in the configuration file should contain options in the format
|
||||
|
||||
OPTION=value
|
||||
OPTION=value
|
||||
|
||||
'OPTION' must not contain any white space characters. 'value' can contain
|
||||
any character you want with one simple limitation - characters ' and " can
|
||||
@@ -24,9 +28,31 @@ Note that options are carried between sections so the same options does not
|
||||
have to be specified in each and every sections. However caution should be
|
||||
exercised not to leave unwanted options set from previous sections.
|
||||
|
||||
|
||||
Results
|
||||
-------
|
||||
|
||||
For every section xfstests will run with specified options and will produce
|
||||
separate results in the '$RESULT_BASE/$section_name' directory.
|
||||
|
||||
|
||||
Multiple file systems
|
||||
---------------------
|
||||
|
||||
Having different file systems in different config sections is allowed. When
|
||||
FSTYP differs in the following section the FSTYP file system will be created
|
||||
automatically before running the test.
|
||||
|
||||
Note that if MOUNT_OPTIONS, MKFS_OPTIONS, or FSCK_OPTIONS are not directly
|
||||
specified in the section it will be reset to the default for a given file
|
||||
system.
|
||||
|
||||
You can also force the file system recreation by specifying RECREATE_TEST_DEV.
|
||||
|
||||
|
||||
Example
|
||||
-------
|
||||
|
||||
Here is an example of config file with sections:
|
||||
|
||||
[ext4_4k_block_size]
|
||||
@@ -36,6 +62,7 @@ SCRATCH_DEV=/dev/sdb
|
||||
SCRATCH_MNT=/mnt/test1
|
||||
MKFS_OPTIONS="-q -F -b4096"
|
||||
FSTYP=ext4
|
||||
RESULT_BASE="`pwd`/results/`date +%d%m%y_%H%M%S`"
|
||||
|
||||
[ext4_1k_block_size]
|
||||
MKFS_OPTIONS="-q -F -b1024"
|
||||
@@ -43,8 +70,10 @@ MKFS_OPTIONS="-q -F -b1024"
|
||||
[ext4_nojournal]
|
||||
MKFS_OPTIONS="-q -F -b4096 -O ^has_journal"
|
||||
|
||||
[ext4_discard_ssd]
|
||||
MKFS_OPTIONS="-q -F -b4096"
|
||||
TEST_DEV=/dev/sdc
|
||||
SCRATCH_DEV=/dev/sdd
|
||||
MOUNT_OPTIONS="-o discard"
|
||||
[xfs_filesystem]
|
||||
MKFS_OPTIONS="-f"
|
||||
FSTYP=xfs
|
||||
|
||||
[ext3_filesystem]
|
||||
FSTYP=ext3
|
||||
MOUNT_OPTIONS="-o noatime"
|
||||
|
||||
@@ -283,8 +283,6 @@ if $have_test_arg; then
|
||||
done
|
||||
fi
|
||||
|
||||
_prepare_test_list
|
||||
|
||||
# we need common/rc
|
||||
if ! . ./common/rc
|
||||
then
|
||||
@@ -386,6 +384,8 @@ _summary()
|
||||
rm -f $tmp.*
|
||||
}
|
||||
|
||||
_prepare_test_list
|
||||
|
||||
if $OPTIONS_HAVE_SECTIONS; then
|
||||
trap "_summary; exit \$status" 0 1 2 3 15
|
||||
else
|
||||
@@ -393,8 +393,8 @@ else
|
||||
fi
|
||||
|
||||
for section in $HOST_OPTIONS_SECTIONS; do
|
||||
OLD_FSTYP=$FSTYP
|
||||
get_next_config $section
|
||||
init_rc
|
||||
|
||||
mkdir -p $RESULT_BASE
|
||||
if [ ! -d $RESULT_BASE ]; then
|
||||
@@ -402,6 +402,30 @@ for section in $HOST_OPTIONS_SECTIONS; do
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
if $OPTIONS_HAVE_SECTIONS; then
|
||||
echo "SECTION -- $section"
|
||||
fi
|
||||
|
||||
if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
|
||||
echo "RECREATING -- $FSTYP on $TEST_DEV"
|
||||
umount $TEST_DEV 2> /dev/null
|
||||
if ! _test_mkfs >$tmp.err 2>&1
|
||||
then
|
||||
echo "our local _test_mkfs routine ..."
|
||||
cat $tmp.err
|
||||
echo "check: failed to mkfs \$TEST_DEV using specified options"
|
||||
exit 1
|
||||
fi
|
||||
out=`_mount_or_remount_rw "$MOUNT_OPTIONS" $TEST_DEV $TEST_DIR`
|
||||
if [ $? -ne 1 ]; then
|
||||
echo $out
|
||||
exit 1
|
||||
fi
|
||||
_prepare_test_list
|
||||
fi
|
||||
|
||||
init_rc
|
||||
|
||||
seq="check"
|
||||
check="$RESULT_BASE/check"
|
||||
|
||||
@@ -411,9 +435,6 @@ for section in $HOST_OPTIONS_SECTIONS; do
|
||||
[ -f $check.time ] || touch $check.time
|
||||
|
||||
# print out our test configuration
|
||||
if $OPTIONS_HAVE_SECTIONS; then
|
||||
echo "SECTION -- $section"
|
||||
fi
|
||||
echo "FSTYP -- `_full_fstyp_details`"
|
||||
echo "PLATFORM -- `_full_platform_details`"
|
||||
if [ ! -z "$SCRATCH_DEV" ]; then
|
||||
|
||||
+106
@@ -83,6 +83,8 @@ export PWD=`pwd`
|
||||
export MALLOCLIB=${MALLOCLIB:=/usr/lib/libefence.a}
|
||||
export LOCAL_CONFIGURE_OPTIONS=${LOCAL_CONFIGURE_OPTIONS:=--enable-readline=yes}
|
||||
|
||||
export RECREATE_TEST_DEV=false
|
||||
|
||||
# $1 = prog to look for, $2* = default pathnames if not found in $PATH
|
||||
set_prog_path()
|
||||
{
|
||||
@@ -215,6 +217,91 @@ case "$HOSTOS" in
|
||||
;;
|
||||
esac
|
||||
|
||||
_mount_opts()
|
||||
{
|
||||
# SELinux adds extra xattrs which can mess up our expected output.
|
||||
# So, mount with a context, and they won't be created
|
||||
# # nfs_t is a "liberal" context so we can use it.
|
||||
if [ -x /usr/sbin/selinuxenabled ] && /usr/sbin/selinuxenabled; then
|
||||
SELINUX_MOUNT_OPTIONS="-o context=system_u:object_r:nfs_t:s0"
|
||||
export SELINUX_MOUNT_OPTIONS
|
||||
fi
|
||||
|
||||
case $FSTYP in
|
||||
xfs)
|
||||
export MOUNT_OPTIONS=$XFS_MOUNT_OPTIONS
|
||||
;;
|
||||
udf)
|
||||
export MOUNT_OPTIONS=$UDF_MOUNT_OPTIONS
|
||||
;;
|
||||
nfs)
|
||||
export MOUNT_OPTIONS=$NFS_MOUNT_OPTIONS
|
||||
;;
|
||||
ext2|ext3|ext4|ext4dev)
|
||||
# acls & xattrs aren't turned on by default on ext$FOO
|
||||
export MOUNT_OPTIONS="-o acl,user_xattr $EXT_MOUNT_OPTIONS"
|
||||
;;
|
||||
reiserfs)
|
||||
# acls & xattrs aren't turned on by default on reiserfs
|
||||
export MOUNT_OPTIONS="-o acl,user_xattr $REISERFS_MOUNT_OPTIONS"
|
||||
;;
|
||||
gfs2)
|
||||
# acls aren't turned on by default on gfs2
|
||||
export MOUNT_OPTIONS="-o acl $GFS2_MOUNT_OPTIONS"
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_mkfs_opts()
|
||||
{
|
||||
case $FSTYP in
|
||||
xfs)
|
||||
export MKFS_OPTIONS=$XFS_MKFS_OPTIONS
|
||||
;;
|
||||
udf)
|
||||
[ ! -z "$udf_fsize" ] && \
|
||||
UDF_MKFS_OPTIONS="$UDF_MKFS_OPTIONS -s $udf_fsize"
|
||||
export MKFS_OPTIONS=$UDF_MKFS_OPTIONS
|
||||
;;
|
||||
nfs)
|
||||
export MKFS_OPTIONS=$NFS_MKFS_OPTIONS
|
||||
;;
|
||||
reiserfs)
|
||||
export MKFS_OPTIONS="$REISERFS_MKFS_OPTIONS -q"
|
||||
;;
|
||||
gfs2)
|
||||
export MKFS_OPTIONS="$GFS2_MKFS_OPTIONS -O -p lock_nolock"
|
||||
;;
|
||||
jfs)
|
||||
export MKFS_OPTIONS="$JFS_MKFS_OPTIONS -q"
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_fsck_opts()
|
||||
{
|
||||
case $FSTYP in
|
||||
ext2|ext3|ext4|ext4dev)
|
||||
export FSCK_OPTIONS="-nf"
|
||||
;;
|
||||
reiserfs)
|
||||
export FSCK_OPTIONS="--yes"
|
||||
;;
|
||||
*)
|
||||
export FSCK_OPTIONS="-n"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
[ -z "$FSTYP" ] && export FSTYP=xfs
|
||||
[ -z "$MOUNT_OPTIONS" ] && _mount_opts
|
||||
[ -z "$MKFS_OPTIONS" ] && _mkfs_opts
|
||||
[ -z "$FSCK_OPTIONS" ] && _fsck_opts
|
||||
|
||||
known_hosts()
|
||||
{
|
||||
[ "$HOST_CONFIG_DIR" ] || HOST_CONFIG_DIR=`pwd`/configs
|
||||
@@ -273,8 +360,27 @@ parse_config_section() {
|
||||
}
|
||||
|
||||
get_next_config() {
|
||||
local OLD_FSTYP=$FSTYP
|
||||
local OLD_MOUNT_OPTIONS=$MOUNT_OPTIONS
|
||||
local OLD_MKFS_OPTIONS=$MKFS_OPTIONS
|
||||
local OLD_FSCK_OPTIONS=$FSCK_OPTIONS
|
||||
|
||||
unset MOUNT_OPTIONS
|
||||
unset MKFS_OPTIONS
|
||||
unset FSCK_OPTIONS
|
||||
|
||||
parse_config_section $1
|
||||
|
||||
if [ -n "$OLD_FSTYP" ] && [ $OLD_FSTYP != $FSTYP ]; then
|
||||
[ -z "$MOUNT_OPTIONS" ] && _mount_opts
|
||||
[ -z "$MKFS_OPTIONS" ] && _mkfs_opts
|
||||
[ -z "$FSCK_OPTIONS" ] && _fsck_opts
|
||||
else
|
||||
[ -z "$MOUNT_OPTIONS" ] && export MOUNT_OPTIONS=$OLD_MOUNT_OPTIONS
|
||||
[ -z "$MKFS_OPTIONS" ] && export MKFS_OPTIONS=$OLD_MKFS_OPTIONS
|
||||
[ -z "$FSCK_OPTIONS" ] && export FSCK_OPTIONS=$OLD_FSCK_OPTIONS
|
||||
fi
|
||||
|
||||
# set default RESULT_BASE
|
||||
if [ -z "$RESULT_BASE" ]; then
|
||||
export RESULT_BASE="$here/results/"
|
||||
|
||||
@@ -168,12 +168,6 @@ _fsck_opts()
|
||||
esac
|
||||
}
|
||||
|
||||
[ -z "$FSTYP" ] && FSTYP=xfs
|
||||
[ -z "$MOUNT_OPTIONS" ] && _mount_opts
|
||||
[ -z "$MKFS_OPTIONS" ] && _mkfs_opts
|
||||
[ -z "$FSCK_OPTIONS" ] && _fsck_opts
|
||||
|
||||
|
||||
# we need common/config
|
||||
if [ "$iam" != "check" ]
|
||||
then
|
||||
@@ -536,6 +530,7 @@ _setup_large_ext4_fs()
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
_scratch_mkfs_ext4()
|
||||
{
|
||||
local tmp_dir=/tmp/
|
||||
@@ -564,6 +559,24 @@ _scratch_mkfs_ext4()
|
||||
return $mkfs_status
|
||||
}
|
||||
|
||||
_test_mkfs()
|
||||
{
|
||||
case $FSTYP in
|
||||
nfs*)
|
||||
# do nothing for nfs
|
||||
;;
|
||||
udf)
|
||||
$MKFS_UDF_PROG $MKFS_OPTIONS $* $TEST_DEV > /dev/null
|
||||
;;
|
||||
btrfs)
|
||||
$MKFS_BTRFS_PROG $MKFS_OPTIONS $* $TEST_DEV > /dev/null
|
||||
;;
|
||||
*)
|
||||
yes | $MKFS_PROG -t $FSTYP -- $MKFS_OPTIONS $* $TEST_DEV
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_scratch_mkfs()
|
||||
{
|
||||
case $FSTYP in
|
||||
@@ -998,6 +1011,7 @@ _supported_fs()
|
||||
_notrun "not suitable for this filesystem type: $FSTYP"
|
||||
}
|
||||
|
||||
|
||||
# tests whether $FSTYP is one of the supported OSes for a test
|
||||
#
|
||||
_supported_os()
|
||||
|
||||
Reference in New Issue
Block a user