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 WorkerjavaOpts="" 39*b7c941bbSAndroid Build Coastguard Workerwhile expr "x$1" : 'x-J' >/dev/null; do 40*b7c941bbSAndroid Build Coastguard Worker opt=`expr "$1" : '-J\(.*\)'` 41*b7c941bbSAndroid Build Coastguard Worker javaOpts="${javaOpts} -${opt}" 42*b7c941bbSAndroid Build Coastguard Worker shift 43*b7c941bbSAndroid Build Coastguard Workerdone 44*b7c941bbSAndroid Build Coastguard Worker 45*b7c941bbSAndroid Build Coastguard Worker 46*b7c941bbSAndroid Build Coastguard Worker####################################################################### 47*b7c941bbSAndroid Build Coastguard Worker# Original content of invocation script follows. Uses values cleverly 48*b7c941bbSAndroid Build Coastguard Worker# deduced by the above code. 49*b7c941bbSAndroid Build Coastguard Worker####################################################################### 50*b7c941bbSAndroid Build Coastguard Worker 51*b7c941bbSAndroid Build Coastguard Workerselection=$1 52*b7c941bbSAndroid Build Coastguard Workerinterpreter="fast" 53*b7c941bbSAndroid Build Coastguard Workerif [ "$selection" = "--portable" ]; then 54*b7c941bbSAndroid Build Coastguard Worker selection=$2; 55*b7c941bbSAndroid Build Coastguard Worker interpreter="portable" 56*b7c941bbSAndroid Build Coastguard Workerfi 57*b7c941bbSAndroid Build Coastguard Worker 58*b7c941bbSAndroid Build Coastguard Workerdalviktest=$ANDROID_BUILD_TOP/out/host/common/obj/JAVA_LIBRARIES/vm-tests-tf_intermediates 59*b7c941bbSAndroid Build Coastguard Workerdalviktestdir=$dalviktest/tests 60*b7c941bbSAndroid Build Coastguard Workerdexcore=$dalviktest/tests/dot/junit/dexcore.jar 61*b7c941bbSAndroid Build Coastguard Workerscriptdata=$dalviktestdir/data/scriptdata 62*b7c941bbSAndroid Build Coastguard Workerreport=$dalviktest/report.html 63*b7c941bbSAndroid Build Coastguard Workercurdate=`date` 64*b7c941bbSAndroid Build Coastguard Workerdatadir=/tmp/${USER} 65*b7c941bbSAndroid Build Coastguard Workerexport ANDROID_PRINTF_LOG=tag 66*b7c941bbSAndroid Build Coastguard Workerexport ANDROID_LOG_TAGS='*:s' # was: jdwp:i dalvikvm:i dalvikvmi:i' 67*b7c941bbSAndroid Build Coastguard Workerexport ANDROID_DATA=$datadir 68*b7c941bbSAndroid Build Coastguard Workerexport ANDROID_ROOT=$ANDROID_HOST_OUT 69*b7c941bbSAndroid Build Coastguard Worker# export LD_LIBRARY_PATH=$base/system/lib 70*b7c941bbSAndroid Build Coastguard Worker# export DYLD_LIBRARY_PATH=$base/system/lib 71*b7c941bbSAndroid Build Coastguard Workerdebug_opts="-Xcheck:jni -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n" 72*b7c941bbSAndroid Build Coastguard Workervmtpath=$ANDROID_HOST_OUT/../common/obj/JAVA_LIBRARIES/vm-tests-tf_intermediates/tests 73*b7c941bbSAndroid Build Coastguard Worker 74*b7c941bbSAndroid Build Coastguard Workerecho "--------------------------------------------------" 75*b7c941bbSAndroid Build Coastguard Workerecho "Dalvik VM Test Suite" 76*b7c941bbSAndroid Build Coastguard Workerecho "Version 1.0" 77*b7c941bbSAndroid Build Coastguard Workerecho "Copyright (c) 2008 The Android Open Source Project" 78*b7c941bbSAndroid Build Coastguard Workerecho "" 79*b7c941bbSAndroid Build Coastguard Worker 80*b7c941bbSAndroid Build Coastguard Workerif [ "$selection" = "--help" ]; then 81*b7c941bbSAndroid Build Coastguard Worker echo "Usage: vm-tests [--help|--portable] [<mnemonic>]" 82*b7c941bbSAndroid Build Coastguard Worker echo "" 83*b7c941bbSAndroid Build Coastguard Worker echo " --help prints this help message" 84*b7c941bbSAndroid Build Coastguard Worker echo "" 85*b7c941bbSAndroid Build Coastguard Worker echo " <mnemonic> specifies the instruction to test;" 86*b7c941bbSAndroid Build Coastguard Worker echo " default is to run all tests" 87*b7c941bbSAndroid Build Coastguard Worker echo "" 88*b7c941bbSAndroid Build Coastguard Worker exit 1; 89*b7c941bbSAndroid Build Coastguard Workerfi 90*b7c941bbSAndroid Build Coastguard Worker 91*b7c941bbSAndroid Build Coastguard Workerrm -rf --preserve-root $datadir/dalvik-cache 92*b7c941bbSAndroid Build Coastguard Workermkdir -p $datadir 93*b7c941bbSAndroid Build Coastguard Workermkdir -p $datadir/dalvik-cache 94*b7c941bbSAndroid Build Coastguard Worker 95*b7c941bbSAndroid Build Coastguard Workerecho "" 96*b7c941bbSAndroid Build Coastguard Worker 97*b7c941bbSAndroid Build Coastguard Workerpre_report="<html><head><style> 98*b7c941bbSAndroid Build Coastguard Workertable tr.ok { background:#a0ffa0; } 99*b7c941bbSAndroid Build Coastguard Workertable tr.nok { background:#ffa0a0; } 100*b7c941bbSAndroid Build Coastguard Workertable tr.wok { background:#ffffa0; } 101*b7c941bbSAndroid Build Coastguard Workertable tr.lok { background:#aaaaff; } 102*b7c941bbSAndroid Build Coastguard Worker</style></head> 103*b7c941bbSAndroid Build Coastguard Worker<body> 104*b7c941bbSAndroid Build Coastguard Worker<h1>Dalvik VM test suite results</h1> 105*b7c941bbSAndroid Build Coastguard WorkerGenerated $curdate (using the emulator) 106*b7c941bbSAndroid Build Coastguard Worker<p> 107*b7c941bbSAndroid Build Coastguard Worker<table width='100%'> 108*b7c941bbSAndroid Build Coastguard Worker<tr><td>Status</td><td>Target</td><td>Category</td><td>Details</td></tr>" 109*b7c941bbSAndroid Build Coastguard Workerpost_report="</body></html>" 110*b7c941bbSAndroid Build Coastguard Worker 111*b7c941bbSAndroid Build Coastguard Workerrm -f $report 112*b7c941bbSAndroid Build Coastguard Workerecho $pre_report > $report 113*b7c941bbSAndroid Build Coastguard Worker 114*b7c941bbSAndroid Build Coastguard Worker# ----------- running each opcode test ------------ 115*b7c941bbSAndroid Build Coastguard Worker 116*b7c941bbSAndroid Build Coastguard Workerexport jpassedcnt=0 117*b7c941bbSAndroid Build Coastguard Workerexport jfailedcnt=0 118*b7c941bbSAndroid Build Coastguard Workerexport jvfefailedcnt=0 119*b7c941bbSAndroid Build Coastguard Workerexport jwarningcnt=0 120*b7c941bbSAndroid Build Coastguard Workerexport jallcnt=0 121*b7c941bbSAndroid Build Coastguard Workerexport jcolumns=0 122*b7c941bbSAndroid Build Coastguard Worker 123*b7c941bbSAndroid Build Coastguard Workerfunction classnameToJar() 124*b7c941bbSAndroid Build Coastguard Worker{ 125*b7c941bbSAndroid Build Coastguard Worker echo $1 | sed -e 's#\.#/#g;s#$#.jar#' 126*b7c941bbSAndroid Build Coastguard Worker} 127*b7c941bbSAndroid Build Coastguard Worker 128*b7c941bbSAndroid Build Coastguard Workerwhile read -u 3 myline; 129*b7c941bbSAndroid Build Coastguard Workerdo 130*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) 131*b7c941bbSAndroid Build Coastguard Worker # -> 132*b7c941bbSAndroid Build Coastguard Worker # mainclass: dot.junit.opcodes.add_double.Main_testB1 133*b7c941bbSAndroid Build Coastguard Worker # testcasedir: opcodes/add_double 134*b7c941bbSAndroid Build Coastguard Worker # testname: testB1 -> 135*b7c941bbSAndroid Build Coastguard Worker # dir dot/junit/opcodes/add_double/testB1 136*b7c941bbSAndroid Build Coastguard Worker 137*b7c941bbSAndroid Build Coastguard Worker # e.g dot.junit.opcodes.add_double.Main_testB1 138*b7c941bbSAndroid Build Coastguard Worker mainclass=`echo $myline | cut -d";" -f1` 139*b7c941bbSAndroid Build Coastguard Worker # e.g dot.junit.opcodes.add_double.d.T_add_double_1, space sep. >=1 entries 140*b7c941bbSAndroid Build Coastguard Worker deps=`echo $myline | cut -d";" -f2` 141*b7c941bbSAndroid Build Coastguard Worker 142*b7c941bbSAndroid Build Coastguard Worker jtitle=`echo $myline | cut -d";" -f3` 143*b7c941bbSAndroid Build Coastguard Worker jcomment=`echo $myline | cut -d";" -f4` 144*b7c941bbSAndroid Build Coastguard Worker details=`echo $myline | cut -d";" -f5` 145*b7c941bbSAndroid Build Coastguard Worker 146*b7c941bbSAndroid Build Coastguard Worker if [ "$selection" == "" ] || [ "$jtitle" == "$selection" ]; then 147*b7c941bbSAndroid Build Coastguard Worker 148*b7c941bbSAndroid Build Coastguard Worker (( jallcnt += 1 )) 149*b7c941bbSAndroid Build Coastguard Worker 150*b7c941bbSAndroid Build Coastguard Worker cd $dalviktestdir 151*b7c941bbSAndroid Build Coastguard Worker rm -f $datadir/dalvikout 152*b7c941bbSAndroid Build Coastguard Worker # write dalvik output to file 153*b7c941bbSAndroid Build Coastguard Worker echo -n "mk_b:" > $datadir/dalvikout 154*b7c941bbSAndroid Build Coastguard Worker 155*b7c941bbSAndroid Build Coastguard Worker classpath="${vmtpath}/dot/junit/dexcore.jar:${vmtpath}/mains.jar" 156*b7c941bbSAndroid Build Coastguard Worker deps=${deps}" "${mainclass} 157*b7c941bbSAndroid Build Coastguard Worker for dep in ${deps}; do 158*b7c941bbSAndroid Build Coastguard Worker depJar=`classnameToJar ${dep}` 159*b7c941bbSAndroid Build Coastguard Worker classpath=${classpath}:${vmtpath}/${depJar} 160*b7c941bbSAndroid Build Coastguard Worker done 161*b7c941bbSAndroid Build Coastguard Worker 162*b7c941bbSAndroid Build Coastguard Worker art -Djava.io.tmpdir=/tmp/${USER} \ 163*b7c941bbSAndroid Build Coastguard Worker -classpath $classpath $mainclass >> $datadir/dalvikout 2>&1 && \ 164*b7c941bbSAndroid Build Coastguard Worker echo -n dvmpassed: >> $datadir/dalvikout 2>&1 165*b7c941bbSAndroid Build Coastguard Worker 166*b7c941bbSAndroid Build Coastguard Worker echo -n "mk_s:" >> $datadir/dalvikout 167*b7c941bbSAndroid Build Coastguard Worker # Verify tmpout only contains mkdxc_start;mkdxc_stop -> no system.out/err 168*b7c941bbSAndroid Build Coastguard Worker # because of exception. If ok -> green report line else red report with info 169*b7c941bbSAndroid Build Coastguard Worker # between mkdxc_start and stop 170*b7c941bbSAndroid Build Coastguard Worker vmresult=`cat $datadir/dalvikout` 171*b7c941bbSAndroid Build Coastguard Worker 172*b7c941bbSAndroid Build Coastguard Worker if [[ ("$vmresult" == "mk_b:mk_s:") || ("$vmresult" == "mk_b:dvmpassed:mk_s:") ]]; then 173*b7c941bbSAndroid Build Coastguard Worker (( jpassedcnt += 1 )) 174*b7c941bbSAndroid Build Coastguard Worker echo -n "<tr class=\"ok\"><td>Success</td><td>$jtitle</td>" >> $report 175*b7c941bbSAndroid Build Coastguard Worker echo "<td>$jcomment</td><td>$details</td></tr>" >> $report 176*b7c941bbSAndroid Build Coastguard Worker echo -n "." 177*b7c941bbSAndroid Build Coastguard Worker else 178*b7c941bbSAndroid Build Coastguard Worker vmres=`cat $datadir/dalvikout | sed -e 's/mk_b://;s/mk_s://'` 179*b7c941bbSAndroid Build Coastguard Worker vmres="$details<br><pre>$vmres</pre>" 180*b7c941bbSAndroid Build Coastguard Worker 181*b7c941bbSAndroid Build Coastguard Worker stacktraces=`echo $vmresult | grep "java\.lang\." | grep -c "at dot\.junit\."` 182*b7c941bbSAndroid Build Coastguard Worker if [[ $stacktraces > 0 ]]; then 183*b7c941bbSAndroid Build Coastguard Worker jtype=`echo "$mainclass" | sed -e 's/.*_test\([^0-9]*\)[0-9].*/\1/' ` 184*b7c941bbSAndroid Build Coastguard Worker if [ "$jtype" == "VFE" ]; then 185*b7c941bbSAndroid Build Coastguard Worker (( jvfefailedcnt += 1 )) 186*b7c941bbSAndroid Build Coastguard Worker echo -n "V" 187*b7c941bbSAndroid Build Coastguard Worker else 188*b7c941bbSAndroid Build Coastguard Worker (( jfailedcnt += 1 )) 189*b7c941bbSAndroid Build Coastguard Worker echo -n "F" 190*b7c941bbSAndroid Build Coastguard Worker fi 191*b7c941bbSAndroid Build Coastguard Worker 192*b7c941bbSAndroid Build Coastguard Worker echo "<tr class=\"nok\"><td>Failure</td><td>$jtitle</td><td>" >> $report 193*b7c941bbSAndroid Build Coastguard Worker echo "$jcomment</td><td>$vmres</td></tr>" >> $report 194*b7c941bbSAndroid Build Coastguard Worker else 195*b7c941bbSAndroid Build Coastguard Worker (( jwarningcnt += 1 )) 196*b7c941bbSAndroid Build Coastguard Worker echo "<tr class=\"wok\"><td>Failure</td><td>$jtitle</td><td>" >> $report 197*b7c941bbSAndroid Build Coastguard Worker echo "$jcomment</td><td>(No stacktrace, but errors on console)" >> $report 198*b7c941bbSAndroid Build Coastguard Worker echo "<br>$vmres</td></tr>" >> $report 199*b7c941bbSAndroid Build Coastguard Worker echo -n "C" 200*b7c941bbSAndroid Build Coastguard Worker fi 201*b7c941bbSAndroid Build Coastguard Worker fi 202*b7c941bbSAndroid Build Coastguard Worker 203*b7c941bbSAndroid Build Coastguard Worker (( jcolumns += 1 )) 204*b7c941bbSAndroid Build Coastguard Worker if [ ${jcolumns} -eq 40 ]; then 205*b7c941bbSAndroid Build Coastguard Worker echo "" 206*b7c941bbSAndroid Build Coastguard Worker (( jcolumns = 0 )) 207*b7c941bbSAndroid Build Coastguard Worker fi 208*b7c941bbSAndroid Build Coastguard Worker 209*b7c941bbSAndroid Build Coastguard Worker fi 210*b7c941bbSAndroid Build Coastguard Worker# Use fd nr 3 to avoid subshelling via cat since this looses all 211*b7c941bbSAndroid Build Coastguard Worker# variables(and thus also the counters we are interested in). 212*b7c941bbSAndroid Build Coastguard Workerdone 3<$scriptdata 213*b7c941bbSAndroid Build Coastguard Worker 214*b7c941bbSAndroid Build Coastguard Workerecho "</table>" >> $report 215*b7c941bbSAndroid Build Coastguard Workerlet jallcalccnt=$jpassedcnt+$jfailedcnt+$jvfefailedcnt+$jwarningcnt 216*b7c941bbSAndroid Build Coastguard Workerif [ $jallcalccnt -ne $jallcnt ]; then 217*b7c941bbSAndroid Build Coastguard Worker echo "<br>error: green & red != total , $jallcalccnt -ne $jallcnt" >> $report 218*b7c941bbSAndroid Build Coastguard Worker exit 1; 219*b7c941bbSAndroid Build Coastguard Workerfi 220*b7c941bbSAndroid Build Coastguard Worker 221*b7c941bbSAndroid Build Coastguard Workerecho $post_report >> $report 222*b7c941bbSAndroid Build Coastguard Worker 223*b7c941bbSAndroid Build Coastguard Workerecho "<br>Tests run: ${jallcnt}" >> $report 224*b7c941bbSAndroid Build Coastguard Workerecho "<br>Functional failures: ${jfailedcnt}" >> $report 225*b7c941bbSAndroid Build Coastguard Workerecho "<br>Verifier failures: ${jvfefailedcnt}" >> $report 226*b7c941bbSAndroid Build Coastguard Workerecho "<br>Console errors: ${jwarningcnt}" >> $report 227*b7c941bbSAndroid Build Coastguard Worker 228*b7c941bbSAndroid Build Coastguard Workerecho $post_report >> $report 229*b7c941bbSAndroid Build Coastguard Worker 230*b7c941bbSAndroid Build Coastguard Workerif [[ jcolumns -ne 0 ]]; then 231*b7c941bbSAndroid Build Coastguard Worker echo "" 232*b7c941bbSAndroid Build Coastguard Workerfi 233*b7c941bbSAndroid Build Coastguard Worker 234*b7c941bbSAndroid Build Coastguard Workerecho "" 235*b7c941bbSAndroid Build Coastguard Worker 236*b7c941bbSAndroid Build Coastguard Workerif [[ jallcnt -eq jpassedcnt ]]; then 237*b7c941bbSAndroid Build Coastguard Worker echo "OK (${jpassedcnt} tests)" 238*b7c941bbSAndroid Build Coastguard Workerelse 239*b7c941bbSAndroid Build Coastguard Worker echo "FAILURES!!!" 240*b7c941bbSAndroid Build Coastguard Worker echo "" 241*b7c941bbSAndroid Build Coastguard Worker echo "Tests run : ${jallcnt}" 242*b7c941bbSAndroid Build Coastguard Worker echo "Functional failures: ${jfailedcnt}" 243*b7c941bbSAndroid Build Coastguard Worker echo "Verifier failures : ${jvfefailedcnt}" 244*b7c941bbSAndroid Build Coastguard Worker echo "Console errors : ${jwarningcnt}" 245*b7c941bbSAndroid Build Coastguard Workerfi 246*b7c941bbSAndroid Build Coastguard Worker 247*b7c941bbSAndroid Build Coastguard Workerecho "" 248*b7c941bbSAndroid Build Coastguard Workerecho "Please see complete report in ${report}" 249*b7c941bbSAndroid Build Coastguard Workerecho "--------------------------------------------------" 250