xref: /aosp_15_r20/cts/tools/vm-tests-tf/etc/starthosttests (revision b7c941bb3fa97aba169d73cee0bed2de8ac964bf)
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