From 748f9af1f0e61f6f5133b45ed7dcf1f071246b9e Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Wed, 26 Jul 2017 13:31:04 -0400 Subject: [PATCH] Tests fix: errors in shell scripts Fix all shellcheck errors in the test scripts, switch to posix compatible syntax. Remove duplicated code already included in common.sh. Call the tap.sh cleanup code from our exit trap instead of overriding it. Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- tests/benchmark/common.sh | 38 +++++++++++++-------- tests/benchmark/run-urcu-tests.sh | 55 +++++++++++++++---------------- tests/benchmark/runhash.sh | 47 ++++++++++++++------------ tests/benchmark/runtests-batch.sh | 29 +++------------- tests/benchmark/runtests.sh | 27 +++------------ 5 files changed, 84 insertions(+), 112 deletions(-) diff --git a/tests/benchmark/common.sh b/tests/benchmark/common.sh index 1f5f07f..4dbc567 100755 --- a/tests/benchmark/common.sh +++ b/tests/benchmark/common.sh @@ -2,25 +2,35 @@ # This file is meant to be sourced from other tests scripts. # -if [ -x "$URCU_TEST_TIME_BIN" ]; then - test_time_bin="$URCU_TEST_TIME_BIN" -elif [ -x "/usr/bin/time" ]; then - test_time_bin="/usr/bin/time" -else - test_time_bin="" -fi +cleanup() { + if [ x"$TMPFILE" != "x" ]; then + rm -f "$TMPFILE" + fi -function cleanup() -{ - if [ x"$tmpfile" != x"" ]; then - rm -f $tmpfile - fi + # Call the tap.sh exit cleanup code + _exit } -function xseq () { +xseq() { i=$1 while [[ "$i" -le "$2" ]]; do echo "$i" - i=$(expr $i + 1) + i=$(( i + 1 )) done } + +# Set TEST_TIME_BIN +if [ -x "$URCU_TEST_TIME_BIN" ]; then + TEST_TIME_BIN="$URCU_TEST_TIME_BIN" +elif [ -x "/usr/bin/time" ]; then + TEST_TIME_BIN="/usr/bin/time" +else + TEST_TIME_BIN="" +fi +export TEST_TIME_BIN + +# Create a temporary file for tests output +TMPFILE=$(mktemp) + +# Set traps to delete the temporary file on exit +trap cleanup EXIT diff --git a/tests/benchmark/run-urcu-tests.sh b/tests/benchmark/run-urcu-tests.sh index 1df988a..751514a 100755 --- a/tests/benchmark/run-urcu-tests.sh +++ b/tests/benchmark/run-urcu-tests.sh @@ -3,7 +3,7 @@ #first parameter: seconds per test DURATION=$1 -if [ "x$DURATION" = "x" ]; then +if [ "x${DURATION}" = "x" ]; then echo "usage: $0 [DURATION]" exit 1 fi @@ -30,16 +30,13 @@ fi # fraction: 15 * 29 = # scalabilit NUM_CPUS * 15 # reader 15 * 23 = -NUM_TESTS=$(( 19 + 435 + ( ${NUM_CPUS} * 15 ) + 345 )) +NUM_TESTS=$(( 19 + 435 + ( NUM_CPUS * 15 ) + 345 )) plan_tests ${NUM_TESTS} #run all tests diag "Executing URCU tests" -tmpfile= -trap cleanup SIGINT SIGTERM EXIT -tmpfile=$(mktemp) #extra options, e.g. for setting affinity on even CPUs : #EXTRA_OPTS=$(for a in $(seq 0 2 127); do echo -n "-a ${a} "; done) @@ -67,16 +64,16 @@ BATCH_ARRAY="1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144" BATCH_TEST_ARRAY="test_urcu_gc" -NR_WRITERS=$((${NUM_CPUS} / 2)) +NR_WRITERS=$((NUM_CPUS / 2)) +NR_READERS=$((NUM_CPUS - NR_WRITERS)) -NR_READERS=$((${NUM_CPUS} - ${NR_WRITERS})) for BATCH_SIZE in ${BATCH_ARRAY}; do for TEST in ${BATCH_TEST_ARRAY}; do - okx $test_time_bin ./${TEST} ${NR_READERS} ${NR_WRITERS} ${DURATION} \ - -d 0 -b ${BATCH_SIZE} ${EXTRA_OPTS} 2>${tmpfile} - cat $tmpfile | while read line; do - echo "# $line" - done + okx ${TEST_TIME_BIN} ./"${TEST}" "${NR_READERS}" "${NR_WRITERS}" "${DURATION}" \ + -d 0 -b "${BATCH_SIZE}" ${EXTRA_OPTS} 2>"${TMPFILE}" + while read line; do + echo "## $line" + done <"${TMPFILE}" done done @@ -93,16 +90,16 @@ diag "Executing update fraction test" WDELAY_ARRAY="0 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608 16777216 33554432 67108864 134217728" -NR_WRITERS=$((${NUM_CPUS} / 2)) +NR_WRITERS=$((NUM_CPUS / 2)) +NR_READERS=$((NUM_CPUS - NR_WRITERS)) -NR_READERS=$((${NUM_CPUS} - ${NR_WRITERS})) for WDELAY in ${WDELAY_ARRAY}; do for TEST in ${TEST_ARRAY}; do - okx $test_time_bin ./${TEST} ${NR_READERS} ${NR_WRITERS} ${DURATION} \ - -d ${WDELAY} ${EXTRA_OPTS} 2>$tmpfile - cat $tmpfile | while read line; do - echo "# $line" - done + okx ${TEST_TIME_BIN} ./"${TEST}" "${NR_READERS}" "${NR_WRITERS}" "${DURATION}" \ + -d "${WDELAY}" ${EXTRA_OPTS} 2>"${TMPFILE}" + while read line; do + echo "## $line" + done <"${TMPFILE}" done done @@ -117,11 +114,11 @@ NR_WRITERS=0 for NR_READERS in $(xseq 1 ${NUM_CPUS}); do for TEST in ${TEST_ARRAY}; do - okx $test_time_bin ./${TEST} ${NR_READERS} ${NR_WRITERS} ${DURATION} \ - ${EXTRA_OPTS} 2>$tmpfile - cat $tmpfile | while read line; do - echo "# $line" - done + okx ${TEST_TIME_BIN} ./"${TEST}" "${NR_READERS}" "${NR_WRITERS}" "${DURATION}" \ + ${EXTRA_OPTS} 2>"${TMPFILE}" + while read line; do + echo "## $line" + done <"${TMPFILE}" done done @@ -140,10 +137,10 @@ READERCSLEN_ARRAY="0 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 3276 for READERCSLEN in ${READERCSLEN_ARRAY}; do for TEST in ${TEST_ARRAY}; do - okx $test_time_bin ./${TEST} ${NR_READERS} ${NR_WRITERS} ${DURATION} \ - -c ${READERCSLEN} ${EXTRA_OPTS} 2>$tmpfile - cat $tmpfile | while read line; do - echo "# $line" - done + okx ${TEST_TIME_BIN} ./"${TEST}" "${NR_READERS}" "${NR_WRITERS}" "${DURATION}" \ + -c "${READERCSLEN}" ${EXTRA_OPTS} 2>"${TMPFILE}" + while read line; do + echo "## $line" + done <"${TMPFILE}" done done diff --git a/tests/benchmark/runhash.sh b/tests/benchmark/runhash.sh index dc894d4..4f693d1 100755 --- a/tests/benchmark/runhash.sh +++ b/tests/benchmark/runhash.sh @@ -1,5 +1,13 @@ #!/bin/bash +# 1st parameter: seconds per test +DURATION=$1 + +if [ "x${DURATION}" = "x" ]; then + echo "usage: $0 [DURATION]" + exit 1 +fi + source ../utils/tap.sh NUM_TESTS=17 @@ -13,9 +21,6 @@ diag "Executing Hash table test" # add/remove/random # - validate that "nr_leaked" is always 0 in SUMMARY for all tests -# 1st parameter: seconds per test -TIME_UNITS=$1 - TESTPROG=./test_urcu_hash NUM_CPUS="1" @@ -33,7 +38,7 @@ if [[ ${NUM_CPUS} -lt 4 ]]; then NUM_CPUS=4 # Floor at 4 due to following assumptions. fi -THREAD_MUL=$(( ${NUM_CPUS} / 4 )) +THREAD_MUL=$((NUM_CPUS / 4)) EXTRA_PARAMS=-v @@ -41,19 +46,19 @@ EXTRA_PARAMS=-v # rw test, single key, replace and del randomly, 4 threads, auto resize. # key range: init, lookup, and update: 0 to 0 -okx ${TESTPROG} 0 $((4*${THREAD_MUL})) ${TIME_UNITS} -A -s -M 1 -N 1 -O 1 ${EXTRA_PARAMS} +okx ${TESTPROG} 0 $((4*THREAD_MUL)) "${DURATION}" -A -s -M 1 -N 1 -O 1 ${EXTRA_PARAMS} # rw test, single key, add unique and del randomly, 4 threads, auto resize. # key range: init, lookup, and update: 0 to 0 -okx ${TESTPROG} 0 $((4*${THREAD_MUL})) ${TIME_UNITS} -A -u -M 1 -N 1 -O 1 ${EXTRA_PARAMS} +okx ${TESTPROG} 0 $((4*THREAD_MUL)) "${DURATION}" -A -u -M 1 -N 1 -O 1 ${EXTRA_PARAMS} # rw test, single key, replace and del randomly, 2 lookup threads, 2 update threads, auto resize. # key range: init, lookup, and update: 0 to 0 -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -s -M 1 -N 1 -O 1 ${EXTRA_PARAMS} +okx ${TESTPROG} $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A -s -M 1 -N 1 -O 1 ${EXTRA_PARAMS} # rw test, single key, add and del randomly, 2 lookup threads, 2 update threads, auto resize. # key range: init, lookup, and update: 0 to 0 -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -M 1 -N 1 -O 1 ${EXTRA_PARAMS} +okx ${TESTPROG} $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A -M 1 -N 1 -O 1 ${EXTRA_PARAMS} # ** test updates vs lookups with default table @@ -61,17 +66,17 @@ okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -M 1 # rw test, 2 lookup, 2 update threads, add and del randomly, auto resize. # max 1048576 buckets # key range: init, lookup, and update: 0 to 999999 -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A ${EXTRA_PARAMS} +okx ${TESTPROG} $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A ${EXTRA_PARAMS} # rw test, 2 lookup, 2 update threads, add_replace and del randomly, auto resize. # max 1048576 buckets # key range: init, lookup, and update: 0 to 999999 -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -s ${EXTRA_PARAMS} +okx ${TESTPROG} $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A -s ${EXTRA_PARAMS} # rw test, 2 lookup, 2 update threads, add_unique and del randomly, auto resize. # max 1048576 buckets # key range: init, lookup, and update: 0 to 999999 -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -u ${EXTRA_PARAMS} +okx ${TESTPROG} $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A -u ${EXTRA_PARAMS} # test memory management backends @@ -80,21 +85,21 @@ okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -u ${ # max buckets: 1048576 # key range: init, lookup, and update: 0 to 99999999 # mm backend: "order" -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -m 1 -n 1048576 -i \ +okx ${TESTPROG} $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A -m 1 -n 1048576 -i \ -M 100000000 -N 100000000 -O 100000000 -B order ${EXTRA_PARAMS} # rw test, 2 lookup, 2 update threads, add only, auto resize. # max buckets: 1048576 # key range: init, lookup, and update: 0 to 99999999 # mm backend: "chunk" -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -m 1 -n 1048576 -i \ +okx ${TESTPROG} $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A -m 1 -n 1048576 -i \ -M 100000000 -N 100000000 -O 100000000 -B chunk ${EXTRA_PARAMS} # rw test, 2 lookup, 2 update threads, add only, auto resize. # max buckets: 1048576 # key range: init, lookup, and update: 0 to 99999999 # mm backend: "mmap" -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -m 1 -n 1048576 -i \ +okx ${TESTPROG} $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A -m 1 -n 1048576 -i \ -M 100000000 -N 100000000 -O 100000000 -B mmap ${EXTRA_PARAMS} @@ -106,7 +111,7 @@ okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A -m 1 # key range: lookup: 1000000 to 1999999 # NOTE: reader threads in this test should never have a successful # lookup. TODO -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ +okx ${TESTPROG} $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A \ -R 1000000 ${EXTRA_PARAMS} # ** small key range @@ -114,19 +119,19 @@ okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ # rw test, 2 lookup, 2 update threads, add and del randomly, auto resize. # max 1048576 buckets # key range: init, update, and lookups: 0 to 9 -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ +okx ${TESTPROG} $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A \ -M 10 -N 10 -O 10 ${EXTRA_PARAMS} # rw test, 2 lookup, 2 update threads, add_unique and del randomly, auto resize. # max 1048576 buckets # key range: init, update, and lookups: 0 to 9 -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ +okx ${TESTPROG} $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A \ -M 10 -N 10 -O 10 -u ${EXTRA_PARAMS} # rw test, 2 lookup, 2 update threads, add_replace and del randomly, auto resize. # max 1048576 buckets # key range: init, update, and lookups: 0 to 9 -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ +okx ${TESTPROG} $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A \ -M 10 -N 10 -O 10 -s ${EXTRA_PARAMS} # ** lookup for known keys @@ -138,7 +143,7 @@ okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ # key range: updates: 10 to 19 # NOTE: reader threads in this test should always have successful # lookups. TODO -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ +okx ${TESTPROG} $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A \ -M 10 -N 10 -O 10 -R 0 -T 0 -S 10 -k 10 -s ${EXTRA_PARAMS} # ** Uniqueness test @@ -147,12 +152,12 @@ okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ # max 1048576 buckets # asserts that no duplicates are observed by reader threads # standard length hash chains -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ +okx ${TESTPROG} $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A \ -U ${EXTRA_PARAMS} # rw test, 2 lookup, 2 update threads, add_unique, add_replace and del randomly, auto resize. # max 1048576 buckets # asserts that no duplicates are observed by reader threads # create long hash chains: using modulo 4 on keys as hash -okx ${TESTPROG} $((2*${THREAD_MUL})) $((2*${THREAD_MUL})) ${TIME_UNITS} -A \ +okx ${TESTPROG} $((2*THREAD_MUL)) $((2*THREAD_MUL)) "${DURATION}" -A \ -U -C 4 ${EXTRA_PARAMS} diff --git a/tests/benchmark/runtests-batch.sh b/tests/benchmark/runtests-batch.sh index 0e5577b..f030de6 100755 --- a/tests/benchmark/runtests-batch.sh +++ b/tests/benchmark/runtests-batch.sh @@ -1,35 +1,14 @@ #!/bin/bash -source ../utils/tap.sh +. ../utils/tap.sh +. ./common.sh NUM_TESTS=1 plan_tests ${NUM_TESTS} -. ./common.sh - -function cleanup() -{ - if [ x"$tmpfile" != x"" ]; then - rm -f $tmpfile - fi -} - -tmpfile= -trap cleanup SIGINT SIGTERM EXIT -tmpfile=$(mktemp) - -# Check if time bin is non-empty -if [ -n "$test_time_bin" ]; then - time_command="$test_time_bin" -else - time_command="" -fi - -tmpfile=$(mktemp) - #for a in test_urcu_gc test_urcu_gc_mb test_urcu_qsbr_gc; do for a in test_urcu_gc; do - okx $time_command -o $tmpfile ./${a} $* - diag "time: $(cat $tmpfile)" + okx "${TEST_TIME_BIN}" ./"${a}" "$@" 2>"${TMPFILE}" + diag "time: $(cat "${TMPFILE}")" done diff --git a/tests/benchmark/runtests.sh b/tests/benchmark/runtests.sh index 781e8f7..dd5d662 100755 --- a/tests/benchmark/runtests.sh +++ b/tests/benchmark/runtests.sh @@ -1,35 +1,16 @@ #!/bin/bash -source ../utils/tap.sh +. ../utils/tap.sh +. ./common.sh NUM_TESTS=15 plan_tests ${NUM_TESTS} -. ./common.sh - -function cleanup() -{ - if [ x"$tmpfile" != x"" ]; then - rm -f $tmpfile - fi -} - -tmpfile= -trap cleanup SIGINT SIGTERM EXIT -tmpfile=$(mktemp) - -# Check if time bin is non-empty -if [ -n "$test_time_bin" ]; then - time_command="$test_time_bin" -else - time_command="" -fi - for a in test_urcu_gc test_urcu_signal_gc test_urcu_mb_gc test_urcu_qsbr_gc \ test_urcu_lgc test_urcu_signal_lgc test_urcu_mb_lgc test_urcu_qsbr_lgc \ test_urcu test_urcu_signal test_urcu_mb test_urcu_qsbr \ test_rwlock test_perthreadlock test_mutex; do - okx $time_command -o $tmpfile ./${a} $* - diag "time: $(cat $tmpfile)" + okx ${TEST_TIME_BIN} ./"${a}" "$@" 2>"${TMPFILE}" + diag "time: $(cat "${TMPFILE}")" done -- 2.34.1