xref: /aosp_15_r20/frameworks/base/ravenwood/scripts/run-ravenwood-tests.sh (revision d57664e9bc4670b3ecf6748a746a57c557b6bc9e)
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