1*d57664e9SAndroid Build Coastguard Worker#!/bin/bash 2*d57664e9SAndroid Build Coastguard Worker# Copyright (C) 2024 The Android Open Source Project 3*d57664e9SAndroid Build Coastguard Worker# 4*d57664e9SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 5*d57664e9SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 6*d57664e9SAndroid Build Coastguard Worker# You may obtain a copy of the License at 7*d57664e9SAndroid Build Coastguard Worker# 8*d57664e9SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 9*d57664e9SAndroid Build Coastguard Worker# 10*d57664e9SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 11*d57664e9SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 12*d57664e9SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*d57664e9SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 14*d57664e9SAndroid Build Coastguard Worker# limitations under the License. 15*d57664e9SAndroid Build Coastguard Worker 16*d57664e9SAndroid Build Coastguard Worker# Run all the ravenwood tests + hoststubgen unit tests. 17*d57664e9SAndroid Build Coastguard Worker# 18*d57664e9SAndroid Build Coastguard Worker# Options: 19*d57664e9SAndroid Build Coastguard Worker# 20*d57664e9SAndroid Build Coastguard Worker# -s: "Smoke" test -- skip slow tests (SysUI, ICU) 21*d57664e9SAndroid Build Coastguard Worker# 22*d57664e9SAndroid Build Coastguard Worker# -x PCRE: Specify exclusion filter in PCRE 23*d57664e9SAndroid Build Coastguard Worker# Example: -x '^(Cts|hoststub)' # Exclude CTS and hoststubgen tests. 24*d57664e9SAndroid Build Coastguard Worker# 25*d57664e9SAndroid Build Coastguard Worker# -f PCRE: Specify inclusion filter in PCRE 26*d57664e9SAndroid Build Coastguard Worker 27*d57664e9SAndroid Build Coastguard Worker 28*d57664e9SAndroid Build Coastguard Worker# Regex to identify slow tests, in PCRE 29*d57664e9SAndroid Build Coastguard WorkerSLOW_TEST_RE='^(SystemUiRavenTests|CtsIcuTestCasesRavenwood|CarSystemUIRavenTests)$' 30*d57664e9SAndroid Build Coastguard Worker 31*d57664e9SAndroid Build Coastguard Workersmoke=0 32*d57664e9SAndroid Build Coastguard Workerinclude_re="" 33*d57664e9SAndroid Build Coastguard Workerexclude_re="" 34*d57664e9SAndroid Build Coastguard Workersmoke_exclude_re="" 35*d57664e9SAndroid Build Coastguard Workerdry_run="" 36*d57664e9SAndroid Build Coastguard Workerwhile getopts "sx:f:dtb" opt; do 37*d57664e9SAndroid Build Coastguard Workercase "$opt" in 38*d57664e9SAndroid Build Coastguard Worker s) 39*d57664e9SAndroid Build Coastguard Worker # Remove slow tests. 40*d57664e9SAndroid Build Coastguard Worker smoke_exclude_re="$SLOW_TEST_RE" 41*d57664e9SAndroid Build Coastguard Worker ;; 42*d57664e9SAndroid Build Coastguard Worker x) 43*d57664e9SAndroid Build Coastguard Worker # Take a PCRE from the arg, and use it as an exclusion filter. 44*d57664e9SAndroid Build Coastguard Worker exclude_re="$OPTARG" 45*d57664e9SAndroid Build Coastguard Worker ;; 46*d57664e9SAndroid Build Coastguard Worker f) 47*d57664e9SAndroid Build Coastguard Worker # Take a PCRE from the arg, and use it as an inclusion filter. 48*d57664e9SAndroid Build Coastguard Worker include_re="$OPTARG" 49*d57664e9SAndroid Build Coastguard Worker ;; 50*d57664e9SAndroid Build Coastguard Worker d) 51*d57664e9SAndroid Build Coastguard Worker # Dry run 52*d57664e9SAndroid Build Coastguard Worker dry_run="echo" 53*d57664e9SAndroid Build Coastguard Worker ;; 54*d57664e9SAndroid Build Coastguard Worker t) 55*d57664e9SAndroid Build Coastguard Worker # Redirect log to terminal 56*d57664e9SAndroid Build Coastguard Worker export RAVENWOOD_LOG_OUT=$(tty) 57*d57664e9SAndroid Build Coastguard Worker ;; 58*d57664e9SAndroid Build Coastguard Worker b) 59*d57664e9SAndroid Build Coastguard Worker # Build only 60*d57664e9SAndroid Build Coastguard Worker ATEST=m 61*d57664e9SAndroid Build Coastguard Worker ;; 62*d57664e9SAndroid Build Coastguard Worker '?') 63*d57664e9SAndroid Build Coastguard Worker exit 1 64*d57664e9SAndroid Build Coastguard Worker ;; 65*d57664e9SAndroid Build Coastguard Workeresac 66*d57664e9SAndroid Build Coastguard Workerdone 67*d57664e9SAndroid Build Coastguard Workershift $(($OPTIND - 1)) 68*d57664e9SAndroid Build Coastguard Worker 69*d57664e9SAndroid Build Coastguard Workerall_tests=(hoststubgentest tiny-framework-dump-test hoststubgen-invoke-test ravenwood-stats-checker) 70*d57664e9SAndroid Build Coastguard Workerall_tests+=( $(${0%/*}/list-ravenwood-tests.sh) ) 71*d57664e9SAndroid Build Coastguard Worker 72*d57664e9SAndroid Build Coastguard Workerfilter() { 73*d57664e9SAndroid Build Coastguard Worker local re="$1" 74*d57664e9SAndroid Build Coastguard Worker local grep_arg="$2" 75*d57664e9SAndroid Build Coastguard Worker if [[ "$re" == "" ]] ; then 76*d57664e9SAndroid Build Coastguard Worker cat # No filtering 77*d57664e9SAndroid Build Coastguard Worker else 78*d57664e9SAndroid Build Coastguard Worker grep $grep_arg -iP "$re" 79*d57664e9SAndroid Build Coastguard Worker fi 80*d57664e9SAndroid Build Coastguard Worker} 81*d57664e9SAndroid Build Coastguard Worker 82*d57664e9SAndroid Build Coastguard Workerfilter_in() { 83*d57664e9SAndroid Build Coastguard Worker filter "$1" 84*d57664e9SAndroid Build Coastguard Worker} 85*d57664e9SAndroid Build Coastguard Worker 86*d57664e9SAndroid Build Coastguard Workerfilter_out() { 87*d57664e9SAndroid Build Coastguard Worker filter "$1" -v 88*d57664e9SAndroid Build Coastguard Worker} 89*d57664e9SAndroid Build Coastguard Worker 90*d57664e9SAndroid Build Coastguard Worker 91*d57664e9SAndroid Build Coastguard Worker# Remove the slow tests. 92*d57664e9SAndroid Build Coastguard Workertargets=( $( 93*d57664e9SAndroid Build Coastguard Worker for t in "${all_tests[@]}"; do 94*d57664e9SAndroid Build Coastguard Worker echo $t | filter_in "$include_re" | filter_out "$smoke_exclude_re" | filter_out "$exclude_re" 95*d57664e9SAndroid Build Coastguard Worker done 96*d57664e9SAndroid Build Coastguard Worker) ) 97*d57664e9SAndroid Build Coastguard Worker 98*d57664e9SAndroid Build Coastguard Worker# Show the target tests 99*d57664e9SAndroid Build Coastguard Worker 100*d57664e9SAndroid Build Coastguard Workerecho "Target tests:" 101*d57664e9SAndroid Build Coastguard Workerfor t in "${targets[@]}"; do 102*d57664e9SAndroid Build Coastguard Worker echo " $t" 103*d57664e9SAndroid Build Coastguard Workerdone 104*d57664e9SAndroid Build Coastguard Worker 105*d57664e9SAndroid Build Coastguard Worker# Calculate the removed tests. 106*d57664e9SAndroid Build Coastguard Worker 107*d57664e9SAndroid Build Coastguard Workerdiff="$(diff <(echo "${all_tests[@]}" | tr ' ' '\n') <(echo "${targets[@]}" | tr ' ' '\n') | grep -v [0-9] )" 108*d57664e9SAndroid Build Coastguard Worker 109*d57664e9SAndroid Build Coastguard Workerif [[ "$diff" != "" ]]; then 110*d57664e9SAndroid Build Coastguard Worker echo "Excluded tests:" 111*d57664e9SAndroid Build Coastguard Worker echo "$diff" 112*d57664e9SAndroid Build Coastguard Workerfi 113*d57664e9SAndroid Build Coastguard Worker 114*d57664e9SAndroid Build Coastguard Workerrun() { 115*d57664e9SAndroid Build Coastguard Worker echo "Running: ${@}" 116*d57664e9SAndroid Build Coastguard Worker "${@}" 117*d57664e9SAndroid Build Coastguard Worker} 118*d57664e9SAndroid Build Coastguard Worker 119*d57664e9SAndroid Build Coastguard Workerrun $dry_run ${ATEST:-atest} "${targets[@]}" 120