xref: /aosp_15_r20/cts/tools/vm-tests-tf/etc/starttests (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 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