diff options
author | Orion Hodson <oth@google.com> | 2017-03-08 09:21:46 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2017-03-08 09:21:48 +0000 |
commit | d3c99833e4534c6469f763f3ce4395bac96951f0 (patch) | |
tree | 8a8e725fd09d4b27fc2ff1c74ba553c52fc3c46e | |
parent | 0fdc6c154598b8a4140b06bb95d422bcff6c32b5 (diff) | |
parent | 145360242fe3d2ebd48b2a20d45e3eefbcfcb3b0 (diff) | |
download | dalvik-d3c99833e4534c6469f763f3ce4395bac96951f0.tar.gz |
Merge "Enable dx tests to run in parallel by default"android-n-mr2-preview-2
-rwxr-xr-x | dx/tests/run-all-tests | 174 |
1 files changed, 115 insertions, 59 deletions
diff --git a/dx/tests/run-all-tests b/dx/tests/run-all-tests index baf79e5b1..1c6be0273 100755 --- a/dx/tests/run-all-tests +++ b/dx/tests/run-all-tests @@ -33,85 +33,141 @@ cd "${progdir}" progdir=`pwd` prog="${progdir}"/`basename "${prog}"` +# Command-line options +skip_tests="" +sequential="no" +usage="no" +while [[ "$1" == "-"* ]]; do + case $1 in + --seq) sequential="yes" ;; + --skip) skip_tests="$2 $skip_tests" + shift ;; + *) usage="yes" ;; + esac + shift +done + +if [ $usage = "yes" ]; then + prog=`basename $prog` + cat 1>&2 <<END_USAGE +Usage: + $prog [options] Run all tests with given options. +Options: + --seq Run tests sequentially (default: parallel) + --skip <test> Skip running specified test +END_USAGE + exit 1 +fi + # Globals for tracking numbers of successes and failures and their names. -passed=0 -surprised=0 -surprisedNames="" -ignored=0 -ignoredNames="" -failed=0 -failedNames="" +passed=() +surprised=() +ignored=() +failed=() +skipped=() # Tests failing and require attention (e.g. 115-merge) -knownBad="100-local-mismatch 115-merge 119-merge-conflict" +known_bad="100-local-mismatch 115-merge 119-merge-conflict" function display_results { printf "\n\nTest Results\n" printf -- "----------------------------\n" - printf "Pass: % 3d\n" $passed - printf "Surprise pass: % 3d\n" $surprised - printf "Known failures: % 3d\n" $ignored - printf "Failures: % 3d\n" $failed + printf "Pass: % 4d\n" ${#passed[@]} + printf "Surprise pass: % 4d\n" ${#surprised[@]} + printf "Known failures: % 4d\n" ${#ignored[@]} + printf "Failures: % 4d\n" ${#failed[@]} + printf "Skipped: % 4d\n" ${#skipped[@]} printf -- "----------------------------\n" - printf "Elapsed time(s): % 3d\n" $SECONDS + printf "Elapsed time(s): % 4d\n" $SECONDS - list_files "Unexpected successes" "$surprisedNames" - list_files "Known failures" "$ignoredNames" - list_files "Failures" "$failedNames" + list_files "Unexpected successes" ${surprised[@]} + list_files "Known failures" ${ignored[@]} + list_files "Failures" ${failed[@]} + list_files "Skipped" ${skipped[@]} - needingAttention=$((failed + surprised)) - exit $needingAttention + needing_attention=$(( ${#failed[@]} + ${#surprised[@]} )) + exit ${needing_attention} } function list_files { - title=$1 - if [[ "$2" = "" ]]; then - names="NONE" - else - names=$2 + # Arguments: Title test_name0 test_name1 ... test_nameN + echo "$1:" + shift + if [[ "$1" = "" ]]; then + echo " NONE" + return fi - - echo - echo "$title:" - for i in $names; do - echo " $i" + while [[ "$1" != "" ]]; do + echo " $1" + shift done } +function update_result { + test_name=$1 + output=$2 + result=$3 + + if [[ "$known_bad" == *"$test_name"* ]]; then + expectFail=1 + else + expectFail=0 + fi + if [ $result = 0 ]; then + if [[ $expectFail = 0 ]]; then + passed+=(${test_name}) + else + echo "Failing on unexpected success of $test_name" + surprised+=(${test_name}) + fi + else + if [[ $expectFail = 0 ]]; then + failed+=(${test_name}) + else + echo "Ignoring expected failure of $test_name" + ignored+=(${test_name}) + # Clean up when we expect a test to fail. + # run-test only does this on success. + rm -rf "$output" + fi + fi +} + function run_tests { - for i in *; do - if [ -d "$i" -a -r "$i" ]; then - if [[ "$knownBad" == *"$i"* ]]; then - expectFail=1 - else - expectFail=0 + if [[ "$sequential" = "yes" ]]; then + for test_name in *; do + if [[ "$skip_tests" = *"$test_name"* ]]; then + skipped+=(${test_name}) + continue fi - - output=/tmp/$$/$i - ./run-test --output_dir "$output" "$i" - if [ $? = 0 ]; then - if [[ $expectFail = 0 ]]; then - ((passed++)) - else - echo "Failing on unexpected success of $i" - ((surprised++)) - surprisedNames="$surprisedNames $i" - fi - else - if [[ $expectFail = 0 ]]; then - ((failed++)) - failedNames="$failedNames $i" - else - echo "Ignoring expected failure of $i" - ((ignored++)) - ignoredNames="$ignoredNames $i" - # Clean up when we expect a test to fail. - # run-test only does this on success. - rm -rf "$output" - fi + if [ -d "$test_name" -a -r "$test_name" ]; then + output=/tmp/$$/$test_name + ./run-test --output_dir "$output" "$test_name" + update_result $test_name $output $? fi - fi - done + done + else + i=0 + for test_name in *; do + if [[ "$skip_tests" = *"$test_name"* ]]; then + skipped+=(${test_name}) + continue + fi + if [ -d "$test_name" -a -r "$test_name" ]; then + output=/tmp/$$/$test_name + ./run-test --output_dir "$output" "$test_name" & + test_pids[i]=$! + test_names[test_pids[i]]="$test_name" + test_outputs[test_pids[i]]="output" + let i+=1 + fi + done + + for pid in ${test_pids[@]}; do + wait $pid + update_result ${test_names[$pid]} ${test_outputs[$pid]} $? + done + fi } function handle_interrupt { |