Re: [PATCH v3 fstests] check: add support for --start-after

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



On Fri, 16 Feb 2024 10:09:46 -0800, Luis Chamberlain wrote:

...
>  check | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 53 insertions(+)
> 
> diff --git a/check b/check
> index 71b9fbd07522..f081bf8ce685 100755
> --- a/check
> +++ b/check
> @@ -18,6 +18,7 @@ showme=false
>  have_test_arg=false
>  randomize=false
>  exact_order=false
> +start_after_test=""
>  export here=`pwd`
>  xfile=""
>  subdir_xfile=""
> @@ -80,6 +81,7 @@ check options
>      -b			brief test summary
>      -R fmt[,fmt]	generate report in formats specified. Supported formats: xunit, xunit-quiet
>      --large-fs		optimise scratch device for large filesystems
> +    --start-after	only start testing after the test specified

The usage text should include the <test> parameter.

>      -s section		run only specified section from config file
>      -S section		exclude the specified section from the config file
>      -L <n>		loop tests <n> times following a failure, measuring aggregate pass/fail metrics
> @@ -120,6 +122,8 @@ examples:
>   check -x stress xfs/*
>   check -X .exclude -g auto
>   check -E ~/.xfstests.exclude
> + check --start-after btrfs/010
> + check -n -g soak --start-after generic/522
>  '
>  	    exit 1
>  }
> @@ -204,6 +208,23 @@ trim_test_list()
>  	rm -f $tmp.grep
>  }
>  
> +# takes the list of tests to run in $tmp.list and skips all tests until
> +# the specified test is found. This will ensure the tests start after the
> +# test specified, it skips the test specified.
> +trim_start_after()
> +{
> +	local skip_test="$1"
> +	local starts_regexp=$(echo $skip_test | sed -e 's|\/|\\/|')
> +
> +	if grep -q $skip_test $tmp.list ; then
> +		rm -f $tmp.grep
> +		awk 'f;/.*'$starts_regexp'/{f=1}' $tmp.list > $tmp.tmp
> +		mv $tmp.tmp $tmp.list
> +	else
> +		echo "Test $skip_test not found in test list, be sure to use a valid test if using --start-after"
> +		exit 1
> +	fi
> +}

nit: it should be possible to collapse the sed+grep+awk into something a
bit more straightforward, e.g.

trim_start_after()
{
        if awk -v skip_test="tests/$1" \
           'f; $0 == skip_test {f=1} END {exit f}' $tmp.list > $tmp.tmp; then
                echo "$1 not found in test list, be sure to use a valid test if using --start-after"
                rm $tmp.tmp
                exit 1
        fi
        mv $tmp.tmp $tmp.list
}

>  
>  _wallclock()
>  {
> @@ -233,6 +254,9 @@ _prepare_test_list()
>  		# no test numbers, do everything
>  		get_all_tests
>  	else
> +		local group_all
> +		local start_after_found=0
> +		list=""
>  		for group in $GROUP_LIST; do
>  			list=$(get_group_list $group)
>  			if [ -z "$list" ]; then
> @@ -240,11 +264,28 @@ _prepare_test_list()
>  				exit 1
>  			fi
>  
> +			if [[ "$start_after_test" != "" && $start_after_found -ne 1 ]]; then
> +				echo $list | grep -q $start_after_test
> +				if [[ $? -eq 0 ]]; then
> +					start_after_found=1
> +				fi
> +			fi
>  			for t in $list; do
>  				grep -s "^$t\$" $tmp.list >/dev/null || \
>  							echo "$t" >>$tmp.list
>  			done
> +			group_all="$group_all $list"
>  		done
> +		if [[ "$start_after_test" != "" && $start_after_found -ne 1 ]]; then
> +			group_all=$(echo $group_all | sed -e 's|tests/||g')
> +			echo "Start after test $start_after_test not found in any group specified."
> +			echo "Be sure you specify a test present in one of your test run groups if using --start-after."
> +			echo
> +			echo "Your set of groups have these tests:"
> +			echo
> +			echo $group_all
> +			exit 1
> +		fi
>  	fi

Can't all of the _prepare_test_list() changes above be dropped?
trim_start_after() already performs the check that the test exists, and
with the above dropped we could also do things like, e.g.
  ./check --start-after generic/002 generic/00[1-9]

>  	# Specified groups to exclude
> @@ -258,6 +299,10 @@ _prepare_test_list()
>  		trim_test_list $list
>  	done
>  
> +	if [[ "$start_after_test" != "" ]]; then
> +		trim_start_after $start_after_test
> +	fi
> +
>  	# sort the list of tests into numeric order unless we're running tests
>  	# in the exact order specified
>  	if ! $exact_order; then
> @@ -313,6 +358,14 @@ while [ $# -gt 0 ]; do
>  				<(sed "s/#.*$//" $xfile)
>  		fi
>  		;;
> +	--start-after)
> +		if $randomize; then
> +			echo "Cannot specify -r and --start-after."
> +			exit 1
> +		fi

IIUC, this will only trigger if -r is parsed before --start-after, so it
should be moved after the loop.

> +		start_after_test="$2"
> +		shift
> +		;;
>  	-s)	RUN_SECTION="$RUN_SECTION $2"; shift ;;
>  	-S)	EXCLUDE_SECTION="$EXCLUDE_SECTION $2"; shift ;;
>  	-l)	diff="diff" ;;





[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux