* [PATCH 1/3] xfstests: Run all tests when nothing is specified @ 2013-06-28 13:23 Lukas Czerner 2013-06-28 13:23 ` [PATCH 2/3] xfstests: Refactor code for obtaining test list Lukas Czerner 2013-06-28 13:23 ` [PATCH 3/3] xfstests: Add support for sections in config file Lukas Czerner 0 siblings, 2 replies; 4+ messages in thread From: Lukas Czerner @ 2013-06-28 13:23 UTC (permalink / raw) To: xfs; +Cc: Lukas Czerner Currently when no tests or test groups is specified xfstests will silently test nothing. Interestingly enough when test groups to exclude is specified the rest of the tests will be run. This commit changes that to run all possible tests (for a given file system) when no specific tests has been specified. This matches the old xfstests behaviour. Signed-off-by: Lukas Czerner <lczerner@redhat.com> --- check | 6 +++--- group | 5 ----- 2 files changed, 3 insertions(+), 8 deletions(-) delete mode 100644 group diff --git a/check b/check index ff8fbcf..71b179b 100755 --- a/check +++ b/check @@ -115,7 +115,7 @@ get_all_tests() for d in $SRC_GROUPS $FSTYP; do ls $SRC_DIR/$d/* | \ grep -v "\..*" | \ - grep -v group >> $tmp.list 2>/dev/null + grep -v "group\|Makefile" >> $tmp.list 2>/dev/null done } @@ -263,8 +263,8 @@ elif $have_test_arg; then # had test numbers, but none in group file ... do nothing touch $tmp.list else - # no test numbers, do everything from group file - sed -n -e '/^[0-9][0-9][0-9]*/s/[ ].*//p' <group >$tmp.list + # no test numbers, do everything + get_all_tests fi # sort the list of tests into numeric order diff --git a/group b/group deleted file mode 100644 index 4e01f0c..0000000 --- a/group +++ /dev/null @@ -1,5 +0,0 @@ -# QA groups control file -# Defines test groups and nominal group owners -# - do not start group names with a digit -# - comment line before each group is "new" description -# -- 1.8.2.1 _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/3] xfstests: Refactor code for obtaining test list 2013-06-28 13:23 [PATCH 1/3] xfstests: Run all tests when nothing is specified Lukas Czerner @ 2013-06-28 13:23 ` Lukas Czerner 2013-06-28 13:23 ` [PATCH 3/3] xfstests: Add support for sections in config file Lukas Czerner 1 sibling, 0 replies; 4+ messages in thread From: Lukas Czerner @ 2013-06-28 13:23 UTC (permalink / raw) To: xfs; +Cc: Lukas Czerner Put the code for obtaining the list of test into one place which makes things more readable. It will also allow us to re-init the list in the future if we need it. Signed-off-by: Lukas Czerner <lczerner@redhat.com> --- check | 97 ++++++++++++++++++++++++++++++++++++------------------------------- 1 file changed, 52 insertions(+), 45 deletions(-) diff --git a/check b/check index 71b179b..1fded37 100755 --- a/check +++ b/check @@ -154,45 +154,70 @@ _timestamp() echo -n " [$now]" } -# Process command arguments first. -while [ $# -gt 0 ]; do - case "$1" in - -\? | -h | --help) usage ;; - - -udf) FSTYP=udf ;; - -xfs) FSTYP=xfs ;; - -nfs) FSTYP=nfs ;; +_prepare_test_list() +{ + # Tests specified on the command line + if [ -s $tmp.arglist ]; then + cat $tmp.arglist > $tmp.list + else + touch $tmp.list + fi - -g) group=$2 ; shift ; - group_list=$(get_group_list $group) - if [ -z "$group_list" ]; then + # Specified groups to include + for group in $GROUP_LIST; do + list=$(get_group_list $group) + if [ -z "$list" ]; then echo "Group \"$group\" is empty or not defined?" exit 1 fi - [ ! -s $tmp.list ] && touch $tmp.list - for t in $group_list; do + for t in $list; do grep -s "^$t\$" $tmp.list >/dev/null || \ echo "$t" >>$tmp.list done + done - ;; - - -x) xgroup=$2 ; shift ; - - # Note: behaviour is dependent on command line ordering of - # -g and -x parameters. If there are no preceding -g commands, - # this works on all tests, otherwise just the tests specified by - # the early -g inclusions. - [ ! -s $tmp.list ] && get_all_tests + if [ ! $have_test_arg ] && [ -z "$GROUP_LIST" ]; then + # no test numbers, do everything + get_all_tests + fi - group_list=$(get_group_list $xgroup) - if [ -z "$group_list" ]; then + # Specified groups to exclude + for xgroup in $XGROUP_LIST; do + list=$(get_group_list $xgroup) + if [ -z "$list" ]; then echo "Group \"$xgroup\" is empty or not defined?" exit 1 fi - trim_test_list $group_list + trim_test_list $list + done + + # sort the list of tests into numeric order + list=`sort -n $tmp.list | uniq` + rm -f $tmp.list $tmp.tmp $tmp.grep + + if $randomize + then + list=`echo $list | awk -f randomize.awk` + fi +} + +# Process command arguments first. +while [ $# -gt 0 ]; do + case "$1" in + -\? | -h | --help) usage ;; + + -udf) FSTYP=udf ;; + -xfs) FSTYP=xfs ;; + -nfs) FSTYP=nfs ;; + + -g) group=$2 ; shift ; + GROUP_LIST="$GROUP_LIST $group" + ;; + + -x) xgroup=$2 ; shift ; + XGROUP_LIST="$XGROUP_LIST $xgroup" ;; -X) xfile=$2; shift ; @@ -244,7 +269,7 @@ if $have_test_arg; then if egrep "^$test_name" $group_file >/dev/null ; then # in group file ... OK - echo $SRC_DIR/$1 >>$tmp.list + echo $SRC_DIR/$1 >>$tmp.arglist else # oops echo "$1 - unknown test, ignored" @@ -256,25 +281,7 @@ if $have_test_arg; then done fi -if [ -s $tmp.list ]; then - # found some valid test numbers ... this is good - : -elif $have_test_arg; then - # had test numbers, but none in group file ... do nothing - touch $tmp.list -else - # no test numbers, do everything - get_all_tests -fi - -# sort the list of tests into numeric order -list=`sort -n $tmp.list` -rm -f $tmp.list $tmp.tmp $tmp.grep - -if $randomize -then - list=`echo $list | awk -f randomize.awk` -fi +_prepare_test_list # we need common/rc if ! . ./common/rc -- 1.8.2.1 _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 3/3] xfstests: Add support for sections in config file 2013-06-28 13:23 [PATCH 1/3] xfstests: Run all tests when nothing is specified Lukas Czerner 2013-06-28 13:23 ` [PATCH 2/3] xfstests: Refactor code for obtaining test list Lukas Czerner @ 2013-06-28 13:23 ` Lukas Czerner 2013-06-28 13:29 ` Lukáš Czerner 1 sibling, 1 reply; 4+ messages in thread From: Lukas Czerner @ 2013-06-28 13:23 UTC (permalink / raw) To: xfs; +Cc: Lukas Czerner This patch add support for sections in the config file. Each section can contain configuration options in the format OPTION=value when one section is processed xfstests will proceed to next section until all secitons are processed, or an error occur. The name of the section can consist of alphanumeric characters + '_', nothing else is allowed. Name of the section is also used to create results subdirectory for each section. After all the sections are processed summary of all runs is printed out. If the config file does not contain sections, or we're not using config file at all, nothing is changed and xfstests will work the same way as it used to. This is very useful for testing file system with different options. Here is an example of the config file with sections: [ext4_4k_block_size] TEST_DEV=/dev/sda TEST_DIR=/mnt/test SCRATCH_DEV=/dev/sdb SCRATCH_MNT=/mnt/test1 MKFS_OPTIONS="-q -F -b4096" FSTYP=ext4 [ext4_1k_block_size] 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" Note that once the variable is set it remains set across the sections, so you do not have to specify all the options in all sections. However one have to make sure that unwanted options are not set from previous sections. Signed-off-by: Lukas Czerner <lczerner@redhat.com> --- check | 371 +++++++++++++++++++++++++++++++++------------------------- common/config | 125 ++++++++++++-------- common/rc | 63 +++++----- 3 files changed, 325 insertions(+), 234 deletions(-) diff --git a/check b/check index 1fded37..e8519a5 100755 --- a/check +++ b/check @@ -22,9 +22,11 @@ tmp=/tmp/$$ status=0 needwrap=true +needsum=true n_try=0 try="" n_bad=0 +sum_bad=0 bad="" notrun="" interrupt=true @@ -66,7 +68,6 @@ export FSTYP SUPPORTED_TESTS="[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]" SRC_GROUPS="generic shared" export SRC_DIR="tests" -export RESULT_BASE=${RESULT_BASE:="$here/results"} usage() { @@ -296,7 +297,12 @@ then exit 1 fi -# Ok, time to start running... +_wipe_counters() +{ + n_try="0" + n_bad="0" + unset try notrun bad +} _wrapup() { @@ -325,16 +331,20 @@ END { if (NR > 0) { date >>$check.log echo $list | fmt | sed -e 's/^/ /' -e "s;$SRC_DIR/;;g" >>$check.log $interrupt && echo "Interrupted!" >>$check.log - + + echo "SECTION -- $section" >>$tmp.summary + echo "=========================" >>$tmp.summary if [ ! -z "$n_try" -a $n_try != 0 ] then echo "Ran:$try" + echo "Ran:$try" >>$tmp.summary fi if [ ! -z "$notrun" ] then echo "Not run:$notrun" echo "Not run:$notrun" >>$check.log + echo "Not run:$notrun" >>$tmp.summary fi if [ ! -z "$n_bad" -a $n_bad != 0 ] @@ -343,200 +353,245 @@ END { if (NR > 0) { echo "Failed $n_bad of $n_try tests" echo "Failures:$bad" | fmt >>$check.log echo "Failed $n_bad of $n_try tests" >>$check.log + echo "Failures:$bad" >>$tmp.summary + echo "Failed $n_bad of $n_try tests" >>$tmp.summary else echo "Passed all $n_try tests" echo "Passed all $n_try tests" >>$check.log + echo "Passed all $n_try tests" >>$tmp.summary fi + echo "" >>$tmp.summary needwrap=false fi + sum_bad=`expr $sum_bad + $n_bad` + _wipe_counters rm -f /tmp/*.rawout /tmp/*.out /tmp/*.err /tmp/*.time - rm -f $tmp.* + if ! $OPTIONS_HAVE_SECTIONS; then + rm -f $tmp.* + fi } -trap "_wrapup; exit \$status" 0 1 2 3 15 - -mkdir -p $RESULT_BASE -if [ ! -d $RESULT_BASE ]; then - echo "failed to create results directory $RESULTS_BASE" - exit 1; -fi +_summary() +{ + _wrapup + if $showme; then + : + elif $needsum; then + count=`wc -L $tmp.summary | cut -f1 -d" "` + cat $tmp.summary + needsum=false + fi + rm -f $tmp.* +} -seq="check" -check="$RESULT_BASE/check" +# Ok, time to start running... -# don't leave old full output behind on a clean run -rm -f $check.full +if $OPTIONS_HAVE_SECTIONS; then + trap "_summary; exit \$status" 0 1 2 3 15 +else + trap "_wrapup; exit \$status" 0 1 2 3 15 +fi -[ -f $check.time ] || touch $check.time +for section in $HOST_OPTIONS_SECTIONS; do -# print out our test configuration -echo "FSTYP -- `_full_fstyp_details`" -echo "PLATFORM -- `_full_platform_details`" -if [ ! -z "$SCRATCH_DEV" ]; then - echo "MKFS_OPTIONS -- `_scratch_mkfs_options`" - echo "MOUNT_OPTIONS -- `_scratch_mount_options`" -fi -echo - - -if [ ! -z "$SCRATCH_DEV" ]; then - umount $SCRATCH_DEV 2>/dev/null - # call the overridden mkfs - make sure the FS is built - # the same as we'll create it later. - - if ! _scratch_mkfs $flag >$tmp.err 2>&1 - then - echo "our local _scratch_mkfs routine ..." - cat $tmp.err - echo "check: failed to mkfs \$SCRATCH_DEV using specified options" - exit 1 - fi - - # call the overridden mount - make sure the FS mounts with - # the same options that we'll mount with later. - if ! _scratch_mount >$tmp.err 2>&1 - then - echo "our local mount routine ..." - cat $tmp.err - echo "check: failed to mount \$SCRATCH_DEV using specified options" - exit 1 - fi -fi + if $OPTIONS_HAVE_SECTIONS; then + export RESULT_BASE="$here/results/$section" + else + export RESULT_BASE="$here/results/" + fi -seqres="$check" -_check_test_fs + get_next_config $section + init_rc -for seq in $list -do - err=false + mkdir -p $RESULT_BASE + if [ ! -d $RESULT_BASE ]; then + echo "failed to create results directory $RESULTS_BASE" + exit 1; + fi - # the filename for the test and the name output are different. - # we don't include the tests/ directory in the name output. - seqnum=`echo $seq | sed -e "s;$SRC_DIR/;;"` + seq="check" + check="$RESULT_BASE/check" - # Similarly, the result directory needs to replace the tests/ - # part of the test location. - group=`dirname $seq` - export RESULT_DIR=`echo $group | sed -e "s;$SRC_DIR;$RESULT_BASE;"` - mkdir -p $RESULT_DIR - seqres="$RESULT_BASE/$seqnum" + # don't leave old full output behind on a clean run + rm -f $check.full - echo -n "$seqnum" + [ -f $check.time ] || touch $check.time - if $showme - then + # 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 + echo "MKFS_OPTIONS -- `_scratch_mkfs_options`" + echo "MOUNT_OPTIONS -- `_scratch_mount_options`" + fi echo - continue - elif [ ! -f $seq ] - then - echo " - no such test?" - else - # really going to try and run this one - # - rm -f $seqres.out.bad - - # check if we really should run it - if [ -s $tmp.xlist ]; then - if grep $seqnum $tmp.xlist > /dev/null 2>&1 ; then - echo " [expunged]" - continue - fi + needwrap=true + + + if [ ! -z "$SCRATCH_DEV" ]; then + umount $SCRATCH_DEV 2>/dev/null + # call the overridden mkfs - make sure the FS is built + # the same as we'll create it later. + + if ! _scratch_mkfs $flag >$tmp.err 2>&1 + then + echo "our local _scratch_mkfs routine ..." + cat $tmp.err + echo "check: failed to mkfs \$SCRATCH_DEV using specified options" + exit 1 + fi + + # call the overridden mount - make sure the FS mounts with + # the same options that we'll mount with later. + if ! _scratch_mount >$tmp.err 2>&1 + then + echo "our local mount routine ..." + cat $tmp.err + echo "check: failed to mount \$SCRATCH_DEV using specified options" + exit 1 + fi fi - # slashes now in names, sed barfs on them so use grep - lasttime=`grep -w ^$seqnum $check.time | awk '// {print $2}'` - if [ "X$lasttime" != X ]; then - echo -n " ${lasttime}s ..." - else - echo -n " " # prettier output with timestamps. - fi - rm -f core $seqres.notrun + seqres="$check" + _check_test_fs - start=`_wallclock` - $timestamp && echo -n " ["`date "+%T"`"]" - [ ! -x $seq ] && chmod u+x $seq # ensure we can run it - $LOGGER_PROG "run xfstest $seqnum" - ./$seq >$tmp.rawout 2>&1 - sts=$? - $timestamp && _timestamp - stop=`_wallclock` + for seq in $list + do + err=false - _fix_malloc <$tmp.rawout >$tmp.out - rm -f $tmp.rawout + # the filename for the test and the name output are different. + # we don't include the tests/ directory in the name output. + seqnum=`echo $seq | sed -e "s;$SRC_DIR/;;"` - if [ -f core ] - then - echo -n " [dumped core]" - mv core $RESULT_BASE/$seqnum.core - err=true - fi + # Similarly, the result directory needs to replace the tests/ + # part of the test location. + group=`dirname $seq` + export RESULT_DIR=`echo $group | sed -e "s;$SRC_DIR;$RESULT_BASE;"` + mkdir -p $RESULT_DIR + seqres="$RESULT_BASE/$seqnum" - if [ -f $seqres.notrun ] - then - $timestamp || echo -n " [not run] " - $timestamp && echo " [not run]" && echo -n " $seqnum -- " - cat $seqres.notrun - notrun="$notrun $seqnum" - else - if [ $sts -ne 0 ] + echo -n "$seqnum" + + if $showme then - echo -n " [failed, exit status $sts]" - err=true - fi - if [ ! -f $seq.out ] + echo + continue + elif [ ! -f $seq ] then - echo " - no qualified output" - err=true + echo " - no such test?" else - if diff $seq.out $tmp.out >/dev/null 2>&1 + # really going to try and run this one + # + rm -f $seqres.out.bad + + # check if we really should run it + if [ -s $tmp.xlist ]; then + if grep $seqnum $tmp.xlist > /dev/null 2>&1 ; then + echo " [expunged]" + continue + fi + fi + + # slashes now in names, sed barfs on them so use grep + lasttime=`grep -w ^$seqnum $check.time | awk '// {print $2}'` + if [ "X$lasttime" != X ]; then + echo -n " ${lasttime}s ..." + else + echo -n " " # prettier output with timestamps. + fi + rm -f core $seqres.notrun + + start=`_wallclock` + $timestamp && echo -n " ["`date "+%T"`"]" + [ ! -x $seq ] && chmod u+x $seq # ensure we can run it + $LOGGER_PROG "run xfstest $seqnum" + ./$seq >$tmp.rawout 2>&1 + sts=$? + $timestamp && _timestamp + stop=`_wallclock` + + _fix_malloc <$tmp.rawout >$tmp.out + rm -f $tmp.rawout + + if [ -f core ] + then + echo -n " [dumped core]" + mv core $RESULT_BASE/$seqnum.core + err=true + fi + + if [ -f $seqres.notrun ] then - if $err + $timestamp || echo -n " [not run] " + $timestamp && echo " [not run]" && echo -n " $seqnum -- " + cat $seqres.notrun + notrun="$notrun $seqnum" + else + if [ $sts -ne 0 ] then - : - else - echo "$seqnum `expr $stop - $start`" >>$tmp.time - echo -n " `expr $stop - $start`s" + echo -n " [failed, exit status $sts]" + err=true fi - echo "" - else - echo " - output mismatch (see $seqres.out.bad)" - mv $tmp.out $seqres.out.bad - $diff $seq.out $seqres.out.bad | { - if test "$DIFF_LENGTH" -le 0; then - cat + if [ ! -f $seq.out ] + then + echo " - no qualified output" + err=true + else + if diff $seq.out $tmp.out >/dev/null 2>&1 + then + if $err + then + : + else + echo "$seqnum `expr $stop - $start`" >>$tmp.time + echo -n " `expr $stop - $start`s" + fi + echo "" else - head -n "$DIFF_LENGTH" - fi; } | \ - sed -e 's/^\(.\)/ \1/' - echo " ..." - echo " (Run '$diff $seq.out $seqres.out.bad' to see the" \ - "entire diff)" - err=true + echo " - output mismatch (see $seqres.out.bad)" + mv $tmp.out $seqres.out.bad + $diff $seq.out $seqres.out.bad | { + if test "$DIFF_LENGTH" -le 0; then + cat + else + head -n "$DIFF_LENGTH" + fi; } | \ + sed -e 's/^\(.\)/ \1/' + echo " ..." + echo " (Run '$diff $seq.out $seqres.out.bad' to see the" \ + "entire diff)" + err=true + fi + fi fi - fi - fi - fi + fi - # come here for each test, except when $showme is true - # - if $err - then - bad="$bad $seqnum" - n_bad=`expr $n_bad + 1` - quick=false - fi - if [ ! -f $seqres.notrun ] - then - try="$try $seqnum" - n_try=`expr $n_try + 1` - _check_test_fs - fi + # come here for each test, except when $showme is true + # + if $err + then + bad="$bad $seqnum" + n_bad=`expr $n_bad + 1` + quick=false + fi + if [ ! -f $seqres.notrun ] + then + try="$try $seqnum" + n_try=`expr $n_try + 1` + _check_test_fs + fi - seq="after_$seqnum" + seq="after_$seqnum" + done + _wrapup + echo done interrupt=false -status=`expr $n_bad` +status=`expr $sum_bad` exit diff --git a/common/config b/common/config index 67c1498..383d445 100644 --- a/common/config +++ b/common/config @@ -216,62 +216,95 @@ known_hosts() { [ "$HOST_CONFIG_DIR" ] || HOST_CONFIG_DIR=`pwd`/configs - [ -f /etc/xfsqa.config ] && . /etc/xfsqa.config - [ -f $HOST_CONFIG_DIR/$HOST ] && . $HOST_CONFIG_DIR/$HOST - [ -f $HOST_CONFIG_DIR/$HOST.config ] && . $HOST_CONFIG_DIR/$HOST.config - - # Mandatory Config values. - MC="" - [ -z "$EMAIL" ] && MC="$MC EMAIL" - [ -z "$TEST_DIR" ] && MC="$MC TEST_DIR" - [ -z "$TEST_DEV" ] && MC="$MC TEST_DEV" - - if [ -n "$MC" ]; then - echo "Warning: need to define parameters for host $HOST" - echo " or set variables:" - echo " $MC" - exit 1 - fi + [ -f /etc/xfsqa.config ] && export HOST_OPTIONS=/etc/xfsqa.config + [ -f $HOST_CONFIG_DIR/$HOST ] && export HOST_OPTIONS=$HOST_CONFIG_DIR/$HOST + [ -f $HOST_CONFIG_DIR/$HOST.config ] && export HOST_OPTIONS=$HOST_CONFIG_DIR/$HOST.config } -if [ -f "$HOST_OPTIONS" ]; then - . "$HOST_OPTIONS" -else - known_hosts -fi +get_config_sections() { + sed -n -e "s/^\[\([[:alnum:]]*\)\]/\1/p" < $1 +} -echo $TEST_DEV | grep -q ":" > /dev/null 2>&1 -if [ ! -b "$TEST_DEV" -a "$?" != "0" ]; then - echo "common/config: Error: \$TEST_DEV ($TEST_DEV) is not a block device or a NFS filesystem" - exit 1 -fi -if [ ! -d "$TEST_DIR" ]; then - echo "common/config: Error: \$TEST_DIR ($TEST_DIR) is not a directory" - exit 1 +if [ ! -f "$HOST_OPTIONS" ]; then + known_hosts fi -# a btrfs tester will set only SCRATCH_DEV_POOL, we will put first of its dev -# to SCRATCH_DEV and rest to SCRATCH_DEV_POOL to maintain the backward compatibility -if [ ! -z "$SCRATCH_DEV_POOL" ]; then - if [ ! -z "$SCRATCH_DEV" ]; then - echo "common/config: Error: \$SCRATCH_DEV should be unset when \$SCRATCH_DEV_POOL is set" - exit 1 +export OPTIONS_HAVE_SECTIONS=false +if [ -f "$HOST_OPTIONS" ]; then + export HOST_OPTIONS_SECTIONS=`get_config_sections $HOST_OPTIONS` + if [ -z "$HOST_OPTIONS_SECTIONS" ]; then + . $HOST_OPTIONS + export HOST_OPTIONS_SECTIONS="__already_configured__" + else + export OPTIONS_HAVE_SECTIONS=true fi - SCRATCH_DEV=`echo $SCRATCH_DEV_POOL | awk '{print $1}'` - SCRATCH_DEV_POOL=`echo $SCRATCH_DEV_POOL | awk '{ ORS=" "; for (i = 2; i <= NF; i++) print $i}'` fi -echo $SCRATCH_DEV | grep -q ":" > /dev/null 2>&1 -if [ ! -z "$SCRATCH_DEV" -a ! -b "$SCRATCH_DEV" -a "$?" != "0" ]; then - echo "common/config: Error: \$SCRATCH_DEV ($SCRATCH_DEV) is not a block device or a NFS filesystem" - exit 1 -fi +parse_config_section() { + SECTION=$1 + if ! $OPTIONS_HAVE_SECTIONS; then + return 0 + fi + eval `sed -e 's/[[:space:]]*\=[[:space:]]*/=/g' \ + -e 's/#.*$//' \ + -e 's/[[:space:]]*$//' \ + -e 's/^[[:space:]]*//' \ + -e "s/^\(.*\)=\([^\"']*\)$/export \1=\"\2\"/" \ + < $HOST_OPTIONS \ + | sed -n -e "/^\[$SECTION\]/,/^\s*\[/{/^[^;].*\=.*/p;}"` +} -if [ ! -z "$SCRATCH_MNT" -a ! -d "$SCRATCH_MNT" ]; then - echo "common/config: Error: \$SCRATCH_MNT ($SCRATCH_MNT) is not a directory" - exit 1 -fi +get_next_config() { + parse_config_section $1 + # Mandatory Config values. + MC="" + [ -z "$EMAIL" ] && MC="$MC EMAIL" + [ -z "$TEST_DIR" ] && MC="$MC TEST_DIR" + [ -z "$TEST_DEV" ] && MC="$MC TEST_DEV" + + if [ -n "$MC" ]; then + echo "Warning: need to define parameters for host $HOST" + echo " or set variables:" + echo " $MC" + exit 1 + fi + + echo $TEST_DEV | grep -q ":" > /dev/null 2>&1 + if [ ! -b "$TEST_DEV" -a "$?" != "0" ]; then + echo "common/config: Error: \$TEST_DEV ($TEST_DEV) is not a block device or a NFS filesystem" + exit 1 + fi + + if [ ! -d "$TEST_DIR" ]; then + echo "common/config: Error: \$TEST_DIR ($TEST_DIR) is not a directory" + exit 1 + fi + + # a btrfs tester will set only SCRATCH_DEV_POOL, we will put first of its dev + # to SCRATCH_DEV and rest to SCRATCH_DEV_POOL to maintain the backward compatibility + if [ ! -z "$SCRATCH_DEV_POOL" ]; then + if [ ! -z "$SCRATCH_DEV" ]; then + echo "common/config: Error: \$SCRATCH_DEV should be unset when \$SCRATCH_DEV_POOL is set" + exit 1 + fi + SCRATCH_DEV=`echo $SCRATCH_DEV_POOL | awk '{print $1}'` + SCRATCH_DEV_POOL=`echo $SCRATCH_DEV_POOL | awk '{ ORS=" "; for (i = 2; i <= NF; i++) print $i}'` + fi + + echo $SCRATCH_DEV | grep -q ":" > /dev/null 2>&1 + if [ ! -z "$SCRATCH_DEV" -a ! -b "$SCRATCH_DEV" -a "$?" != "0" ]; then + echo "common/config: Error: \$SCRATCH_DEV ($SCRATCH_DEV) is not a block device or a NFS filesystem" + exit 1 + fi + + if [ ! -z "$SCRATCH_MNT" -a ! -d "$SCRATCH_MNT" ]; then + echo "common/config: Error: \$SCRATCH_MNT ($SCRATCH_MNT) is not a directory" + exit 1 + fi +} + +get_next_config `echo $HOST_OPTIONS_SECTIONS | cut -f1 -d" "` # make sure this script returns success /bin/true diff --git a/common/rc b/common/rc index fe6bbfc..7b9349e 100644 --- a/common/rc +++ b/common/rc @@ -2131,46 +2131,49 @@ run_check() "$@" >> $seqres.full 2>&1 || _fail "failed: '$@'" } -################################################################################ - -if [ "$iam" != new ] -then - # make some further configuration checks here - - if [ "$TEST_DEV" = "" ] +init_rc() +{ + if [ "$iam" != new ] then - echo "common/rc: Error: \$TEST_DEV is not set" - exit 1 - fi + # make some further configuration checks here - # if $TEST_DEV is not mounted, mount it now as XFS - if [ -z "`_fs_type $TEST_DEV`" ] - then - # $TEST_DEV is not mounted - if ! _test_mount + if [ "$TEST_DEV" = "" ] + then + echo "common/rc: Error: \$TEST_DEV is not set" + exit 1 + fi + + # if $TEST_DEV is not mounted, mount it now as XFS + if [ -z "`_fs_type $TEST_DEV`" ] then - echo "common/rc: retrying test device mount with external set" - [ "$USE_EXTERNAL" != "yes" ] && export USE_EXTERNAL=yes + # $TEST_DEV is not mounted if ! _test_mount then - echo "common/rc: could not mount $TEST_DEV on $TEST_DIR" - exit 1 + echo "common/rc: retrying test device mount with external set" + [ "$USE_EXTERNAL" != "yes" ] && export USE_EXTERNAL=yes + if ! _test_mount + then + echo "common/rc: could not mount $TEST_DEV on $TEST_DIR" + exit 1 + fi fi fi - fi - if [ "`_fs_type $TEST_DEV`" != "$FSTYP" ] - then - echo "common/rc: Error: \$TEST_DEV ($TEST_DEV) is not a MOUNTED $FSTYP filesystem" - $DF_PROG $TEST_DEV - exit 1 - fi + if [ "`_fs_type $TEST_DEV`" != "$FSTYP" ] + then + echo "common/rc: Error: \$TEST_DEV ($TEST_DEV) is not a MOUNTED $FSTYP filesystem" + $DF_PROG $TEST_DEV + exit 1 + fi + # Figure out if we need to add -F ("foreign", deprecated) option to xfs_io + xfs_io -c stat $TEST_DIR 2>&1 | grep -q "is not on an XFS filesystem" && \ + export XFS_IO_PROG="$XFS_IO_PROG -F" - # Figure out if we need to add -F ("foreign", deprecated) option to xfs_io - xfs_io -c stat $TEST_DIR 2>&1 | grep -q "is not on an XFS filesystem" && \ - export XFS_IO_PROG="$XFS_IO_PROG -F" + fi +} -fi +init_rc +################################################################################ # make sure this script returns success /bin/true -- 1.8.2.1 _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 3/3] xfstests: Add support for sections in config file 2013-06-28 13:23 ` [PATCH 3/3] xfstests: Add support for sections in config file Lukas Czerner @ 2013-06-28 13:29 ` Lukáš Czerner 0 siblings, 0 replies; 4+ messages in thread From: Lukáš Czerner @ 2013-06-28 13:29 UTC (permalink / raw) To: xfs NAK, wrong version. Will resend. -Lukas On Fri, 28 Jun 2013, Lukas Czerner wrote: > Date: Fri, 28 Jun 2013 15:23:45 +0200 > From: Lukas Czerner <lczerner@redhat.com> > To: xfs@oss.sgi.com > Cc: Lukas Czerner <lczerner@redhat.com> > Subject: [PATCH 3/3] xfstests: Add support for sections in config file > > This patch add support for sections in the config file. Each section can > contain configuration options in the format > > OPTION=value > > when one section is processed xfstests will proceed to next section > until all secitons are processed, or an error occur. > > The name of the section can consist of alphanumeric characters + '_', > nothing else is allowed. Name of the section is also used to create > results subdirectory for each section. After all the sections are > processed summary of all runs is printed out. > > If the config file does not contain sections, or we're not using config > file at all, nothing is changed and xfstests will work the same way as > it used to. > > This is very useful for testing file system with different options. Here > is an example of the config file with sections: > > [ext4_4k_block_size] > TEST_DEV=/dev/sda > TEST_DIR=/mnt/test > SCRATCH_DEV=/dev/sdb > SCRATCH_MNT=/mnt/test1 > MKFS_OPTIONS="-q -F -b4096" > FSTYP=ext4 > > [ext4_1k_block_size] > 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" > > Note that once the variable is set it remains set across the sections, so > you do not have to specify all the options in all sections. However one > have to make sure that unwanted options are not set from previous > sections. > > Signed-off-by: Lukas Czerner <lczerner@redhat.com> > --- > check | 371 +++++++++++++++++++++++++++++++++------------------------- > common/config | 125 ++++++++++++-------- > common/rc | 63 +++++----- > 3 files changed, 325 insertions(+), 234 deletions(-) > > diff --git a/check b/check > index 1fded37..e8519a5 100755 > --- a/check > +++ b/check > @@ -22,9 +22,11 @@ > tmp=/tmp/$$ > status=0 > needwrap=true > +needsum=true > n_try=0 > try="" > n_bad=0 > +sum_bad=0 > bad="" > notrun="" > interrupt=true > @@ -66,7 +68,6 @@ export FSTYP > SUPPORTED_TESTS="[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]" > SRC_GROUPS="generic shared" > export SRC_DIR="tests" > -export RESULT_BASE=${RESULT_BASE:="$here/results"} > > usage() > { > @@ -296,7 +297,12 @@ then > exit 1 > fi > > -# Ok, time to start running... > +_wipe_counters() > +{ > + n_try="0" > + n_bad="0" > + unset try notrun bad > +} > > _wrapup() > { > @@ -325,16 +331,20 @@ END { if (NR > 0) { > date >>$check.log > echo $list | fmt | sed -e 's/^/ /' -e "s;$SRC_DIR/;;g" >>$check.log > $interrupt && echo "Interrupted!" >>$check.log > - > + > + echo "SECTION -- $section" >>$tmp.summary > + echo "=========================" >>$tmp.summary > if [ ! -z "$n_try" -a $n_try != 0 ] > then > echo "Ran:$try" > + echo "Ran:$try" >>$tmp.summary > fi > > if [ ! -z "$notrun" ] > then > echo "Not run:$notrun" > echo "Not run:$notrun" >>$check.log > + echo "Not run:$notrun" >>$tmp.summary > fi > > if [ ! -z "$n_bad" -a $n_bad != 0 ] > @@ -343,200 +353,245 @@ END { if (NR > 0) { > echo "Failed $n_bad of $n_try tests" > echo "Failures:$bad" | fmt >>$check.log > echo "Failed $n_bad of $n_try tests" >>$check.log > + echo "Failures:$bad" >>$tmp.summary > + echo "Failed $n_bad of $n_try tests" >>$tmp.summary > else > echo "Passed all $n_try tests" > echo "Passed all $n_try tests" >>$check.log > + echo "Passed all $n_try tests" >>$tmp.summary > fi > + echo "" >>$tmp.summary > needwrap=false > fi > > + sum_bad=`expr $sum_bad + $n_bad` > + _wipe_counters > rm -f /tmp/*.rawout /tmp/*.out /tmp/*.err /tmp/*.time > - rm -f $tmp.* > + if ! $OPTIONS_HAVE_SECTIONS; then > + rm -f $tmp.* > + fi > } > > -trap "_wrapup; exit \$status" 0 1 2 3 15 > - > -mkdir -p $RESULT_BASE > -if [ ! -d $RESULT_BASE ]; then > - echo "failed to create results directory $RESULTS_BASE" > - exit 1; > -fi > +_summary() > +{ > + _wrapup > + if $showme; then > + : > + elif $needsum; then > + count=`wc -L $tmp.summary | cut -f1 -d" "` > + cat $tmp.summary > + needsum=false > + fi > + rm -f $tmp.* > +} > > -seq="check" > -check="$RESULT_BASE/check" > +# Ok, time to start running... > > -# don't leave old full output behind on a clean run > -rm -f $check.full > +if $OPTIONS_HAVE_SECTIONS; then > + trap "_summary; exit \$status" 0 1 2 3 15 > +else > + trap "_wrapup; exit \$status" 0 1 2 3 15 > +fi > > -[ -f $check.time ] || touch $check.time > +for section in $HOST_OPTIONS_SECTIONS; do > > -# print out our test configuration > -echo "FSTYP -- `_full_fstyp_details`" > -echo "PLATFORM -- `_full_platform_details`" > -if [ ! -z "$SCRATCH_DEV" ]; then > - echo "MKFS_OPTIONS -- `_scratch_mkfs_options`" > - echo "MOUNT_OPTIONS -- `_scratch_mount_options`" > -fi > -echo > - > - > -if [ ! -z "$SCRATCH_DEV" ]; then > - umount $SCRATCH_DEV 2>/dev/null > - # call the overridden mkfs - make sure the FS is built > - # the same as we'll create it later. > - > - if ! _scratch_mkfs $flag >$tmp.err 2>&1 > - then > - echo "our local _scratch_mkfs routine ..." > - cat $tmp.err > - echo "check: failed to mkfs \$SCRATCH_DEV using specified options" > - exit 1 > - fi > - > - # call the overridden mount - make sure the FS mounts with > - # the same options that we'll mount with later. > - if ! _scratch_mount >$tmp.err 2>&1 > - then > - echo "our local mount routine ..." > - cat $tmp.err > - echo "check: failed to mount \$SCRATCH_DEV using specified options" > - exit 1 > - fi > -fi > + if $OPTIONS_HAVE_SECTIONS; then > + export RESULT_BASE="$here/results/$section" > + else > + export RESULT_BASE="$here/results/" > + fi > > -seqres="$check" > -_check_test_fs > + get_next_config $section > + init_rc > > -for seq in $list > -do > - err=false > + mkdir -p $RESULT_BASE > + if [ ! -d $RESULT_BASE ]; then > + echo "failed to create results directory $RESULTS_BASE" > + exit 1; > + fi > > - # the filename for the test and the name output are different. > - # we don't include the tests/ directory in the name output. > - seqnum=`echo $seq | sed -e "s;$SRC_DIR/;;"` > + seq="check" > + check="$RESULT_BASE/check" > > - # Similarly, the result directory needs to replace the tests/ > - # part of the test location. > - group=`dirname $seq` > - export RESULT_DIR=`echo $group | sed -e "s;$SRC_DIR;$RESULT_BASE;"` > - mkdir -p $RESULT_DIR > - seqres="$RESULT_BASE/$seqnum" > + # don't leave old full output behind on a clean run > + rm -f $check.full > > - echo -n "$seqnum" > + [ -f $check.time ] || touch $check.time > > - if $showme > - then > + # 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 > + echo "MKFS_OPTIONS -- `_scratch_mkfs_options`" > + echo "MOUNT_OPTIONS -- `_scratch_mount_options`" > + fi > echo > - continue > - elif [ ! -f $seq ] > - then > - echo " - no such test?" > - else > - # really going to try and run this one > - # > - rm -f $seqres.out.bad > - > - # check if we really should run it > - if [ -s $tmp.xlist ]; then > - if grep $seqnum $tmp.xlist > /dev/null 2>&1 ; then > - echo " [expunged]" > - continue > - fi > + needwrap=true > + > + > + if [ ! -z "$SCRATCH_DEV" ]; then > + umount $SCRATCH_DEV 2>/dev/null > + # call the overridden mkfs - make sure the FS is built > + # the same as we'll create it later. > + > + if ! _scratch_mkfs $flag >$tmp.err 2>&1 > + then > + echo "our local _scratch_mkfs routine ..." > + cat $tmp.err > + echo "check: failed to mkfs \$SCRATCH_DEV using specified options" > + exit 1 > + fi > + > + # call the overridden mount - make sure the FS mounts with > + # the same options that we'll mount with later. > + if ! _scratch_mount >$tmp.err 2>&1 > + then > + echo "our local mount routine ..." > + cat $tmp.err > + echo "check: failed to mount \$SCRATCH_DEV using specified options" > + exit 1 > + fi > fi > > - # slashes now in names, sed barfs on them so use grep > - lasttime=`grep -w ^$seqnum $check.time | awk '// {print $2}'` > - if [ "X$lasttime" != X ]; then > - echo -n " ${lasttime}s ..." > - else > - echo -n " " # prettier output with timestamps. > - fi > - rm -f core $seqres.notrun > + seqres="$check" > + _check_test_fs > > - start=`_wallclock` > - $timestamp && echo -n " ["`date "+%T"`"]" > - [ ! -x $seq ] && chmod u+x $seq # ensure we can run it > - $LOGGER_PROG "run xfstest $seqnum" > - ./$seq >$tmp.rawout 2>&1 > - sts=$? > - $timestamp && _timestamp > - stop=`_wallclock` > + for seq in $list > + do > + err=false > > - _fix_malloc <$tmp.rawout >$tmp.out > - rm -f $tmp.rawout > + # the filename for the test and the name output are different. > + # we don't include the tests/ directory in the name output. > + seqnum=`echo $seq | sed -e "s;$SRC_DIR/;;"` > > - if [ -f core ] > - then > - echo -n " [dumped core]" > - mv core $RESULT_BASE/$seqnum.core > - err=true > - fi > + # Similarly, the result directory needs to replace the tests/ > + # part of the test location. > + group=`dirname $seq` > + export RESULT_DIR=`echo $group | sed -e "s;$SRC_DIR;$RESULT_BASE;"` > + mkdir -p $RESULT_DIR > + seqres="$RESULT_BASE/$seqnum" > > - if [ -f $seqres.notrun ] > - then > - $timestamp || echo -n " [not run] " > - $timestamp && echo " [not run]" && echo -n " $seqnum -- " > - cat $seqres.notrun > - notrun="$notrun $seqnum" > - else > - if [ $sts -ne 0 ] > + echo -n "$seqnum" > + > + if $showme > then > - echo -n " [failed, exit status $sts]" > - err=true > - fi > - if [ ! -f $seq.out ] > + echo > + continue > + elif [ ! -f $seq ] > then > - echo " - no qualified output" > - err=true > + echo " - no such test?" > else > - if diff $seq.out $tmp.out >/dev/null 2>&1 > + # really going to try and run this one > + # > + rm -f $seqres.out.bad > + > + # check if we really should run it > + if [ -s $tmp.xlist ]; then > + if grep $seqnum $tmp.xlist > /dev/null 2>&1 ; then > + echo " [expunged]" > + continue > + fi > + fi > + > + # slashes now in names, sed barfs on them so use grep > + lasttime=`grep -w ^$seqnum $check.time | awk '// {print $2}'` > + if [ "X$lasttime" != X ]; then > + echo -n " ${lasttime}s ..." > + else > + echo -n " " # prettier output with timestamps. > + fi > + rm -f core $seqres.notrun > + > + start=`_wallclock` > + $timestamp && echo -n " ["`date "+%T"`"]" > + [ ! -x $seq ] && chmod u+x $seq # ensure we can run it > + $LOGGER_PROG "run xfstest $seqnum" > + ./$seq >$tmp.rawout 2>&1 > + sts=$? > + $timestamp && _timestamp > + stop=`_wallclock` > + > + _fix_malloc <$tmp.rawout >$tmp.out > + rm -f $tmp.rawout > + > + if [ -f core ] > + then > + echo -n " [dumped core]" > + mv core $RESULT_BASE/$seqnum.core > + err=true > + fi > + > + if [ -f $seqres.notrun ] > then > - if $err > + $timestamp || echo -n " [not run] " > + $timestamp && echo " [not run]" && echo -n " $seqnum -- " > + cat $seqres.notrun > + notrun="$notrun $seqnum" > + else > + if [ $sts -ne 0 ] > then > - : > - else > - echo "$seqnum `expr $stop - $start`" >>$tmp.time > - echo -n " `expr $stop - $start`s" > + echo -n " [failed, exit status $sts]" > + err=true > fi > - echo "" > - else > - echo " - output mismatch (see $seqres.out.bad)" > - mv $tmp.out $seqres.out.bad > - $diff $seq.out $seqres.out.bad | { > - if test "$DIFF_LENGTH" -le 0; then > - cat > + if [ ! -f $seq.out ] > + then > + echo " - no qualified output" > + err=true > + else > + if diff $seq.out $tmp.out >/dev/null 2>&1 > + then > + if $err > + then > + : > + else > + echo "$seqnum `expr $stop - $start`" >>$tmp.time > + echo -n " `expr $stop - $start`s" > + fi > + echo "" > else > - head -n "$DIFF_LENGTH" > - fi; } | \ > - sed -e 's/^\(.\)/ \1/' > - echo " ..." > - echo " (Run '$diff $seq.out $seqres.out.bad' to see the" \ > - "entire diff)" > - err=true > + echo " - output mismatch (see $seqres.out.bad)" > + mv $tmp.out $seqres.out.bad > + $diff $seq.out $seqres.out.bad | { > + if test "$DIFF_LENGTH" -le 0; then > + cat > + else > + head -n "$DIFF_LENGTH" > + fi; } | \ > + sed -e 's/^\(.\)/ \1/' > + echo " ..." > + echo " (Run '$diff $seq.out $seqres.out.bad' to see the" \ > + "entire diff)" > + err=true > + fi > + fi > fi > - fi > - fi > > - fi > + fi > > - # come here for each test, except when $showme is true > - # > - if $err > - then > - bad="$bad $seqnum" > - n_bad=`expr $n_bad + 1` > - quick=false > - fi > - if [ ! -f $seqres.notrun ] > - then > - try="$try $seqnum" > - n_try=`expr $n_try + 1` > - _check_test_fs > - fi > + # come here for each test, except when $showme is true > + # > + if $err > + then > + bad="$bad $seqnum" > + n_bad=`expr $n_bad + 1` > + quick=false > + fi > + if [ ! -f $seqres.notrun ] > + then > + try="$try $seqnum" > + n_try=`expr $n_try + 1` > + _check_test_fs > + fi > > - seq="after_$seqnum" > + seq="after_$seqnum" > + done > + _wrapup > + echo > done > > interrupt=false > -status=`expr $n_bad` > +status=`expr $sum_bad` > exit > diff --git a/common/config b/common/config > index 67c1498..383d445 100644 > --- a/common/config > +++ b/common/config > @@ -216,62 +216,95 @@ known_hosts() > { > [ "$HOST_CONFIG_DIR" ] || HOST_CONFIG_DIR=`pwd`/configs > > - [ -f /etc/xfsqa.config ] && . /etc/xfsqa.config > - [ -f $HOST_CONFIG_DIR/$HOST ] && . $HOST_CONFIG_DIR/$HOST > - [ -f $HOST_CONFIG_DIR/$HOST.config ] && . $HOST_CONFIG_DIR/$HOST.config > - > - # Mandatory Config values. > - MC="" > - [ -z "$EMAIL" ] && MC="$MC EMAIL" > - [ -z "$TEST_DIR" ] && MC="$MC TEST_DIR" > - [ -z "$TEST_DEV" ] && MC="$MC TEST_DEV" > - > - if [ -n "$MC" ]; then > - echo "Warning: need to define parameters for host $HOST" > - echo " or set variables:" > - echo " $MC" > - exit 1 > - fi > + [ -f /etc/xfsqa.config ] && export HOST_OPTIONS=/etc/xfsqa.config > + [ -f $HOST_CONFIG_DIR/$HOST ] && export HOST_OPTIONS=$HOST_CONFIG_DIR/$HOST > + [ -f $HOST_CONFIG_DIR/$HOST.config ] && export HOST_OPTIONS=$HOST_CONFIG_DIR/$HOST.config > } > > -if [ -f "$HOST_OPTIONS" ]; then > - . "$HOST_OPTIONS" > -else > - known_hosts > -fi > +get_config_sections() { > + sed -n -e "s/^\[\([[:alnum:]]*\)\]/\1/p" < $1 > +} > > -echo $TEST_DEV | grep -q ":" > /dev/null 2>&1 > -if [ ! -b "$TEST_DEV" -a "$?" != "0" ]; then > - echo "common/config: Error: \$TEST_DEV ($TEST_DEV) is not a block device or a NFS filesystem" > - exit 1 > -fi > > -if [ ! -d "$TEST_DIR" ]; then > - echo "common/config: Error: \$TEST_DIR ($TEST_DIR) is not a directory" > - exit 1 > +if [ ! -f "$HOST_OPTIONS" ]; then > + known_hosts > fi > > -# a btrfs tester will set only SCRATCH_DEV_POOL, we will put first of its dev > -# to SCRATCH_DEV and rest to SCRATCH_DEV_POOL to maintain the backward compatibility > -if [ ! -z "$SCRATCH_DEV_POOL" ]; then > - if [ ! -z "$SCRATCH_DEV" ]; then > - echo "common/config: Error: \$SCRATCH_DEV should be unset when \$SCRATCH_DEV_POOL is set" > - exit 1 > +export OPTIONS_HAVE_SECTIONS=false > +if [ -f "$HOST_OPTIONS" ]; then > + export HOST_OPTIONS_SECTIONS=`get_config_sections $HOST_OPTIONS` > + if [ -z "$HOST_OPTIONS_SECTIONS" ]; then > + . $HOST_OPTIONS > + export HOST_OPTIONS_SECTIONS="__already_configured__" > + else > + export OPTIONS_HAVE_SECTIONS=true > fi > - SCRATCH_DEV=`echo $SCRATCH_DEV_POOL | awk '{print $1}'` > - SCRATCH_DEV_POOL=`echo $SCRATCH_DEV_POOL | awk '{ ORS=" "; for (i = 2; i <= NF; i++) print $i}'` > fi > > -echo $SCRATCH_DEV | grep -q ":" > /dev/null 2>&1 > -if [ ! -z "$SCRATCH_DEV" -a ! -b "$SCRATCH_DEV" -a "$?" != "0" ]; then > - echo "common/config: Error: \$SCRATCH_DEV ($SCRATCH_DEV) is not a block device or a NFS filesystem" > - exit 1 > -fi > +parse_config_section() { > + SECTION=$1 > + if ! $OPTIONS_HAVE_SECTIONS; then > + return 0 > + fi > + eval `sed -e 's/[[:space:]]*\=[[:space:]]*/=/g' \ > + -e 's/#.*$//' \ > + -e 's/[[:space:]]*$//' \ > + -e 's/^[[:space:]]*//' \ > + -e "s/^\(.*\)=\([^\"']*\)$/export \1=\"\2\"/" \ > + < $HOST_OPTIONS \ > + | sed -n -e "/^\[$SECTION\]/,/^\s*\[/{/^[^;].*\=.*/p;}"` > +} > > -if [ ! -z "$SCRATCH_MNT" -a ! -d "$SCRATCH_MNT" ]; then > - echo "common/config: Error: \$SCRATCH_MNT ($SCRATCH_MNT) is not a directory" > - exit 1 > -fi > +get_next_config() { > + parse_config_section $1 > + # Mandatory Config values. > + MC="" > + [ -z "$EMAIL" ] && MC="$MC EMAIL" > + [ -z "$TEST_DIR" ] && MC="$MC TEST_DIR" > + [ -z "$TEST_DEV" ] && MC="$MC TEST_DEV" > + > + if [ -n "$MC" ]; then > + echo "Warning: need to define parameters for host $HOST" > + echo " or set variables:" > + echo " $MC" > + exit 1 > + fi > + > + echo $TEST_DEV | grep -q ":" > /dev/null 2>&1 > + if [ ! -b "$TEST_DEV" -a "$?" != "0" ]; then > + echo "common/config: Error: \$TEST_DEV ($TEST_DEV) is not a block device or a NFS filesystem" > + exit 1 > + fi > + > + if [ ! -d "$TEST_DIR" ]; then > + echo "common/config: Error: \$TEST_DIR ($TEST_DIR) is not a directory" > + exit 1 > + fi > + > + # a btrfs tester will set only SCRATCH_DEV_POOL, we will put first of its dev > + # to SCRATCH_DEV and rest to SCRATCH_DEV_POOL to maintain the backward compatibility > + if [ ! -z "$SCRATCH_DEV_POOL" ]; then > + if [ ! -z "$SCRATCH_DEV" ]; then > + echo "common/config: Error: \$SCRATCH_DEV should be unset when \$SCRATCH_DEV_POOL is set" > + exit 1 > + fi > + SCRATCH_DEV=`echo $SCRATCH_DEV_POOL | awk '{print $1}'` > + SCRATCH_DEV_POOL=`echo $SCRATCH_DEV_POOL | awk '{ ORS=" "; for (i = 2; i <= NF; i++) print $i}'` > + fi > + > + echo $SCRATCH_DEV | grep -q ":" > /dev/null 2>&1 > + if [ ! -z "$SCRATCH_DEV" -a ! -b "$SCRATCH_DEV" -a "$?" != "0" ]; then > + echo "common/config: Error: \$SCRATCH_DEV ($SCRATCH_DEV) is not a block device or a NFS filesystem" > + exit 1 > + fi > + > + if [ ! -z "$SCRATCH_MNT" -a ! -d "$SCRATCH_MNT" ]; then > + echo "common/config: Error: \$SCRATCH_MNT ($SCRATCH_MNT) is not a directory" > + exit 1 > + fi > +} > + > +get_next_config `echo $HOST_OPTIONS_SECTIONS | cut -f1 -d" "` > > # make sure this script returns success > /bin/true > diff --git a/common/rc b/common/rc > index fe6bbfc..7b9349e 100644 > --- a/common/rc > +++ b/common/rc > @@ -2131,46 +2131,49 @@ run_check() > "$@" >> $seqres.full 2>&1 || _fail "failed: '$@'" > } > > -################################################################################ > - > -if [ "$iam" != new ] > -then > - # make some further configuration checks here > - > - if [ "$TEST_DEV" = "" ] > +init_rc() > +{ > + if [ "$iam" != new ] > then > - echo "common/rc: Error: \$TEST_DEV is not set" > - exit 1 > - fi > + # make some further configuration checks here > > - # if $TEST_DEV is not mounted, mount it now as XFS > - if [ -z "`_fs_type $TEST_DEV`" ] > - then > - # $TEST_DEV is not mounted > - if ! _test_mount > + if [ "$TEST_DEV" = "" ] > + then > + echo "common/rc: Error: \$TEST_DEV is not set" > + exit 1 > + fi > + > + # if $TEST_DEV is not mounted, mount it now as XFS > + if [ -z "`_fs_type $TEST_DEV`" ] > then > - echo "common/rc: retrying test device mount with external set" > - [ "$USE_EXTERNAL" != "yes" ] && export USE_EXTERNAL=yes > + # $TEST_DEV is not mounted > if ! _test_mount > then > - echo "common/rc: could not mount $TEST_DEV on $TEST_DIR" > - exit 1 > + echo "common/rc: retrying test device mount with external set" > + [ "$USE_EXTERNAL" != "yes" ] && export USE_EXTERNAL=yes > + if ! _test_mount > + then > + echo "common/rc: could not mount $TEST_DEV on $TEST_DIR" > + exit 1 > + fi > fi > fi > - fi > > - if [ "`_fs_type $TEST_DEV`" != "$FSTYP" ] > - then > - echo "common/rc: Error: \$TEST_DEV ($TEST_DEV) is not a MOUNTED $FSTYP filesystem" > - $DF_PROG $TEST_DEV > - exit 1 > - fi > + if [ "`_fs_type $TEST_DEV`" != "$FSTYP" ] > + then > + echo "common/rc: Error: \$TEST_DEV ($TEST_DEV) is not a MOUNTED $FSTYP filesystem" > + $DF_PROG $TEST_DEV > + exit 1 > + fi > + # Figure out if we need to add -F ("foreign", deprecated) option to xfs_io > + xfs_io -c stat $TEST_DIR 2>&1 | grep -q "is not on an XFS filesystem" && \ > + export XFS_IO_PROG="$XFS_IO_PROG -F" > > - # Figure out if we need to add -F ("foreign", deprecated) option to xfs_io > - xfs_io -c stat $TEST_DIR 2>&1 | grep -q "is not on an XFS filesystem" && \ > - export XFS_IO_PROG="$XFS_IO_PROG -F" > + fi > +} > > -fi > +init_rc > > +################################################################################ > # make sure this script returns success > /bin/true > _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-06-28 13:29 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-06-28 13:23 [PATCH 1/3] xfstests: Run all tests when nothing is specified Lukas Czerner 2013-06-28 13:23 ` [PATCH 2/3] xfstests: Refactor code for obtaining test list Lukas Czerner 2013-06-28 13:23 ` [PATCH 3/3] xfstests: Add support for sections in config file Lukas Czerner 2013-06-28 13:29 ` Lukáš Czerner
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox