Commit 1b45405d authored by Anton Khirnov's avatar Anton Khirnov

tests/fate-run: add testing with a random number of threads

Useful for discovering bugs that depend on a specific thread count.

Use like THREADS=randomX for a random thread count from 1 to X, with
X=16 when not specified. Note that the thread count is different for
every test.
parent 551a9af5
...@@ -223,6 +223,14 @@ meaning only while running the regression tests. ...@@ -223,6 +223,14 @@ meaning only while running the regression tests.
Specify how many threads to use while running regression tests, it is Specify how many threads to use while running regression tests, it is
quite useful to detect thread-related regressions. quite useful to detect thread-related regressions.
This variable may be set to the string "random", optionally followed by a
number, like "random99", This will cause each test to use a random number of
threads. If a number is specified, it is used as a maximum number of threads,
otherwise 16 is the maximum.
In case a test fails, the thread count used for it will be written into the
errfile.
@item THREAD_TYPE @item THREAD_TYPE
Specify which threading strategy test, either @samp{slice} or @samp{frame}, Specify which threading strategy test, either @samp{slice} or @samp{frame},
by default @samp{slice+frame} by default @samp{slice+frame}
......
...@@ -33,6 +33,15 @@ errfile="${outdir}/${test}.err" ...@@ -33,6 +33,15 @@ errfile="${outdir}/${test}.err"
cmpfile="${outdir}/${test}.diff" cmpfile="${outdir}/${test}.diff"
repfile="${outdir}/${test}.rep" repfile="${outdir}/${test}.rep"
case $threads in
random*)
threads_max=${threads#random}
[ -z "$threads_max" ] && threads_max=16
threads=$(awk "BEGIN { print 1+int(rand() * $threads_max) }" < /dev/null)
;;
esac
target_path(){ target_path(){
test ${1} = ${1#/} && p=${target_path}/ test ${1} = ${1#/} && p=${target_path}/
echo ${p}${1} echo ${p}${1}
...@@ -630,6 +639,7 @@ fi ...@@ -630,6 +639,7 @@ fi
if [ $err -eq 0 ] && test $report_type = "standard" ; then if [ $err -eq 0 ] && test $report_type = "standard" ; then
unset cmpo erro unset cmpo erro
else else
echo "threads=$threads" >> "$errfile"
cmpo="$($base64 <$cmpfile)" cmpo="$($base64 <$cmpfile)"
erro="$($base64 <$errfile)" erro="$($base64 <$errfile)"
fi fi
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment