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