xref: /aosp_15_r20/frameworks/base/ravenwood/scripts/update-test-mapping.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# Update f/b/r/TEST_MAPPING with all the ravenwood tests as presubmit.
17*d57664e9SAndroid Build Coastguard Worker#
18*d57664e9SAndroid Build Coastguard Worker# Note, before running it, make sure module-info.json is up-to-date by running
19*d57664e9SAndroid Build Coastguard Worker# (any) build.
20*d57664e9SAndroid Build Coastguard Worker
21*d57664e9SAndroid Build Coastguard Workerset -e
22*d57664e9SAndroid Build Coastguard Worker
23*d57664e9SAndroid Build Coastguard Worker# Tests that shouldn't be in presubmit.
24*d57664e9SAndroid Build Coastguard WorkerEXEMPT='^(SystemUiRavenTests)$'
25*d57664e9SAndroid Build Coastguard Worker
26*d57664e9SAndroid Build Coastguard Workeris_car() {
27*d57664e9SAndroid Build Coastguard Worker    local module="$1"
28*d57664e9SAndroid Build Coastguard Worker
29*d57664e9SAndroid Build Coastguard Worker    # If the module name starts with "Car", then it's a test for "Car".
30*d57664e9SAndroid Build Coastguard Worker    [[ "$module" =~ ^Car ]]
31*d57664e9SAndroid Build Coastguard Worker    return $?
32*d57664e9SAndroid Build Coastguard Worker}
33*d57664e9SAndroid Build Coastguard Worker
34*d57664e9SAndroid Build Coastguard Workermain() {
35*d57664e9SAndroid Build Coastguard Worker    local script_name="${0##*/}"
36*d57664e9SAndroid Build Coastguard Worker    local script_dir="${0%/*}"
37*d57664e9SAndroid Build Coastguard Worker    local test_mapping="$script_dir/../TEST_MAPPING"
38*d57664e9SAndroid Build Coastguard Worker    local test_mapping_bak="$script_dir/../TEST_MAPPING.bak"
39*d57664e9SAndroid Build Coastguard Worker
40*d57664e9SAndroid Build Coastguard Worker    local header="$(sed -ne '1,/AUTO-GENERATED-START/p' "$test_mapping")"
41*d57664e9SAndroid Build Coastguard Worker    local footer="$(sed -ne '/AUTO-GENERATED-END/,$p' "$test_mapping")"
42*d57664e9SAndroid Build Coastguard Worker
43*d57664e9SAndroid Build Coastguard Worker    echo "Getting all tests"
44*d57664e9SAndroid Build Coastguard Worker    local tests=( $("$script_dir/list-ravenwood-tests.sh" | grep -vP "$EXEMPT") )
45*d57664e9SAndroid Build Coastguard Worker
46*d57664e9SAndroid Build Coastguard Worker    local num_tests="${#tests[@]}"
47*d57664e9SAndroid Build Coastguard Worker
48*d57664e9SAndroid Build Coastguard Worker    if (( $num_tests == 0 )) ; then
49*d57664e9SAndroid Build Coastguard Worker        echo "Something went wrong. No ravenwood tests detected." 1>&2
50*d57664e9SAndroid Build Coastguard Worker        return 1
51*d57664e9SAndroid Build Coastguard Worker    fi
52*d57664e9SAndroid Build Coastguard Worker
53*d57664e9SAndroid Build Coastguard Worker    echo "Tests: ${tests[@]}"
54*d57664e9SAndroid Build Coastguard Worker
55*d57664e9SAndroid Build Coastguard Worker    echo "Creating backup at $test_mapping_bak"
56*d57664e9SAndroid Build Coastguard Worker    cp "$test_mapping" "$test_mapping_bak"
57*d57664e9SAndroid Build Coastguard Worker
58*d57664e9SAndroid Build Coastguard Worker    echo "Updating $test_mapping"
59*d57664e9SAndroid Build Coastguard Worker    {
60*d57664e9SAndroid Build Coastguard Worker        echo "$header"
61*d57664e9SAndroid Build Coastguard Worker
62*d57664e9SAndroid Build Coastguard Worker        echo "    // DO NOT MODIFY MANUALLY"
63*d57664e9SAndroid Build Coastguard Worker        echo "    // Use scripts/$script_name to update it."
64*d57664e9SAndroid Build Coastguard Worker
65*d57664e9SAndroid Build Coastguard Worker        local i=0
66*d57664e9SAndroid Build Coastguard Worker        while (( $i < $num_tests )) ; do
67*d57664e9SAndroid Build Coastguard Worker            local comma=","
68*d57664e9SAndroid Build Coastguard Worker            if (( $i == ($num_tests - 1) )); then
69*d57664e9SAndroid Build Coastguard Worker                comma=""
70*d57664e9SAndroid Build Coastguard Worker            fi
71*d57664e9SAndroid Build Coastguard Worker            echo "    {"
72*d57664e9SAndroid Build Coastguard Worker            echo "      \"name\": \"${tests[$i]}\","
73*d57664e9SAndroid Build Coastguard Worker            if is_car "${tests[$i]}"; then
74*d57664e9SAndroid Build Coastguard Worker                echo '      "keywords": ["automotive_code_coverage"],'
75*d57664e9SAndroid Build Coastguard Worker            fi
76*d57664e9SAndroid Build Coastguard Worker
77*d57664e9SAndroid Build Coastguard Worker            echo "      \"host\": true"
78*d57664e9SAndroid Build Coastguard Worker            echo "    }$comma"
79*d57664e9SAndroid Build Coastguard Worker
80*d57664e9SAndroid Build Coastguard Worker            i=$(( $i + 1 ))
81*d57664e9SAndroid Build Coastguard Worker        done
82*d57664e9SAndroid Build Coastguard Worker
83*d57664e9SAndroid Build Coastguard Worker        echo "$footer"
84*d57664e9SAndroid Build Coastguard Worker    } >"$test_mapping"
85*d57664e9SAndroid Build Coastguard Worker
86*d57664e9SAndroid Build Coastguard Worker    if cmp "$test_mapping_bak" "$test_mapping" ; then
87*d57664e9SAndroid Build Coastguard Worker        echo "No change detecetd."
88*d57664e9SAndroid Build Coastguard Worker        return 0
89*d57664e9SAndroid Build Coastguard Worker    fi
90*d57664e9SAndroid Build Coastguard Worker    echo "Updated $test_mapping"
91*d57664e9SAndroid Build Coastguard Worker
92*d57664e9SAndroid Build Coastguard Worker    # `|| true` is needed because of `set -e`.
93*d57664e9SAndroid Build Coastguard Worker    diff -u "$test_mapping_bak" "$test_mapping" || true
94*d57664e9SAndroid Build Coastguard Worker    return 0
95*d57664e9SAndroid Build Coastguard Worker}
96*d57664e9SAndroid Build Coastguard Worker
97*d57664e9SAndroid Build Coastguard Workermain
98