blob: 2506c9bbd8ae810298135de868917005312a528a [file] [log] [blame]
Nicolas Geoffrayb2e7e242014-11-28 14:24:28 +00001#!/bin/bash
2#
3# Copyright (C) 2014 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17if [ ! -d libcore ]; then
18 echo "Script needs to be run at the root of the android tree"
19 exit 1
20fi
21
Colin Crosse0ef0a82017-07-27 21:29:18 +000022source build/envsetup.sh >&/dev/null # for get_build_var, setpaths
23setpaths # include platform prebuilt java, javac, etc in $PATH.
Shubham Ajmerac33c0872017-07-20 18:41:52 -070024
Andreas Gampeebd089d2016-07-18 14:56:56 -070025if [ -z "$ANDROID_PRODUCT_OUT" ] ; then
26 JAVA_LIBRARIES=out/target/common/obj/JAVA_LIBRARIES
27else
28 JAVA_LIBRARIES=${ANDROID_PRODUCT_OUT}/../../common/obj/JAVA_LIBRARIES
29fi
30
Roland Levillain08f7c1d2018-05-25 15:34:41 +010031# "Root" (actually "system") directory on device (in the case of
32# target testing).
33android_root=${ART_TEST_ANDROID_ROOT:-/system}
Roland Levillain1c361882018-03-02 14:23:51 +000034
Igor Murashkin84f26322017-06-06 11:36:33 -070035function classes_jar_path {
36 local var="$1"
37 local suffix="jar"
38
Igor Murashkin84f26322017-06-06 11:36:33 -070039 echo "${JAVA_LIBRARIES}/${var}_intermediates/classes.${suffix}"
40}
41
Tobias Thiererb3ec0892016-08-03 16:13:04 +010042function cparg {
43 for var
44 do
Igor Murashkin84f26322017-06-06 11:36:33 -070045 printf -- "--classpath $(classes_jar_path "$var") ";
Tobias Thiererb3ec0892016-08-03 16:13:04 +010046 done
47}
Wojciech Staszkiewicz08cf1482015-05-21 17:31:38 +010048
Vladimir Marko91f10322018-12-07 18:04:10 +000049function boot_classpath_arg {
50 local dir="$1"
51 local suffix="$2"
52 shift 2
53 printf -- "--vm-arg -Xbootclasspath"
54 for var
55 do
56 printf -- ":${dir}/${var}${suffix}.jar";
57 done
58}
59
Vladimir Marko0ace5632018-12-14 11:11:47 +000060# Note: This must start with the CORE_IMG_JARS in Android.common_path.mk
Vladimir Marko91f10322018-12-07 18:04:10 +000061# because that's what we use for compiling the core.art image.
Vladimir Marko0ace5632018-12-14 11:11:47 +000062# It may contain additional modules from TEST_CORE_JARS.
Victor Chang759845f2019-08-06 16:04:36 +010063BOOT_CLASSPATH_JARS="core-oj core-libart core-icu4j okhttp bouncycastle apache-xml conscrypt"
Vladimir Marko91f10322018-12-07 18:04:10 +000064
Tobias Thiererb3ec0892016-08-03 16:13:04 +010065DEPS="core-tests jsr166-tests mockito-target"
Wojciech Staszkiewicz08cf1482015-05-21 17:31:38 +010066
Tobias Thiererb3ec0892016-08-03 16:13:04 +010067for lib in $DEPS
68do
Igor Murashkin84f26322017-06-06 11:36:33 -070069 if [[ ! -f "$(classes_jar_path "$lib")" ]]; then
Tobias Thiererb3ec0892016-08-03 16:13:04 +010070 echo "${lib} is missing. Before running, you must run art/tools/buildbot-build.sh"
71 exit 1
72 fi
73done
Nicolas Geoffrayb2e7e242014-11-28 14:24:28 +000074
Roland Levillainafd6f9e2016-01-11 15:51:00 +000075expectations="--expectations art/tools/libcore_failures.txt"
Roland Levillainafd6f9e2016-01-11 15:51:00 +000076
Nicolas Geoffrayf794ad72015-09-11 12:08:49 +010077emulator="no"
78if [ "$ANDROID_SERIAL" = "emulator-5554" ]; then
79 emulator="yes"
80fi
81
Roland Levillain5db109b2016-05-19 12:24:17 +010082# Use JIT compiling by default.
83use_jit=true
84
Nicolas Geoffrayc3837e42014-12-03 11:30:26 +000085# Packages that currently work correctly with the expectation files.
Roland Levillaind2f8ce12019-06-19 17:50:32 +010086working_packages=("libcore.android.system"
Roland Levillain9e189072019-06-19 17:51:08 +010087 "libcore.build"
Roland Levillaind2f8ce12019-06-19 17:50:32 +010088 "libcore.dalvik.system"
Roland Levillainb06e0ad2019-06-19 19:07:57 +010089 "libcore.java.awt"
David Brazdil598b2202015-02-24 10:12:06 +000090 "libcore.java.lang"
Nicolas Geoffrayc3837e42014-12-03 11:30:26 +000091 "libcore.java.math"
David Brazdil598b2202015-02-24 10:12:06 +000092 "libcore.java.text"
Nicolas Geoffray3cdf8182014-12-01 10:12:15 +000093 "libcore.java.util"
David Brazdil4cd7dfd2015-02-24 13:33:01 +000094 "libcore.javax.crypto"
Roland Levillaine0ce8bf2019-06-19 18:05:51 +010095 "libcore.javax.net"
David Brazdil598b2202015-02-24 10:12:06 +000096 "libcore.javax.security"
97 "libcore.javax.sql"
98 "libcore.javax.xml"
Roland Levillain9b41e952019-06-19 18:20:07 +010099 "libcore.libcore.internal"
Andreas Gampee1661362017-11-08 16:42:14 -0800100 "libcore.libcore.io"
101 "libcore.libcore.net"
102 "libcore.libcore.reflect"
103 "libcore.libcore.util"
Roland Levillainda5e0412019-06-19 18:20:32 +0100104 "libcore.libcore.timezone"
Roland Levillainc0ce3d52019-06-19 17:26:01 +0100105 "libcore.sun.invoke"
106 "libcore.sun.net"
107 "libcore.sun.misc"
108 "libcore.sun.security"
109 "libcore.sun.util"
Roland Levillainad82a812019-06-19 18:29:32 +0100110 "libcore.xml"
Nicolas Geoffray3cdf8182014-12-01 10:12:15 +0000111 "org.apache.harmony.annotation"
David Brazdil4cd7dfd2015-02-24 13:33:01 +0000112 "org.apache.harmony.crypto"
David Brazdile2f28ad2015-02-24 10:44:29 +0000113 "org.apache.harmony.luni"
114 "org.apache.harmony.nio"
Nicolas Geoffray3cdf8182014-12-01 10:12:15 +0000115 "org.apache.harmony.regex"
David Brazdile2f28ad2015-02-24 10:44:29 +0000116 "org.apache.harmony.testframework"
117 "org.apache.harmony.tests.java.io"
Nicolas Geoffray3cdf8182014-12-01 10:12:15 +0000118 "org.apache.harmony.tests.java.lang"
Nicolas Geoffrayc3837e42014-12-03 11:30:26 +0000119 "org.apache.harmony.tests.java.math"
Nicolas Geoffray3cdf8182014-12-01 10:12:15 +0000120 "org.apache.harmony.tests.java.util"
David Brazdile2f28ad2015-02-24 10:44:29 +0000121 "org.apache.harmony.tests.java.text"
122 "org.apache.harmony.tests.javax.security"
Wojciech Staszkiewicz08cf1482015-05-21 17:31:38 +0100123 "tests.java.lang.String"
124 "jsr166")
Nicolas Geoffrayb2e7e242014-11-28 14:24:28 +0000125
Nicolas Geoffraycdcd0002015-10-31 14:47:36 +0000126# List of packages we could run, but don't have rights to revert
127# changes in case of failures.
128# "org.apache.harmony.security"
129
Nicolas Geoffray9648a632015-06-15 14:35:01 +0100130vogar_args=$@
Nicolas Geoffray622e2e22017-06-15 09:33:01 +0100131gcstress=false
132debug=false
133
Roland Levillaind6e2c382019-09-18 16:13:48 +0100134# Run tests that use the getrandom() syscall? (Requires Linux 3.17+).
135getrandom=true
136
Roland Levillaine4f1c512017-10-30 13:28:28 +0000137# Don't use device mode by default.
138device_mode=false
Roland Levillaine4f1c512017-10-30 13:28:28 +0000139
Nicolas Geoffray9648a632015-06-15 14:35:01 +0100140while true; do
141 if [[ "$1" == "--mode=device" ]]; then
Roland Levillaine4f1c512017-10-30 13:28:28 +0000142 device_mode=true
Nicolas Geoffray191cae32019-01-09 09:36:03 +0000143 # Remove the --mode=device from the arguments and replace it with --mode=device_testdex
144 vogar_args=${vogar_args/$1}
145 vogar_args="$vogar_args --mode=device_testdex"
Nicolas Geoffrayb76bc782016-09-14 12:33:34 +0000146 vogar_args="$vogar_args --vm-arg -Ximage:/data/art-test/core.art"
Vladimir Marko91f10322018-12-07 18:04:10 +0000147 vogar_args="$vogar_args $(boot_classpath_arg /system/framework -testdex $BOOT_CLASSPATH_JARS)"
Nicolas Geoffray9648a632015-06-15 14:35:01 +0100148 shift
149 elif [[ "$1" == "--mode=host" ]]; then
Andreas Gampe8994a042015-12-30 19:03:17 +0000150 # We explicitly give a wrong path for the image, to ensure vogar
151 # will create a boot image with the default compiler. Note that
152 # giving an existing image on host does not work because of
153 # classpath/resources differences when compiling the boot image.
154 vogar_args="$vogar_args --vm-arg -Ximage:/non/existent/vogar.art"
Nicolas Geoffray9648a632015-06-15 14:35:01 +0100155 shift
Roland Levillain5db109b2016-05-19 12:24:17 +0100156 elif [[ "$1" == "--no-jit" ]]; then
157 # Remove the --no-jit from the arguments.
158 vogar_args=${vogar_args/$1}
159 use_jit=false
160 shift
Nicolas Geoffray7f437912015-06-15 14:35:01 +0100161 elif [[ "$1" == "--debug" ]]; then
Nicolas Geoffray9648a632015-06-15 14:35:01 +0100162 # Remove the --debug from the arguments.
163 vogar_args=${vogar_args/$1}
Andreas Gampe1c5b42f2017-06-15 18:20:45 -0700164 vogar_args="$vogar_args --vm-arg -XXlib:libartd.so --vm-arg -XX:SlowDebug=true"
Nicolas Geoffray622e2e22017-06-15 09:33:01 +0100165 debug=true
166 shift
167 elif [[ "$1" == "-Xgc:gcstress" ]]; then
168 gcstress=true
Nicolas Geoffray9648a632015-06-15 14:35:01 +0100169 shift
Roland Levillaind6e2c382019-09-18 16:13:48 +0100170 elif [[ "$1" == "--no-getrandom" ]]; then
Roland Levillain8df75ed2019-09-19 18:34:05 +0100171 # Remove the option from Vogar arguments.
172 vogar_args=${vogar_args/$1}
Roland Levillaind6e2c382019-09-18 16:13:48 +0100173 getrandom=false
174 shift
Nicolas Geoffray9648a632015-06-15 14:35:01 +0100175 elif [[ "$1" == "" ]]; then
176 break
177 else
178 shift
179 fi
180done
181
Roland Levillaine4f1c512017-10-30 13:28:28 +0000182if $device_mode; then
Roland Levillain08f7c1d2018-05-25 15:34:41 +0100183 # Honor environment variable ART_TEST_CHROOT.
184 if [[ -n "$ART_TEST_CHROOT" ]]; then
185 # Set Vogar's `--chroot` option.
186 vogar_args="$vogar_args --chroot $ART_TEST_CHROOT"
Roland Levillaine4f1c512017-10-30 13:28:28 +0000187 vogar_args="$vogar_args --device-dir=/tmp"
Roland Levillaine4f1c512017-10-30 13:28:28 +0000188 else
Roland Levillain08f7c1d2018-05-25 15:34:41 +0100189 # When not using a chroot on device, set Vogar's work directory to
190 # /data/local/tmp.
Roland Levillaine4f1c512017-10-30 13:28:28 +0000191 vogar_args="$vogar_args --device-dir=/data/local/tmp"
Roland Levillaine4f1c512017-10-30 13:28:28 +0000192 fi
Roland Levillain08f7c1d2018-05-25 15:34:41 +0100193 vogar_args="$vogar_args --vm-command=$android_root/bin/art"
Roland Levillaine4f1c512017-10-30 13:28:28 +0000194fi
195
Nicolas Geoffray44368e82015-09-30 12:02:21 +0100196# Increase the timeout, as vogar cannot set individual test
197# timeout when being asked to run packages, and some tests go above
198# the default timeout.
Nicolas Geoffraya353ce52018-08-06 09:28:20 +0100199if $gcstress && $debug && $device_mode; then
Nicolas Geoffray793bed32018-08-22 15:07:40 +0100200 vogar_args="$vogar_args --timeout 1440"
David Srbecky2bdda932019-10-08 14:26:25 +0100201elif $gcstress && $device_mode; then
202 vogar_args="$vogar_args --timeout 900"
Nicolas Geoffraya353ce52018-08-06 09:28:20 +0100203else
204 vogar_args="$vogar_args --timeout 480"
205fi
Nicolas Geoffrayf794ad72015-09-11 12:08:49 +0100206
Neil Fuller239bdf62018-01-08 18:55:36 +0000207# set the toolchain to use.
208vogar_args="$vogar_args --toolchain d8 --language CUR"
Neil Fullerb8300fc2016-02-10 13:09:10 +0000209
Roland Levillain5db109b2016-05-19 12:24:17 +0100210# JIT settings.
211if $use_jit; then
Nicolas Geoffray49cda062017-04-21 13:08:25 +0100212 vogar_args="$vogar_args --vm-arg -Xcompiler-option --vm-arg --compiler-filter=quicken"
Roland Levillain5db109b2016-05-19 12:24:17 +0100213fi
214vogar_args="$vogar_args --vm-arg -Xusejit:$use_jit"
215
Nicolas Geoffray5b455d32017-07-05 10:51:06 +0100216# gcstress may lead to timeouts, so we need dedicated expectations files for it.
Nicolas Geoffraya6555752018-05-02 10:39:09 +0100217if $gcstress; then
Nicolas Geoffray5b455d32017-07-05 10:51:06 +0100218 expectations="$expectations --expectations art/tools/libcore_gcstress_failures.txt"
Nicolas Geoffraya6555752018-05-02 10:39:09 +0100219 if $debug; then
Nicolas Geoffray5b455d32017-07-05 10:51:06 +0100220 expectations="$expectations --expectations art/tools/libcore_gcstress_debug_failures.txt"
221 fi
Nicolas Geoffraya6555752018-05-02 10:39:09 +0100222else
223 # We only run this package when not under gcstress as it can cause timeouts. See b/78228743.
224 working_packages+=("libcore.libcore.icu")
Nicolas Geoffray622e2e22017-06-15 09:33:01 +0100225fi
226
Roland Levillaind6e2c382019-09-18 16:13:48 +0100227if $getrandom; then :; else
228 # Ignore failures in tests that use the getrandom() syscall (which requires
229 # Linux 3.17+). This is needed on fugu (Nexus Player) devices, where the
230 # kernel is Linux 3.10.
231 expectations="$expectations --expectations art/tools/libcore_no_getrandom_failures.txt"
232fi
233
Nicolas Geoffrayb2e7e242014-11-28 14:24:28 +0000234# Run the tests using vogar.
Nicolas Geoffray3cdf8182014-12-01 10:12:15 +0000235echo "Running tests for the following test packages:"
236echo ${working_packages[@]} | tr " " "\n"
Nicolas Geoffray793bed32018-08-22 15:07:40 +0100237
238cmd="vogar $vogar_args $expectations $(cparg $DEPS) ${working_packages[@]}"
239echo "Running $cmd"
240eval $cmd