1*b7c941bbSAndroid Build Coastguard Worker#!/bin/bash 2*b7c941bbSAndroid Build Coastguard Worker# 3*b7c941bbSAndroid Build Coastguard Worker# Copyright (C) 2008 The Android Open Source Project 4*b7c941bbSAndroid Build Coastguard Worker# 5*b7c941bbSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*b7c941bbSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*b7c941bbSAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*b7c941bbSAndroid Build Coastguard Worker# 9*b7c941bbSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*b7c941bbSAndroid Build Coastguard Worker# 11*b7c941bbSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*b7c941bbSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*b7c941bbSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*b7c941bbSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*b7c941bbSAndroid Build Coastguard Worker# limitations under the License. 16*b7c941bbSAndroid Build Coastguard Worker 17*b7c941bbSAndroid Build Coastguard Worker# Set up prog to be the path of this script, including following symlinks, 18*b7c941bbSAndroid Build Coastguard Worker# and set up progdir to be the fully-qualified pathname of its directory. 19*b7c941bbSAndroid Build Coastguard Worker 20*b7c941bbSAndroid Build Coastguard Workerprog="$0" 21*b7c941bbSAndroid Build Coastguard Workerwhile [ -h "${prog}" ]; do 22*b7c941bbSAndroid Build Coastguard Worker newProg=`/bin/ls -ld "${prog}"` 23*b7c941bbSAndroid Build Coastguard Worker newProg=`expr "${newProg}" : ".* -> \(.*\)$"` 24*b7c941bbSAndroid Build Coastguard Worker if expr "x${newProg}" : 'x/' >/dev/null; then 25*b7c941bbSAndroid Build Coastguard Worker prog="${newProg}" 26*b7c941bbSAndroid Build Coastguard Worker else 27*b7c941bbSAndroid Build Coastguard Worker progdir=`dirname "${prog}"` 28*b7c941bbSAndroid Build Coastguard Worker prog="${progdir}/${newProg}" 29*b7c941bbSAndroid Build Coastguard Worker fi 30*b7c941bbSAndroid Build Coastguard Workerdone 31*b7c941bbSAndroid Build Coastguard Workeroldwd=`pwd` 32*b7c941bbSAndroid Build Coastguard Workerprogdir=`dirname "${prog}"` 33*b7c941bbSAndroid Build Coastguard Workercd "${progdir}" 34*b7c941bbSAndroid Build Coastguard Workerprogdir=`pwd` 35*b7c941bbSAndroid Build Coastguard Workerprog="${progdir}"/`basename "${prog}"` 36*b7c941bbSAndroid Build Coastguard Workercd "${oldwd}" 37*b7c941bbSAndroid Build Coastguard Worker 38*b7c941bbSAndroid Build Coastguard Workerlibdir=`dirname $progdir`/framework 39*b7c941bbSAndroid Build Coastguard Worker 40*b7c941bbSAndroid Build Coastguard WorkerjavaOpts="" 41*b7c941bbSAndroid Build Coastguard Workerwhile expr "x$1" : 'x-J' >/dev/null; do 42*b7c941bbSAndroid Build Coastguard Worker opt=`expr "$1" : '-J\(.*\)'` 43*b7c941bbSAndroid Build Coastguard Worker javaOpts="${javaOpts} -${opt}" 44*b7c941bbSAndroid Build Coastguard Worker shift 45*b7c941bbSAndroid Build Coastguard Workerdone 46*b7c941bbSAndroid Build Coastguard Worker 47*b7c941bbSAndroid Build Coastguard Worker 48*b7c941bbSAndroid Build Coastguard Worker####################################################################### 49*b7c941bbSAndroid Build Coastguard Worker# Original content of invocation script follows. Uses values cleverly 50*b7c941bbSAndroid Build Coastguard Worker# deduced by the above code. 51*b7c941bbSAndroid Build Coastguard Worker####################################################################### 52*b7c941bbSAndroid Build Coastguard Worker 53*b7c941bbSAndroid Build Coastguard Workerselection=$1 54*b7c941bbSAndroid Build Coastguard Workerinterpreter="fast" 55*b7c941bbSAndroid Build Coastguard Workerif [ "$selection" = "--portable" ]; then 56*b7c941bbSAndroid Build Coastguard Worker selection=$2; 57*b7c941bbSAndroid Build Coastguard Worker interpreter="portable" 58*b7c941bbSAndroid Build Coastguard Workerfi 59*b7c941bbSAndroid Build Coastguard Worker 60*b7c941bbSAndroid Build Coastguard Workerdalviktest=$ANDROID_BUILD_TOP/out/host/common/obj/JAVA_LIBRARIES/vm-tests-tf_intermediates 61*b7c941bbSAndroid Build Coastguard Workerdalviktestdir=$dalviktest/tests 62*b7c941bbSAndroid Build Coastguard Workerdexcore=$dalviktest/tests/dot/junit/dexcore.jar 63*b7c941bbSAndroid Build Coastguard Workerscriptdata=$dalviktestdir/data/scriptdata 64*b7c941bbSAndroid Build Coastguard Workerreport=$dalviktest/report.html 65*b7c941bbSAndroid Build Coastguard Workercurdate=`date` 66*b7c941bbSAndroid Build Coastguard Workerdatadir=/tmp/${USER} 67*b7c941bbSAndroid Build Coastguard Workerbase=$OUT 68*b7c941bbSAndroid Build Coastguard Workerframework=$base/system/framework 69*b7c941bbSAndroid Build Coastguard Workerexport ANDROID_PRINTF_LOG=tag 70*b7c941bbSAndroid Build Coastguard Workerexport ANDROID_LOG_TAGS='*:s' # was: jdwp:i dalvikvm:i dalvikvmi:i' 71*b7c941bbSAndroid Build Coastguard Workerexport ANDROID_DATA=$datadir 72*b7c941bbSAndroid Build Coastguard Workerexport ANDROID_ROOT=$base/system 73*b7c941bbSAndroid Build Coastguard Workerexport LD_LIBRARY_PATH=$base/system/lib 74*b7c941bbSAndroid Build Coastguard Workerexport DYLD_LIBRARY_PATH=$base/system/lib 75*b7c941bbSAndroid Build Coastguard Workerdebug_opts="-Xcheck:jni -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n" 76*b7c941bbSAndroid Build Coastguard Workerexe=$base/system/bin/dalvikvm 77*b7c941bbSAndroid Build Coastguard Workerbpath=$framework/core.jar 78*b7c941bbSAndroid Build Coastguard Worker 79*b7c941bbSAndroid Build Coastguard Workerecho "--------------------------------------------------" 80*b7c941bbSAndroid Build Coastguard Workerecho "Dalvik VM Test Suite" 81*b7c941bbSAndroid Build Coastguard Workerecho "Version 1.0" 82*b7c941bbSAndroid Build Coastguard Workerecho "Copyright (c) 2008 The Android Open Source Project" 83*b7c941bbSAndroid Build Coastguard Workerecho "" 84*b7c941bbSAndroid Build Coastguard Worker 85*b7c941bbSAndroid Build Coastguard Workerif [ "$selection" = "--help" ]; then 86*b7c941bbSAndroid Build Coastguard Worker echo "Usage: vm-tests [--help|--portable] [<mnemonic>]" 87*b7c941bbSAndroid Build Coastguard Worker echo "" 88*b7c941bbSAndroid Build Coastguard Worker echo " --help prints this help message" 89*b7c941bbSAndroid Build Coastguard Worker echo " --portable uses the portable interpreter;" 90*b7c941bbSAndroid Build Coastguard Worker echo " default is the fast one" 91*b7c941bbSAndroid Build Coastguard Worker echo "" 92*b7c941bbSAndroid Build Coastguard Worker echo " <mnemonic> specifies the instruction to test;" 93*b7c941bbSAndroid Build Coastguard Worker echo " default is to run all tests" 94*b7c941bbSAndroid Build Coastguard Worker echo "" 95*b7c941bbSAndroid Build Coastguard Worker exit 1; 96*b7c941bbSAndroid Build Coastguard Workerfi 97*b7c941bbSAndroid Build Coastguard Worker 98*b7c941bbSAndroid Build Coastguard Workerrm -rf --preserve-root $datadir/dalvik-cache 99*b7c941bbSAndroid Build Coastguard Workermkdir -p $datadir 100*b7c941bbSAndroid Build Coastguard Workermkdir -p $datadir/dalvik-cache 101*b7c941bbSAndroid Build Coastguard Worker 102*b7c941bbSAndroid Build Coastguard Workerecho "" 103*b7c941bbSAndroid Build Coastguard Worker 104*b7c941bbSAndroid Build Coastguard Workerpre_report="<html><head><style> 105*b7c941bbSAndroid Build Coastguard Workertable tr.ok { background:#a0ffa0; } 106*b7c941bbSAndroid Build Coastguard Workertable tr.nok { background:#ffa0a0; } 107*b7c941bbSAndroid Build Coastguard Workertable tr.wok { background:#ffffa0; } 108*b7c941bbSAndroid Build Coastguard Workertable tr.lok { background:#aaaaff; } 109*b7c941bbSAndroid Build Coastguard Worker</style></head> 110*b7c941bbSAndroid Build Coastguard Worker<body> 111*b7c941bbSAndroid Build Coastguard Worker<h1>Dalvik VM test suite results</h1> 112*b7c941bbSAndroid Build Coastguard WorkerGenerated $curdate (using the emulator) 113*b7c941bbSAndroid Build Coastguard Worker<p> 114*b7c941bbSAndroid Build Coastguard Worker<table width='100%'> 115*b7c941bbSAndroid Build Coastguard Worker<tr><td>Status</td><td>Target</td><td>Category</td><td>Details</td></tr>" 116*b7c941bbSAndroid Build Coastguard Workerpost_report="</body></html>" 117*b7c941bbSAndroid Build Coastguard Worker 118*b7c941bbSAndroid Build Coastguard Workerrm -f $report 119*b7c941bbSAndroid Build Coastguard Workerecho $pre_report > $report 120*b7c941bbSAndroid Build Coastguard Worker 121*b7c941bbSAndroid Build Coastguard Worker# ----------- running each opcode test ------------ 122*b7c941bbSAndroid Build Coastguard Worker 123*b7c941bbSAndroid Build Coastguard Workerexport jpassedcnt=0 124*b7c941bbSAndroid Build Coastguard Workerexport jfailedcnt=0 125*b7c941bbSAndroid Build Coastguard Workerexport jvfefailedcnt=0 126*b7c941bbSAndroid Build Coastguard Workerexport jwarningcnt=0 127*b7c941bbSAndroid Build Coastguard Workerexport jallcnt=0 128*b7c941bbSAndroid Build Coastguard Workerexport jcolumns=0 129*b7c941bbSAndroid Build Coastguard Worker 130*b7c941bbSAndroid Build Coastguard Worker# TODO unhack; dimitry: unhack what? 131*b7c941bbSAndroid Build Coastguard Workeradb push $dexcore /data/local/tmp/dexcore.jar >> /dev/null 2>&1 132*b7c941bbSAndroid Build Coastguard Worker 133*b7c941bbSAndroid Build Coastguard Workerfunction classnameToJar() 134*b7c941bbSAndroid Build Coastguard Worker{ 135*b7c941bbSAndroid Build Coastguard Worker echo $1 | sed -e 's#\.#/#g;s#$#.jar#' 136*b7c941bbSAndroid Build Coastguard Worker} 137*b7c941bbSAndroid Build Coastguard Worker 138*b7c941bbSAndroid Build Coastguard Workerwhile read -u 3 myline; 139*b7c941bbSAndroid Build Coastguard Workerdo 140*b7c941bbSAndroid Build Coastguard Worker # dot.junit.opcodes.add_double.Main_testB1;dot.junit.opcodes.add_double.d.T_add_double_1 ;opcode add_double;test B #1 (border edge case) 141*b7c941bbSAndroid Build Coastguard Worker # -> 142*b7c941bbSAndroid Build Coastguard Worker # mainclass: dot.junit.opcodes.add_double.Main_testB1 143*b7c941bbSAndroid Build Coastguard Worker # testcasedir: opcodes/add_double 144*b7c941bbSAndroid Build Coastguard Worker # testname: testB1 -> 145*b7c941bbSAndroid Build Coastguard Worker # dir dot/junit/opcodes/add_double/testB1 146*b7c941bbSAndroid Build Coastguard Worker 147*b7c941bbSAndroid Build Coastguard Worker # e.g dot.junit.opcodes.add_double.Main_testB1 148*b7c941bbSAndroid Build Coastguard Worker mainclass=`echo $myline | cut -d";" -f1` 149*b7c941bbSAndroid Build Coastguard Worker # e.g dot.junit.opcodes.add_double.d.T_add_double_1, space sep. >=1 entries 150*b7c941bbSAndroid Build Coastguard Worker deps=`echo $myline | cut -d";" -f2` 151*b7c941bbSAndroid Build Coastguard Worker 152*b7c941bbSAndroid Build Coastguard Worker jtitle=`echo $myline | cut -d";" -f3` 153*b7c941bbSAndroid Build Coastguard Worker jcomment=`echo $myline | cut -d";" -f4` 154*b7c941bbSAndroid Build Coastguard Worker details=`echo $myline | cut -d";" -f5` 155*b7c941bbSAndroid Build Coastguard Worker 156*b7c941bbSAndroid Build Coastguard Worker if [ "$selection" == "" ] || [ "$jtitle" == "$selection" ]; then 157*b7c941bbSAndroid Build Coastguard Worker 158*b7c941bbSAndroid Build Coastguard Worker (( jallcnt += 1 )) 159*b7c941bbSAndroid Build Coastguard Worker 160*b7c941bbSAndroid Build Coastguard Worker cd $dalviktestdir 161*b7c941bbSAndroid Build Coastguard Worker rm -f $datadir/dalvikout 162*b7c941bbSAndroid Build Coastguard Worker # write dalvik output to file 163*b7c941bbSAndroid Build Coastguard Worker echo -n "mk_b:" > $datadir/dalvikout 164*b7c941bbSAndroid Build Coastguard Worker 165*b7c941bbSAndroid Build Coastguard Worker classpath="/data/local/tmp/dexcore.jar" 166*b7c941bbSAndroid Build Coastguard Worker deps=${deps}" "${mainclass} 167*b7c941bbSAndroid Build Coastguard Worker pushedjars="" 168*b7c941bbSAndroid Build Coastguard Worker for dep in ${deps}; do 169*b7c941bbSAndroid Build Coastguard Worker depJar=`classnameToJar ${dep}` 170*b7c941bbSAndroid Build Coastguard Worker depFileName=`basename ${depJar}` 171*b7c941bbSAndroid Build Coastguard Worker deviceFileName=/data/local/tmp/${depFileName} 172*b7c941bbSAndroid Build Coastguard Worker adb push ${depJar} ${deviceFileName} &> /dev/null 173*b7c941bbSAndroid Build Coastguard Worker classpath=${classpath}:${deviceFileName} 174*b7c941bbSAndroid Build Coastguard Worker pushedjars=${pushedjars}" "${deviceFileName} 175*b7c941bbSAndroid Build Coastguard Worker done 176*b7c941bbSAndroid Build Coastguard Worker 177*b7c941bbSAndroid Build Coastguard Worker adb shell dalvikvm -Djava.io.tmpdir=/data/local/tmp \ 178*b7c941bbSAndroid Build Coastguard Worker -classpath $classpath $mainclass >> $datadir/dalvikout 2>&1 && \ 179*b7c941bbSAndroid Build Coastguard Worker echo -n dvmpassed: >> $datadir/dalvikout 2>&1 180*b7c941bbSAndroid Build Coastguard Worker 181*b7c941bbSAndroid Build Coastguard Worker for jar in ${pushedjars}; do 182*b7c941bbSAndroid Build Coastguard Worker adb shell rm ${jar} &> /dev/null 183*b7c941bbSAndroid Build Coastguard Worker done 184*b7c941bbSAndroid Build Coastguard Worker 185*b7c941bbSAndroid Build Coastguard Worker echo -n "mk_s:" >> $datadir/dalvikout 186*b7c941bbSAndroid Build Coastguard Worker # Verify tmpout only contains mkdxc_start;mkdxc_stop -> no system.out/err 187*b7c941bbSAndroid Build Coastguard Worker # because of exception. If ok -> green report line else red report with info 188*b7c941bbSAndroid Build Coastguard Worker # between mkdxc_start and stop 189*b7c941bbSAndroid Build Coastguard Worker vmresult=`cat $datadir/dalvikout` 190*b7c941bbSAndroid Build Coastguard Worker 191*b7c941bbSAndroid Build Coastguard Worker if [[ ("$vmresult" == "mk_b:mk_s:") || ("$vmresult" == "mk_b:dvmpassed:mk_s:") ]]; then 192*b7c941bbSAndroid Build Coastguard Worker (( jpassedcnt += 1 )) 193*b7c941bbSAndroid Build Coastguard Worker echo -n "<tr class=\"ok\"><td>Success</td><td>$jtitle</td>" >> $report 194*b7c941bbSAndroid Build Coastguard Worker echo "<td>$jcomment</td><td>$details</td></tr>" >> $report 195*b7c941bbSAndroid Build Coastguard Worker echo -n "." 196*b7c941bbSAndroid Build Coastguard Worker else 197*b7c941bbSAndroid Build Coastguard Worker vmres=`cat $datadir/dalvikout | sed -e 's/mk_b://;s/mk_s://'` 198*b7c941bbSAndroid Build Coastguard Worker vmres="$details<br><pre>$vmres</pre>" 199*b7c941bbSAndroid Build Coastguard Worker 200*b7c941bbSAndroid Build Coastguard Worker stacktraces=`echo $vmresult | grep "java\.lang\." | grep -c "at dot\.junit\."` 201*b7c941bbSAndroid Build Coastguard Worker if [[ $stacktraces > 0 ]]; then 202*b7c941bbSAndroid Build Coastguard Worker jtype=`echo "$mainclass" | sed -e 's/.*_test\([^0-9]*\)[0-9].*/\1/' ` 203*b7c941bbSAndroid Build Coastguard Worker if [ "$jtype" == "VFE" ]; then 204*b7c941bbSAndroid Build Coastguard Worker (( jvfefailedcnt += 1 )) 205*b7c941bbSAndroid Build Coastguard Worker echo -n "V" 206*b7c941bbSAndroid Build Coastguard Worker else 207*b7c941bbSAndroid Build Coastguard Worker (( jfailedcnt += 1 )) 208*b7c941bbSAndroid Build Coastguard Worker echo -n "F" 209*b7c941bbSAndroid Build Coastguard Worker fi 210*b7c941bbSAndroid Build Coastguard Worker 211*b7c941bbSAndroid Build Coastguard Worker echo "<tr class=\"nok\"><td>Failure</td><td>$jtitle</td><td>" >> $report 212*b7c941bbSAndroid Build Coastguard Worker echo "$jcomment</td><td>$vmres</td></tr>" >> $report 213*b7c941bbSAndroid Build Coastguard Worker else 214*b7c941bbSAndroid Build Coastguard Worker (( jwarningcnt += 1 )) 215*b7c941bbSAndroid Build Coastguard Worker echo "<tr class=\"wok\"><td>Failure</td><td>$jtitle</td><td>" >> $report 216*b7c941bbSAndroid Build Coastguard Worker echo "$jcomment</td><td>(No stacktrace, but errors on console)" >> $report 217*b7c941bbSAndroid Build Coastguard Worker echo "<br>$vmres</td></tr>" >> $report 218*b7c941bbSAndroid Build Coastguard Worker echo -n "C" 219*b7c941bbSAndroid Build Coastguard Worker fi 220*b7c941bbSAndroid Build Coastguard Worker fi 221*b7c941bbSAndroid Build Coastguard Worker 222*b7c941bbSAndroid Build Coastguard Worker (( jcolumns += 1 )) 223*b7c941bbSAndroid Build Coastguard Worker if [ ${jcolumns} -eq 40 ]; then 224*b7c941bbSAndroid Build Coastguard Worker echo "" 225*b7c941bbSAndroid Build Coastguard Worker (( jcolumns = 0 )) 226*b7c941bbSAndroid Build Coastguard Worker fi 227*b7c941bbSAndroid Build Coastguard Worker 228*b7c941bbSAndroid Build Coastguard Worker fi 229*b7c941bbSAndroid Build Coastguard Worker# Use fd nr 3 to avoid subshelling via cat since this looses all 230*b7c941bbSAndroid Build Coastguard Worker# variables(and thus also the counters we are interested in). 231*b7c941bbSAndroid Build Coastguard Workerdone 3<$scriptdata 232*b7c941bbSAndroid Build Coastguard Worker 233*b7c941bbSAndroid Build Coastguard Workerecho "</table>" >> $report 234*b7c941bbSAndroid Build Coastguard Workerlet jallcalccnt=$jpassedcnt+$jfailedcnt+$jvfefailedcnt+$jwarningcnt 235*b7c941bbSAndroid Build Coastguard Workerif [ $jallcalccnt -ne $jallcnt ]; then 236*b7c941bbSAndroid Build Coastguard Worker echo "<br>error: green & red != total , $jallcalccnt -ne $jallcnt" >> $report 237*b7c941bbSAndroid Build Coastguard Worker exit 1; 238*b7c941bbSAndroid Build Coastguard Workerfi 239*b7c941bbSAndroid Build Coastguard Worker 240*b7c941bbSAndroid Build Coastguard Workerecho $post_report >> $report 241*b7c941bbSAndroid Build Coastguard Worker 242*b7c941bbSAndroid Build Coastguard Workerecho "<br>Tests run: ${jallcnt}" >> $report 243*b7c941bbSAndroid Build Coastguard Workerecho "<br>Functional failures: ${jfailedcnt}" >> $report 244*b7c941bbSAndroid Build Coastguard Workerecho "<br>Verifier failures: ${jvfefailedcnt}" >> $report 245*b7c941bbSAndroid Build Coastguard Workerecho "<br>Console errors: ${jwarningcnt}" >> $report 246*b7c941bbSAndroid Build Coastguard Worker 247*b7c941bbSAndroid Build Coastguard Workerecho $post_report >> $report 248*b7c941bbSAndroid Build Coastguard Worker 249*b7c941bbSAndroid Build Coastguard Workerif [[ jcolumns -ne 0 ]]; then 250*b7c941bbSAndroid Build Coastguard Worker echo "" 251*b7c941bbSAndroid Build Coastguard Workerfi 252*b7c941bbSAndroid Build Coastguard Worker 253*b7c941bbSAndroid Build Coastguard Workerecho "" 254*b7c941bbSAndroid Build Coastguard Worker 255*b7c941bbSAndroid Build Coastguard Workerif [[ jallcnt -eq jpassedcnt ]]; then 256*b7c941bbSAndroid Build Coastguard Worker echo "OK (${jpassedcnt} tests)" 257*b7c941bbSAndroid Build Coastguard Workerelse 258*b7c941bbSAndroid Build Coastguard Worker echo "FAILURES!!!" 259*b7c941bbSAndroid Build Coastguard Worker echo "" 260*b7c941bbSAndroid Build Coastguard Worker echo "Tests run : ${jallcnt}" 261*b7c941bbSAndroid Build Coastguard Worker echo "Functional failures: ${jfailedcnt}" 262*b7c941bbSAndroid Build Coastguard Worker echo "Verifier failures : ${jvfefailedcnt}" 263*b7c941bbSAndroid Build Coastguard Worker echo "Console errors : ${jwarningcnt}" 264*b7c941bbSAndroid Build Coastguard Workerfi 265*b7c941bbSAndroid Build Coastguard Worker 266*b7c941bbSAndroid Build Coastguard Workerecho "" 267*b7c941bbSAndroid Build Coastguard Workerecho "Please see complete report in ${report}" 268*b7c941bbSAndroid Build Coastguard Workerecho "--------------------------------------------------" 269