diff options
author | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2017-08-01 21:05:31 +0300 |
---|---|---|
committer | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2017-08-01 21:05:31 +0300 |
commit | 94a92a3db909aef0ebcc009c2d7f5a2663e99004 (patch) | |
tree | 0a23b8fbcc3f8d06b9607979554cf24288e4b87b /tests | |
parent | cf1528e7f2761774d06ace0de48f39c96b52dc4f (diff) | |
download | libgcrypt-94a92a3db909aef0ebcc009c2d7f5a2663e99004.tar.gz |
Add script to run basic tests with all supported HWF combinations
* tests/basic_all_hwfeature_combinations.sh: New.
* tests/Makefile.am: Add basic_all_hwfeature_combinations.sh.
--
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 2 | ||||
-rwxr-xr-x | tests/basic_all_hwfeature_combinations.sh | 111 |
2 files changed, 112 insertions, 1 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 1744ea79..eee24faa 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -60,7 +60,7 @@ EXTRA_DIST = README rsa-16k.key cavs_tests.sh cavs_driver.pl \ t-ed25519.inp stopwatch.h hashtest-256g.in \ sha3-224.h sha3-256.h sha3-384.h sha3-512.h \ blake2b.h blake2s.h \ - basic-disable-all-hwf.in + basic-disable-all-hwf.in basic_all_hwfeature_combinations.sh LDADD = $(standard_ldadd) $(GPG_ERROR_LIBS) t_lock_LDADD = $(standard_ldadd) $(GPG_ERROR_MT_LIBS) diff --git a/tests/basic_all_hwfeature_combinations.sh b/tests/basic_all_hwfeature_combinations.sh new file mode 100755 index 00000000..8ec97bf8 --- /dev/null +++ b/tests/basic_all_hwfeature_combinations.sh @@ -0,0 +1,111 @@ +#!/bin/bash +# Run basic tests with all HW feature combinations +# Copyright 2017 Jussi Kivilinna <jussi.kivilinna@iki.fi> +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This file is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# + +# Use BINEXT to set executable extension +# For example for Windows executables: BINEXT=.exe +if [ "x$BINEXT" != "x" ] && [ -e "tests/version$BINEXT" ]; then + binext="$BINEXT" +else + binext="" +fi + +# Use BINPRE to set executable prefix +# For example to run Windows executable with WINE: BINPRE="wine " +if [ "x$BINPRE" != "x" ]; then + binpre="$BINPRE" +else + binpre="" +fi + +# Use NJOBS to define number of parallel tasks +if [ "x$NJOBS" != "x" ]; then + njobs="$NJOBS" +else + # default to cpu count + ncpus=$(nproc --all) + if [ "x@cpus" != "x" ]; then + njobs=$ncpus + else + # could not get cpu count, use 4 parallel tasks instead + njobs=4 + fi +fi + +get_supported_hwfeatures() { + $binpre "tests/version$binext" 2>&1 | \ + grep "hwflist" | \ + sed -e 's/hwflist://' -e 's/:/ /g' -e 's/\x0d/\x0a/g' +} + +hwfs=($(get_supported_hwfeatures)) +retcodes=() +optslist=() +echo "Total HW-feature combinations: $((1<<${#hwfs[@]}))" +for ((cbits=0; cbits < (1<<${#hwfs[@]}); cbits++)); do + for ((mask=0; mask < ${#hwfs[@]}; mask++)); do + match=$(((1<<mask) & cbits)) + if [ "x$match" != "x0" ]; then + echo -n "--disable-hwf ${hwfs[$mask]} " + fi + done + echo "" +done | sort | ( + # Run all combinations + nbasic=0 + nwait=0 + failed=0 + output="" + while read opts; do + currn=$nbasic + curr_jobs=($(jobs -p)) + while [ "${#curr_jobs[@]}" -ge "8" ]; do + # Wait for one job to complete + wait ${retcodes[$nwait]} + retval=$? + if [ "x$retval" != "x0" ]; then + output="$output\nERROR: HWF disable failed: [${optslist[$nwait]}]" + failed=1 + else + output="$output\nSUCCESS: HWF disable OK: [${optslist[$nwait]}]" + fi + nwait=$((nwait+1)) + curr_jobs=($(jobs -p)) + if [ $failed != 0 ]; then + break + fi + done + if [ $failed != 0 ]; then + break + fi + nbasic=$((nbasic+1)) + echo "[$nbasic/$((1<<${#hwfs[@]}))] Basic test with '$opts'" + optslist[$currn]="$opts" + nice nice $binpre "tests/basic$binext" $opts & retcodes[$currn]=$! + done + + # Fetch remaining return codes + for ((; nwait < nbasic; nwait++)); do + # Wait for one job to complete + wait ${retcodes[$nwait]} + retval=$? + if [ "x$retval" != "x0" ]; then + output="$output\nERROR: HWF disable failed: [${optslist[$nwait]}]" + failed=1 + else + output="$output\nSUCCESS: HWF disable OK: [${optslist[$nwait]}]" + fi + done + + echo -e "$output" + exit $failed +) |