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