public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Lukas Czerner <lczerner@redhat.com>
To: xfs@oss.sgi.com
Cc: lczerner@redhat.com
Subject: [PATCH 09/10 v2] xfstests: Allow to recreate TEST_DEV
Date: Thu, 11 Jul 2013 12:38:04 +0200	[thread overview]
Message-ID: <1373539085-8577-10-git-send-email-lczerner@redhat.com> (raw)
In-Reply-To: <1373539085-8577-1-git-send-email-lczerner@redhat.com>

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>
---
 README.config-sections |  43 ++++++++++++++++----
 check                  |  33 ++++++++++++---
 common/config          | 106 +++++++++++++++++++++++++++++++++++++++++++++++++
 common/rc              |  26 +++++++++---
 4 files changed, 189 insertions(+), 19 deletions(-)

diff --git a/README.config-sections b/README.config-sections
index 6d88a6f..4d60272 100644
--- a/README.config-sections
+++ b/README.config-sections
@@ -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"
diff --git a/check b/check
index 1df7a37..5775276 100755
--- a/check
+++ b/check
@@ -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_or_remount_ro $TEST_DEV 2>&1> /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
diff --git a/common/config b/common/config
index 8011ec4..a0b650b 100644
--- a/common/config
+++ b/common/config
@@ -82,6 +82,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()
 {
@@ -212,6 +214,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
@@ -270,8 +357,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/"
diff --git a/common/rc b/common/rc
index 0dd30a3..10116a6 100644
--- a/common/rc
+++ b/common/rc
@@ -152,12 +152,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
@@ -490,6 +484,7 @@ _setup_large_ext4_fs()
 	fi
 	return 0
 }
+
 _scratch_mkfs_ext4()
 {
 	local tmp_dir=/tmp/
@@ -518,6 +513,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
@@ -919,6 +932,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()
-- 
1.8.3.1

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  parent reply	other threads:[~2013-07-11 10:38 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-11 10:37 [RFC][PATCH 00/10 v2] xfstests: Add support for config section Lukas Czerner
2013-07-11 10:37 ` [PATCH 01/10 v2] xfstests: Run all tests when nothing is specified Lukas Czerner
2013-08-02 23:48   ` Chandra Seetharaman
2013-10-16 19:36   ` Rich Johnston
2013-07-11 10:37 ` [PATCH 02/10 v2] xfstests: Export all important variables in common/config Lukas Czerner
2013-08-02 23:49   ` Chandra Seetharaman
2013-07-11 10:37 ` [PATCH 03/10 v2] xfstests: Refactor code for obtaining test list Lukas Czerner
2013-08-02 23:49   ` Chandra Seetharaman
2013-07-11 10:37 ` [PATCH 04/10 v2] xfstests: Allow to recheck options in common/rc Lukas Czerner
2013-08-02 23:50   ` Chandra Seetharaman
2013-07-11 10:38 ` [PATCH 05/10 v2] xfstests: Allow to re-read configuration Lukas Czerner
2013-08-02 23:51   ` Chandra Seetharaman
2013-07-11 10:38 ` [PATCH 06/10 v2] xfstests: Allow to specify RESULT_BASE directory Lukas Czerner
2013-08-02 23:51   ` Chandra Seetharaman
2013-07-11 10:38 ` [PATCH 07/10 v2] xfstests: Prepare for config section Lukas Czerner
2013-08-02 23:53   ` Chandra Seetharaman
2013-07-11 10:38 ` [PATCH 08/10 v2] xfstests: Add support for sections in config file Lukas Czerner
2013-08-03  0:05   ` Chandra Seetharaman
2013-07-11 10:38 ` Lukas Czerner [this message]
2013-08-03  0:13   ` [PATCH 09/10 v2] xfstests: Allow to recreate TEST_DEV Chandra Seetharaman
2013-07-11 10:38 ` [PATCH 10/10 v2] xfstests: Remount file system if MOUNT_OPTIONS changed Lukas Czerner
2013-08-03  0:14   ` Chandra Seetharaman
2013-10-16 20:51   ` Rich Johnston
2013-10-17 10:49     ` [PATCH 10/10 v2] xfstests: Remount file system if MOUNT_OPTIONS changedx Lukáš Czerner
2013-08-16 15:43 ` [RFC][PATCH 00/10 v2] xfstests: Add support for config section Rich Johnston

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=1373539085-8577-10-git-send-email-lczerner@redhat.com \
    --to=lczerner@redhat.com \
    --cc=xfs@oss.sgi.com \
    /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