15d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao#!/bin/bash
25d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao#
35d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao# Copyright (C) 2007 The Android Open Source Project
45d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao#
55d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao# Licensed under the Apache License, Version 2.0 (the "License");
65d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao# you may not use this file except in compliance with the License.
75d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao# You may obtain a copy of the License at
85d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao#
95d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao#     http://www.apache.org/licenses/LICENSE-2.0
105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao#
115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao# Unless required by applicable law or agreed to in writing, software
125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao# distributed under the License is distributed on an "AS IS" BASIS,
135d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao# See the License for the specific language governing permissions and
155d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao# limitations under the License.
165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao# Set up prog to be the path of this script, including following symlinks,
185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao# and set up progdir to be the fully-qualified pathname of its directory.
195d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaoprog="$0"
205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaowhile [ -h "${prog}" ]; do
215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    newProg=`/bin/ls -ld "${prog}"`
225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    if expr "x${newProg}" : 'x/' >/dev/null; then
245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        prog="${newProg}"
255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    else
265d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        progdir=`dirname "${prog}"`
275d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        prog="${progdir}/${newProg}"
285d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    fi
295d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaodone
305d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaooldwd=`pwd`
315d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaoprogdir=`dirname "${prog}"`
325d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaocd "${progdir}"
335d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaoprogdir=`pwd`
345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaoprog="${progdir}"/`basename "${prog}"`
355d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
365d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaorun_args=""
375d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaousage="no"
3881c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenkosequental="no"
395d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
405d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaowhile true; do
415d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    if [ "x$1" = "x--host" ]; then
425d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        run_args="${run_args} --host"
435d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        shift
4458bcc40e42d0438d3a71149ac53420d50a71fd8cElliott Hughes    elif [ "x$1" = "x--jvm" ]; then
4558bcc40e42d0438d3a71149ac53420d50a71fd8cElliott Hughes        run_args="${run_args} --jvm"
465d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        shift
475d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    elif [ "x$1" = "x--debug" ]; then
485d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        run_args="${run_args} --debug"
495d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        shift
505d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    elif [ "x$1" = "x--zygote" ]; then
515d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        run_args="${run_args} --zygote"
525d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        shift
530dff3f4d41ce8308d1973f317463941abbf79b81jeffhao    elif [ "x$1" = "x--interpreter" ]; then
540dff3f4d41ce8308d1973f317463941abbf79b81jeffhao        run_args="${run_args} --interpreter"
550dff3f4d41ce8308d1973f317463941abbf79b81jeffhao        shift
565d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    elif [ "x$1" = "x--no-verify" ]; then
575d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        run_args="${run_args} --no-verify"
585d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        shift
595d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    elif [ "x$1" = "x--no-optimize" ]; then
605d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        run_args="${run_args} --no-optimize"
615d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        shift
625d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    elif [ "x$1" = "x--valgrind" ]; then
635d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        run_args="${run_args} --valgrind"
645d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        shift
655d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    elif [ "x$1" = "x--dev" ]; then
665d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        run_args="${run_args} --dev"
675d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        shift
685d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    elif [ "x$1" = "x--update" ]; then
695d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        run_args="${run_args} --update"
705d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        shift
715d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    elif [ "x$1" = "x--help" ]; then
725d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        usage="yes"
735d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        shift
7481c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko    elif [ "x$1" = "x--seq" ]; then
7581c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko        sequental="yes"
7681c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko        shift
7781c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko    elif [ "x$1" = "x-O" ]; then
7881c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko        run_args="${run_args} -O"
7981c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko        shift
80dc8e732abc7409a6aac40fa693c60ada54dd9cc1Zheng Xu    elif [ "x$1" = "x--64" ]; then
81dc8e732abc7409a6aac40fa693c60ada54dd9cc1Zheng Xu        run_args="${run_args} --64"
82dc8e732abc7409a6aac40fa693c60ada54dd9cc1Zheng Xu        shift
8307aaac812c5935fc5c4023f843697fc96a42ea87Sebastien Hertz    elif [ "x$1" = "x--trace" ]; then
8407aaac812c5935fc5c4023f843697fc96a42ea87Sebastien Hertz        run_args="${run_args} --trace"
8507aaac812c5935fc5c4023f843697fc96a42ea87Sebastien Hertz        shift
86a59dd80f9f48cb750d329d4d4af2d99d72b484d1Alex Light    elif [ "x$1" = "x--relocate" ]; then
87a59dd80f9f48cb750d329d4d4af2d99d72b484d1Alex Light        run_args="${run_args} --relocate"
88a59dd80f9f48cb750d329d4d4af2d99d72b484d1Alex Light        shift
89a59dd80f9f48cb750d329d4d4af2d99d72b484d1Alex Light    elif [ "x$1" = "x--no-relocate" ]; then
90a59dd80f9f48cb750d329d4d4af2d99d72b484d1Alex Light        run_args="${run_args} --no-relocate"
91a59dd80f9f48cb750d329d4d4af2d99d72b484d1Alex Light        shift
929d722533b0ef6547ee0ab5286f65af98451c36e4Alex Light    elif [ "x$1" = "x--no-prebuild" ]; then
939d722533b0ef6547ee0ab5286f65af98451c36e4Alex Light        run_args="${run_args} --no-prebuild"
949d722533b0ef6547ee0ab5286f65af98451c36e4Alex Light        shift;
95a59dd80f9f48cb750d329d4d4af2d99d72b484d1Alex Light    elif [ "x$1" = "x--prebuild" ]; then
96a59dd80f9f48cb750d329d4d4af2d99d72b484d1Alex Light        run_args="${run_args} --prebuild"
97a59dd80f9f48cb750d329d4d4af2d99d72b484d1Alex Light        shift;
98bfac14acef0c2327ef8c28f146dd17d009aa8669Alex Light    elif [ "x$1" = "x--always-clean" ]; then
99bfac14acef0c2327ef8c28f146dd17d009aa8669Alex Light        run_args="${run_args} --always-clean"
1005d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    elif expr "x$1" : "x--" >/dev/null 2>&1; then
1017c04610d42cad31e6593ae1561ed855aceac1d7aElliott Hughes        echo "unknown $0 option: $1" 1>&2
1025d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        usage="yes"
1035d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        break
1045d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    else
1055d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        break
1065d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    fi
1075d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaodone
1085d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1095d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaoif [ "$usage" = "yes" ]; then
1105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    prog=`basename $prog`
1115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    (
1125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        echo "usage:"
1135d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        echo "  $prog --help     Print this message."
1145d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        echo "  $prog [options]  Run all tests with the given options."
1155d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        echo "  Options are all passed to run-test; refer to that for " \
1165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao             "further documentation:"
1170dff3f4d41ce8308d1973f317463941abbf79b81jeffhao        echo "    --debug --dev --host --interpreter --jvm --no-optimize"
118a59dd80f9f48cb750d329d4d4af2d99d72b484d1Alex Light        echo "    --no-verify -O --update --valgrind --zygote --64 --relocate"
119bfac14acef0c2327ef8c28f146dd17d009aa8669Alex Light        echo "    --prebuild --always-clean"
12081c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko        echo "  Specific Runtime Options:"
12181c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko        echo "    --seq                Run tests one-by-one, avoiding failures caused by busy CPU"
1225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    ) 1>&2
1235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    exit 1
1245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaofi
1255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
12681c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenkoif [ "$sequental" == "yes" ]; then
12781c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko  i=0
12881c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko  for test_name in *; do
12981c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko    if [ -d "$test_name" -a -r "$test_name" -a -r "$test_name/info.txt" ]; then
13081c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko      ./run-test ${run_args} "$test_name"
13181c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko      RES=$?
13281c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko      test_pids[i]=i
13381c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko      test_names[test_pids[i]]="$test_name"
13481c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko      if [ "$RES" != "0" ]; then
13581c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko        let failure_count+=1
13681c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko        failed_test_names="$failed_test_names ${test_names[i]}"
13781c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko      else
13881c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko        let succeeded_count+=1
13981c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko      fi
14081c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko      let i+=1
14181c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko    fi
14281c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko  done
14381c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenkoelse
14481c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko  # start all the tests
14581c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko  i=0
14681c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko  for test_name in *; do
14781c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko    if [ -d "$test_name" -a -r "$test_name" -a -r "$test_name/info.txt" ]; then
14881c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko      ./run-test ${run_args} "$test_name" &
14981c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko      test_pids[i]=$!
15081c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko      test_names[test_pids[i]]="$test_name"
15181c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko      let i+=1
15281c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko    fi
15381c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko  done
1545d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
15581c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko  # wait for all the tests, collecting the failures
15681c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko  failure_count=0
15781c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko  succeeded_count=0
15881c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko  failed_test_names=""
15981c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko  for pid in ${test_pids[@]}; do
16081c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko    wait $pid
16181c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko    if [ "$?" != "0" ]; then
16281c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko      let failure_count+=1
16381c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko      failed_test_names="$failed_test_names ${test_names[$pid]}[pid=$pid]"
16481c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko    else
16581c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko      let succeeded_count+=1
16681c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko    fi
16781c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenko  done
16881c56e73558dee0a8e537a12a210d4bc0ef01a62Dmitry Petrochenkofi
1695d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
170b92bcabcbb28f69fe99e1c2f2e5559ab2c47aa60TDYaecho "succeeded tests: $succeeded_count"
1718cbc8bc716d7a47019ad14403920c72547b2fb96Elliott Hughesecho "failed tests: $failure_count"
1725d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1738cbc8bc716d7a47019ad14403920c72547b2fb96Elliott Hughesfor i in $failed_test_names; do
1748cbc8bc716d7a47019ad14403920c72547b2fb96Elliott Hughes  echo "failed: $i"
1755d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaodone
176