You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
269 lines
8.4 KiB
269 lines
8.4 KiB
4 months ago
|
#!/bin/bash
|
||
|
#
|
||
|
# Copyright (C) 2008 The Android Open Source Project
|
||
|
#
|
||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
# you may not use this file except in compliance with the License.
|
||
|
# You may obtain a copy of the License at
|
||
|
#
|
||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||
|
#
|
||
|
# Unless required by applicable law or agreed to in writing, software
|
||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
# See the License for the specific language governing permissions and
|
||
|
# limitations under the License.
|
||
|
|
||
|
# Set up prog to be the path of this script, including following symlinks,
|
||
|
# and set up progdir to be the fully-qualified pathname of its directory.
|
||
|
|
||
|
prog="$0"
|
||
|
while [ -h "${prog}" ]; do
|
||
|
newProg=`/bin/ls -ld "${prog}"`
|
||
|
newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
|
||
|
if expr "x${newProg}" : 'x/' >/dev/null; then
|
||
|
prog="${newProg}"
|
||
|
else
|
||
|
progdir=`dirname "${prog}"`
|
||
|
prog="${progdir}/${newProg}"
|
||
|
fi
|
||
|
done
|
||
|
oldwd=`pwd`
|
||
|
progdir=`dirname "${prog}"`
|
||
|
cd "${progdir}"
|
||
|
progdir=`pwd`
|
||
|
prog="${progdir}"/`basename "${prog}"`
|
||
|
cd "${oldwd}"
|
||
|
|
||
|
libdir=`dirname $progdir`/framework
|
||
|
|
||
|
javaOpts=""
|
||
|
while expr "x$1" : 'x-J' >/dev/null; do
|
||
|
opt=`expr "$1" : '-J\(.*\)'`
|
||
|
javaOpts="${javaOpts} -${opt}"
|
||
|
shift
|
||
|
done
|
||
|
|
||
|
|
||
|
#######################################################################
|
||
|
# Original content of invocation script follows. Uses values cleverly
|
||
|
# deduced by the above code.
|
||
|
#######################################################################
|
||
|
|
||
|
selection=$1
|
||
|
interpreter="fast"
|
||
|
if [ "$selection" = "--portable" ]; then
|
||
|
selection=$2;
|
||
|
interpreter="portable"
|
||
|
fi
|
||
|
|
||
|
dalviktest=$ANDROID_BUILD_TOP/out/host/common/obj/JAVA_LIBRARIES/vm-tests-tf_intermediates
|
||
|
dalviktestdir=$dalviktest/tests
|
||
|
dexcore=$dalviktest/tests/dot/junit/dexcore.jar
|
||
|
scriptdata=$dalviktestdir/data/scriptdata
|
||
|
report=$dalviktest/report.html
|
||
|
curdate=`date`
|
||
|
datadir=/tmp/${USER}
|
||
|
base=$OUT
|
||
|
framework=$base/system/framework
|
||
|
export ANDROID_PRINTF_LOG=tag
|
||
|
export ANDROID_LOG_TAGS='*:s' # was: jdwp:i dalvikvm:i dalvikvmi:i'
|
||
|
export ANDROID_DATA=$datadir
|
||
|
export ANDROID_ROOT=$base/system
|
||
|
export LD_LIBRARY_PATH=$base/system/lib
|
||
|
export DYLD_LIBRARY_PATH=$base/system/lib
|
||
|
debug_opts="-Xcheck:jni -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
|
||
|
exe=$base/system/bin/dalvikvm
|
||
|
bpath=$framework/core.jar
|
||
|
|
||
|
echo "--------------------------------------------------"
|
||
|
echo "Dalvik VM Test Suite"
|
||
|
echo "Version 1.0"
|
||
|
echo "Copyright (c) 2008 The Android Open Source Project"
|
||
|
echo ""
|
||
|
|
||
|
if [ "$selection" = "--help" ]; then
|
||
|
echo "Usage: vm-tests [--help|--portable] [<mnemonic>]"
|
||
|
echo ""
|
||
|
echo " --help prints this help message"
|
||
|
echo " --portable uses the portable interpreter;"
|
||
|
echo " default is the fast one"
|
||
|
echo ""
|
||
|
echo " <mnemonic> specifies the instruction to test;"
|
||
|
echo " default is to run all tests"
|
||
|
echo ""
|
||
|
exit 1;
|
||
|
fi
|
||
|
|
||
|
rm -rf --preserve-root $datadir/dalvik-cache
|
||
|
mkdir -p $datadir
|
||
|
mkdir -p $datadir/dalvik-cache
|
||
|
|
||
|
echo ""
|
||
|
|
||
|
pre_report="<html><head><style>
|
||
|
table tr.ok { background:#a0ffa0; }
|
||
|
table tr.nok { background:#ffa0a0; }
|
||
|
table tr.wok { background:#ffffa0; }
|
||
|
table tr.lok { background:#aaaaff; }
|
||
|
</style></head>
|
||
|
<body>
|
||
|
<h1>Dalvik VM test suite results</h1>
|
||
|
Generated $curdate (using the emulator)
|
||
|
<p>
|
||
|
<table width='100%'>
|
||
|
<tr><td>Status</td><td>Target</td><td>Category</td><td>Details</td></tr>"
|
||
|
post_report="</body></html>"
|
||
|
|
||
|
rm -f $report
|
||
|
echo $pre_report > $report
|
||
|
|
||
|
# ----------- running each opcode test ------------
|
||
|
|
||
|
export jpassedcnt=0
|
||
|
export jfailedcnt=0
|
||
|
export jvfefailedcnt=0
|
||
|
export jwarningcnt=0
|
||
|
export jallcnt=0
|
||
|
export jcolumns=0
|
||
|
|
||
|
# TODO unhack; dimitry: unhack what?
|
||
|
adb push $dexcore /data/local/tmp/dexcore.jar >> /dev/null 2>&1
|
||
|
|
||
|
function classnameToJar()
|
||
|
{
|
||
|
echo $1 | sed -e 's#\.#/#g;s#$#.jar#'
|
||
|
}
|
||
|
|
||
|
while read -u 3 myline;
|
||
|
do
|
||
|
# 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)
|
||
|
# ->
|
||
|
# mainclass: dot.junit.opcodes.add_double.Main_testB1
|
||
|
# testcasedir: opcodes/add_double
|
||
|
# testname: testB1 ->
|
||
|
# dir dot/junit/opcodes/add_double/testB1
|
||
|
|
||
|
# e.g dot.junit.opcodes.add_double.Main_testB1
|
||
|
mainclass=`echo $myline | cut -d";" -f1`
|
||
|
# e.g dot.junit.opcodes.add_double.d.T_add_double_1, space sep. >=1 entries
|
||
|
deps=`echo $myline | cut -d";" -f2`
|
||
|
|
||
|
jtitle=`echo $myline | cut -d";" -f3`
|
||
|
jcomment=`echo $myline | cut -d";" -f4`
|
||
|
details=`echo $myline | cut -d";" -f5`
|
||
|
|
||
|
if [ "$selection" == "" ] || [ "$jtitle" == "$selection" ]; then
|
||
|
|
||
|
(( jallcnt += 1 ))
|
||
|
|
||
|
cd $dalviktestdir
|
||
|
rm -f $datadir/dalvikout
|
||
|
# write dalvik output to file
|
||
|
echo -n "mk_b:" > $datadir/dalvikout
|
||
|
|
||
|
classpath="/data/local/tmp/dexcore.jar"
|
||
|
deps=${deps}" "${mainclass}
|
||
|
pushedjars=""
|
||
|
for dep in ${deps}; do
|
||
|
depJar=`classnameToJar ${dep}`
|
||
|
depFileName=`basename ${depJar}`
|
||
|
deviceFileName=/data/local/tmp/${depFileName}
|
||
|
adb push ${depJar} ${deviceFileName} &> /dev/null
|
||
|
classpath=${classpath}:${deviceFileName}
|
||
|
pushedjars=${pushedjars}" "${deviceFileName}
|
||
|
done
|
||
|
|
||
|
adb shell dalvikvm -Djava.io.tmpdir=/data/local/tmp \
|
||
|
-classpath $classpath $mainclass >> $datadir/dalvikout 2>&1 && \
|
||
|
echo -n dvmpassed: >> $datadir/dalvikout 2>&1
|
||
|
|
||
|
for jar in ${pushedjars}; do
|
||
|
adb shell rm ${jar} &> /dev/null
|
||
|
done
|
||
|
|
||
|
echo -n "mk_s:" >> $datadir/dalvikout
|
||
|
# Verify tmpout only contains mkdxc_start;mkdxc_stop -> no system.out/err
|
||
|
# because of exception. If ok -> green report line else red report with info
|
||
|
# between mkdxc_start and stop
|
||
|
vmresult=`cat $datadir/dalvikout`
|
||
|
|
||
|
if [[ ("$vmresult" == "mk_b:mk_s:") || ("$vmresult" == "mk_b:dvmpassed:mk_s:") ]]; then
|
||
|
(( jpassedcnt += 1 ))
|
||
|
echo -n "<tr class=\"ok\"><td>Success</td><td>$jtitle</td>" >> $report
|
||
|
echo "<td>$jcomment</td><td>$details</td></tr>" >> $report
|
||
|
echo -n "."
|
||
|
else
|
||
|
vmres=`cat $datadir/dalvikout | sed -e 's/mk_b://;s/mk_s://'`
|
||
|
vmres="$details<br><pre>$vmres</pre>"
|
||
|
|
||
|
stacktraces=`echo $vmresult | grep "java\.lang\." | grep -c "at dot\.junit\."`
|
||
|
if [[ $stacktraces > 0 ]]; then
|
||
|
jtype=`echo "$mainclass" | sed -e 's/.*_test\([^0-9]*\)[0-9].*/\1/' `
|
||
|
if [ "$jtype" == "VFE" ]; then
|
||
|
(( jvfefailedcnt += 1 ))
|
||
|
echo -n "V"
|
||
|
else
|
||
|
(( jfailedcnt += 1 ))
|
||
|
echo -n "F"
|
||
|
fi
|
||
|
|
||
|
echo "<tr class=\"nok\"><td>Failure</td><td>$jtitle</td><td>" >> $report
|
||
|
echo "$jcomment</td><td>$vmres</td></tr>" >> $report
|
||
|
else
|
||
|
(( jwarningcnt += 1 ))
|
||
|
echo "<tr class=\"wok\"><td>Failure</td><td>$jtitle</td><td>" >> $report
|
||
|
echo "$jcomment</td><td>(No stacktrace, but errors on console)" >> $report
|
||
|
echo "<br>$vmres</td></tr>" >> $report
|
||
|
echo -n "C"
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
(( jcolumns += 1 ))
|
||
|
if [ ${jcolumns} -eq 40 ]; then
|
||
|
echo ""
|
||
|
(( jcolumns = 0 ))
|
||
|
fi
|
||
|
|
||
|
fi
|
||
|
# Use fd nr 3 to avoid subshelling via cat since this looses all
|
||
|
# variables(and thus also the counters we are interested in).
|
||
|
done 3<$scriptdata
|
||
|
|
||
|
echo "</table>" >> $report
|
||
|
let jallcalccnt=$jpassedcnt+$jfailedcnt+$jvfefailedcnt+$jwarningcnt
|
||
|
if [ $jallcalccnt -ne $jallcnt ]; then
|
||
|
echo "<br>error: green & red != total , $jallcalccnt -ne $jallcnt" >> $report
|
||
|
exit 1;
|
||
|
fi
|
||
|
|
||
|
echo $post_report >> $report
|
||
|
|
||
|
echo "<br>Tests run: ${jallcnt}" >> $report
|
||
|
echo "<br>Functional failures: ${jfailedcnt}" >> $report
|
||
|
echo "<br>Verifier failures: ${jvfefailedcnt}" >> $report
|
||
|
echo "<br>Console errors: ${jwarningcnt}" >> $report
|
||
|
|
||
|
echo $post_report >> $report
|
||
|
|
||
|
if [[ jcolumns -ne 0 ]]; then
|
||
|
echo ""
|
||
|
fi
|
||
|
|
||
|
echo ""
|
||
|
|
||
|
if [[ jallcnt -eq jpassedcnt ]]; then
|
||
|
echo "OK (${jpassedcnt} tests)"
|
||
|
else
|
||
|
echo "FAILURES!!!"
|
||
|
echo ""
|
||
|
echo "Tests run : ${jallcnt}"
|
||
|
echo "Functional failures: ${jfailedcnt}"
|
||
|
echo "Verifier failures : ${jvfefailedcnt}"
|
||
|
echo "Console errors : ${jwarningcnt}"
|
||
|
fi
|
||
|
|
||
|
echo ""
|
||
|
echo "Please see complete report in ${report}"
|
||
|
echo "--------------------------------------------------"
|