xref: /aosp_15_r20/art/tools/run-libjdwp-tests.sh (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker#!/bin/bash
2*795d594fSAndroid Build Coastguard Worker#
3*795d594fSAndroid Build Coastguard Worker# Copyright (C) 2017 The Android Open Source Project
4*795d594fSAndroid Build Coastguard Worker#
5*795d594fSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
6*795d594fSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
7*795d594fSAndroid Build Coastguard Worker# You may obtain a copy of the License at
8*795d594fSAndroid Build Coastguard Worker#
9*795d594fSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
10*795d594fSAndroid Build Coastguard Worker#
11*795d594fSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
12*795d594fSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
13*795d594fSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*795d594fSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
15*795d594fSAndroid Build Coastguard Worker# limitations under the License.
16*795d594fSAndroid Build Coastguard Worker
17*795d594fSAndroid Build Coastguard Workerif [[ ! -d libcore ]];  then
18*795d594fSAndroid Build Coastguard Worker  echo "Script needs to be run at the root of the android tree"
19*795d594fSAndroid Build Coastguard Worker  exit 1
20*795d594fSAndroid Build Coastguard Workerfi
21*795d594fSAndroid Build Coastguard Worker
22*795d594fSAndroid Build Coastguard Workerif [[ `uname` != 'Linux' ]];  then
23*795d594fSAndroid Build Coastguard Worker  echo "Script cannot be run on $(uname). It is Linux only."
24*795d594fSAndroid Build Coastguard Worker  exit 2
25*795d594fSAndroid Build Coastguard Workerfi
26*795d594fSAndroid Build Coastguard Worker
27*795d594fSAndroid Build Coastguard Worker# See b/141907697. These tests all crash on both the RI and ART when using the libjdwp agent JDWP
28*795d594fSAndroid Build Coastguard Worker# implementation. To avoid them cluttering the log on the buildbot we explicitly skip them. This
29*795d594fSAndroid Build Coastguard Worker# list should not be added to.
30*795d594fSAndroid Build Coastguard Workerdeclare -a known_bad_tests=(
31*795d594fSAndroid Build Coastguard Worker  'org.apache.harmony.jpda.tests.jdwp.ClassType_NewInstanceTest#testNewInstance002'
32*795d594fSAndroid Build Coastguard Worker  'org.apache.harmony.jpda.tests.jdwp.ObjectReference_GetValues002Test#testGetValues002'
33*795d594fSAndroid Build Coastguard Worker  'org.apache.harmony.jpda.tests.jdwp.ObjectReference_SetValuesTest#testSetValues001'
34*795d594fSAndroid Build Coastguard Worker  'org.apache.harmony.jpda.tests.jdwp.ThreadGroupReference_NameTest#testName001_NullObject'
35*795d594fSAndroid Build Coastguard Worker  'org.apache.harmony.jpda.tests.jdwp.ThreadGroupReference_ParentTest#testParent_NullObject'
36*795d594fSAndroid Build Coastguard Worker)
37*795d594fSAndroid Build Coastguard Worker
38*795d594fSAndroid Build Coastguard Workerdeclare -a args=("$@")
39*795d594fSAndroid Build Coastguard Workerdebug="no"
40*795d594fSAndroid Build Coastguard Workerhas_variant="no"
41*795d594fSAndroid Build Coastguard Workerhas_mode="no"
42*795d594fSAndroid Build Coastguard Workermode="target"
43*795d594fSAndroid Build Coastguard Workerhas_gcstress="no"
44*795d594fSAndroid Build Coastguard Workerhas_timeout="no"
45*795d594fSAndroid Build Coastguard Workerhas_verbose="no"
46*795d594fSAndroid Build Coastguard Workerhas_jdwp_path="no"
47*795d594fSAndroid Build Coastguard Worker# The bitmap of log messages in libjdwp. See list in the help message for more
48*795d594fSAndroid Build Coastguard Worker# info on what these are. The default is 'errors | callbacks'
49*795d594fSAndroid Build Coastguard Workerverbose_level=0xC0
50*795d594fSAndroid Build Coastguard Worker
51*795d594fSAndroid Build Coastguard Workerarg_idx=0
52*795d594fSAndroid Build Coastguard Workerwhile true; do
53*795d594fSAndroid Build Coastguard Worker  if [[ $1 == "--debug" ]]; then
54*795d594fSAndroid Build Coastguard Worker    debug="yes"
55*795d594fSAndroid Build Coastguard Worker    shift
56*795d594fSAndroid Build Coastguard Worker  elif [[ $1 == --test-timeout-ms ]]; then
57*795d594fSAndroid Build Coastguard Worker    has_timeout="yes"
58*795d594fSAndroid Build Coastguard Worker    shift
59*795d594fSAndroid Build Coastguard Worker    arg_idx=$((arg_idx + 1))
60*795d594fSAndroid Build Coastguard Worker    shift
61*795d594fSAndroid Build Coastguard Worker  elif [[ "$1" == "--mode=jvm" ]]; then
62*795d594fSAndroid Build Coastguard Worker    has_mode="yes"
63*795d594fSAndroid Build Coastguard Worker    mode="ri"
64*795d594fSAndroid Build Coastguard Worker    shift
65*795d594fSAndroid Build Coastguard Worker  elif [[ "$1" == --mode=host ]]; then
66*795d594fSAndroid Build Coastguard Worker    has_mode="yes"
67*795d594fSAndroid Build Coastguard Worker    mode="host"
68*795d594fSAndroid Build Coastguard Worker    shift
69*795d594fSAndroid Build Coastguard Worker  elif [[ $1 == --verbose-all ]]; then
70*795d594fSAndroid Build Coastguard Worker    has_verbose="yes"
71*795d594fSAndroid Build Coastguard Worker    verbose_level=0xFFF
72*795d594fSAndroid Build Coastguard Worker    unset args[arg_idx]
73*795d594fSAndroid Build Coastguard Worker    shift
74*795d594fSAndroid Build Coastguard Worker  elif [[ $1 == --no-skips ]]; then
75*795d594fSAndroid Build Coastguard Worker    declare -a known_bad_tests=()
76*795d594fSAndroid Build Coastguard Worker    unset args[arg_idx]
77*795d594fSAndroid Build Coastguard Worker    shift
78*795d594fSAndroid Build Coastguard Worker  elif [[ $1 == --verbose ]]; then
79*795d594fSAndroid Build Coastguard Worker    has_verbose="yes"
80*795d594fSAndroid Build Coastguard Worker    shift
81*795d594fSAndroid Build Coastguard Worker  elif [[ $1 == --verbose-level ]]; then
82*795d594fSAndroid Build Coastguard Worker    shift
83*795d594fSAndroid Build Coastguard Worker    verbose_level=$1
84*795d594fSAndroid Build Coastguard Worker    # remove both the --verbose-level and the argument.
85*795d594fSAndroid Build Coastguard Worker    unset args[arg_idx]
86*795d594fSAndroid Build Coastguard Worker    arg_idx=$((arg_idx + 1))
87*795d594fSAndroid Build Coastguard Worker    unset args[arg_idx]
88*795d594fSAndroid Build Coastguard Worker    shift
89*795d594fSAndroid Build Coastguard Worker  elif [[ $1 == --variant=* ]]; then
90*795d594fSAndroid Build Coastguard Worker    has_variant="yes"
91*795d594fSAndroid Build Coastguard Worker    shift
92*795d594fSAndroid Build Coastguard Worker  elif [[ $1 == *gcstress ]]; then
93*795d594fSAndroid Build Coastguard Worker    has_gcstress="yes"
94*795d594fSAndroid Build Coastguard Worker    shift
95*795d594fSAndroid Build Coastguard Worker  elif [[ $1 == --jdwp-path* ]]; then
96*795d594fSAndroid Build Coastguard Worker    has_jdwp_path="yes"
97*795d594fSAndroid Build Coastguard Worker    shift
98*795d594fSAndroid Build Coastguard Worker  elif [[ "$1" == "" ]]; then
99*795d594fSAndroid Build Coastguard Worker    break
100*795d594fSAndroid Build Coastguard Worker  else
101*795d594fSAndroid Build Coastguard Worker    shift
102*795d594fSAndroid Build Coastguard Worker  fi
103*795d594fSAndroid Build Coastguard Worker  arg_idx=$((arg_idx + 1))
104*795d594fSAndroid Build Coastguard Workerdone
105*795d594fSAndroid Build Coastguard Worker
106*795d594fSAndroid Build Coastguard Workerif [[ "$has_mode" = "no" ]];  then
107*795d594fSAndroid Build Coastguard Worker  args+=(--mode=device)
108*795d594fSAndroid Build Coastguard Workerfi
109*795d594fSAndroid Build Coastguard Worker
110*795d594fSAndroid Build Coastguard Workerif [[ "$has_variant" = "no" && "$mode" != "ri" ]];  then
111*795d594fSAndroid Build Coastguard Worker  # --mode=jvm doesn't support variant option.
112*795d594fSAndroid Build Coastguard Worker  args+=(--variant=X32)
113*795d594fSAndroid Build Coastguard Workerfi
114*795d594fSAndroid Build Coastguard Worker
115*795d594fSAndroid Build Coastguard Workerif [[ "$has_jdwp_path" = "no" ]]; then
116*795d594fSAndroid Build Coastguard Worker  if [[ "$mode" == "ri" ]]; then
117*795d594fSAndroid Build Coastguard Worker    if [ -z "$ANDROID_BUILD_TOP" ]; then
118*795d594fSAndroid Build Coastguard Worker      echo "Please set ANDROID_BUILD_TOP"
119*795d594fSAndroid Build Coastguard Worker      exit 1
120*795d594fSAndroid Build Coastguard Worker    fi
121*795d594fSAndroid Build Coastguard Worker    args+=(--jdwp-path  $ANDROID_BUILD_TOP/"prebuilts/jdk/jdk21/linux-x86/lib/libjdwp.so")
122*795d594fSAndroid Build Coastguard Worker  else
123*795d594fSAndroid Build Coastguard Worker    args+=(--jdwp-path  "libjdwp.so")
124*795d594fSAndroid Build Coastguard Worker  fi
125*795d594fSAndroid Build Coastguard Workerfi
126*795d594fSAndroid Build Coastguard Worker
127*795d594fSAndroid Build Coastguard Workerif [[ "$has_timeout" = "no" ]]; then
128*795d594fSAndroid Build Coastguard Worker  # Double the timeout to 20 seconds
129*795d594fSAndroid Build Coastguard Worker  args+=(--test-timeout-ms)
130*795d594fSAndroid Build Coastguard Worker  if [[ "$has_verbose" = "yes" || "$has_gcstress" = "yes" ]]; then
131*795d594fSAndroid Build Coastguard Worker    # Extra time if verbose or gcstress is set since those can be
132*795d594fSAndroid Build Coastguard Worker    # quite heavy.
133*795d594fSAndroid Build Coastguard Worker    args+=(300000)
134*795d594fSAndroid Build Coastguard Worker  else
135*795d594fSAndroid Build Coastguard Worker    args+=(20000)
136*795d594fSAndroid Build Coastguard Worker  fi
137*795d594fSAndroid Build Coastguard Workerfi
138*795d594fSAndroid Build Coastguard Worker
139*795d594fSAndroid Build Coastguard Workerif [[ "$has_verbose" = "yes" ]]; then
140*795d594fSAndroid Build Coastguard Worker  args+=(--vm-arg)
141*795d594fSAndroid Build Coastguard Worker  args+=(-Djpda.settings.debuggeeAgentExtraOptions=directlog=y,logfile=/proc/self/fd/2,logflags=$verbose_level)
142*795d594fSAndroid Build Coastguard Workerfi
143*795d594fSAndroid Build Coastguard Worker
144*795d594fSAndroid Build Coastguard Workerif [[ "$mode" != "ri" ]]; then
145*795d594fSAndroid Build Coastguard Worker  # We don't use full paths since it is difficult to determine them for device
146*795d594fSAndroid Build Coastguard Worker  # tests and not needed due to resolution rules of dlopen.
147*795d594fSAndroid Build Coastguard Worker  if [[ "$debug" = "yes" ]]; then
148*795d594fSAndroid Build Coastguard Worker    args+=(-Xplugin:libopenjdkjvmtid.so)
149*795d594fSAndroid Build Coastguard Worker  else
150*795d594fSAndroid Build Coastguard Worker    args+=(-Xplugin:libopenjdkjvmti.so)
151*795d594fSAndroid Build Coastguard Worker  fi
152*795d594fSAndroid Build Coastguard Workerfi
153*795d594fSAndroid Build Coastguard Worker
154*795d594fSAndroid Build Coastguard Workerexpectations="--expectations $PWD/art/tools/external_oj_libjdwp_art_failures.txt"
155*795d594fSAndroid Build Coastguard Worker
156*795d594fSAndroid Build Coastguard Workerif [[ "$debug" = "yes" && "$has_gcstress" = "yes" ]]; then
157*795d594fSAndroid Build Coastguard Worker  expectations="$expectations --expectations $PWD/art/tools/external_oj_libjdwp_art_gcstress_debug_failures.txt"
158*795d594fSAndroid Build Coastguard Workerfi
159*795d594fSAndroid Build Coastguard Worker
160*795d594fSAndroid Build Coastguard Workerif [[ "${ART_USE_READ_BARRIER}" = "false" ]]; then
161*795d594fSAndroid Build Coastguard Worker  expectations="$expectations --expectations $PWD/art/tools/external_oj_libjdwp_art_no_read_barrier_failures.txt"
162*795d594fSAndroid Build Coastguard Workerfi
163*795d594fSAndroid Build Coastguard Worker
164*795d594fSAndroid Build Coastguard Workerfunction verbose_run() {
165*795d594fSAndroid Build Coastguard Worker  echo "$@"
166*795d594fSAndroid Build Coastguard Worker  env "$@"
167*795d594fSAndroid Build Coastguard Worker}
168*795d594fSAndroid Build Coastguard Worker
169*795d594fSAndroid Build Coastguard Workerfor skip in "${known_bad_tests[@]}"; do
170*795d594fSAndroid Build Coastguard Worker  args+=("--skip-test" "$skip")
171*795d594fSAndroid Build Coastguard Workerdone
172*795d594fSAndroid Build Coastguard Worker
173*795d594fSAndroid Build Coastguard Worker# Tell run-jdwp-tests.sh it was called from run-libjdwp-tests.sh
174*795d594fSAndroid Build Coastguard Workerexport RUN_JDWP_TESTS_CALLED_FROM_LIBJDWP=true
175*795d594fSAndroid Build Coastguard Worker
176*795d594fSAndroid Build Coastguard Workerverbose_run ./art/tools/run-jdwp-tests.sh \
177*795d594fSAndroid Build Coastguard Worker            "${args[@]}"                  \
178*795d594fSAndroid Build Coastguard Worker            --vm-arg -Djpda.settings.debuggeeAgentExtraOptions=coredump=y \
179*795d594fSAndroid Build Coastguard Worker            --vm-arg -Djpda.settings.testSuiteType=libjdwp \
180*795d594fSAndroid Build Coastguard Worker            "$expectations"
181