| #!/bin/bash |
| |
| # Copyright 2021 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # https://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # Fail on error and print out commands |
| set -ex |
| |
| # By default we don't shard |
| SHARD_COUNT=0 |
| SHARD_INDEX=0 |
| # By default we don't log |
| LOG_FILE="" |
| # By default we run tests on device |
| DEVICE=true |
| |
| # Parse parameters |
| for i in "$@"; do |
| case $i in |
| --shard-count=*) |
| SHARD_COUNT="${i#*=}" |
| shift |
| ;; |
| --unit-tests) |
| DEVICE=false |
| shift |
| ;; |
| --shard-index=*) |
| SHARD_INDEX="${i#*=}" |
| shift |
| ;; |
| --log-file=*) |
| LOG_FILE="${i#*=}" |
| shift |
| ;; |
| --run-affected) |
| RUN_AFFECTED=true |
| shift |
| ;; |
| --run-flaky-tests) |
| RUN_FLAKY=true |
| shift |
| ;; |
| --affected-base-ref=*) |
| BASE_REF="${i#*=}" |
| shift |
| ;; |
| *) |
| echo "Unknown option" |
| exit 1 |
| ;; |
| esac |
| done |
| |
| # Start logcat if we have a file to log to |
| if [[ ! -z "$LOG_FILE" ]]; then |
| adb logcat >$LOG_FILE & |
| fi |
| |
| FILTER_OPTS="" |
| # Filter out flaky tests if we're not set to run them |
| if [[ -z "$RUN_FLAKY" ]]; then |
| FILTER_OPTS="$FILTER_OPTS -Pandroid.testInstrumentationRunnerArguments.notAnnotation=androidx.test.filters.FlakyTest" |
| fi |
| |
| # If we're set to only run affected test, update the Gradle task |
| if [[ ! -z "$RUN_AFFECTED" ]]; then |
| if [ "$DEVICE" = true ]; then |
| TASK="runAffectedAndroidTests" |
| else |
| TASK="runAffectedUnitTests" |
| fi |
| TASK="$TASK -Paffected_module_detector.enable" |
| |
| # If we have a base branch set, add the Gradle property |
| if [[ ! -z "$BASE_REF" ]]; then |
| TASK="$TASK -Paffected_base_ref=$BASE_REF" |
| fi |
| fi |
| |
| # If we don't have a task yet, use the defaults |
| if [[ -z "$TASK" ]]; then |
| if [ "$DEVICE" = true ]; then |
| TASK="connectedCheck" |
| else |
| TASK="testDebug" |
| fi |
| fi |
| |
| SHARD_OPTS="" |
| if [ "$SHARD_COUNT" -gt "0" ]; then |
| # If we have a shard count value, create the necessary Gradle property args. |
| # We assume that SHARD_INDEX has been set too |
| SHARD_OPTS="$SHARD_OPTS -Pandroid.testInstrumentationRunnerArguments.numShards=$SHARD_COUNT" |
| SHARD_OPTS="$SHARD_OPTS -Pandroid.testInstrumentationRunnerArguments.shardIndex=$SHARD_INDEX" |
| fi |
| |
| ./gradlew --scan --continue --no-configuration-cache --stacktrace $TASK $FILTER_OPTS $SHARD_OPTS |