• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/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
22if [ -z "$ANDROID_PRODUCT_OUT" ] ; then
23  JAVA_LIBRARIES=out/target/common/obj/JAVA_LIBRARIES
24else
25  JAVA_LIBRARIES=${ANDROID_PRODUCT_OUT}/../../common/obj/JAVA_LIBRARIES
26fi
27
28using_jack=true
29if [[ $ANDROID_COMPILE_WITH_JACK == false ]]; then
30  using_jack=false
31fi
32
33function classes_jar_path {
34  local var="$1"
35  local suffix="jar"
36
37  if $using_jack; then
38    suffix="jack"
39  fi
40
41  echo "${JAVA_LIBRARIES}/${var}_intermediates/classes.${suffix}"
42}
43
44function cparg {
45  for var
46  do
47    printf -- "--classpath $(classes_jar_path "$var") ";
48  done
49}
50
51DEPS="core-tests jsr166-tests mockito-target"
52
53for lib in $DEPS
54do
55  if [[ ! -f "$(classes_jar_path "$lib")" ]]; then
56    echo "${lib} is missing. Before running, you must run art/tools/buildbot-build.sh"
57    exit 1
58  fi
59done
60
61expectations="--expectations art/tools/libcore_failures.txt"
62
63emulator="no"
64if [ "$ANDROID_SERIAL" = "emulator-5554" ]; then
65  emulator="yes"
66fi
67
68# Use JIT compiling by default.
69use_jit=true
70
71# Packages that currently work correctly with the expectation files.
72working_packages=("dalvik.system"
73                  "libcore.icu"
74                  "libcore.io"
75                  "libcore.java.lang"
76                  "libcore.java.math"
77                  "libcore.java.text"
78                  "libcore.java.util"
79                  "libcore.javax.crypto"
80                  "libcore.javax.security"
81                  "libcore.javax.sql"
82                  "libcore.javax.xml"
83                  "libcore.net"
84                  "libcore.reflect"
85                  "libcore.util"
86                  "org.apache.harmony.annotation"
87                  "org.apache.harmony.crypto"
88                  "org.apache.harmony.luni"
89                  "org.apache.harmony.nio"
90                  "org.apache.harmony.regex"
91                  "org.apache.harmony.testframework"
92                  "org.apache.harmony.tests.java.io"
93                  "org.apache.harmony.tests.java.lang"
94                  "org.apache.harmony.tests.java.math"
95                  "org.apache.harmony.tests.java.util"
96                  "org.apache.harmony.tests.java.text"
97                  "org.apache.harmony.tests.javax.security"
98                  "tests.java.lang.String"
99                  "jsr166")
100
101# List of packages we could run, but don't have rights to revert
102# changes in case of failures.
103# "org.apache.harmony.security"
104
105vogar_args=$@
106gcstress=false
107debug=false
108
109while true; do
110  if [[ "$1" == "--mode=device" ]]; then
111    vogar_args="$vogar_args --device-dir=/data/local/tmp"
112    vogar_args="$vogar_args --vm-command=/data/local/tmp/system/bin/art"
113    vogar_args="$vogar_args --vm-arg -Ximage:/data/art-test/core.art"
114    shift
115  elif [[ "$1" == "--mode=host" ]]; then
116    # We explicitly give a wrong path for the image, to ensure vogar
117    # will create a boot image with the default compiler. Note that
118    # giving an existing image on host does not work because of
119    # classpath/resources differences when compiling the boot image.
120    vogar_args="$vogar_args --vm-arg -Ximage:/non/existent/vogar.art"
121    shift
122  elif [[ "$1" == "--no-jit" ]]; then
123    # Remove the --no-jit from the arguments.
124    vogar_args=${vogar_args/$1}
125    use_jit=false
126    shift
127  elif [[ "$1" == "--debug" ]]; then
128    # Remove the --debug from the arguments.
129    vogar_args=${vogar_args/$1}
130    vogar_args="$vogar_args --vm-arg -XXlib:libartd.so --vm-arg -XX:SlowDebug=true"
131    debug=true
132    shift
133  elif [[ "$1" == "-Xgc:gcstress" ]]; then
134    gcstress=true
135    shift
136  elif [[ "$1" == "" ]]; then
137    break
138  else
139    shift
140  fi
141done
142
143# Increase the timeout, as vogar cannot set individual test
144# timeout when being asked to run packages, and some tests go above
145# the default timeout.
146vogar_args="$vogar_args --timeout 480"
147
148# Switch between using jack or javac+desugar+dx
149if $using_jack; then
150  vogar_args="$vogar_args --toolchain jack --language JO"
151else
152  vogar_args="$vogar_args --toolchain jdk --language CUR"
153fi
154
155# JIT settings.
156if $use_jit; then
157  vogar_args="$vogar_args --vm-arg -Xcompiler-option --vm-arg --compiler-filter=quicken"
158fi
159vogar_args="$vogar_args --vm-arg -Xusejit:$use_jit"
160
161# gcstress may lead to timeouts, so we need dedicated expectations files for it.
162if [[ $gcstress ]]; then
163  expectations="$expectations --expectations art/tools/libcore_gcstress_failures.txt"
164  if [[ $debug ]]; then
165    expectations="$expectations --expectations art/tools/libcore_gcstress_debug_failures.txt"
166  fi
167fi
168
169# Run the tests using vogar.
170echo "Running tests for the following test packages:"
171echo ${working_packages[@]} | tr " " "\n"
172vogar $vogar_args $expectations $(cparg $DEPS) ${working_packages[@]}
173