xref: /aosp_15_r20/external/tink/tools/coverage.sh (revision e7b1675dde1b92d52ec075b0a92829627f2c52a5)
1*e7b1675dSTing-Kang Chang#!/bin/bash
2*e7b1675dSTing-Kang Chang###############################################################################
3*e7b1675dSTing-Kang Chang# Copyright 2017 Google LLC
4*e7b1675dSTing-Kang Chang#
5*e7b1675dSTing-Kang Chang# Licensed under the Apache License, Version 2.0 (the "License");
6*e7b1675dSTing-Kang Chang# you may not use this file except in compliance with the License.
7*e7b1675dSTing-Kang Chang# You may obtain a copy of the License at
8*e7b1675dSTing-Kang Chang#
9*e7b1675dSTing-Kang Chang#      http://www.apache.org/licenses/LICENSE-2.0
10*e7b1675dSTing-Kang Chang#
11*e7b1675dSTing-Kang Chang# Unless required by applicable law or agreed to in writing, software
12*e7b1675dSTing-Kang Chang# distributed under the License is distributed on an "AS IS" BASIS,
13*e7b1675dSTing-Kang Chang# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*e7b1675dSTing-Kang Chang# See the License for the specific language governing permissions and
15*e7b1675dSTing-Kang Chang# limitations under the License.
16*e7b1675dSTing-Kang Chang################################################################################
17*e7b1675dSTing-Kang Chang#
18*e7b1675dSTing-Kang Chang# Usage
19*e7b1675dSTing-Kang Chang#
20*e7b1675dSTing-Kang Chang#   COVERAGE_CPUS=32 tools/coverage.sh [/path/to/report-directory/] [targets]
21*e7b1675dSTing-Kang Chang#
22*e7b1675dSTing-Kang Chang# COVERAGE_CPUS defaults to 2, and the default destination is a temp
23*e7b1675dSTing-Kang Chang# dir.
24*e7b1675dSTing-Kang Chang
25*e7b1675dSTing-Kang Changset -eu
26*e7b1675dSTing-Kang Chang
27*e7b1675dSTing-Kang Changgenhtml=$(command -v genhtml)
28*e7b1675dSTing-Kang Changif [[ -z "${genhtml}" ]]; then
29*e7b1675dSTing-Kang Chang    echo "Install 'genhtml' (contained in the 'lcov' package)"
30*e7b1675dSTing-Kang Chang    exit 1
31*e7b1675dSTing-Kang Changfi
32*e7b1675dSTing-Kang Chang
33*e7b1675dSTing-Kang Changdestdir="$1"
34*e7b1675dSTing-Kang Changif [[ -z "${destdir}" ]]; then
35*e7b1675dSTing-Kang Chang    destdir=$(mktemp -d /tmp/gerritcov.XXXXXX)
36*e7b1675dSTing-Kang Changfi
37*e7b1675dSTing-Kang Chang
38*e7b1675dSTing-Kang Changtargets="$2"
39*e7b1675dSTing-Kang Changif [[ -z "${targets}" ]]; then
40*e7b1675dSTing-Kang Chang    targets="apps/... java/..."
41*e7b1675dSTing-Kang Changfi
42*e7b1675dSTing-Kang Chang
43*e7b1675dSTing-Kang Changecho "Running 'bazel coverage'; this may take a while"
44*e7b1675dSTing-Kang Chang# coverage is expensive to run; use --jobs=2 to avoid overloading the
45*e7b1675dSTing-Kang Chang# machine.
46*e7b1675dSTing-Kang Changbazel coverage -k --jobs="${COVERAGE_CPUS:-2}" -- "$targets"
47*e7b1675dSTing-Kang Chang
48*e7b1675dSTing-Kang Chang# The coverage data contains filenames relative to the Java root, and
49*e7b1675dSTing-Kang Chang# genhtml has no logic to search these elsewhere. Workaround this
50*e7b1675dSTing-Kang Chang# limitation by running genhtml in a directory with the files in the
51*e7b1675dSTing-Kang Chang# right place. Also -inexplicably- genhtml wants to have the source
52*e7b1675dSTing-Kang Chang# files relative to the output directory.
53*e7b1675dSTing-Kang Changrm -rf "${destdir}" || true
54*e7b1675dSTing-Kang Changmkdir -p "${destdir}"
55*e7b1675dSTing-Kang Chang
56*e7b1675dSTing-Kang Changfor ROOT in java apps/paymentmethodtoken; do
57*e7b1675dSTing-Kang Chang  rsync -a "${ROOT}/src/main/java/" "${ROOT}/src/test/java/" "${destdir}/"
58*e7b1675dSTing-Kang Changdone
59*e7b1675dSTing-Kang Chang
60*e7b1675dSTing-Kang Changbase=$(bazel info bazel-testlogs)
61*e7b1675dSTing-Kang Chang
62*e7b1675dSTing-Kang Changfind "${base}" -name 'coverage.dat' -exec sh -c '
63*e7b1675dSTing-Kang Chang  for ff do
64*e7b1675dSTing-Kang Chang    f=$(printf '%s' "${ff#"$base"/}" | sed "s|/|_|g")
65*e7b1675dSTing-Kang Chang    cp "$ff" "${destdir}/$f"
66*e7b1675dSTing-Kang Chang  done
67*e7b1675dSTing-Kang Chang' find-sh {} +
68*e7b1675dSTing-Kang Chang
69*e7b1675dSTing-Kang Changcd "${destdir}"
70*e7b1675dSTing-Kang Chang
71*e7b1675dSTing-Kang Changfind -name '*coverage.dat' -size 0 -exec rm -f {} +
72*e7b1675dSTing-Kang Chang
73*e7b1675dSTing-Kang Changgenhtml -o . --ignore-errors source ./*coverage.dat
74*e7b1675dSTing-Kang Changprintf "coverage report at file://%s/index.html" "${destdir}"
75