1*fa44fe6aSInna Palant#!/bin/bash 2*fa44fe6aSInna Palant 3*fa44fe6aSInna Palant# Copyright 2021 The Android Open Source Project 4*fa44fe6aSInna Palant# 5*fa44fe6aSInna Palant# Licensed under the Apache License, Version 2.0 (the "License"); 6*fa44fe6aSInna Palant# you may not use this file except in compliance with the License. 7*fa44fe6aSInna Palant# You may obtain a copy of the License at 8*fa44fe6aSInna Palant# 9*fa44fe6aSInna Palant# https://www.apache.org/licenses/LICENSE-2.0 10*fa44fe6aSInna Palant# 11*fa44fe6aSInna Palant# Unless required by applicable law or agreed to in writing, software 12*fa44fe6aSInna Palant# distributed under the License is distributed on an "AS IS" BASIS, 13*fa44fe6aSInna Palant# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*fa44fe6aSInna Palant# See the License for the specific language governing permissions and 15*fa44fe6aSInna Palant# limitations under the License. 16*fa44fe6aSInna Palant 17*fa44fe6aSInna Palant# Fail on error and print out commands 18*fa44fe6aSInna Palantset -ex 19*fa44fe6aSInna Palant 20*fa44fe6aSInna Palant# By default we don't shard 21*fa44fe6aSInna PalantSHARD_COUNT=0 22*fa44fe6aSInna PalantSHARD_INDEX=0 23*fa44fe6aSInna Palant# By default we don't log 24*fa44fe6aSInna PalantLOG_FILE="" 25*fa44fe6aSInna Palant# By default we run tests on device 26*fa44fe6aSInna PalantDEVICE=true 27*fa44fe6aSInna Palant 28*fa44fe6aSInna Palant# Parse parameters 29*fa44fe6aSInna Palantfor i in "$@"; do 30*fa44fe6aSInna Palant case $i in 31*fa44fe6aSInna Palant --shard-count=*) 32*fa44fe6aSInna Palant SHARD_COUNT="${i#*=}" 33*fa44fe6aSInna Palant shift 34*fa44fe6aSInna Palant ;; 35*fa44fe6aSInna Palant --unit-tests) 36*fa44fe6aSInna Palant DEVICE=false 37*fa44fe6aSInna Palant shift 38*fa44fe6aSInna Palant ;; 39*fa44fe6aSInna Palant --shard-index=*) 40*fa44fe6aSInna Palant SHARD_INDEX="${i#*=}" 41*fa44fe6aSInna Palant shift 42*fa44fe6aSInna Palant ;; 43*fa44fe6aSInna Palant --log-file=*) 44*fa44fe6aSInna Palant LOG_FILE="${i#*=}" 45*fa44fe6aSInna Palant shift 46*fa44fe6aSInna Palant ;; 47*fa44fe6aSInna Palant --run-affected) 48*fa44fe6aSInna Palant RUN_AFFECTED=true 49*fa44fe6aSInna Palant shift 50*fa44fe6aSInna Palant ;; 51*fa44fe6aSInna Palant --run-flaky-tests) 52*fa44fe6aSInna Palant RUN_FLAKY=true 53*fa44fe6aSInna Palant shift 54*fa44fe6aSInna Palant ;; 55*fa44fe6aSInna Palant --affected-base-ref=*) 56*fa44fe6aSInna Palant BASE_REF="${i#*=}" 57*fa44fe6aSInna Palant shift 58*fa44fe6aSInna Palant ;; 59*fa44fe6aSInna Palant *) 60*fa44fe6aSInna Palant echo "Unknown option" 61*fa44fe6aSInna Palant exit 1 62*fa44fe6aSInna Palant ;; 63*fa44fe6aSInna Palant esac 64*fa44fe6aSInna Palantdone 65*fa44fe6aSInna Palant 66*fa44fe6aSInna Palant# Start logcat if we have a file to log to 67*fa44fe6aSInna Palantif [[ ! -z "$LOG_FILE" ]]; then 68*fa44fe6aSInna Palant adb logcat >$LOG_FILE & 69*fa44fe6aSInna Palantfi 70*fa44fe6aSInna Palant 71*fa44fe6aSInna PalantFILTER_OPTS="" 72*fa44fe6aSInna Palant# Filter out flaky tests if we're not set to run them 73*fa44fe6aSInna Palantif [[ -z "$RUN_FLAKY" ]]; then 74*fa44fe6aSInna Palant FILTER_OPTS="$FILTER_OPTS -Pandroid.testInstrumentationRunnerArguments.notAnnotation=androidx.test.filters.FlakyTest" 75*fa44fe6aSInna Palantfi 76*fa44fe6aSInna Palant 77*fa44fe6aSInna Palant# If we're set to only run affected test, update the Gradle task 78*fa44fe6aSInna Palantif [[ ! -z "$RUN_AFFECTED" ]]; then 79*fa44fe6aSInna Palant if [ "$DEVICE" = true ]; then 80*fa44fe6aSInna Palant TASK="runAffectedAndroidTests" 81*fa44fe6aSInna Palant else 82*fa44fe6aSInna Palant TASK="runAffectedUnitTests" 83*fa44fe6aSInna Palant fi 84*fa44fe6aSInna Palant TASK="$TASK -Paffected_module_detector.enable" 85*fa44fe6aSInna Palant 86*fa44fe6aSInna Palant # If we have a base branch set, add the Gradle property 87*fa44fe6aSInna Palant if [[ ! -z "$BASE_REF" ]]; then 88*fa44fe6aSInna Palant TASK="$TASK -Paffected_base_ref=$BASE_REF" 89*fa44fe6aSInna Palant fi 90*fa44fe6aSInna Palantfi 91*fa44fe6aSInna Palant 92*fa44fe6aSInna Palant# If we don't have a task yet, use the defaults 93*fa44fe6aSInna Palantif [[ -z "$TASK" ]]; then 94*fa44fe6aSInna Palant if [ "$DEVICE" = true ]; then 95*fa44fe6aSInna Palant TASK="connectedCheck" 96*fa44fe6aSInna Palant else 97*fa44fe6aSInna Palant TASK="testDebug" 98*fa44fe6aSInna Palant fi 99*fa44fe6aSInna Palantfi 100*fa44fe6aSInna Palant 101*fa44fe6aSInna PalantSHARD_OPTS="" 102*fa44fe6aSInna Palantif [ "$SHARD_COUNT" -gt "0" ]; then 103*fa44fe6aSInna Palant # If we have a shard count value, create the necessary Gradle property args. 104*fa44fe6aSInna Palant # We assume that SHARD_INDEX has been set too 105*fa44fe6aSInna Palant SHARD_OPTS="$SHARD_OPTS -Pandroid.testInstrumentationRunnerArguments.numShards=$SHARD_COUNT" 106*fa44fe6aSInna Palant SHARD_OPTS="$SHARD_OPTS -Pandroid.testInstrumentationRunnerArguments.shardIndex=$SHARD_INDEX" 107*fa44fe6aSInna Palantfi 108*fa44fe6aSInna Palant 109*fa44fe6aSInna Palant./gradlew --scan --continue --no-configuration-cache --stacktrace $TASK $FILTER_OPTS $SHARD_OPTS 110