check: run tests in exactly the order specified
authorDarrick J. Wong <djwong@kernel.org>
Wed, 10 Feb 2021 02:56:47 +0000 (18:56 -0800)
committerEryu Guan <guaneryu@gmail.com>
Sun, 7 Mar 2021 14:36:15 +0000 (22:36 +0800)
Introduce a new --exact-order switch to disable all sorting, filtering
of repeated lines, and shuffling of test order.  The goal of this is to
be able to run tests in a specific order, namely to try to reproduce
test failures that could be the result of a -r(andomize) run getting
lucky.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
check

diff --git a/check b/check
index 6f8db85..106ec8e 100755 (executable)
--- a/check
+++ b/check
@@ -20,6 +20,7 @@ diff="diff -u"
 showme=false
 have_test_arg=false
 randomize=false
+exact_order=false
 export here=`pwd`
 xfile=""
 subdir_xfile=""
@@ -67,6 +68,7 @@ check options
     -n                 show me, do not run tests
     -T                 output timestamps
     -r                 randomize test order
+    --exact-order      run tests in the exact order specified
     -i <n>             iterate the test list <n> times
     -d                 dump test output to stdout
     -b                 brief test summary
@@ -249,17 +251,22 @@ _prepare_test_list()
                trim_test_list $list
        done
 
-       # sort the list of tests into numeric order
-       if $randomize; then
-               if type shuf >& /dev/null; then
-                       sorter="shuf"
+       # sort the list of tests into numeric order unless we're running tests
+       # in the exact order specified
+       if ! $exact_order; then
+               if $randomize; then
+                       if type shuf >& /dev/null; then
+                               sorter="shuf"
+                       else
+                               sorter="awk -v seed=$RANDOM -f randomize.awk"
+                       fi
                else
-                       sorter="awk -v seed=$RANDOM -f randomize.awk"
+                       sorter="cat"
                fi
+               list=`sort -n $tmp.list | uniq | $sorter`
        else
-               sorter="cat"
+               list=`cat $tmp.list`
        fi
-       list=`sort -n $tmp.list | uniq | $sorter`
        rm -f $tmp.list
 }
 
@@ -304,7 +311,20 @@ while [ $# -gt 0 ]; do
        -udiff) diff="$diff -u" ;;
 
        -n)     showme=true ;;
-        -r)    randomize=true ;;
+       -r)
+               if $exact_order; then
+                       echo "Cannot specify -r and --exact-order."
+                       exit 1
+               fi
+               randomize=true
+               ;;
+       --exact-order)
+               if $randomize; then
+                       echo "Cannnot specify --exact-order and -r."
+                       exit 1
+               fi
+               exact_order=true
+               ;;
        -i)     iterations=$2; shift ;;
        -T)     timestamp=true ;;
        -d)     DUMP_OUTPUT=true ;;